feat: Enhance achievement system with canvas-confetti and share functionality

- Replace custom CSS confetti with canvas-confetti library for massive
  Raycast-style explosions (850+ initial particles with continuous bursts)
- Add circular progress ring around Maestro icon showing 11 badge segments
- Add share button to AchievementCard with copy-to-clipboard and download
- Fire confetti immediately on Standing Ovation mount and on dismiss
- Fix infinite loop error in PlaygroundPanel layer registration
- Fix badge tooltip positioning and click-to-toggle behavior
- Improve empty badge cell visibility with dashed borders

Claude ID: 97a10f0d-145d-4352-babd-6d9caed0f9dc
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
This commit is contained in:
Pedram Amini
2025-12-02 11:59:00 -06:00
parent c6b3ebb954
commit e14ec426a0
11 changed files with 637 additions and 260 deletions

19
package-lock.json generated
View File

@@ -18,6 +18,7 @@
"@fastify/websocket": "^9.0.0",
"@types/dompurify": "^3.0.5",
"ansi-to-html": "^0.7.2",
"canvas-confetti": "^1.9.4",
"diff": "^8.0.2",
"dompurify": "^3.3.0",
"electron-store": "^8.1.0",
@@ -35,6 +36,7 @@
"ws": "^8.16.0"
},
"devDependencies": {
"@types/canvas-confetti": "^1.9.0",
"@types/node": "^20.10.6",
"@types/qrcode": "^1.5.6",
"@types/react": "^18.2.47",
@@ -2100,6 +2102,13 @@
"@types/responselike": "^1.0.0"
}
},
"node_modules/@types/canvas-confetti": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz",
"integrity": "sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/d3": {
"version": "7.4.3",
"resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
@@ -3604,6 +3613,16 @@
],
"license": "CC-BY-4.0"
},
"node_modules/canvas-confetti": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.4.tgz",
"integrity": "sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==",
"license": "ISC",
"funding": {
"type": "donate",
"url": "https://www.paypal.me/kirilvatev"
}
},
"node_modules/ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",