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,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfettiButton = exports.ConfettiTrigger = void 0;
|
|
4
|
+
exports.ConfettiBurst = ConfettiBurst;
|
|
5
|
+
exports.ConfettiOnMount = ConfettiOnMount;
|
|
6
|
+
exports.ConfettiCannon = ConfettiCannon;
|
|
7
|
+
exports.Confetti = Confetti;
|
|
8
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
|
+
/**
|
|
10
|
+
* React components for confetti animations
|
|
11
|
+
*
|
|
12
|
+
* Provides declarative components for easy integration of confetti
|
|
13
|
+
* effects into React applications.
|
|
14
|
+
*/
|
|
15
|
+
const react_1 = require("react");
|
|
16
|
+
const hooks_1 = require("./hooks");
|
|
17
|
+
/**
|
|
18
|
+
* Declarative confetti component that fires when active prop changes
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* const [celebrate, setCelebrate] = useState(false);
|
|
23
|
+
*
|
|
24
|
+
* return (
|
|
25
|
+
* <>
|
|
26
|
+
* <ConfettiBurst
|
|
27
|
+
* active={celebrate}
|
|
28
|
+
* origin={{ x: 500, y: 300 }}
|
|
29
|
+
* onComplete={() => setCelebrate(false)}
|
|
30
|
+
* />
|
|
31
|
+
* <button onClick={() => setCelebrate(true)}>
|
|
32
|
+
* Celebrate!
|
|
33
|
+
* </button>
|
|
34
|
+
* </>
|
|
35
|
+
* );
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function ConfettiBurst({ active, origin, triggerRef, options, onComplete, }) {
|
|
39
|
+
const { fire, fireFromElement } = (0, hooks_1.useConfetti)();
|
|
40
|
+
const hasFired = (0, react_1.useRef)(false);
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
if (active && !hasFired.current) {
|
|
43
|
+
hasFired.current = true;
|
|
44
|
+
let handle = null;
|
|
45
|
+
if (triggerRef?.current) {
|
|
46
|
+
handle = fireFromElement(triggerRef.current, options);
|
|
47
|
+
}
|
|
48
|
+
else if (origin) {
|
|
49
|
+
handle = fire(origin, options);
|
|
50
|
+
}
|
|
51
|
+
if (handle) {
|
|
52
|
+
handle.promise.then(() => {
|
|
53
|
+
onComplete?.();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, [active, origin, triggerRef, options, fire, fireFromElement, onComplete]);
|
|
58
|
+
// Reset when active becomes false
|
|
59
|
+
(0, react_1.useEffect)(() => {
|
|
60
|
+
if (!active) {
|
|
61
|
+
hasFired.current = false;
|
|
62
|
+
}
|
|
63
|
+
}, [active]);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Invisible trigger component that fires confetti from its position
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* const triggerRef = useRef<ConfettiTriggerHandle>(null);
|
|
72
|
+
*
|
|
73
|
+
* return (
|
|
74
|
+
* <div style={{ position: 'relative' }}>
|
|
75
|
+
* <ConfettiTrigger ref={triggerRef} options={{ particleCount: 100 }} />
|
|
76
|
+
* <button onClick={() => triggerRef.current?.fire()}>
|
|
77
|
+
* Fire!
|
|
78
|
+
* </button>
|
|
79
|
+
* </div>
|
|
80
|
+
* );
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
exports.ConfettiTrigger = (0, react_1.forwardRef)(({ options, style }, ref) => {
|
|
84
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
85
|
+
const { fireFromElement } = (0, hooks_1.useConfetti)();
|
|
86
|
+
(0, react_1.useImperativeHandle)(ref, () => ({
|
|
87
|
+
fire: () => fireFromElement(containerRef.current, options),
|
|
88
|
+
}));
|
|
89
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: containerRef, style: {
|
|
90
|
+
position: 'absolute',
|
|
91
|
+
width: 1,
|
|
92
|
+
height: 1,
|
|
93
|
+
pointerEvents: 'none',
|
|
94
|
+
...style,
|
|
95
|
+
}, "aria-hidden": "true" }));
|
|
96
|
+
});
|
|
97
|
+
exports.ConfettiTrigger.displayName = 'ConfettiTrigger';
|
|
98
|
+
/**
|
|
99
|
+
* Button component that automatically fires confetti on click
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```tsx
|
|
103
|
+
* <ConfettiButton
|
|
104
|
+
* confettiOptions={{
|
|
105
|
+
* particleCount: 30,
|
|
106
|
+
* direction: { direction: 'up' }
|
|
107
|
+
* }}
|
|
108
|
+
* >
|
|
109
|
+
* Submit
|
|
110
|
+
* </ConfettiButton>
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
exports.ConfettiButton = (0, react_1.forwardRef)(({ children, confettiOptions, fireOnClick = true, onClick, ...buttonProps }, forwardedRef) => {
|
|
114
|
+
const internalRef = (0, react_1.useRef)(null);
|
|
115
|
+
const { fireFromElement } = (0, hooks_1.useConfetti)();
|
|
116
|
+
// Combine refs
|
|
117
|
+
const setRef = (0, react_1.useCallback)((node) => {
|
|
118
|
+
internalRef.current = node;
|
|
119
|
+
if (typeof forwardedRef === 'function') {
|
|
120
|
+
forwardedRef(node);
|
|
121
|
+
}
|
|
122
|
+
else if (forwardedRef) {
|
|
123
|
+
forwardedRef.current = node;
|
|
124
|
+
}
|
|
125
|
+
}, [forwardedRef]);
|
|
126
|
+
const handleClick = (0, react_1.useCallback)((event) => {
|
|
127
|
+
if (fireOnClick && internalRef.current) {
|
|
128
|
+
fireFromElement(internalRef.current, confettiOptions);
|
|
129
|
+
}
|
|
130
|
+
onClick?.(event);
|
|
131
|
+
}, [fireOnClick, fireFromElement, confettiOptions, onClick]);
|
|
132
|
+
return ((0, jsx_runtime_1.jsx)("button", { ref: setRef, onClick: handleClick, ...buttonProps, children: children }));
|
|
133
|
+
});
|
|
134
|
+
exports.ConfettiButton.displayName = 'ConfettiButton';
|
|
135
|
+
/**
|
|
136
|
+
* Component that fires confetti when mounted
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```tsx
|
|
140
|
+
* // Fire confetti when a success page loads
|
|
141
|
+
* function SuccessPage() {
|
|
142
|
+
* return (
|
|
143
|
+
* <div>
|
|
144
|
+
* <ConfettiOnMount
|
|
145
|
+
* origin={{ x: window.innerWidth / 2, y: window.innerHeight / 3 }}
|
|
146
|
+
* options={{ particleCount: 100 }}
|
|
147
|
+
* />
|
|
148
|
+
* <h1>Success!</h1>
|
|
149
|
+
* </div>
|
|
150
|
+
* );
|
|
151
|
+
* }
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
function ConfettiOnMount({ origin, options, onComplete, delay = 0, }) {
|
|
155
|
+
const { fire } = (0, hooks_1.useConfetti)();
|
|
156
|
+
const hasFired = (0, react_1.useRef)(false);
|
|
157
|
+
(0, react_1.useEffect)(() => {
|
|
158
|
+
if (hasFired.current)
|
|
159
|
+
return;
|
|
160
|
+
hasFired.current = true;
|
|
161
|
+
const burstOrigin = origin ?? {
|
|
162
|
+
x: typeof window !== 'undefined' ? window.innerWidth / 2 : 0,
|
|
163
|
+
y: typeof window !== 'undefined' ? window.innerHeight / 2 : 0,
|
|
164
|
+
};
|
|
165
|
+
const timeoutId = setTimeout(() => {
|
|
166
|
+
const handle = fire(burstOrigin, options);
|
|
167
|
+
handle.promise.then(() => onComplete?.());
|
|
168
|
+
}, delay);
|
|
169
|
+
return () => clearTimeout(timeoutId);
|
|
170
|
+
}, [fire, origin, options, onComplete, delay]);
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Positioned cannon component for directional confetti bursts
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```tsx
|
|
178
|
+
* <ConfettiCannon
|
|
179
|
+
* left="10%"
|
|
180
|
+
* top="80%"
|
|
181
|
+
* angle={60}
|
|
182
|
+
* fire={shouldFire}
|
|
183
|
+
* options={{ particleCount: 50 }}
|
|
184
|
+
* />
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
function ConfettiCannon({ left = 0, top = 0, angle = 90, options, fire: shouldFire = false, onComplete, }) {
|
|
188
|
+
const { fire } = (0, hooks_1.useConfetti)();
|
|
189
|
+
const hasFired = (0, react_1.useRef)(false);
|
|
190
|
+
(0, react_1.useEffect)(() => {
|
|
191
|
+
if (!shouldFire || hasFired.current)
|
|
192
|
+
return;
|
|
193
|
+
if (typeof window === 'undefined')
|
|
194
|
+
return;
|
|
195
|
+
hasFired.current = true;
|
|
196
|
+
// Calculate position
|
|
197
|
+
const x = typeof left === 'string' && left.endsWith('%')
|
|
198
|
+
? (parseFloat(left) / 100) * window.innerWidth
|
|
199
|
+
: typeof left === 'number'
|
|
200
|
+
? left
|
|
201
|
+
: parseFloat(left) || 0;
|
|
202
|
+
const y = typeof top === 'string' && top.endsWith('%')
|
|
203
|
+
? (parseFloat(top) / 100) * window.innerHeight
|
|
204
|
+
: typeof top === 'number'
|
|
205
|
+
? top
|
|
206
|
+
: parseFloat(top) || 0;
|
|
207
|
+
const handle = fire({ x, y }, {
|
|
208
|
+
...options,
|
|
209
|
+
direction: {
|
|
210
|
+
...options?.direction,
|
|
211
|
+
direction: 'custom',
|
|
212
|
+
angle,
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
handle.promise.then(() => onComplete?.());
|
|
216
|
+
}, [shouldFire, left, top, angle, options, fire, onComplete]);
|
|
217
|
+
// Reset when fire becomes false
|
|
218
|
+
(0, react_1.useEffect)(() => {
|
|
219
|
+
if (!shouldFire) {
|
|
220
|
+
hasFired.current = false;
|
|
221
|
+
}
|
|
222
|
+
}, [shouldFire]);
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
function Confetti({ width, height, numberOfPieces = 200, confettiSource, initialVelocityX, initialVelocityY, recycle = true, run = true, gravity = 0.3, wind = 0, opacity = 1, drawShape, tweenDuration = 100, colors, onConfettiComplete, frameRate,
|
|
226
|
+
// style and className are for API compatibility but not used in canvas
|
|
227
|
+
}) {
|
|
228
|
+
const { fire } = (0, hooks_1.useConfetti)();
|
|
229
|
+
const handleRef = (0, react_1.useRef)(null);
|
|
230
|
+
const hasStarted = (0, react_1.useRef)(false);
|
|
231
|
+
(0, react_1.useEffect)(() => {
|
|
232
|
+
if (!run) {
|
|
233
|
+
if (handleRef.current) {
|
|
234
|
+
handleRef.current.stop();
|
|
235
|
+
handleRef.current = null;
|
|
236
|
+
}
|
|
237
|
+
hasStarted.current = false;
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (hasStarted.current)
|
|
241
|
+
return;
|
|
242
|
+
hasStarted.current = true;
|
|
243
|
+
// Calculate spawn area
|
|
244
|
+
const spawnArea = confettiSource
|
|
245
|
+
? {
|
|
246
|
+
type: 'rect',
|
|
247
|
+
x: confettiSource.x,
|
|
248
|
+
y: confettiSource.y,
|
|
249
|
+
w: confettiSource.w ?? window.innerWidth,
|
|
250
|
+
h: confettiSource.h ?? 10,
|
|
251
|
+
}
|
|
252
|
+
: {
|
|
253
|
+
type: 'rect',
|
|
254
|
+
x: 0,
|
|
255
|
+
y: 0,
|
|
256
|
+
w: width ?? window.innerWidth,
|
|
257
|
+
h: 10,
|
|
258
|
+
};
|
|
259
|
+
// Convert velocity props
|
|
260
|
+
const velX = typeof initialVelocityX === 'number'
|
|
261
|
+
? [initialVelocityX * 0.5, initialVelocityX * 1.5]
|
|
262
|
+
: initialVelocityX
|
|
263
|
+
? [initialVelocityX.min, initialVelocityX.max]
|
|
264
|
+
: [4, 10];
|
|
265
|
+
const velY = typeof initialVelocityY === 'number'
|
|
266
|
+
? [initialVelocityY * 0.5, initialVelocityY * 1.5]
|
|
267
|
+
: initialVelocityY
|
|
268
|
+
? [initialVelocityY.min, initialVelocityY.max]
|
|
269
|
+
: [10, 30];
|
|
270
|
+
// Start the continuous confetti
|
|
271
|
+
const centerX = (width ?? window.innerWidth) / 2;
|
|
272
|
+
const centerY = 0;
|
|
273
|
+
handleRef.current = fire({ x: centerX, y: centerY }, {
|
|
274
|
+
particleCount: numberOfPieces,
|
|
275
|
+
particle: {
|
|
276
|
+
colors: colors ?? ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff'],
|
|
277
|
+
opacity: [opacity * 0.8, opacity],
|
|
278
|
+
shapes: ['square', 'circle', 'rectangle'],
|
|
279
|
+
drawShape,
|
|
280
|
+
},
|
|
281
|
+
physics: {
|
|
282
|
+
gravity: gravity * 10, // Scale to match react-confetti
|
|
283
|
+
wind: wind * 5,
|
|
284
|
+
windVariation: velX[1] - velX[0], // Use horizontal velocity as wind variation
|
|
285
|
+
},
|
|
286
|
+
direction: {
|
|
287
|
+
velocity: velY,
|
|
288
|
+
},
|
|
289
|
+
mode: 'continuous',
|
|
290
|
+
spawnArea,
|
|
291
|
+
continuous: {
|
|
292
|
+
recycle,
|
|
293
|
+
numberOfPieces,
|
|
294
|
+
spawnRate: 30,
|
|
295
|
+
run,
|
|
296
|
+
tweenDuration,
|
|
297
|
+
},
|
|
298
|
+
canvas: {
|
|
299
|
+
width,
|
|
300
|
+
height,
|
|
301
|
+
frameRate,
|
|
302
|
+
autoResize: !width && !height,
|
|
303
|
+
},
|
|
304
|
+
onComplete: onConfettiComplete,
|
|
305
|
+
});
|
|
306
|
+
return () => {
|
|
307
|
+
if (handleRef.current) {
|
|
308
|
+
handleRef.current.stop();
|
|
309
|
+
handleRef.current = null;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
}, [
|
|
313
|
+
run,
|
|
314
|
+
width,
|
|
315
|
+
height,
|
|
316
|
+
numberOfPieces,
|
|
317
|
+
confettiSource,
|
|
318
|
+
initialVelocityX,
|
|
319
|
+
initialVelocityY,
|
|
320
|
+
recycle,
|
|
321
|
+
gravity,
|
|
322
|
+
wind,
|
|
323
|
+
opacity,
|
|
324
|
+
drawShape,
|
|
325
|
+
tweenDuration,
|
|
326
|
+
colors,
|
|
327
|
+
onConfettiComplete,
|
|
328
|
+
frameRate,
|
|
329
|
+
fire,
|
|
330
|
+
]);
|
|
331
|
+
// Handle recycle changes
|
|
332
|
+
(0, react_1.useEffect)(() => {
|
|
333
|
+
if (handleRef.current && !recycle) {
|
|
334
|
+
// Stop recycling - animation will end naturally
|
|
335
|
+
// This is handled in the engine
|
|
336
|
+
}
|
|
337
|
+
}, [recycle]);
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
Confetti.displayName = 'Confetti';
|
|
341
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confetti Engine - Core Canvas-based animation system
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main confetti animation engine that manages
|
|
5
|
+
* particle creation, physics updates, and rendering using the Canvas API.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - High-performance requestAnimationFrame loop
|
|
9
|
+
* - Automatic DPR (Device Pixel Ratio) handling
|
|
10
|
+
* - Directional burst support
|
|
11
|
+
* - Continuous/recycle mode (like react-confetti)
|
|
12
|
+
* - Firework mode with secondary explosions
|
|
13
|
+
* - Spawn area support
|
|
14
|
+
* - Memory-efficient particle pooling
|
|
15
|
+
* - Automatic cleanup
|
|
16
|
+
*/
|
|
17
|
+
import type { ConfettiBurstOptions, BurstOrigin, ExplosionHandle } from './types';
|
|
18
|
+
/**
|
|
19
|
+
* Main confetti engine class
|
|
20
|
+
*/
|
|
21
|
+
export declare class ConfettiEngine {
|
|
22
|
+
private particles;
|
|
23
|
+
private config;
|
|
24
|
+
private origin;
|
|
25
|
+
private canvasContext;
|
|
26
|
+
private animationFrameId;
|
|
27
|
+
private lastFrameTime;
|
|
28
|
+
private lastSpawnTime;
|
|
29
|
+
private isRunning;
|
|
30
|
+
private isPaused;
|
|
31
|
+
private deferred;
|
|
32
|
+
private mode;
|
|
33
|
+
private spawnArea?;
|
|
34
|
+
private continuousConfig;
|
|
35
|
+
private fireworkConfig;
|
|
36
|
+
private canvasConfig;
|
|
37
|
+
private drawShape?;
|
|
38
|
+
private frameInterval;
|
|
39
|
+
private lastRenderTime;
|
|
40
|
+
constructor(origin: BurstOrigin, options?: ConfettiBurstOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Starts the confetti animation
|
|
43
|
+
*/
|
|
44
|
+
start(): ExplosionHandle;
|
|
45
|
+
/**
|
|
46
|
+
* Creates particles for the burst
|
|
47
|
+
*/
|
|
48
|
+
private createParticles;
|
|
49
|
+
/**
|
|
50
|
+
* Spawns particles for continuous mode
|
|
51
|
+
*/
|
|
52
|
+
private spawnParticles;
|
|
53
|
+
/**
|
|
54
|
+
* Launches a firework
|
|
55
|
+
*/
|
|
56
|
+
private launchFirework;
|
|
57
|
+
/**
|
|
58
|
+
* Triggers a firework explosion at a position
|
|
59
|
+
*/
|
|
60
|
+
private explodeFirework;
|
|
61
|
+
/**
|
|
62
|
+
* Main animation loop
|
|
63
|
+
*/
|
|
64
|
+
private animate;
|
|
65
|
+
/**
|
|
66
|
+
* Stops the animation immediately
|
|
67
|
+
*/
|
|
68
|
+
stop(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Pauses the animation
|
|
71
|
+
*/
|
|
72
|
+
pause(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Resumes a paused animation
|
|
75
|
+
*/
|
|
76
|
+
resume(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Called when animation completes naturally
|
|
79
|
+
*/
|
|
80
|
+
private complete;
|
|
81
|
+
/**
|
|
82
|
+
* Cleans up resources
|
|
83
|
+
*/
|
|
84
|
+
private cleanup;
|
|
85
|
+
/**
|
|
86
|
+
* Adds more particles to the animation
|
|
87
|
+
*/
|
|
88
|
+
addParticles(count: number): void;
|
|
89
|
+
/**
|
|
90
|
+
* Clears all particles
|
|
91
|
+
*/
|
|
92
|
+
clear(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Gets current particle count
|
|
95
|
+
*/
|
|
96
|
+
getParticleCount(): number;
|
|
97
|
+
/**
|
|
98
|
+
* Gets the current state
|
|
99
|
+
*/
|
|
100
|
+
getState(): 'running' | 'paused' | 'stopped';
|
|
101
|
+
/**
|
|
102
|
+
* Creates the explosion handle for external control
|
|
103
|
+
*/
|
|
104
|
+
private createHandle;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Creates and starts a confetti explosion
|
|
108
|
+
*/
|
|
109
|
+
export declare function createConfettiExplosion(origin: BurstOrigin, options?: ConfettiBurstOptions): ExplosionHandle;
|
|
110
|
+
/**
|
|
111
|
+
* Fires confetti from an element's center
|
|
112
|
+
*/
|
|
113
|
+
export declare function fireFromElement(element: HTMLElement | null, options?: ConfettiBurstOptions): ExplosionHandle | null;
|
|
114
|
+
/**
|
|
115
|
+
* Gets the current number of active animations
|
|
116
|
+
*/
|
|
117
|
+
export declare function getActiveAnimationCount(): number;
|
|
118
|
+
/**
|
|
119
|
+
* Forces cleanup of all resources
|
|
120
|
+
*/
|
|
121
|
+
export declare function forceCleanup(): void;
|
|
122
|
+
//# sourceMappingURL=confetti-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confetti-engine.d.ts","sourceRoot":"","sources":["../../src/confetti-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,oBAAoB,EACpB,WAAW,EAGX,eAAe,EAOhB,MAAM,SAAS,CAAC;AAoKjB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAG1C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAC,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;gBAEvB,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAkB/D;;OAEG;IACH,KAAK,IAAI,eAAe;IA6CxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA+CvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0DtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA4CtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,OAAO,CAkHb;IAEF;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,OAAO;IAaf;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgCjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,QAAQ,IAAI,SAAS,GAAG,QAAQ,GAAG,SAAS;IAM5C;;OAEG;IACH,OAAO,CAAC,YAAY;CAYrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,eAAe,CAGjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,eAAe,GAAG,IAAI,CAYxB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAOnC"}
|