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,465 @@
1
+ /**
2
+ * Particle class for confetti animation
3
+ *
4
+ * Represents a single confetti particle with all physics properties
5
+ * and methods for updating and rendering.
6
+ */
7
+ import { randomInRange, randomFromArray, parseColor, degToRad, secureRandom, clamp, rgbaToString, } from './utils';
8
+ import { PERFORMANCE, STAR_POINTS, STAR_INNER_RATIO, MATH_CONSTANTS, DEFAULT_TRAIL, DEFAULT_GLOW, } from './constants';
9
+ /**
10
+ * Internal particle ID counter
11
+ */
12
+ let particleIdCounter = 0;
13
+ /**
14
+ * Image cache for loaded images
15
+ */
16
+ const imageCache = new Map();
17
+ /**
18
+ * Loads an image and caches it
19
+ */
20
+ export function loadImage(src) {
21
+ if (imageCache.has(src)) {
22
+ return Promise.resolve(imageCache.get(src));
23
+ }
24
+ return new Promise((resolve, reject) => {
25
+ const img = new Image();
26
+ img.onload = () => {
27
+ imageCache.set(src, img);
28
+ resolve(img);
29
+ };
30
+ img.onerror = reject;
31
+ img.src = src;
32
+ });
33
+ }
34
+ /**
35
+ * Clears the image cache
36
+ */
37
+ export function clearImageCache() {
38
+ imageCache.clear();
39
+ }
40
+ /**
41
+ * Creates a new particle state object
42
+ */
43
+ export function createParticle(x, y, angle, velocity, colors, shapes, sizeRange, opacityRange, lifespan, rotationSpeed, options) {
44
+ const size = randomInRange(sizeRange[0], sizeRange[1]);
45
+ const opacity = randomInRange(opacityRange[0], opacityRange[1]);
46
+ const colorInput = randomFromArray(colors);
47
+ const color = typeof colorInput === 'string' ? parseColor(colorInput) :
48
+ ('type' in colorInput) ? parseColor(colorInput.colors[0]) : colorInput;
49
+ // Calculate initial velocity components
50
+ const vx = Math.cos(angle) * velocity;
51
+ const vy = -Math.sin(angle) * velocity; // Negative because canvas Y is inverted
52
+ // Handle image particles
53
+ let image;
54
+ if (options?.images && options.images.length > 0) {
55
+ image = randomFromArray(options.images);
56
+ }
57
+ const tiltRange = options?.tiltRange ?? [-15, 15];
58
+ const spinSpeedRange = options?.spinSpeedRange ?? [-10, 10];
59
+ return {
60
+ id: particleIdCounter++,
61
+ x,
62
+ y,
63
+ vx,
64
+ vy,
65
+ size,
66
+ originalSize: size,
67
+ rotation: secureRandom() * MATH_CONSTANTS.TWO_PI,
68
+ rotationSpeed: (secureRandom() - 0.5) * 0.2 * rotationSpeed,
69
+ color,
70
+ shape: image ? 'custom' : randomFromArray(shapes),
71
+ opacity,
72
+ originalOpacity: opacity,
73
+ life: lifespan,
74
+ maxLife: lifespan,
75
+ active: true,
76
+ image,
77
+ imageElement: null,
78
+ trail: [],
79
+ wobblePhase: secureRandom() * MATH_CONSTANTS.TWO_PI,
80
+ wobbleSpeed: randomInRange(0.5, 2),
81
+ tilt: degToRad(randomInRange(tiltRange[0], tiltRange[1])),
82
+ tiltSpeed: randomInRange(spinSpeedRange[0], spinSpeedRange[1]) * 0.01,
83
+ depth: options?.depth3D ?? 0,
84
+ hasExploded: false,
85
+ data: {},
86
+ };
87
+ }
88
+ /**
89
+ * Updates a particle's physics state
90
+ */
91
+ export function updateParticle(particle, deltaTime, physics, fadeOut, scaleDown, trailConfig, canvasHeight) {
92
+ if (!particle.active)
93
+ return;
94
+ const dt = deltaTime / 16.67; // Normalize to 60fps
95
+ // Update trail (store previous position)
96
+ const trail = trailConfig ?? DEFAULT_TRAIL;
97
+ if (trail.enabled) {
98
+ particle.trail.unshift({
99
+ x: particle.x,
100
+ y: particle.y,
101
+ opacity: particle.opacity,
102
+ size: particle.size,
103
+ });
104
+ const maxLength = trail.length ?? DEFAULT_TRAIL.length;
105
+ if (particle.trail.length > maxLength) {
106
+ particle.trail.pop();
107
+ }
108
+ }
109
+ // Apply gravity
110
+ particle.vy += physics.gravity * dt;
111
+ // Apply wind with variation
112
+ const windForce = physics.wind + (physics.windVariation * (secureRandom() - 0.5));
113
+ particle.vx += windForce * dt;
114
+ // Apply drag
115
+ particle.vx *= 1 - physics.drag;
116
+ particle.vy *= 1 - physics.drag;
117
+ // Apply friction
118
+ particle.vx *= physics.friction;
119
+ particle.vy *= physics.friction;
120
+ // Apply velocity decay
121
+ particle.vx *= physics.decay;
122
+ particle.vy *= physics.decay;
123
+ // Update position
124
+ particle.x += particle.vx * dt;
125
+ particle.y += particle.vy * dt;
126
+ // Update rotation
127
+ if (physics.tumble) {
128
+ particle.rotation += particle.rotationSpeed * dt;
129
+ }
130
+ // Update tilt
131
+ particle.tilt += particle.tiltSpeed * dt;
132
+ // Update wobble phase for 3D effect
133
+ if (physics.wobble) {
134
+ particle.wobblePhase += physics.wobbleSpeed * 0.1 * dt;
135
+ }
136
+ // Handle floor bounce
137
+ if (physics.floor !== null && physics.bounce > 0 && canvasHeight) {
138
+ const floorY = physics.floor ?? canvasHeight;
139
+ if (particle.y + particle.size / 2 >= floorY) {
140
+ particle.y = floorY - particle.size / 2;
141
+ particle.vy = -particle.vy * physics.bounce;
142
+ // Reduce horizontal velocity on bounce
143
+ particle.vx *= 0.9;
144
+ }
145
+ }
146
+ // Update life
147
+ particle.life -= deltaTime;
148
+ // Calculate life progress (0 = start, 1 = end)
149
+ const lifeProgress = 1 - (particle.life / particle.maxLife);
150
+ // Apply fade out
151
+ if (fadeOut) {
152
+ particle.opacity = particle.originalOpacity * (1 - lifeProgress);
153
+ }
154
+ // Apply scale down
155
+ if (scaleDown) {
156
+ particle.size = particle.originalSize * (1 - lifeProgress * 0.5);
157
+ }
158
+ // Check if particle is dead
159
+ if (particle.life <= 0 ||
160
+ particle.opacity < PERFORMANCE.MIN_OPACITY ||
161
+ particle.size < PERFORMANCE.MIN_SIZE) {
162
+ particle.active = false;
163
+ }
164
+ }
165
+ /**
166
+ * Renders a particle to a canvas context
167
+ */
168
+ export function renderParticle(ctx, particle, options) {
169
+ if (!particle.active)
170
+ return;
171
+ const { x, y, size, rotation, color, shape, opacity, tilt } = particle;
172
+ const trail = options?.trailConfig ?? DEFAULT_TRAIL;
173
+ const glow = options?.glowConfig ?? DEFAULT_GLOW;
174
+ // Render trail first (behind particle)
175
+ if (trail.enabled && particle.trail.length > 0) {
176
+ renderTrail(ctx, particle, trail);
177
+ }
178
+ ctx.save();
179
+ // Apply glow effect
180
+ if (glow.enabled) {
181
+ ctx.shadowBlur = glow.blur ?? DEFAULT_GLOW.blur;
182
+ ctx.shadowColor = glow.color ?? rgbaToString(color);
183
+ }
184
+ ctx.translate(x, y);
185
+ ctx.rotate(rotation + tilt);
186
+ // Apply 3D wobble effect
187
+ if (particle.depth > 0) {
188
+ const wobbleScale = 1 - particle.depth * 0.3 * Math.sin(particle.wobblePhase);
189
+ ctx.scale(wobbleScale, 1);
190
+ }
191
+ ctx.globalAlpha = clamp(opacity * color.a * (glow.enabled ? glow.intensity ?? 1 : 1), 0, 1);
192
+ ctx.fillStyle = rgbaToString({ ...color, a: 1 });
193
+ // Handle image/emoji particles
194
+ if (particle.image && particle.image.isEmoji) {
195
+ renderEmoji(ctx, particle.image.src, size * (particle.image.scale ?? 1));
196
+ }
197
+ else if (particle.imageElement) {
198
+ renderImage(ctx, particle.imageElement, size * (particle.image?.scale ?? 1));
199
+ }
200
+ else if (shape === 'custom' && options?.customDraw) {
201
+ const drawContext = {
202
+ ctx,
203
+ particle,
204
+ progress: 1 - particle.life / particle.maxLife,
205
+ elapsed: options.elapsed ?? 0,
206
+ };
207
+ options.customDraw(drawContext);
208
+ }
209
+ else {
210
+ // Render based on shape
211
+ switch (shape) {
212
+ case 'square':
213
+ renderSquare(ctx, size);
214
+ break;
215
+ case 'circle':
216
+ renderCircle(ctx, size);
217
+ break;
218
+ case 'rectangle':
219
+ renderRectangle(ctx, size);
220
+ break;
221
+ case 'triangle':
222
+ renderTriangle(ctx, size);
223
+ break;
224
+ case 'star':
225
+ renderStar(ctx, size);
226
+ break;
227
+ case 'line':
228
+ renderLine(ctx, size);
229
+ break;
230
+ case 'heart':
231
+ renderHeart(ctx, size);
232
+ break;
233
+ case 'diamond':
234
+ renderDiamond(ctx, size);
235
+ break;
236
+ case 'hexagon':
237
+ renderHexagon(ctx, size);
238
+ break;
239
+ case 'spiral':
240
+ renderSpiral(ctx, size, color);
241
+ break;
242
+ case 'ribbon':
243
+ renderRibbon(ctx, size);
244
+ break;
245
+ default:
246
+ renderSquare(ctx, size);
247
+ }
248
+ }
249
+ ctx.restore();
250
+ }
251
+ /**
252
+ * Renders the trail behind a particle
253
+ */
254
+ function renderTrail(ctx, particle, trail) {
255
+ const fadeFactor = trail.fade ?? DEFAULT_TRAIL.fade;
256
+ const widthFactor = trail.width ?? DEFAULT_TRAIL.width;
257
+ ctx.save();
258
+ ctx.lineCap = 'round';
259
+ ctx.lineJoin = 'round';
260
+ for (let i = 0; i < particle.trail.length - 1; i++) {
261
+ const current = particle.trail[i];
262
+ const next = particle.trail[i + 1];
263
+ const alpha = current.opacity * Math.pow(fadeFactor, i);
264
+ const lineWidth = current.size * widthFactor * Math.pow(fadeFactor, i);
265
+ if (alpha > 0.01 && lineWidth > 0.1) {
266
+ ctx.beginPath();
267
+ ctx.strokeStyle = rgbaToString({ ...particle.color, a: alpha });
268
+ ctx.lineWidth = lineWidth;
269
+ ctx.moveTo(current.x, current.y);
270
+ ctx.lineTo(next.x, next.y);
271
+ ctx.stroke();
272
+ }
273
+ }
274
+ ctx.restore();
275
+ }
276
+ /**
277
+ * Renders a square particle
278
+ */
279
+ function renderSquare(ctx, size) {
280
+ const halfSize = size / 2;
281
+ ctx.fillRect(-halfSize, -halfSize, size, size);
282
+ }
283
+ /**
284
+ * Renders a circle particle
285
+ */
286
+ function renderCircle(ctx, size) {
287
+ ctx.beginPath();
288
+ ctx.arc(0, 0, size / 2, 0, MATH_CONSTANTS.TWO_PI);
289
+ ctx.fill();
290
+ }
291
+ /**
292
+ * Renders a rectangle particle (2:1 aspect ratio)
293
+ */
294
+ function renderRectangle(ctx, size) {
295
+ const width = size;
296
+ const height = size / 2;
297
+ ctx.fillRect(-width / 2, -height / 2, width, height);
298
+ }
299
+ /**
300
+ * Renders a triangle particle
301
+ */
302
+ function renderTriangle(ctx, size) {
303
+ const halfSize = size / 2;
304
+ ctx.beginPath();
305
+ ctx.moveTo(0, -halfSize);
306
+ ctx.lineTo(halfSize, halfSize);
307
+ ctx.lineTo(-halfSize, halfSize);
308
+ ctx.closePath();
309
+ ctx.fill();
310
+ }
311
+ /**
312
+ * Renders a star particle
313
+ */
314
+ function renderStar(ctx, size) {
315
+ const outerRadius = size / 2;
316
+ const innerRadius = outerRadius * STAR_INNER_RATIO;
317
+ const step = Math.PI / STAR_POINTS;
318
+ ctx.beginPath();
319
+ for (let i = 0; i < STAR_POINTS * 2; i++) {
320
+ const radius = i % 2 === 0 ? outerRadius : innerRadius;
321
+ const angle = i * step - MATH_CONSTANTS.HALF_PI;
322
+ const x = Math.cos(angle) * radius;
323
+ const y = Math.sin(angle) * radius;
324
+ if (i === 0) {
325
+ ctx.moveTo(x, y);
326
+ }
327
+ else {
328
+ ctx.lineTo(x, y);
329
+ }
330
+ }
331
+ ctx.closePath();
332
+ ctx.fill();
333
+ }
334
+ /**
335
+ * Renders a line/streamer particle
336
+ */
337
+ function renderLine(ctx, size) {
338
+ const length = size * 2;
339
+ const width = size / 4;
340
+ ctx.fillRect(-length / 2, -width / 2, length, width);
341
+ }
342
+ /**
343
+ * Renders a heart shape
344
+ */
345
+ function renderHeart(ctx, size) {
346
+ const scale = size / 30;
347
+ ctx.save();
348
+ ctx.scale(scale, scale);
349
+ ctx.beginPath();
350
+ ctx.moveTo(0, -8);
351
+ ctx.bezierCurveTo(-10, -18, -25, -8, -15, 5);
352
+ ctx.lineTo(0, 18);
353
+ ctx.lineTo(15, 5);
354
+ ctx.bezierCurveTo(25, -8, 10, -18, 0, -8);
355
+ ctx.closePath();
356
+ ctx.fill();
357
+ ctx.restore();
358
+ }
359
+ /**
360
+ * Renders a diamond shape
361
+ */
362
+ function renderDiamond(ctx, size) {
363
+ const halfSize = size / 2;
364
+ ctx.beginPath();
365
+ ctx.moveTo(0, -halfSize);
366
+ ctx.lineTo(halfSize * 0.6, 0);
367
+ ctx.lineTo(0, halfSize);
368
+ ctx.lineTo(-halfSize * 0.6, 0);
369
+ ctx.closePath();
370
+ ctx.fill();
371
+ }
372
+ /**
373
+ * Renders a hexagon shape
374
+ */
375
+ function renderHexagon(ctx, size) {
376
+ const radius = size / 2;
377
+ ctx.beginPath();
378
+ for (let i = 0; i < 6; i++) {
379
+ const angle = (Math.PI / 3) * i - Math.PI / 6;
380
+ const x = Math.cos(angle) * radius;
381
+ const y = Math.sin(angle) * radius;
382
+ if (i === 0) {
383
+ ctx.moveTo(x, y);
384
+ }
385
+ else {
386
+ ctx.lineTo(x, y);
387
+ }
388
+ }
389
+ ctx.closePath();
390
+ ctx.fill();
391
+ }
392
+ /**
393
+ * Renders a spiral shape
394
+ */
395
+ function renderSpiral(ctx, size, color) {
396
+ ctx.strokeStyle = rgbaToString(color);
397
+ ctx.lineWidth = size / 8;
398
+ ctx.lineCap = 'round';
399
+ ctx.beginPath();
400
+ for (let i = 0; i < 22; i++) {
401
+ const angle = 0.35 * i;
402
+ const radius = (0.2 + 1.5 * angle) * (size / 20);
403
+ const x = radius * Math.cos(angle);
404
+ const y = radius * Math.sin(angle);
405
+ if (i === 0) {
406
+ ctx.moveTo(x, y);
407
+ }
408
+ else {
409
+ ctx.lineTo(x, y);
410
+ }
411
+ }
412
+ ctx.stroke();
413
+ }
414
+ /**
415
+ * Renders a ribbon/streamer shape
416
+ */
417
+ function renderRibbon(ctx, size) {
418
+ const width = size;
419
+ const height = size / 3;
420
+ const wave = size / 4;
421
+ ctx.beginPath();
422
+ ctx.moveTo(-width / 2, 0);
423
+ ctx.quadraticCurveTo(-width / 4, -wave, 0, 0);
424
+ ctx.quadraticCurveTo(width / 4, wave, width / 2, 0);
425
+ ctx.lineTo(width / 2, height);
426
+ ctx.quadraticCurveTo(width / 4, height + wave, 0, height);
427
+ ctx.quadraticCurveTo(-width / 4, height - wave, -width / 2, height);
428
+ ctx.closePath();
429
+ ctx.fill();
430
+ }
431
+ /**
432
+ * Renders an emoji
433
+ */
434
+ function renderEmoji(ctx, emoji, size) {
435
+ ctx.font = `${size}px serif`;
436
+ ctx.textAlign = 'center';
437
+ ctx.textBaseline = 'middle';
438
+ ctx.fillText(emoji, 0, 0);
439
+ }
440
+ /**
441
+ * Renders an image
442
+ */
443
+ function renderImage(ctx, img, size) {
444
+ const halfSize = size / 2;
445
+ ctx.drawImage(img, -halfSize, -halfSize, size, size);
446
+ }
447
+ /**
448
+ * Checks if all particles in an array are inactive
449
+ */
450
+ export function areAllParticlesInactive(particles) {
451
+ return particles.every(p => !p.active);
452
+ }
453
+ /**
454
+ * Counts active particles
455
+ */
456
+ export function countActiveParticles(particles) {
457
+ return particles.filter(p => p.active).length;
458
+ }
459
+ /**
460
+ * Resets the particle ID counter (useful for testing)
461
+ */
462
+ export function resetParticleIdCounter() {
463
+ particleIdCounter = 0;
464
+ }
465
+ //# sourceMappingURL=particle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particle.js","sourceRoot":"","sources":["../../src/particle.ts"],"names":[],"mappings":"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"}