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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +303 -0
  3. package/dist/cjs/components.d.ts +219 -0
  4. package/dist/cjs/components.d.ts.map +1 -0
  5. package/dist/cjs/components.js +341 -0
  6. package/dist/cjs/components.js.map +1 -0
  7. package/dist/cjs/confetti-engine.d.ts +122 -0
  8. package/dist/cjs/confetti-engine.d.ts.map +1 -0
  9. package/dist/cjs/confetti-engine.js +589 -0
  10. package/dist/cjs/confetti-engine.js.map +1 -0
  11. package/dist/cjs/confetti.d.ts +50 -0
  12. package/dist/cjs/confetti.d.ts.map +1 -0
  13. package/dist/cjs/confetti.js +446 -0
  14. package/dist/cjs/confetti.js.map +1 -0
  15. package/dist/cjs/constants.d.ts +147 -0
  16. package/dist/cjs/constants.d.ts.map +1 -0
  17. package/dist/cjs/constants.js +609 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/cjs/hooks.d.ts +94 -0
  20. package/dist/cjs/hooks.d.ts.map +1 -0
  21. package/dist/cjs/hooks.js +225 -0
  22. package/dist/cjs/hooks.js.map +1 -0
  23. package/dist/cjs/index.d.ts +34 -0
  24. package/dist/cjs/index.d.ts.map +1 -0
  25. package/dist/cjs/index.js +180 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/particle.d.ts +50 -0
  28. package/dist/cjs/particle.d.ts.map +1 -0
  29. package/dist/cjs/particle.js +475 -0
  30. package/dist/cjs/particle.js.map +1 -0
  31. package/dist/cjs/shapes.d.ts +190 -0
  32. package/dist/cjs/shapes.d.ts.map +1 -0
  33. package/dist/cjs/shapes.js +272 -0
  34. package/dist/cjs/shapes.js.map +1 -0
  35. package/dist/cjs/types.d.ts +720 -0
  36. package/dist/cjs/types.d.ts.map +1 -0
  37. package/dist/cjs/types.js +25 -0
  38. package/dist/cjs/types.js.map +1 -0
  39. package/dist/cjs/utils.d.ts +90 -0
  40. package/dist/cjs/utils.d.ts.map +1 -0
  41. package/dist/cjs/utils.js +330 -0
  42. package/dist/cjs/utils.js.map +1 -0
  43. package/dist/esm/components.js +334 -0
  44. package/dist/esm/components.js.map +1 -0
  45. package/dist/esm/confetti-engine.js +581 -0
  46. package/dist/esm/confetti-engine.js.map +1 -0
  47. package/dist/esm/confetti.js +443 -0
  48. package/dist/esm/confetti.js.map +1 -0
  49. package/dist/esm/constants.js +605 -0
  50. package/dist/esm/constants.js.map +1 -0
  51. package/dist/esm/hooks.js +218 -0
  52. package/dist/esm/hooks.js.map +1 -0
  53. package/dist/esm/index.js +146 -0
  54. package/dist/esm/index.js.map +1 -0
  55. package/dist/esm/particle.js +465 -0
  56. package/dist/esm/particle.js.map +1 -0
  57. package/dist/esm/shapes.js +265 -0
  58. package/dist/esm/shapes.js.map +1 -0
  59. package/dist/esm/types.js +24 -0
  60. package/dist/esm/types.js.map +1 -0
  61. package/dist/esm/utils.js +309 -0
  62. package/dist/esm/utils.js.map +1 -0
  63. package/dist/types/components.d.ts +219 -0
  64. package/dist/types/components.d.ts.map +1 -0
  65. package/dist/types/confetti-engine.d.ts +122 -0
  66. package/dist/types/confetti-engine.d.ts.map +1 -0
  67. package/dist/types/confetti.d.ts +50 -0
  68. package/dist/types/confetti.d.ts.map +1 -0
  69. package/dist/types/constants.d.ts +147 -0
  70. package/dist/types/constants.d.ts.map +1 -0
  71. package/dist/types/hooks.d.ts +94 -0
  72. package/dist/types/hooks.d.ts.map +1 -0
  73. package/dist/types/index.d.ts +34 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/particle.d.ts +50 -0
  76. package/dist/types/particle.d.ts.map +1 -0
  77. package/dist/types/shapes.d.ts +190 -0
  78. package/dist/types/shapes.d.ts.map +1 -0
  79. package/dist/types/types.d.ts +720 -0
  80. package/dist/types/types.d.ts.map +1 -0
  81. package/dist/types/utils.d.ts +90 -0
  82. package/dist/types/utils.d.ts.map +1 -0
  83. package/package.json +73 -0
@@ -0,0 +1,443 @@
1
+ /**
2
+ * Functional Confetti API
3
+ *
4
+ * Provides a canvas-confetti compatible function-based API for
5
+ * imperative confetti control without React components.
6
+ *
7
+ * @module confetti
8
+ */
9
+ /**
10
+ * Global registry of confetti instances
11
+ */
12
+ const instances = new Map();
13
+ /**
14
+ * Check if user prefers reduced motion
15
+ */
16
+ function prefersReducedMotion() {
17
+ if (typeof window === 'undefined')
18
+ return false;
19
+ return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;
20
+ }
21
+ /**
22
+ * Create a random particle
23
+ */
24
+ function createParticle(canvas, options) {
25
+ 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;
26
+ const radAngle = (angle - 90) * (Math.PI / 180);
27
+ const spreadRad = spread * (Math.PI / 180);
28
+ const randomAngle = radAngle + (Math.random() - 0.5) * spreadRad;
29
+ const velocity = startVelocity * (0.5 + Math.random() * 0.5);
30
+ return {
31
+ x: origin.x * canvas.width,
32
+ y: origin.y * canvas.height,
33
+ vx: Math.cos(randomAngle) * velocity,
34
+ vy: Math.sin(randomAngle) * velocity,
35
+ tiltAngle: Math.random() * Math.PI * 2,
36
+ tiltSpeed: (Math.random() - 0.5) * 0.1,
37
+ color: colors[Math.floor(Math.random() * colors.length)],
38
+ shape: (shapes[Math.floor(Math.random() * shapes.length)] ?? 'circle'),
39
+ scalar,
40
+ gravity: gravity * 0.5,
41
+ drift,
42
+ decay,
43
+ flat,
44
+ tick: 0,
45
+ totalTicks: ticks,
46
+ wobble: Math.random() * 10,
47
+ wobbleSpeed: 0.1 + Math.random() * 0.1,
48
+ };
49
+ }
50
+ /**
51
+ * Update particle physics
52
+ */
53
+ function updateParticle(particle) {
54
+ particle.tick++;
55
+ if (particle.tick >= particle.totalTicks) {
56
+ return false;
57
+ }
58
+ // Apply physics
59
+ particle.vy += particle.gravity;
60
+ particle.vx += particle.drift;
61
+ particle.vx *= particle.decay;
62
+ particle.vy *= particle.decay;
63
+ particle.x += particle.vx;
64
+ particle.y += particle.vy;
65
+ // Update wobble and tilt
66
+ particle.wobble += particle.wobbleSpeed;
67
+ if (!particle.flat) {
68
+ particle.tiltAngle += particle.tiltSpeed;
69
+ }
70
+ return true;
71
+ }
72
+ /**
73
+ * Draw a single particle
74
+ */
75
+ function drawParticle(ctx, particle) {
76
+ const progress = particle.tick / particle.totalTicks;
77
+ const fadeOut = 1 - progress;
78
+ const size = 10 * particle.scalar;
79
+ ctx.save();
80
+ ctx.translate(particle.x, particle.y);
81
+ if (!particle.flat) {
82
+ ctx.rotate(particle.tiltAngle);
83
+ // Add wobble for 3D effect
84
+ const wobbleX = Math.sin(particle.wobble) * 0.5;
85
+ ctx.scale(1 + wobbleX * 0.2, 1);
86
+ }
87
+ ctx.globalAlpha = fadeOut;
88
+ ctx.fillStyle = particle.color;
89
+ if (particle.shape === 'circle') {
90
+ ctx.beginPath();
91
+ ctx.arc(0, 0, size / 2, 0, Math.PI * 2);
92
+ ctx.fill();
93
+ }
94
+ else if (particle.shape === 'square') {
95
+ ctx.fillRect(-size / 2, -size / 2, size, size);
96
+ }
97
+ else {
98
+ // Rectangle (default)
99
+ ctx.fillRect(-size / 2, -size / 3, size, size * 0.6);
100
+ }
101
+ ctx.restore();
102
+ }
103
+ /**
104
+ * Animation loop for a confetti instance
105
+ */
106
+ function animate(instance) {
107
+ if (instance.isDestroyed) {
108
+ return;
109
+ }
110
+ const { canvas, ctx, particles } = instance;
111
+ // Clear canvas
112
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
113
+ // Update and draw particles
114
+ for (let i = particles.length - 1; i >= 0; i--) {
115
+ const particle = particles[i];
116
+ const alive = updateParticle(particle);
117
+ if (alive) {
118
+ drawParticle(ctx, particle);
119
+ }
120
+ else {
121
+ particles.splice(i, 1);
122
+ }
123
+ }
124
+ // Continue animation or resolve
125
+ if (particles.length > 0) {
126
+ instance.animationId = requestAnimationFrame(() => animate(instance));
127
+ }
128
+ else {
129
+ instance.animationId = null;
130
+ instance.resolve?.();
131
+ instance.resolve = null;
132
+ instance.promise = null;
133
+ }
134
+ }
135
+ /**
136
+ * Get or create the default canvas
137
+ */
138
+ function getDefaultCanvas() {
139
+ let canvas = document.getElementById('confetti-canvas');
140
+ if (!canvas) {
141
+ canvas = document.createElement('canvas');
142
+ canvas.id = 'confetti-canvas';
143
+ canvas.style.cssText = `
144
+ position: fixed;
145
+ top: 0;
146
+ left: 0;
147
+ width: 100%;
148
+ height: 100%;
149
+ pointer-events: none;
150
+ z-index: 2147483647;
151
+ `;
152
+ document.body.appendChild(canvas);
153
+ }
154
+ // Update size
155
+ canvas.width = window.innerWidth;
156
+ canvas.height = window.innerHeight;
157
+ return canvas;
158
+ }
159
+ /**
160
+ * Get or create a confetti instance
161
+ */
162
+ function getInstance(canvas, createOptions = {}) {
163
+ let instance = instances.get(canvas);
164
+ if (!instance) {
165
+ const actualCanvas = canvas === 'default' ? getDefaultCanvas() : canvas;
166
+ const ctx = actualCanvas.getContext('2d');
167
+ if (!ctx) {
168
+ console.error('Could not get 2D context from canvas');
169
+ return null;
170
+ }
171
+ instance = {
172
+ canvas: actualCanvas,
173
+ ctx,
174
+ animationId: null,
175
+ particles: [],
176
+ options: createOptions,
177
+ promise: null,
178
+ resolve: null,
179
+ isDestroyed: false,
180
+ };
181
+ instances.set(canvas, instance);
182
+ // Handle resize if enabled
183
+ if (createOptions.resize && canvas === 'default') {
184
+ window.addEventListener('resize', () => {
185
+ if (!instance.isDestroyed) {
186
+ instance.canvas.width = window.innerWidth;
187
+ instance.canvas.height = window.innerHeight;
188
+ }
189
+ });
190
+ }
191
+ }
192
+ return instance;
193
+ }
194
+ /**
195
+ * Main confetti function - canvas-confetti compatible API
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * // Basic confetti burst
200
+ * confetti();
201
+ *
202
+ * // Customized confetti
203
+ * confetti({
204
+ * particleCount: 100,
205
+ * spread: 70,
206
+ * origin: { x: 0.5, y: 0.5 }
207
+ * });
208
+ *
209
+ * // Wait for completion
210
+ * await confetti({ particleCount: 200 });
211
+ * console.log('Confetti finished!');
212
+ * ```
213
+ *
214
+ * @param options - Confetti configuration options
215
+ * @returns Promise that resolves when animation completes
216
+ */
217
+ export function confetti(options = {}) {
218
+ // Check for reduced motion preference
219
+ if (options.disableForReducedMotion && prefersReducedMotion()) {
220
+ return Promise.resolve();
221
+ }
222
+ const instance = getInstance('default');
223
+ if (!instance) {
224
+ return null;
225
+ }
226
+ const { particleCount = 50, } = options;
227
+ // Create particles
228
+ for (let i = 0; i < particleCount; i++) {
229
+ instance.particles.push(createParticle(instance.canvas, options));
230
+ }
231
+ // Start animation if not already running
232
+ if (!instance.animationId) {
233
+ instance.promise = new Promise(resolve => {
234
+ instance.resolve = resolve;
235
+ });
236
+ instance.animationId = requestAnimationFrame(() => animate(instance));
237
+ }
238
+ return instance.promise;
239
+ }
240
+ /**
241
+ * Create a confetti instance bound to a specific canvas
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * // Custom canvas confetti
246
+ * const myCanvas = document.getElementById('my-canvas');
247
+ * const myConfetti = confetti.create(myCanvas, { resize: true });
248
+ *
249
+ * // Use the custom instance
250
+ * myConfetti({ particleCount: 100 });
251
+ *
252
+ * // Reset/clear the custom instance
253
+ * myConfetti.reset();
254
+ * ```
255
+ *
256
+ * @param canvas - Target canvas element
257
+ * @param globalOptions - Global options for this instance
258
+ * @returns Confetti function bound to the canvas
259
+ */
260
+ confetti.create = function (canvas, globalOptions = {}) {
261
+ const instance = getInstance(canvas, globalOptions);
262
+ const fire = (options = {}) => {
263
+ if (!instance || instance.isDestroyed) {
264
+ return null;
265
+ }
266
+ // Check for reduced motion preference
267
+ const disableForReducedMotion = options.disableForReducedMotion ?? globalOptions.disableForReducedMotion;
268
+ if (disableForReducedMotion && prefersReducedMotion()) {
269
+ return Promise.resolve();
270
+ }
271
+ const { particleCount = 50, } = options;
272
+ // Create particles
273
+ for (let i = 0; i < particleCount; i++) {
274
+ instance.particles.push(createParticle(instance.canvas, options));
275
+ }
276
+ // Start animation if not already running
277
+ if (!instance.animationId) {
278
+ instance.promise = new Promise(resolve => {
279
+ instance.resolve = resolve;
280
+ });
281
+ instance.animationId = requestAnimationFrame(() => animate(instance));
282
+ }
283
+ return instance.promise;
284
+ };
285
+ fire.reset = () => {
286
+ if (instance) {
287
+ if (instance.animationId) {
288
+ cancelAnimationFrame(instance.animationId);
289
+ instance.animationId = null;
290
+ }
291
+ instance.particles = [];
292
+ instance.ctx.clearRect(0, 0, instance.canvas.width, instance.canvas.height);
293
+ instance.resolve?.();
294
+ instance.resolve = null;
295
+ instance.promise = null;
296
+ }
297
+ };
298
+ return fire;
299
+ };
300
+ /**
301
+ * Reset/clear all confetti on the default canvas
302
+ *
303
+ * @example
304
+ * ```typescript
305
+ * // Fire some confetti
306
+ * confetti({ particleCount: 100 });
307
+ *
308
+ * // Clear it immediately
309
+ * confetti.reset();
310
+ * ```
311
+ */
312
+ confetti.reset = function () {
313
+ const instance = instances.get('default');
314
+ if (instance) {
315
+ if (instance.animationId) {
316
+ cancelAnimationFrame(instance.animationId);
317
+ instance.animationId = null;
318
+ }
319
+ instance.particles = [];
320
+ instance.ctx.clearRect(0, 0, instance.canvas.width, instance.canvas.height);
321
+ instance.resolve?.();
322
+ instance.resolve = null;
323
+ instance.promise = null;
324
+ }
325
+ };
326
+ /**
327
+ * Fire confetti from both sides (common celebration pattern)
328
+ *
329
+ * @example
330
+ * ```typescript
331
+ * // Celebration from both corners
332
+ * confetti.fireworks();
333
+ * ```
334
+ */
335
+ confetti.fireworks = async function (options = {}) {
336
+ const baseOptions = {
337
+ particleCount: 30,
338
+ spread: 55,
339
+ ...options,
340
+ };
341
+ await Promise.all([
342
+ confetti({
343
+ ...baseOptions,
344
+ angle: 60,
345
+ origin: { x: 0, y: 0.65 },
346
+ }),
347
+ confetti({
348
+ ...baseOptions,
349
+ angle: 120,
350
+ origin: { x: 1, y: 0.65 },
351
+ }),
352
+ ]);
353
+ };
354
+ /**
355
+ * Fire confetti in a school pride pattern
356
+ *
357
+ * @example
358
+ * ```typescript
359
+ * // School colors celebration
360
+ * confetti.schoolPride({ colors: ['#ff0000', '#ffffff'] });
361
+ * ```
362
+ */
363
+ confetti.schoolPride = function (options = {}) {
364
+ const end = Date.now() + 3000;
365
+ const colors = options.colors ?? ['#bb0000', '#ffffff'];
366
+ function frame() {
367
+ confetti({
368
+ particleCount: 2,
369
+ angle: 60,
370
+ spread: 55,
371
+ origin: { x: 0, y: 0.6 },
372
+ colors,
373
+ ...options,
374
+ });
375
+ confetti({
376
+ particleCount: 2,
377
+ angle: 120,
378
+ spread: 55,
379
+ origin: { x: 1, y: 0.6 },
380
+ colors,
381
+ ...options,
382
+ });
383
+ if (Date.now() < end) {
384
+ requestAnimationFrame(frame);
385
+ }
386
+ }
387
+ frame();
388
+ };
389
+ /**
390
+ * Fire confetti in a snow pattern
391
+ *
392
+ * @example
393
+ * ```typescript
394
+ * confetti.snow({ duration: 5000 });
395
+ * ```
396
+ */
397
+ confetti.snow = function (options = {}) {
398
+ const { duration = 5000, ...confettiOptions } = options;
399
+ const end = Date.now() + duration;
400
+ function frame() {
401
+ confetti({
402
+ particleCount: 1,
403
+ startVelocity: 0,
404
+ ticks: 300,
405
+ gravity: 0.3,
406
+ origin: {
407
+ x: Math.random(),
408
+ y: 0,
409
+ },
410
+ colors: ['#ffffff', '#f0f8ff', '#e6f3ff'],
411
+ shapes: ['circle'],
412
+ scalar: 0.8 + Math.random() * 0.4,
413
+ drift: Math.random() - 0.5,
414
+ ...confettiOptions,
415
+ });
416
+ if (Date.now() < end) {
417
+ requestAnimationFrame(frame);
418
+ }
419
+ }
420
+ frame();
421
+ };
422
+ /**
423
+ * Fire realistic looking firework bursts
424
+ *
425
+ * @example
426
+ * ```typescript
427
+ * confetti.burst({ x: 0.5, y: 0.3 });
428
+ * ```
429
+ */
430
+ confetti.burst = function (origin, options = {}) {
431
+ return confetti({
432
+ particleCount: 80,
433
+ spread: 360,
434
+ startVelocity: 30,
435
+ decay: 0.92,
436
+ scalar: 1.2,
437
+ origin,
438
+ ...options,
439
+ });
440
+ };
441
+ // Make confetti the default export
442
+ export default confetti;
443
+ //# sourceMappingURL=confetti.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confetti.js","sourceRoot":"","sources":["../../src/confetti.ts"],"names":[],"mappings":"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"}