Skip to content

Commit ecf4e82

Browse files
authored
Merge pull request #515 from vevcom/feat/confetti
feat: add confetti
2 parents c794b87 + 97a9209 commit ecf4e82

3 files changed

Lines changed: 59 additions & 0 deletions

File tree

package-lock.json

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"@react-email/render": "^1.4.0",
3434
"bcrypt": "^5.1.1",
3535
"eslint-plugin-react-hooks": "^6.1.1",
36+
"canvas-confetti": "^1.9.4",
3637
"html5-qrcode": "^2.3.8",
3738
"jsonwebtoken": "^9.0.3",
3839
"jsqr": "^1.4.0",
@@ -65,6 +66,7 @@
6566
"@babel/preset-typescript": "^7.28.5",
6667
"@jest/globals": "^29.7.0",
6768
"@types/bcrypt": "^5.0.2",
69+
"@types/canvas-confetti": "^1.9.0",
6870
"@types/jest": "^29.5.14",
6971
"@types/jsonwebtoken": "^9.0.10",
7072
"@types/luxon": "^3.7.1",
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use client'
2+
import canvasConfetti from 'canvas-confetti'
3+
4+
type ConfettiArguments = {
5+
angle?: number,
6+
spread?: number,
7+
duration?: number
8+
colors?: string[],
9+
particleCount?: number,
10+
origin?: { x: number, y: number },
11+
}
12+
13+
/**
14+
* Summons confetti :)
15+
*/
16+
export function confetti({
17+
angle = 90,
18+
spread = 150,
19+
duration = 1000,
20+
colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff',],
21+
particleCount = 10,
22+
origin = { x: 0.5, y: 1 }
23+
}: ConfettiArguments = {}) {
24+
const end = Date.now() + duration;
25+
26+
(function frame() {
27+
canvasConfetti({
28+
particleCount,
29+
angle,
30+
spread,
31+
origin,
32+
colors,
33+
})
34+
35+
if (Date.now() < end) {
36+
requestAnimationFrame(frame)
37+
}
38+
}())
39+
}

0 commit comments

Comments
 (0)