react-confetti-burst 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +303 -0
- package/dist/cjs/components.d.ts +219 -0
- package/dist/cjs/components.d.ts.map +1 -0
- package/dist/cjs/components.js +341 -0
- package/dist/cjs/components.js.map +1 -0
- package/dist/cjs/confetti-engine.d.ts +122 -0
- package/dist/cjs/confetti-engine.d.ts.map +1 -0
- package/dist/cjs/confetti-engine.js +589 -0
- package/dist/cjs/confetti-engine.js.map +1 -0
- package/dist/cjs/confetti.d.ts +50 -0
- package/dist/cjs/confetti.d.ts.map +1 -0
- package/dist/cjs/confetti.js +446 -0
- package/dist/cjs/confetti.js.map +1 -0
- package/dist/cjs/constants.d.ts +147 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +609 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/hooks.d.ts +94 -0
- package/dist/cjs/hooks.d.ts.map +1 -0
- package/dist/cjs/hooks.js +225 -0
- package/dist/cjs/hooks.js.map +1 -0
- package/dist/cjs/index.d.ts +34 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +180 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/particle.d.ts +50 -0
- package/dist/cjs/particle.d.ts.map +1 -0
- package/dist/cjs/particle.js +475 -0
- package/dist/cjs/particle.js.map +1 -0
- package/dist/cjs/shapes.d.ts +190 -0
- package/dist/cjs/shapes.d.ts.map +1 -0
- package/dist/cjs/shapes.js +272 -0
- package/dist/cjs/shapes.js.map +1 -0
- package/dist/cjs/types.d.ts +720 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +25 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.d.ts +90 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +330 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/components.js +334 -0
- package/dist/esm/components.js.map +1 -0
- package/dist/esm/confetti-engine.js +581 -0
- package/dist/esm/confetti-engine.js.map +1 -0
- package/dist/esm/confetti.js +443 -0
- package/dist/esm/confetti.js.map +1 -0
- package/dist/esm/constants.js +605 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/hooks.js +218 -0
- package/dist/esm/hooks.js.map +1 -0
- package/dist/esm/index.js +146 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/particle.js +465 -0
- package/dist/esm/particle.js.map +1 -0
- package/dist/esm/shapes.js +265 -0
- package/dist/esm/shapes.js.map +1 -0
- package/dist/esm/types.js +24 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.js +309 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/components.d.ts +219 -0
- package/dist/types/components.d.ts.map +1 -0
- package/dist/types/confetti-engine.d.ts +122 -0
- package/dist/types/confetti-engine.d.ts.map +1 -0
- package/dist/types/confetti.d.ts +50 -0
- package/dist/types/confetti.d.ts.map +1 -0
- package/dist/types/constants.d.ts +147 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +94 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/particle.d.ts +50 -0
- package/dist/types/particle.d.ts.map +1 -0
- package/dist/types/shapes.d.ts +190 -0
- package/dist/types/shapes.d.ts.map +1 -0
- package/dist/types/types.d.ts +720 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +90 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Functional Confetti API
|
|
4
|
+
*
|
|
5
|
+
* Provides a canvas-confetti compatible function-based API for
|
|
6
|
+
* imperative confetti control without React components.
|
|
7
|
+
*
|
|
8
|
+
* @module confetti
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.confetti = confetti;
|
|
12
|
+
/**
|
|
13
|
+
* Global registry of confetti instances
|
|
14
|
+
*/
|
|
15
|
+
const instances = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Check if user prefers reduced motion
|
|
18
|
+
*/
|
|
19
|
+
function prefersReducedMotion() {
|
|
20
|
+
if (typeof window === 'undefined')
|
|
21
|
+
return false;
|
|
22
|
+
return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a random particle
|
|
26
|
+
*/
|
|
27
|
+
function createParticle(canvas, options) {
|
|
28
|
+
const { angle = 90, spread = 45, startVelocity = 45, decay = 0.9, gravity = 1, drift = 0, flat = false, ticks = 200, origin = { x: 0.5, y: 0.5 }, colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'], shapes = ['square', 'circle'], scalar = 1, } = options;
|
|
29
|
+
const radAngle = (angle - 90) * (Math.PI / 180);
|
|
30
|
+
const spreadRad = spread * (Math.PI / 180);
|
|
31
|
+
const randomAngle = radAngle + (Math.random() - 0.5) * spreadRad;
|
|
32
|
+
const velocity = startVelocity * (0.5 + Math.random() * 0.5);
|
|
33
|
+
return {
|
|
34
|
+
x: origin.x * canvas.width,
|
|
35
|
+
y: origin.y * canvas.height,
|
|
36
|
+
vx: Math.cos(randomAngle) * velocity,
|
|
37
|
+
vy: Math.sin(randomAngle) * velocity,
|
|
38
|
+
tiltAngle: Math.random() * Math.PI * 2,
|
|
39
|
+
tiltSpeed: (Math.random() - 0.5) * 0.1,
|
|
40
|
+
color: colors[Math.floor(Math.random() * colors.length)],
|
|
41
|
+
shape: (shapes[Math.floor(Math.random() * shapes.length)] ?? 'circle'),
|
|
42
|
+
scalar,
|
|
43
|
+
gravity: gravity * 0.5,
|
|
44
|
+
drift,
|
|
45
|
+
decay,
|
|
46
|
+
flat,
|
|
47
|
+
tick: 0,
|
|
48
|
+
totalTicks: ticks,
|
|
49
|
+
wobble: Math.random() * 10,
|
|
50
|
+
wobbleSpeed: 0.1 + Math.random() * 0.1,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Update particle physics
|
|
55
|
+
*/
|
|
56
|
+
function updateParticle(particle) {
|
|
57
|
+
particle.tick++;
|
|
58
|
+
if (particle.tick >= particle.totalTicks) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Apply physics
|
|
62
|
+
particle.vy += particle.gravity;
|
|
63
|
+
particle.vx += particle.drift;
|
|
64
|
+
particle.vx *= particle.decay;
|
|
65
|
+
particle.vy *= particle.decay;
|
|
66
|
+
particle.x += particle.vx;
|
|
67
|
+
particle.y += particle.vy;
|
|
68
|
+
// Update wobble and tilt
|
|
69
|
+
particle.wobble += particle.wobbleSpeed;
|
|
70
|
+
if (!particle.flat) {
|
|
71
|
+
particle.tiltAngle += particle.tiltSpeed;
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Draw a single particle
|
|
77
|
+
*/
|
|
78
|
+
function drawParticle(ctx, particle) {
|
|
79
|
+
const progress = particle.tick / particle.totalTicks;
|
|
80
|
+
const fadeOut = 1 - progress;
|
|
81
|
+
const size = 10 * particle.scalar;
|
|
82
|
+
ctx.save();
|
|
83
|
+
ctx.translate(particle.x, particle.y);
|
|
84
|
+
if (!particle.flat) {
|
|
85
|
+
ctx.rotate(particle.tiltAngle);
|
|
86
|
+
// Add wobble for 3D effect
|
|
87
|
+
const wobbleX = Math.sin(particle.wobble) * 0.5;
|
|
88
|
+
ctx.scale(1 + wobbleX * 0.2, 1);
|
|
89
|
+
}
|
|
90
|
+
ctx.globalAlpha = fadeOut;
|
|
91
|
+
ctx.fillStyle = particle.color;
|
|
92
|
+
if (particle.shape === 'circle') {
|
|
93
|
+
ctx.beginPath();
|
|
94
|
+
ctx.arc(0, 0, size / 2, 0, Math.PI * 2);
|
|
95
|
+
ctx.fill();
|
|
96
|
+
}
|
|
97
|
+
else if (particle.shape === 'square') {
|
|
98
|
+
ctx.fillRect(-size / 2, -size / 2, size, size);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Rectangle (default)
|
|
102
|
+
ctx.fillRect(-size / 2, -size / 3, size, size * 0.6);
|
|
103
|
+
}
|
|
104
|
+
ctx.restore();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Animation loop for a confetti instance
|
|
108
|
+
*/
|
|
109
|
+
function animate(instance) {
|
|
110
|
+
if (instance.isDestroyed) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const { canvas, ctx, particles } = instance;
|
|
114
|
+
// Clear canvas
|
|
115
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
116
|
+
// Update and draw particles
|
|
117
|
+
for (let i = particles.length - 1; i >= 0; i--) {
|
|
118
|
+
const particle = particles[i];
|
|
119
|
+
const alive = updateParticle(particle);
|
|
120
|
+
if (alive) {
|
|
121
|
+
drawParticle(ctx, particle);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
particles.splice(i, 1);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Continue animation or resolve
|
|
128
|
+
if (particles.length > 0) {
|
|
129
|
+
instance.animationId = requestAnimationFrame(() => animate(instance));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
instance.animationId = null;
|
|
133
|
+
instance.resolve?.();
|
|
134
|
+
instance.resolve = null;
|
|
135
|
+
instance.promise = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get or create the default canvas
|
|
140
|
+
*/
|
|
141
|
+
function getDefaultCanvas() {
|
|
142
|
+
let canvas = document.getElementById('confetti-canvas');
|
|
143
|
+
if (!canvas) {
|
|
144
|
+
canvas = document.createElement('canvas');
|
|
145
|
+
canvas.id = 'confetti-canvas';
|
|
146
|
+
canvas.style.cssText = `
|
|
147
|
+
position: fixed;
|
|
148
|
+
top: 0;
|
|
149
|
+
left: 0;
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 100%;
|
|
152
|
+
pointer-events: none;
|
|
153
|
+
z-index: 2147483647;
|
|
154
|
+
`;
|
|
155
|
+
document.body.appendChild(canvas);
|
|
156
|
+
}
|
|
157
|
+
// Update size
|
|
158
|
+
canvas.width = window.innerWidth;
|
|
159
|
+
canvas.height = window.innerHeight;
|
|
160
|
+
return canvas;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get or create a confetti instance
|
|
164
|
+
*/
|
|
165
|
+
function getInstance(canvas, createOptions = {}) {
|
|
166
|
+
let instance = instances.get(canvas);
|
|
167
|
+
if (!instance) {
|
|
168
|
+
const actualCanvas = canvas === 'default' ? getDefaultCanvas() : canvas;
|
|
169
|
+
const ctx = actualCanvas.getContext('2d');
|
|
170
|
+
if (!ctx) {
|
|
171
|
+
console.error('Could not get 2D context from canvas');
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
instance = {
|
|
175
|
+
canvas: actualCanvas,
|
|
176
|
+
ctx,
|
|
177
|
+
animationId: null,
|
|
178
|
+
particles: [],
|
|
179
|
+
options: createOptions,
|
|
180
|
+
promise: null,
|
|
181
|
+
resolve: null,
|
|
182
|
+
isDestroyed: false,
|
|
183
|
+
};
|
|
184
|
+
instances.set(canvas, instance);
|
|
185
|
+
// Handle resize if enabled
|
|
186
|
+
if (createOptions.resize && canvas === 'default') {
|
|
187
|
+
window.addEventListener('resize', () => {
|
|
188
|
+
if (!instance.isDestroyed) {
|
|
189
|
+
instance.canvas.width = window.innerWidth;
|
|
190
|
+
instance.canvas.height = window.innerHeight;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return instance;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Main confetti function - canvas-confetti compatible API
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* // Basic confetti burst
|
|
203
|
+
* confetti();
|
|
204
|
+
*
|
|
205
|
+
* // Customized confetti
|
|
206
|
+
* confetti({
|
|
207
|
+
* particleCount: 100,
|
|
208
|
+
* spread: 70,
|
|
209
|
+
* origin: { x: 0.5, y: 0.5 }
|
|
210
|
+
* });
|
|
211
|
+
*
|
|
212
|
+
* // Wait for completion
|
|
213
|
+
* await confetti({ particleCount: 200 });
|
|
214
|
+
* console.log('Confetti finished!');
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @param options - Confetti configuration options
|
|
218
|
+
* @returns Promise that resolves when animation completes
|
|
219
|
+
*/
|
|
220
|
+
function confetti(options = {}) {
|
|
221
|
+
// Check for reduced motion preference
|
|
222
|
+
if (options.disableForReducedMotion && prefersReducedMotion()) {
|
|
223
|
+
return Promise.resolve();
|
|
224
|
+
}
|
|
225
|
+
const instance = getInstance('default');
|
|
226
|
+
if (!instance) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
const { particleCount = 50, } = options;
|
|
230
|
+
// Create particles
|
|
231
|
+
for (let i = 0; i < particleCount; i++) {
|
|
232
|
+
instance.particles.push(createParticle(instance.canvas, options));
|
|
233
|
+
}
|
|
234
|
+
// Start animation if not already running
|
|
235
|
+
if (!instance.animationId) {
|
|
236
|
+
instance.promise = new Promise(resolve => {
|
|
237
|
+
instance.resolve = resolve;
|
|
238
|
+
});
|
|
239
|
+
instance.animationId = requestAnimationFrame(() => animate(instance));
|
|
240
|
+
}
|
|
241
|
+
return instance.promise;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Create a confetti instance bound to a specific canvas
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* // Custom canvas confetti
|
|
249
|
+
* const myCanvas = document.getElementById('my-canvas');
|
|
250
|
+
* const myConfetti = confetti.create(myCanvas, { resize: true });
|
|
251
|
+
*
|
|
252
|
+
* // Use the custom instance
|
|
253
|
+
* myConfetti({ particleCount: 100 });
|
|
254
|
+
*
|
|
255
|
+
* // Reset/clear the custom instance
|
|
256
|
+
* myConfetti.reset();
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
* @param canvas - Target canvas element
|
|
260
|
+
* @param globalOptions - Global options for this instance
|
|
261
|
+
* @returns Confetti function bound to the canvas
|
|
262
|
+
*/
|
|
263
|
+
confetti.create = function (canvas, globalOptions = {}) {
|
|
264
|
+
const instance = getInstance(canvas, globalOptions);
|
|
265
|
+
const fire = (options = {}) => {
|
|
266
|
+
if (!instance || instance.isDestroyed) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
// Check for reduced motion preference
|
|
270
|
+
const disableForReducedMotion = options.disableForReducedMotion ?? globalOptions.disableForReducedMotion;
|
|
271
|
+
if (disableForReducedMotion && prefersReducedMotion()) {
|
|
272
|
+
return Promise.resolve();
|
|
273
|
+
}
|
|
274
|
+
const { particleCount = 50, } = options;
|
|
275
|
+
// Create particles
|
|
276
|
+
for (let i = 0; i < particleCount; i++) {
|
|
277
|
+
instance.particles.push(createParticle(instance.canvas, options));
|
|
278
|
+
}
|
|
279
|
+
// Start animation if not already running
|
|
280
|
+
if (!instance.animationId) {
|
|
281
|
+
instance.promise = new Promise(resolve => {
|
|
282
|
+
instance.resolve = resolve;
|
|
283
|
+
});
|
|
284
|
+
instance.animationId = requestAnimationFrame(() => animate(instance));
|
|
285
|
+
}
|
|
286
|
+
return instance.promise;
|
|
287
|
+
};
|
|
288
|
+
fire.reset = () => {
|
|
289
|
+
if (instance) {
|
|
290
|
+
if (instance.animationId) {
|
|
291
|
+
cancelAnimationFrame(instance.animationId);
|
|
292
|
+
instance.animationId = null;
|
|
293
|
+
}
|
|
294
|
+
instance.particles = [];
|
|
295
|
+
instance.ctx.clearRect(0, 0, instance.canvas.width, instance.canvas.height);
|
|
296
|
+
instance.resolve?.();
|
|
297
|
+
instance.resolve = null;
|
|
298
|
+
instance.promise = null;
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
return fire;
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* Reset/clear all confetti on the default canvas
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```typescript
|
|
308
|
+
* // Fire some confetti
|
|
309
|
+
* confetti({ particleCount: 100 });
|
|
310
|
+
*
|
|
311
|
+
* // Clear it immediately
|
|
312
|
+
* confetti.reset();
|
|
313
|
+
* ```
|
|
314
|
+
*/
|
|
315
|
+
confetti.reset = function () {
|
|
316
|
+
const instance = instances.get('default');
|
|
317
|
+
if (instance) {
|
|
318
|
+
if (instance.animationId) {
|
|
319
|
+
cancelAnimationFrame(instance.animationId);
|
|
320
|
+
instance.animationId = null;
|
|
321
|
+
}
|
|
322
|
+
instance.particles = [];
|
|
323
|
+
instance.ctx.clearRect(0, 0, instance.canvas.width, instance.canvas.height);
|
|
324
|
+
instance.resolve?.();
|
|
325
|
+
instance.resolve = null;
|
|
326
|
+
instance.promise = null;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
/**
|
|
330
|
+
* Fire confetti from both sides (common celebration pattern)
|
|
331
|
+
*
|
|
332
|
+
* @example
|
|
333
|
+
* ```typescript
|
|
334
|
+
* // Celebration from both corners
|
|
335
|
+
* confetti.fireworks();
|
|
336
|
+
* ```
|
|
337
|
+
*/
|
|
338
|
+
confetti.fireworks = async function (options = {}) {
|
|
339
|
+
const baseOptions = {
|
|
340
|
+
particleCount: 30,
|
|
341
|
+
spread: 55,
|
|
342
|
+
...options,
|
|
343
|
+
};
|
|
344
|
+
await Promise.all([
|
|
345
|
+
confetti({
|
|
346
|
+
...baseOptions,
|
|
347
|
+
angle: 60,
|
|
348
|
+
origin: { x: 0, y: 0.65 },
|
|
349
|
+
}),
|
|
350
|
+
confetti({
|
|
351
|
+
...baseOptions,
|
|
352
|
+
angle: 120,
|
|
353
|
+
origin: { x: 1, y: 0.65 },
|
|
354
|
+
}),
|
|
355
|
+
]);
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* Fire confetti in a school pride pattern
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* // School colors celebration
|
|
363
|
+
* confetti.schoolPride({ colors: ['#ff0000', '#ffffff'] });
|
|
364
|
+
* ```
|
|
365
|
+
*/
|
|
366
|
+
confetti.schoolPride = function (options = {}) {
|
|
367
|
+
const end = Date.now() + 3000;
|
|
368
|
+
const colors = options.colors ?? ['#bb0000', '#ffffff'];
|
|
369
|
+
function frame() {
|
|
370
|
+
confetti({
|
|
371
|
+
particleCount: 2,
|
|
372
|
+
angle: 60,
|
|
373
|
+
spread: 55,
|
|
374
|
+
origin: { x: 0, y: 0.6 },
|
|
375
|
+
colors,
|
|
376
|
+
...options,
|
|
377
|
+
});
|
|
378
|
+
confetti({
|
|
379
|
+
particleCount: 2,
|
|
380
|
+
angle: 120,
|
|
381
|
+
spread: 55,
|
|
382
|
+
origin: { x: 1, y: 0.6 },
|
|
383
|
+
colors,
|
|
384
|
+
...options,
|
|
385
|
+
});
|
|
386
|
+
if (Date.now() < end) {
|
|
387
|
+
requestAnimationFrame(frame);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
frame();
|
|
391
|
+
};
|
|
392
|
+
/**
|
|
393
|
+
* Fire confetti in a snow pattern
|
|
394
|
+
*
|
|
395
|
+
* @example
|
|
396
|
+
* ```typescript
|
|
397
|
+
* confetti.snow({ duration: 5000 });
|
|
398
|
+
* ```
|
|
399
|
+
*/
|
|
400
|
+
confetti.snow = function (options = {}) {
|
|
401
|
+
const { duration = 5000, ...confettiOptions } = options;
|
|
402
|
+
const end = Date.now() + duration;
|
|
403
|
+
function frame() {
|
|
404
|
+
confetti({
|
|
405
|
+
particleCount: 1,
|
|
406
|
+
startVelocity: 0,
|
|
407
|
+
ticks: 300,
|
|
408
|
+
gravity: 0.3,
|
|
409
|
+
origin: {
|
|
410
|
+
x: Math.random(),
|
|
411
|
+
y: 0,
|
|
412
|
+
},
|
|
413
|
+
colors: ['#ffffff', '#f0f8ff', '#e6f3ff'],
|
|
414
|
+
shapes: ['circle'],
|
|
415
|
+
scalar: 0.8 + Math.random() * 0.4,
|
|
416
|
+
drift: Math.random() - 0.5,
|
|
417
|
+
...confettiOptions,
|
|
418
|
+
});
|
|
419
|
+
if (Date.now() < end) {
|
|
420
|
+
requestAnimationFrame(frame);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
frame();
|
|
424
|
+
};
|
|
425
|
+
/**
|
|
426
|
+
* Fire realistic looking firework bursts
|
|
427
|
+
*
|
|
428
|
+
* @example
|
|
429
|
+
* ```typescript
|
|
430
|
+
* confetti.burst({ x: 0.5, y: 0.3 });
|
|
431
|
+
* ```
|
|
432
|
+
*/
|
|
433
|
+
confetti.burst = function (origin, options = {}) {
|
|
434
|
+
return confetti({
|
|
435
|
+
particleCount: 80,
|
|
436
|
+
spread: 360,
|
|
437
|
+
startVelocity: 30,
|
|
438
|
+
decay: 0.92,
|
|
439
|
+
scalar: 1.2,
|
|
440
|
+
origin,
|
|
441
|
+
...options,
|
|
442
|
+
});
|
|
443
|
+
};
|
|
444
|
+
// Make confetti the default export
|
|
445
|
+
exports.default = confetti;
|
|
446
|
+
//# sourceMappingURL=confetti.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confetti.js","sourceRoot":"","sources":["../../src/confetti.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default constants and configuration values
|
|
3
|
+
*
|
|
4
|
+
* All default values are carefully tuned for optimal visual appeal
|
|
5
|
+
* and performance across different devices and screen sizes.
|
|
6
|
+
*/
|
|
7
|
+
import type { ConfettiBurstConfig, ParticleConfig, PhysicsConfig, DirectionConfig, EasingFunction, EasingPreset, RGBAColor, ContinuousConfig, FireworkConfig, CanvasConfig, TrailConfig, GlowConfig, PresetConfig, PresetName, ConfettiBurstOptions } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Default vibrant color palette for confetti particles
|
|
10
|
+
* Designed for high visibility on both light and dark backgrounds
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_COLORS: readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* Default physics configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_PHYSICS: PhysicsConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Default direction configuration
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_DIRECTION: DirectionConfig;
|
|
21
|
+
/**
|
|
22
|
+
* Default particle configuration
|
|
23
|
+
*/
|
|
24
|
+
export declare const DEFAULT_PARTICLE: ParticleConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Default trail configuration
|
|
27
|
+
*/
|
|
28
|
+
export declare const DEFAULT_TRAIL: TrailConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Default glow configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare const DEFAULT_GLOW: GlowConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Default continuous mode configuration
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULT_CONTINUOUS: ContinuousConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Default firework configuration
|
|
39
|
+
*/
|
|
40
|
+
export declare const DEFAULT_FIREWORK: FireworkConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Default canvas configuration
|
|
43
|
+
*/
|
|
44
|
+
export declare const DEFAULT_CANVAS: CanvasConfig;
|
|
45
|
+
/**
|
|
46
|
+
* Default accessibility configuration
|
|
47
|
+
*/
|
|
48
|
+
export declare const DEFAULT_ACCESSIBILITY: {
|
|
49
|
+
readonly disableForReducedMotion: false;
|
|
50
|
+
readonly ariaLabel: "Confetti animation";
|
|
51
|
+
readonly ariaHidden: true;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Complete default configuration
|
|
55
|
+
*/
|
|
56
|
+
export declare const DEFAULT_CONFIG: ConfettiBurstConfig;
|
|
57
|
+
/**
|
|
58
|
+
* Direction angles in degrees (0 = right, counter-clockwise)
|
|
59
|
+
*/
|
|
60
|
+
export declare const DIRECTION_ANGLES: Record<Exclude<import('./types').BurstDirection, 'custom' | 'radial'>, number>;
|
|
61
|
+
/**
|
|
62
|
+
* Pre-calculated values for performance
|
|
63
|
+
*/
|
|
64
|
+
export declare const MATH_CONSTANTS: {
|
|
65
|
+
readonly DEG_TO_RAD: number;
|
|
66
|
+
readonly RAD_TO_DEG: number;
|
|
67
|
+
readonly TWO_PI: number;
|
|
68
|
+
readonly HALF_PI: number;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Easing functions for smooth animations
|
|
72
|
+
*/
|
|
73
|
+
export declare const EASING_FUNCTIONS: Record<EasingPreset, EasingFunction>;
|
|
74
|
+
/**
|
|
75
|
+
* Built-in shape names (excluding custom shapes)
|
|
76
|
+
*/
|
|
77
|
+
type BuiltinShapeName = 'square' | 'circle' | 'rectangle' | 'triangle' | 'star' | 'line' | 'heart' | 'diamond' | 'hexagon' | 'spiral' | 'ribbon' | 'custom';
|
|
78
|
+
/**
|
|
79
|
+
* Shape rendering aspect ratios
|
|
80
|
+
*/
|
|
81
|
+
export declare const SHAPE_ASPECT_RATIOS: Record<BuiltinShapeName, number>;
|
|
82
|
+
/**
|
|
83
|
+
* Default transparent color for fallback
|
|
84
|
+
*/
|
|
85
|
+
export declare const TRANSPARENT_COLOR: RGBAColor;
|
|
86
|
+
/**
|
|
87
|
+
* Performance tuning constants
|
|
88
|
+
*/
|
|
89
|
+
export declare const PERFORMANCE: {
|
|
90
|
+
/** Maximum particles before reducing quality */
|
|
91
|
+
readonly MAX_PARTICLES: 500;
|
|
92
|
+
/** Frame time budget in ms (targeting 60fps) */
|
|
93
|
+
readonly FRAME_BUDGET: 16.67;
|
|
94
|
+
/** Minimum opacity before particle is considered dead */
|
|
95
|
+
readonly MIN_OPACITY: 0.01;
|
|
96
|
+
/** Minimum size before particle is considered dead */
|
|
97
|
+
readonly MIN_SIZE: 0.5;
|
|
98
|
+
/** Device pixel ratio limit for high-DPI displays */
|
|
99
|
+
readonly MAX_DPR: 2;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Canvas cleanup delay in milliseconds
|
|
103
|
+
*/
|
|
104
|
+
export declare const CLEANUP_DELAY = 100;
|
|
105
|
+
/**
|
|
106
|
+
* Star shape points configuration
|
|
107
|
+
*/
|
|
108
|
+
export declare const STAR_POINTS = 5;
|
|
109
|
+
export declare const STAR_INNER_RATIO = 0.5;
|
|
110
|
+
/**
|
|
111
|
+
* Color palettes for presets
|
|
112
|
+
*/
|
|
113
|
+
export declare const COLOR_PALETTES: {
|
|
114
|
+
readonly rainbow: readonly string[];
|
|
115
|
+
readonly pride: readonly ["#E40303", "#FF8C00", "#FFED00", "#008026", "#24408E", "#732982"];
|
|
116
|
+
readonly christmas: readonly ["#C41E3A", "#165B33", "#FFD700", "#FFFFFF", "#BB2528"];
|
|
117
|
+
readonly halloween: readonly ["#FF6600", "#000000", "#8B008B", "#00FF00", "#FFD700"];
|
|
118
|
+
readonly pastel: readonly ["#FFB3BA", "#FFDFBA", "#FFFFBA", "#BAFFC9", "#BAE1FF"];
|
|
119
|
+
readonly neon: readonly ["#FF00FF", "#00FFFF", "#FF0080", "#80FF00", "#FF8000"];
|
|
120
|
+
readonly gold: readonly ["#FFD700", "#DAA520", "#B8860B", "#FFC125", "#FFDF00"];
|
|
121
|
+
readonly silver: readonly ["#C0C0C0", "#A8A8A8", "#D3D3D3", "#DCDCDC", "#E8E8E8"];
|
|
122
|
+
readonly hearts: readonly ["#FF69B4", "#FF1493", "#FF007F", "#DC143C", "#FFB6C1"];
|
|
123
|
+
readonly ocean: readonly ["#006994", "#00CED1", "#20B2AA", "#48D1CC", "#87CEEB"];
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Emoji sets for presets
|
|
127
|
+
*/
|
|
128
|
+
export declare const EMOJI_SETS: {
|
|
129
|
+
readonly celebration: readonly ["🎉", "🎊", "🥳", "✨", "🎈"];
|
|
130
|
+
readonly hearts: readonly ["❤️", "💕", "💖", "💗", "💓", "💘"];
|
|
131
|
+
readonly stars: readonly ["⭐", "🌟", "✨", "💫", "⚡"];
|
|
132
|
+
readonly money: readonly ["💰", "💵", "💸", "🤑", "💎"];
|
|
133
|
+
readonly christmas: readonly ["🎄", "🎅", "🎁", "❄️", "⭐"];
|
|
134
|
+
readonly halloween: readonly ["🎃", "👻", "🦇", "🕷️", "💀"];
|
|
135
|
+
readonly birthday: readonly ["🎂", "🎁", "🎈", "🎉", "🥳"];
|
|
136
|
+
readonly food: readonly ["🍕", "🍔", "🍟", "🌭", "🍿"];
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Preset configurations for quick setup
|
|
140
|
+
*/
|
|
141
|
+
export declare const PRESETS: Record<PresetName, PresetConfig>;
|
|
142
|
+
/**
|
|
143
|
+
* Get preset options by name
|
|
144
|
+
*/
|
|
145
|
+
export declare function getPreset(name: PresetName): ConfettiBurstOptions;
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAWlC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,aAapB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAItB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAYrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAKlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,UAKjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAMvB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAWrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YASnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,mBAYnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC,EAAE,MAAM,CAKlG,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CA6CxD,CAAC;AAEX;;GAEG;AACH,KAAK,gBAAgB,GACjB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,QAAQ,CAAC;AAEb;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAavD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAKtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,gDAAgD;;IAEhD,gDAAgD;;IAEhD,yDAAyD;;IAEzD,sDAAsD;;IAEtD,qDAAqD;;CAE7C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAyT3C,CAAC;AAEX;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,CAEhE"}
|