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,475 @@
1
+ "use strict";
2
+ /**
3
+ * Particle class for confetti animation
4
+ *
5
+ * Represents a single confetti particle with all physics properties
6
+ * and methods for updating and rendering.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.loadImage = loadImage;
10
+ exports.clearImageCache = clearImageCache;
11
+ exports.createParticle = createParticle;
12
+ exports.updateParticle = updateParticle;
13
+ exports.renderParticle = renderParticle;
14
+ exports.areAllParticlesInactive = areAllParticlesInactive;
15
+ exports.countActiveParticles = countActiveParticles;
16
+ exports.resetParticleIdCounter = resetParticleIdCounter;
17
+ const utils_1 = require("./utils");
18
+ const constants_1 = require("./constants");
19
+ /**
20
+ * Internal particle ID counter
21
+ */
22
+ let particleIdCounter = 0;
23
+ /**
24
+ * Image cache for loaded images
25
+ */
26
+ const imageCache = new Map();
27
+ /**
28
+ * Loads an image and caches it
29
+ */
30
+ function loadImage(src) {
31
+ if (imageCache.has(src)) {
32
+ return Promise.resolve(imageCache.get(src));
33
+ }
34
+ return new Promise((resolve, reject) => {
35
+ const img = new Image();
36
+ img.onload = () => {
37
+ imageCache.set(src, img);
38
+ resolve(img);
39
+ };
40
+ img.onerror = reject;
41
+ img.src = src;
42
+ });
43
+ }
44
+ /**
45
+ * Clears the image cache
46
+ */
47
+ function clearImageCache() {
48
+ imageCache.clear();
49
+ }
50
+ /**
51
+ * Creates a new particle state object
52
+ */
53
+ function createParticle(x, y, angle, velocity, colors, shapes, sizeRange, opacityRange, lifespan, rotationSpeed, options) {
54
+ const size = (0, utils_1.randomInRange)(sizeRange[0], sizeRange[1]);
55
+ const opacity = (0, utils_1.randomInRange)(opacityRange[0], opacityRange[1]);
56
+ const colorInput = (0, utils_1.randomFromArray)(colors);
57
+ const color = typeof colorInput === 'string' ? (0, utils_1.parseColor)(colorInput) :
58
+ ('type' in colorInput) ? (0, utils_1.parseColor)(colorInput.colors[0]) : colorInput;
59
+ // Calculate initial velocity components
60
+ const vx = Math.cos(angle) * velocity;
61
+ const vy = -Math.sin(angle) * velocity; // Negative because canvas Y is inverted
62
+ // Handle image particles
63
+ let image;
64
+ if (options?.images && options.images.length > 0) {
65
+ image = (0, utils_1.randomFromArray)(options.images);
66
+ }
67
+ const tiltRange = options?.tiltRange ?? [-15, 15];
68
+ const spinSpeedRange = options?.spinSpeedRange ?? [-10, 10];
69
+ return {
70
+ id: particleIdCounter++,
71
+ x,
72
+ y,
73
+ vx,
74
+ vy,
75
+ size,
76
+ originalSize: size,
77
+ rotation: (0, utils_1.secureRandom)() * constants_1.MATH_CONSTANTS.TWO_PI,
78
+ rotationSpeed: ((0, utils_1.secureRandom)() - 0.5) * 0.2 * rotationSpeed,
79
+ color,
80
+ shape: image ? 'custom' : (0, utils_1.randomFromArray)(shapes),
81
+ opacity,
82
+ originalOpacity: opacity,
83
+ life: lifespan,
84
+ maxLife: lifespan,
85
+ active: true,
86
+ image,
87
+ imageElement: null,
88
+ trail: [],
89
+ wobblePhase: (0, utils_1.secureRandom)() * constants_1.MATH_CONSTANTS.TWO_PI,
90
+ wobbleSpeed: (0, utils_1.randomInRange)(0.5, 2),
91
+ tilt: (0, utils_1.degToRad)((0, utils_1.randomInRange)(tiltRange[0], tiltRange[1])),
92
+ tiltSpeed: (0, utils_1.randomInRange)(spinSpeedRange[0], spinSpeedRange[1]) * 0.01,
93
+ depth: options?.depth3D ?? 0,
94
+ hasExploded: false,
95
+ data: {},
96
+ };
97
+ }
98
+ /**
99
+ * Updates a particle's physics state
100
+ */
101
+ function updateParticle(particle, deltaTime, physics, fadeOut, scaleDown, trailConfig, canvasHeight) {
102
+ if (!particle.active)
103
+ return;
104
+ const dt = deltaTime / 16.67; // Normalize to 60fps
105
+ // Update trail (store previous position)
106
+ const trail = trailConfig ?? constants_1.DEFAULT_TRAIL;
107
+ if (trail.enabled) {
108
+ particle.trail.unshift({
109
+ x: particle.x,
110
+ y: particle.y,
111
+ opacity: particle.opacity,
112
+ size: particle.size,
113
+ });
114
+ const maxLength = trail.length ?? constants_1.DEFAULT_TRAIL.length;
115
+ if (particle.trail.length > maxLength) {
116
+ particle.trail.pop();
117
+ }
118
+ }
119
+ // Apply gravity
120
+ particle.vy += physics.gravity * dt;
121
+ // Apply wind with variation
122
+ const windForce = physics.wind + (physics.windVariation * ((0, utils_1.secureRandom)() - 0.5));
123
+ particle.vx += windForce * dt;
124
+ // Apply drag
125
+ particle.vx *= 1 - physics.drag;
126
+ particle.vy *= 1 - physics.drag;
127
+ // Apply friction
128
+ particle.vx *= physics.friction;
129
+ particle.vy *= physics.friction;
130
+ // Apply velocity decay
131
+ particle.vx *= physics.decay;
132
+ particle.vy *= physics.decay;
133
+ // Update position
134
+ particle.x += particle.vx * dt;
135
+ particle.y += particle.vy * dt;
136
+ // Update rotation
137
+ if (physics.tumble) {
138
+ particle.rotation += particle.rotationSpeed * dt;
139
+ }
140
+ // Update tilt
141
+ particle.tilt += particle.tiltSpeed * dt;
142
+ // Update wobble phase for 3D effect
143
+ if (physics.wobble) {
144
+ particle.wobblePhase += physics.wobbleSpeed * 0.1 * dt;
145
+ }
146
+ // Handle floor bounce
147
+ if (physics.floor !== null && physics.bounce > 0 && canvasHeight) {
148
+ const floorY = physics.floor ?? canvasHeight;
149
+ if (particle.y + particle.size / 2 >= floorY) {
150
+ particle.y = floorY - particle.size / 2;
151
+ particle.vy = -particle.vy * physics.bounce;
152
+ // Reduce horizontal velocity on bounce
153
+ particle.vx *= 0.9;
154
+ }
155
+ }
156
+ // Update life
157
+ particle.life -= deltaTime;
158
+ // Calculate life progress (0 = start, 1 = end)
159
+ const lifeProgress = 1 - (particle.life / particle.maxLife);
160
+ // Apply fade out
161
+ if (fadeOut) {
162
+ particle.opacity = particle.originalOpacity * (1 - lifeProgress);
163
+ }
164
+ // Apply scale down
165
+ if (scaleDown) {
166
+ particle.size = particle.originalSize * (1 - lifeProgress * 0.5);
167
+ }
168
+ // Check if particle is dead
169
+ if (particle.life <= 0 ||
170
+ particle.opacity < constants_1.PERFORMANCE.MIN_OPACITY ||
171
+ particle.size < constants_1.PERFORMANCE.MIN_SIZE) {
172
+ particle.active = false;
173
+ }
174
+ }
175
+ /**
176
+ * Renders a particle to a canvas context
177
+ */
178
+ function renderParticle(ctx, particle, options) {
179
+ if (!particle.active)
180
+ return;
181
+ const { x, y, size, rotation, color, shape, opacity, tilt } = particle;
182
+ const trail = options?.trailConfig ?? constants_1.DEFAULT_TRAIL;
183
+ const glow = options?.glowConfig ?? constants_1.DEFAULT_GLOW;
184
+ // Render trail first (behind particle)
185
+ if (trail.enabled && particle.trail.length > 0) {
186
+ renderTrail(ctx, particle, trail);
187
+ }
188
+ ctx.save();
189
+ // Apply glow effect
190
+ if (glow.enabled) {
191
+ ctx.shadowBlur = glow.blur ?? constants_1.DEFAULT_GLOW.blur;
192
+ ctx.shadowColor = glow.color ?? (0, utils_1.rgbaToString)(color);
193
+ }
194
+ ctx.translate(x, y);
195
+ ctx.rotate(rotation + tilt);
196
+ // Apply 3D wobble effect
197
+ if (particle.depth > 0) {
198
+ const wobbleScale = 1 - particle.depth * 0.3 * Math.sin(particle.wobblePhase);
199
+ ctx.scale(wobbleScale, 1);
200
+ }
201
+ ctx.globalAlpha = (0, utils_1.clamp)(opacity * color.a * (glow.enabled ? glow.intensity ?? 1 : 1), 0, 1);
202
+ ctx.fillStyle = (0, utils_1.rgbaToString)({ ...color, a: 1 });
203
+ // Handle image/emoji particles
204
+ if (particle.image && particle.image.isEmoji) {
205
+ renderEmoji(ctx, particle.image.src, size * (particle.image.scale ?? 1));
206
+ }
207
+ else if (particle.imageElement) {
208
+ renderImage(ctx, particle.imageElement, size * (particle.image?.scale ?? 1));
209
+ }
210
+ else if (shape === 'custom' && options?.customDraw) {
211
+ const drawContext = {
212
+ ctx,
213
+ particle,
214
+ progress: 1 - particle.life / particle.maxLife,
215
+ elapsed: options.elapsed ?? 0,
216
+ };
217
+ options.customDraw(drawContext);
218
+ }
219
+ else {
220
+ // Render based on shape
221
+ switch (shape) {
222
+ case 'square':
223
+ renderSquare(ctx, size);
224
+ break;
225
+ case 'circle':
226
+ renderCircle(ctx, size);
227
+ break;
228
+ case 'rectangle':
229
+ renderRectangle(ctx, size);
230
+ break;
231
+ case 'triangle':
232
+ renderTriangle(ctx, size);
233
+ break;
234
+ case 'star':
235
+ renderStar(ctx, size);
236
+ break;
237
+ case 'line':
238
+ renderLine(ctx, size);
239
+ break;
240
+ case 'heart':
241
+ renderHeart(ctx, size);
242
+ break;
243
+ case 'diamond':
244
+ renderDiamond(ctx, size);
245
+ break;
246
+ case 'hexagon':
247
+ renderHexagon(ctx, size);
248
+ break;
249
+ case 'spiral':
250
+ renderSpiral(ctx, size, color);
251
+ break;
252
+ case 'ribbon':
253
+ renderRibbon(ctx, size);
254
+ break;
255
+ default:
256
+ renderSquare(ctx, size);
257
+ }
258
+ }
259
+ ctx.restore();
260
+ }
261
+ /**
262
+ * Renders the trail behind a particle
263
+ */
264
+ function renderTrail(ctx, particle, trail) {
265
+ const fadeFactor = trail.fade ?? constants_1.DEFAULT_TRAIL.fade;
266
+ const widthFactor = trail.width ?? constants_1.DEFAULT_TRAIL.width;
267
+ ctx.save();
268
+ ctx.lineCap = 'round';
269
+ ctx.lineJoin = 'round';
270
+ for (let i = 0; i < particle.trail.length - 1; i++) {
271
+ const current = particle.trail[i];
272
+ const next = particle.trail[i + 1];
273
+ const alpha = current.opacity * Math.pow(fadeFactor, i);
274
+ const lineWidth = current.size * widthFactor * Math.pow(fadeFactor, i);
275
+ if (alpha > 0.01 && lineWidth > 0.1) {
276
+ ctx.beginPath();
277
+ ctx.strokeStyle = (0, utils_1.rgbaToString)({ ...particle.color, a: alpha });
278
+ ctx.lineWidth = lineWidth;
279
+ ctx.moveTo(current.x, current.y);
280
+ ctx.lineTo(next.x, next.y);
281
+ ctx.stroke();
282
+ }
283
+ }
284
+ ctx.restore();
285
+ }
286
+ /**
287
+ * Renders a square particle
288
+ */
289
+ function renderSquare(ctx, size) {
290
+ const halfSize = size / 2;
291
+ ctx.fillRect(-halfSize, -halfSize, size, size);
292
+ }
293
+ /**
294
+ * Renders a circle particle
295
+ */
296
+ function renderCircle(ctx, size) {
297
+ ctx.beginPath();
298
+ ctx.arc(0, 0, size / 2, 0, constants_1.MATH_CONSTANTS.TWO_PI);
299
+ ctx.fill();
300
+ }
301
+ /**
302
+ * Renders a rectangle particle (2:1 aspect ratio)
303
+ */
304
+ function renderRectangle(ctx, size) {
305
+ const width = size;
306
+ const height = size / 2;
307
+ ctx.fillRect(-width / 2, -height / 2, width, height);
308
+ }
309
+ /**
310
+ * Renders a triangle particle
311
+ */
312
+ function renderTriangle(ctx, size) {
313
+ const halfSize = size / 2;
314
+ ctx.beginPath();
315
+ ctx.moveTo(0, -halfSize);
316
+ ctx.lineTo(halfSize, halfSize);
317
+ ctx.lineTo(-halfSize, halfSize);
318
+ ctx.closePath();
319
+ ctx.fill();
320
+ }
321
+ /**
322
+ * Renders a star particle
323
+ */
324
+ function renderStar(ctx, size) {
325
+ const outerRadius = size / 2;
326
+ const innerRadius = outerRadius * constants_1.STAR_INNER_RATIO;
327
+ const step = Math.PI / constants_1.STAR_POINTS;
328
+ ctx.beginPath();
329
+ for (let i = 0; i < constants_1.STAR_POINTS * 2; i++) {
330
+ const radius = i % 2 === 0 ? outerRadius : innerRadius;
331
+ const angle = i * step - constants_1.MATH_CONSTANTS.HALF_PI;
332
+ const x = Math.cos(angle) * radius;
333
+ const y = Math.sin(angle) * radius;
334
+ if (i === 0) {
335
+ ctx.moveTo(x, y);
336
+ }
337
+ else {
338
+ ctx.lineTo(x, y);
339
+ }
340
+ }
341
+ ctx.closePath();
342
+ ctx.fill();
343
+ }
344
+ /**
345
+ * Renders a line/streamer particle
346
+ */
347
+ function renderLine(ctx, size) {
348
+ const length = size * 2;
349
+ const width = size / 4;
350
+ ctx.fillRect(-length / 2, -width / 2, length, width);
351
+ }
352
+ /**
353
+ * Renders a heart shape
354
+ */
355
+ function renderHeart(ctx, size) {
356
+ const scale = size / 30;
357
+ ctx.save();
358
+ ctx.scale(scale, scale);
359
+ ctx.beginPath();
360
+ ctx.moveTo(0, -8);
361
+ ctx.bezierCurveTo(-10, -18, -25, -8, -15, 5);
362
+ ctx.lineTo(0, 18);
363
+ ctx.lineTo(15, 5);
364
+ ctx.bezierCurveTo(25, -8, 10, -18, 0, -8);
365
+ ctx.closePath();
366
+ ctx.fill();
367
+ ctx.restore();
368
+ }
369
+ /**
370
+ * Renders a diamond shape
371
+ */
372
+ function renderDiamond(ctx, size) {
373
+ const halfSize = size / 2;
374
+ ctx.beginPath();
375
+ ctx.moveTo(0, -halfSize);
376
+ ctx.lineTo(halfSize * 0.6, 0);
377
+ ctx.lineTo(0, halfSize);
378
+ ctx.lineTo(-halfSize * 0.6, 0);
379
+ ctx.closePath();
380
+ ctx.fill();
381
+ }
382
+ /**
383
+ * Renders a hexagon shape
384
+ */
385
+ function renderHexagon(ctx, size) {
386
+ const radius = size / 2;
387
+ ctx.beginPath();
388
+ for (let i = 0; i < 6; i++) {
389
+ const angle = (Math.PI / 3) * i - Math.PI / 6;
390
+ const x = Math.cos(angle) * radius;
391
+ const y = Math.sin(angle) * radius;
392
+ if (i === 0) {
393
+ ctx.moveTo(x, y);
394
+ }
395
+ else {
396
+ ctx.lineTo(x, y);
397
+ }
398
+ }
399
+ ctx.closePath();
400
+ ctx.fill();
401
+ }
402
+ /**
403
+ * Renders a spiral shape
404
+ */
405
+ function renderSpiral(ctx, size, color) {
406
+ ctx.strokeStyle = (0, utils_1.rgbaToString)(color);
407
+ ctx.lineWidth = size / 8;
408
+ ctx.lineCap = 'round';
409
+ ctx.beginPath();
410
+ for (let i = 0; i < 22; i++) {
411
+ const angle = 0.35 * i;
412
+ const radius = (0.2 + 1.5 * angle) * (size / 20);
413
+ const x = radius * Math.cos(angle);
414
+ const y = radius * Math.sin(angle);
415
+ if (i === 0) {
416
+ ctx.moveTo(x, y);
417
+ }
418
+ else {
419
+ ctx.lineTo(x, y);
420
+ }
421
+ }
422
+ ctx.stroke();
423
+ }
424
+ /**
425
+ * Renders a ribbon/streamer shape
426
+ */
427
+ function renderRibbon(ctx, size) {
428
+ const width = size;
429
+ const height = size / 3;
430
+ const wave = size / 4;
431
+ ctx.beginPath();
432
+ ctx.moveTo(-width / 2, 0);
433
+ ctx.quadraticCurveTo(-width / 4, -wave, 0, 0);
434
+ ctx.quadraticCurveTo(width / 4, wave, width / 2, 0);
435
+ ctx.lineTo(width / 2, height);
436
+ ctx.quadraticCurveTo(width / 4, height + wave, 0, height);
437
+ ctx.quadraticCurveTo(-width / 4, height - wave, -width / 2, height);
438
+ ctx.closePath();
439
+ ctx.fill();
440
+ }
441
+ /**
442
+ * Renders an emoji
443
+ */
444
+ function renderEmoji(ctx, emoji, size) {
445
+ ctx.font = `${size}px serif`;
446
+ ctx.textAlign = 'center';
447
+ ctx.textBaseline = 'middle';
448
+ ctx.fillText(emoji, 0, 0);
449
+ }
450
+ /**
451
+ * Renders an image
452
+ */
453
+ function renderImage(ctx, img, size) {
454
+ const halfSize = size / 2;
455
+ ctx.drawImage(img, -halfSize, -halfSize, size, size);
456
+ }
457
+ /**
458
+ * Checks if all particles in an array are inactive
459
+ */
460
+ function areAllParticlesInactive(particles) {
461
+ return particles.every(p => !p.active);
462
+ }
463
+ /**
464
+ * Counts active particles
465
+ */
466
+ function countActiveParticles(particles) {
467
+ return particles.filter(p => p.active).length;
468
+ }
469
+ /**
470
+ * Resets the particle ID counter (useful for testing)
471
+ */
472
+ function resetParticleIdCounter() {
473
+ particleIdCounter = 0;
474
+ }
475
+ //# sourceMappingURL=particle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particle.js","sourceRoot":"","sources":["../../src/particle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Shape helper functions
3
+ *
4
+ * Provides canvas-confetti compatible shape creation utilities
5
+ * for custom SVG paths, text, and emoji shapes.
6
+ *
7
+ * @module shapes
8
+ */
9
+ import type { PathShape, TextShape, CustomShape } from './types';
10
+ /**
11
+ * Options for creating a shape from an SVG path
12
+ */
13
+ export interface ShapeFromPathOptions {
14
+ /** SVG path string (d attribute) */
15
+ readonly path: string;
16
+ /** Optional 2D transformation matrix [a, b, c, d, e, f] */
17
+ readonly matrix?: readonly number[];
18
+ /** Fill color (optional, will use particle color if not set) */
19
+ readonly fillColor?: string;
20
+ /** Stroke color (optional) */
21
+ readonly strokeColor?: string;
22
+ /** Stroke width (optional) */
23
+ readonly strokeWidth?: number;
24
+ }
25
+ /**
26
+ * Options for creating a shape from text/emoji
27
+ */
28
+ export interface ShapeFromTextOptions {
29
+ /** Text or emoji to render */
30
+ readonly text: string;
31
+ /** Scale factor for the text size. Default: 1 */
32
+ readonly scalar?: number;
33
+ /** Text color (optional, will use particle color if not set) */
34
+ readonly color?: string;
35
+ /** Font family. Default: 'serif' */
36
+ readonly fontFamily?: string;
37
+ /** Font weight. Default: 'normal' */
38
+ readonly fontWeight?: string | number;
39
+ /** Font style. Default: 'normal' */
40
+ readonly fontStyle?: 'normal' | 'italic' | 'oblique';
41
+ }
42
+ /**
43
+ * Create a custom shape from an SVG path string.
44
+ *
45
+ * This is compatible with canvas-confetti's shapeFromPath function.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * // Simple star shape
50
+ * const star = shapeFromPath({
51
+ * path: 'M0,-1 L0.588,0.809 L-0.951,-0.309 L0.951,-0.309 L-0.588,0.809 Z'
52
+ * });
53
+ *
54
+ * // With transformation matrix
55
+ * const scaledStar = shapeFromPath({
56
+ * path: 'M0,-1 L0.588,0.809 L-0.951,-0.309 L0.951,-0.309 L-0.588,0.809 Z',
57
+ * matrix: [2, 0, 0, 2, 0, 0] // Scale 2x
58
+ * });
59
+ *
60
+ * // Usage with confetti
61
+ * fire({ x: 0.5, y: 0.5 }, {
62
+ * particle: { shapes: [star, 'circle'] }
63
+ * });
64
+ * ```
65
+ *
66
+ * @param options - Shape configuration options
67
+ * @returns PathShape object for use in confetti configuration
68
+ */
69
+ export declare function shapeFromPath(options: ShapeFromPathOptions): PathShape;
70
+ /**
71
+ * Create a custom shape from text or an emoji.
72
+ *
73
+ * This is compatible with canvas-confetti's shapeFromText function.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * // Emoji confetti
78
+ * const heart = shapeFromText({ text: '❤️' });
79
+ * const party = shapeFromText({ text: '🎉', scalar: 2 });
80
+ *
81
+ * // Custom text
82
+ * const yay = shapeFromText({
83
+ * text: 'YAY',
84
+ * fontFamily: 'Impact',
85
+ * color: '#ff0000'
86
+ * });
87
+ *
88
+ * // Usage with confetti
89
+ * fire({ x: 0.5, y: 0.5 }, {
90
+ * particle: { shapes: [heart, party, yay] }
91
+ * });
92
+ * ```
93
+ *
94
+ * @param options - Text shape configuration options
95
+ * @returns TextShape object for use in confetti configuration
96
+ */
97
+ export declare function shapeFromText(options: ShapeFromTextOptions): TextShape;
98
+ /**
99
+ * Create a bitmap shape from an image URL or HTMLImageElement.
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const logo = await shapeFromImage({
104
+ * src: '/logo.png',
105
+ * width: 32,
106
+ * height: 32
107
+ * });
108
+ *
109
+ * fire({ x: 0.5, y: 0.5 }, {
110
+ * particle: { shapes: [logo] }
111
+ * });
112
+ * ```
113
+ *
114
+ * @param options - Image shape configuration options
115
+ * @returns Promise resolving to a custom shape
116
+ */
117
+ export declare function shapeFromImage(options: {
118
+ readonly src: string | HTMLImageElement;
119
+ readonly width?: number;
120
+ readonly height?: number;
121
+ readonly scalar?: number;
122
+ }): Promise<CustomShape>;
123
+ /**
124
+ * Create multiple shapes from an array of emoji.
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const partyEmoji = shapesFromEmoji(['🎉', '🎊', '✨', '🥳']);
129
+ *
130
+ * fire({ x: 0.5, y: 0.5 }, {
131
+ * particle: { shapes: partyEmoji }
132
+ * });
133
+ * ```
134
+ *
135
+ * @param emojis - Array of emoji strings
136
+ * @param options - Optional common options for all emoji
137
+ * @returns Array of TextShape objects
138
+ */
139
+ export declare function shapesFromEmoji(emojis: readonly string[], options?: Omit<ShapeFromTextOptions, 'text'>): TextShape[];
140
+ /**
141
+ * Common predefined path shapes
142
+ */
143
+ export declare const pathShapes: {
144
+ /** Five-pointed star */
145
+ star: PathShape;
146
+ /** Heart shape */
147
+ heart: PathShape;
148
+ /** Diamond shape */
149
+ diamond: PathShape;
150
+ /** Hexagon shape */
151
+ hexagon: PathShape;
152
+ /** Triangle shape */
153
+ triangle: PathShape;
154
+ /** Plus/cross shape */
155
+ plus: PathShape;
156
+ /** Moon/crescent shape */
157
+ moon: PathShape;
158
+ /** Lightning bolt */
159
+ lightning: PathShape;
160
+ /** Spiral shape */
161
+ spiral: PathShape;
162
+ /** Ribbon/wave shape */
163
+ ribbon: PathShape;
164
+ };
165
+ /**
166
+ * Common emoji sets for quick use
167
+ */
168
+ export declare const emojiShapes: {
169
+ /** Party/celebration emoji */
170
+ party: TextShape[];
171
+ /** Heart emoji */
172
+ hearts: TextShape[];
173
+ /** Star emoji */
174
+ stars: TextShape[];
175
+ /** Nature emoji */
176
+ nature: TextShape[];
177
+ /** Food emoji */
178
+ food: TextShape[];
179
+ /** Sports emoji */
180
+ sports: TextShape[];
181
+ /** Weather emoji */
182
+ weather: TextShape[];
183
+ /** Money emoji */
184
+ money: TextShape[];
185
+ /** Animals emoji */
186
+ animals: TextShape[];
187
+ /** Holiday emoji */
188
+ holiday: TextShape[];
189
+ };
190
+ //# sourceMappingURL=shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAetE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAmBtE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAM,GAC/C,SAAS,EAAE,CAEb;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,wBAAwB;;IAKxB,kBAAkB;;IAKlB,oBAAoB;;IAKpB,oBAAoB;;IAKpB,qBAAqB;;IAKrB,uBAAuB;;IAKvB,0BAA0B;;IAK1B,qBAAqB;;IAKrB,mBAAmB;;IAKnB,wBAAwB;;CAIzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,8BAA8B;;IAG9B,kBAAkB;;IAGlB,iBAAiB;;IAGjB,mBAAmB;;IAGnB,iBAAiB;;IAGjB,mBAAmB;;IAGnB,oBAAoB;;IAGpB,kBAAkB;;IAGlB,oBAAoB;;IAGpB,oBAAoB;;CAErB,CAAC"}