react-native-confetti-reanimated 0.1.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 +22 -0
- package/README.md +277 -0
- package/lib/commonjs/ConfettiCanvas.js +89 -0
- package/lib/commonjs/ConfettiCanvas.js.map +1 -0
- package/lib/commonjs/ConfettiParticle.js +116 -0
- package/lib/commonjs/ConfettiParticle.js.map +1 -0
- package/lib/commonjs/index.js +27 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/presets.js +146 -0
- package/lib/commonjs/presets.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useConfetti.js +27 -0
- package/lib/commonjs/useConfetti.js.map +1 -0
- package/lib/commonjs/utils.js +125 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/ConfettiCanvas.js +84 -0
- package/lib/module/ConfettiCanvas.js.map +1 -0
- package/lib/module/ConfettiParticle.js +110 -0
- package/lib/module/ConfettiParticle.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/presets.js +142 -0
- package/lib/module/presets.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useConfetti.js +22 -0
- package/lib/module/useConfetti.js.map +1 -0
- package/lib/module/utils.js +116 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/ConfettiCanvas.d.ts +20 -0
- package/lib/typescript/ConfettiCanvas.d.ts.map +1 -0
- package/lib/typescript/ConfettiParticle.d.ts +10 -0
- package/lib/typescript/ConfettiParticle.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +6 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/presets.d.ts +52 -0
- package/lib/typescript/presets.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +118 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/useConfetti.d.ts +11 -0
- package/lib/typescript/useConfetti.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +24 -0
- package/lib/typescript/utils.d.ts.map +1 -0
- package/package.json +78 -0
- package/src/ConfettiCanvas.tsx +121 -0
- package/src/ConfettiParticle.tsx +141 -0
- package/src/index.tsx +6 -0
- package/src/presets.ts +126 -0
- package/src/types.ts +137 -0
- package/src/useConfetti.ts +25 -0
- package/src/utils.ts +135 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.stars = exports.snow = exports.schoolPride = exports.rightCannon = exports.realistic = exports.presets = exports.leftCannon = exports.fireworks = exports.celebration = exports.bottomCannon = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Predefined confetti presets for common use cases
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Basic celebration with confetti from the center
|
|
13
|
+
*/
|
|
14
|
+
const celebration = exports.celebration = {
|
|
15
|
+
particleCount: 100,
|
|
16
|
+
spread: 70,
|
|
17
|
+
origin: {
|
|
18
|
+
y: 0.6
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Fireworks effect
|
|
24
|
+
*/
|
|
25
|
+
const fireworks = exports.fireworks = {
|
|
26
|
+
particleCount: 150,
|
|
27
|
+
spread: 360,
|
|
28
|
+
startVelocity: 30,
|
|
29
|
+
decay: 0.94,
|
|
30
|
+
scalar: 1.2
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Confetti from the bottom
|
|
35
|
+
*/
|
|
36
|
+
const bottomCannon = exports.bottomCannon = {
|
|
37
|
+
particleCount: 50,
|
|
38
|
+
angle: 60,
|
|
39
|
+
spread: 55,
|
|
40
|
+
origin: {
|
|
41
|
+
y: 0.8,
|
|
42
|
+
x: 0.5
|
|
43
|
+
},
|
|
44
|
+
startVelocity: 55
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Confetti from left side
|
|
49
|
+
*/
|
|
50
|
+
const leftCannon = exports.leftCannon = {
|
|
51
|
+
particleCount: 50,
|
|
52
|
+
angle: 45,
|
|
53
|
+
spread: 55,
|
|
54
|
+
origin: {
|
|
55
|
+
x: 0,
|
|
56
|
+
y: 0.6
|
|
57
|
+
},
|
|
58
|
+
startVelocity: 55
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Confetti from right side
|
|
63
|
+
*/
|
|
64
|
+
const rightCannon = exports.rightCannon = {
|
|
65
|
+
particleCount: 50,
|
|
66
|
+
angle: 135,
|
|
67
|
+
spread: 55,
|
|
68
|
+
origin: {
|
|
69
|
+
x: 1,
|
|
70
|
+
y: 0.6
|
|
71
|
+
},
|
|
72
|
+
startVelocity: 55
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Realistic looking confetti
|
|
77
|
+
*/
|
|
78
|
+
const realistic = exports.realistic = {
|
|
79
|
+
particleCount: 200,
|
|
80
|
+
spread: 160,
|
|
81
|
+
origin: {
|
|
82
|
+
y: 0.5
|
|
83
|
+
},
|
|
84
|
+
startVelocity: 35,
|
|
85
|
+
gravity: 1.5,
|
|
86
|
+
drift: 1,
|
|
87
|
+
tilt: true,
|
|
88
|
+
shapes: ['square', 'circle', 'triangle'],
|
|
89
|
+
scalar: 0.8
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Snow effect
|
|
94
|
+
*/
|
|
95
|
+
const snow = exports.snow = {
|
|
96
|
+
particleCount: 100,
|
|
97
|
+
spread: 180,
|
|
98
|
+
origin: {
|
|
99
|
+
y: -0.1
|
|
100
|
+
},
|
|
101
|
+
startVelocity: 0,
|
|
102
|
+
gravity: 0.3,
|
|
103
|
+
drift: 1,
|
|
104
|
+
colors: ['#ffffff', '#e8f4ff', '#c9e5ff'],
|
|
105
|
+
shapes: ['circle'],
|
|
106
|
+
scalar: 0.6,
|
|
107
|
+
angle: 270
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Stars effect
|
|
112
|
+
*/
|
|
113
|
+
const stars = exports.stars = {
|
|
114
|
+
particleCount: 50,
|
|
115
|
+
spread: 360,
|
|
116
|
+
startVelocity: 20,
|
|
117
|
+
decay: 0.95,
|
|
118
|
+
gravity: 0.5,
|
|
119
|
+
colors: ['#FFD700', '#FFA500', '#FFFF00'],
|
|
120
|
+
shapes: ['circle'],
|
|
121
|
+
scalar: 0.5
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* School pride (custom colors)
|
|
126
|
+
*/
|
|
127
|
+
const schoolPride = exports.schoolPride = {
|
|
128
|
+
particleCount: 100,
|
|
129
|
+
spread: 160,
|
|
130
|
+
origin: {
|
|
131
|
+
y: 0.6
|
|
132
|
+
},
|
|
133
|
+
colors: ['#bb0000', '#ffffff']
|
|
134
|
+
};
|
|
135
|
+
const presets = exports.presets = {
|
|
136
|
+
celebration,
|
|
137
|
+
fireworks,
|
|
138
|
+
bottomCannon,
|
|
139
|
+
leftCannon,
|
|
140
|
+
rightCannon,
|
|
141
|
+
realistic,
|
|
142
|
+
snow,
|
|
143
|
+
stars,
|
|
144
|
+
schoolPride
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["celebration","exports","particleCount","spread","origin","y","fireworks","startVelocity","decay","scalar","bottomCannon","angle","x","leftCannon","rightCannon","realistic","gravity","drift","tilt","shapes","snow","colors","stars","schoolPride","presets"],"sourceRoot":"../../src","sources":["presets.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useConfetti = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
/**
|
|
9
|
+
* Hook to use confetti imperatively
|
|
10
|
+
* Returns a ref to pass to ConfettiCanvas and a fire function
|
|
11
|
+
*/
|
|
12
|
+
const useConfetti = () => {
|
|
13
|
+
const confettiRef = (0, _react.useRef)(null);
|
|
14
|
+
const fire = (0, _react.useCallback)(config => {
|
|
15
|
+
return confettiRef.current?.(config);
|
|
16
|
+
}, []);
|
|
17
|
+
const reset = (0, _react.useCallback)(() => {
|
|
18
|
+
confettiRef.current?.reset();
|
|
19
|
+
}, []);
|
|
20
|
+
return {
|
|
21
|
+
confettiRef,
|
|
22
|
+
fire,
|
|
23
|
+
reset
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.useConfetti = useConfetti;
|
|
27
|
+
//# sourceMappingURL=useConfetti.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","useConfetti","confettiRef","useRef","fire","useCallback","config","current","reset","exports"],"sourceRoot":"../../src","sources":["useConfetti.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC/B,MAAMC,WAAW,GAAG,IAAAC,aAAM,EAAkB,IAAI,CAAC;EAEjD,MAAMC,IAAI,GAAG,IAAAC,kBAAW,EAAEC,MAAuB,IAAK;IACpD,OAAOJ,WAAW,CAACK,OAAO,GAAGD,MAAM,CAAC;EACtC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,KAAK,GAAG,IAAAH,kBAAW,EAAC,MAAM;IAC9BH,WAAW,CAACK,OAAO,EAAEC,KAAK,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLN,WAAW;IACXE,IAAI;IACJI;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAR,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.updateParticle = exports.randomRange = exports.randomFromArray = exports.degreesToRadians = exports.createConfettiParticles = exports.DEFAULT_CONFIG = exports.DEFAULT_COLORS = void 0;
|
|
7
|
+
const DEFAULT_COLORS = exports.DEFAULT_COLORS = ['#26ccff', '#a25afd', '#ff5e7e', '#88ff5a', '#fcff42', '#ffa62d', '#ff36ff'];
|
|
8
|
+
const DEFAULT_CONFIG = exports.DEFAULT_CONFIG = {
|
|
9
|
+
particleCount: 50,
|
|
10
|
+
angle: 90,
|
|
11
|
+
spread: 45,
|
|
12
|
+
startVelocity: 45,
|
|
13
|
+
decay: 0.9,
|
|
14
|
+
gravity: 1,
|
|
15
|
+
drift: 0,
|
|
16
|
+
duration: 3000,
|
|
17
|
+
colors: DEFAULT_COLORS,
|
|
18
|
+
scalar: 1,
|
|
19
|
+
origin: {
|
|
20
|
+
x: 0.5,
|
|
21
|
+
y: 0.5
|
|
22
|
+
},
|
|
23
|
+
shapes: ['square', 'circle'],
|
|
24
|
+
tilt: true,
|
|
25
|
+
tiltAngleIncrement: 10,
|
|
26
|
+
tickDuration: 200,
|
|
27
|
+
disableForReducedMotion: false,
|
|
28
|
+
usePerformanceMode: false
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Convert degrees to radians
|
|
33
|
+
*/
|
|
34
|
+
const degreesToRadians = degrees => {
|
|
35
|
+
return degrees * Math.PI / 180;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Generate a random number between min and max
|
|
40
|
+
*/
|
|
41
|
+
exports.degreesToRadians = degreesToRadians;
|
|
42
|
+
const randomRange = (min, max) => {
|
|
43
|
+
return Math.random() * (max - min) + min;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Pick a random item from an array
|
|
48
|
+
*/
|
|
49
|
+
exports.randomRange = randomRange;
|
|
50
|
+
const randomFromArray = arr => {
|
|
51
|
+
const item = arr[Math.floor(Math.random() * arr.length)];
|
|
52
|
+
if (item === undefined) {
|
|
53
|
+
throw new Error('Array is empty');
|
|
54
|
+
}
|
|
55
|
+
return item;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create initial confetti particles
|
|
60
|
+
*/
|
|
61
|
+
exports.randomFromArray = randomFromArray;
|
|
62
|
+
const createConfettiParticles = (config, screenWidth, screenHeight) => {
|
|
63
|
+
const particles = [];
|
|
64
|
+
const angleInRadians = degreesToRadians(config.angle);
|
|
65
|
+
const spreadInRadians = degreesToRadians(config.spread);
|
|
66
|
+
for (let i = 0; i < config.particleCount; i++) {
|
|
67
|
+
const angle = angleInRadians + randomRange(-spreadInRadians / 2, spreadInRadians / 2);
|
|
68
|
+
const velocity = config.startVelocity * (0.5 + Math.random() * 0.5);
|
|
69
|
+
const particle = {
|
|
70
|
+
id: `confetti-${i}-${Date.now()}`,
|
|
71
|
+
color: randomFromArray(config.colors),
|
|
72
|
+
shape: randomFromArray(config.shapes),
|
|
73
|
+
x: (config.origin.x ?? 0.5) * screenWidth,
|
|
74
|
+
y: (config.origin.y ?? 0.5) * screenHeight,
|
|
75
|
+
size: (5 + Math.random() * 5) * config.scalar,
|
|
76
|
+
velocity: {
|
|
77
|
+
x: Math.cos(angle) * velocity,
|
|
78
|
+
y: Math.sin(angle) * velocity
|
|
79
|
+
},
|
|
80
|
+
rotation: Math.random() * 360,
|
|
81
|
+
rotationVelocity: randomRange(-10, 10),
|
|
82
|
+
tiltAngle: config.tilt ? Math.random() * config.tiltAngleIncrement : 0,
|
|
83
|
+
opacity: 1
|
|
84
|
+
};
|
|
85
|
+
particles.push(particle);
|
|
86
|
+
}
|
|
87
|
+
return particles;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Update a confetti particle's position
|
|
92
|
+
*/
|
|
93
|
+
exports.createConfettiParticles = createConfettiParticles;
|
|
94
|
+
const updateParticle = (particle, config, deltaTime) => {
|
|
95
|
+
const dt = deltaTime / 16; // Normalize to 60fps
|
|
96
|
+
|
|
97
|
+
// Apply gravity
|
|
98
|
+
const newVelocityY = particle.velocity.y - config.gravity * dt;
|
|
99
|
+
|
|
100
|
+
// Apply drift
|
|
101
|
+
const newVelocityX = particle.velocity.x + config.drift * dt;
|
|
102
|
+
|
|
103
|
+
// Update position
|
|
104
|
+
const newX = particle.x + newVelocityX * dt;
|
|
105
|
+
const newY = particle.y - newVelocityY * dt;
|
|
106
|
+
|
|
107
|
+
// Update rotation
|
|
108
|
+
const newRotation = particle.rotation + particle.rotationVelocity * dt;
|
|
109
|
+
|
|
110
|
+
// Apply decay to opacity
|
|
111
|
+
const newOpacity = particle.opacity * Math.pow(config.decay, dt);
|
|
112
|
+
return {
|
|
113
|
+
...particle,
|
|
114
|
+
x: newX,
|
|
115
|
+
y: newY,
|
|
116
|
+
velocity: {
|
|
117
|
+
x: newVelocityX,
|
|
118
|
+
y: newVelocityY
|
|
119
|
+
},
|
|
120
|
+
rotation: newRotation,
|
|
121
|
+
opacity: newOpacity
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
exports.updateParticle = updateParticle;
|
|
125
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_COLORS","exports","DEFAULT_CONFIG","particleCount","angle","spread","startVelocity","decay","gravity","drift","duration","colors","scalar","origin","x","y","shapes","tilt","tiltAngleIncrement","tickDuration","disableForReducedMotion","usePerformanceMode","degreesToRadians","degrees","Math","PI","randomRange","min","max","random","randomFromArray","arr","item","floor","length","undefined","Error","createConfettiParticles","config","screenWidth","screenHeight","particles","angleInRadians","spreadInRadians","i","velocity","particle","id","Date","now","color","shape","size","cos","sin","rotation","rotationVelocity","tiltAngle","opacity","push","updateParticle","deltaTime","dt","newVelocityY","newVelocityX","newX","newY","newRotation","newOpacity","pow"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useCallback, useImperativeHandle, useState } from 'react';
|
|
4
|
+
import { StyleSheet, View, useWindowDimensions } from 'react-native';
|
|
5
|
+
import { createConfettiParticles, DEFAULT_CONFIG } from './utils';
|
|
6
|
+
import { ConfettiParticle } from './ConfettiParticle';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export const ConfettiCanvas = /*#__PURE__*/React.forwardRef(({
|
|
9
|
+
containerStyle,
|
|
10
|
+
zIndex = 1000,
|
|
11
|
+
fullScreen = true
|
|
12
|
+
}, ref) => {
|
|
13
|
+
const [particles, setParticles] = useState([]);
|
|
14
|
+
const [activeCount, setActiveCount] = useState(0);
|
|
15
|
+
const {
|
|
16
|
+
width,
|
|
17
|
+
height
|
|
18
|
+
} = useWindowDimensions();
|
|
19
|
+
const fire = useCallback((config = {}) => {
|
|
20
|
+
return new Promise(resolve => {
|
|
21
|
+
const mergedConfig = {
|
|
22
|
+
...DEFAULT_CONFIG,
|
|
23
|
+
...config,
|
|
24
|
+
origin: {
|
|
25
|
+
...DEFAULT_CONFIG.origin,
|
|
26
|
+
...config.origin
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const newParticles = createConfettiParticles(mergedConfig, width, height);
|
|
30
|
+
setParticles(prev => [...prev, ...newParticles]);
|
|
31
|
+
setActiveCount(prev => prev + newParticles.length);
|
|
32
|
+
|
|
33
|
+
// Resolve after the duration
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
resolve(null);
|
|
36
|
+
}, mergedConfig.duration);
|
|
37
|
+
});
|
|
38
|
+
}, [width, height]);
|
|
39
|
+
const reset = useCallback(() => {
|
|
40
|
+
setParticles([]);
|
|
41
|
+
setActiveCount(0);
|
|
42
|
+
}, []);
|
|
43
|
+
useImperativeHandle(ref, () => {
|
|
44
|
+
const confetti = fire;
|
|
45
|
+
confetti.reset = reset;
|
|
46
|
+
return confetti;
|
|
47
|
+
}, [fire, reset]);
|
|
48
|
+
const handleParticleComplete = useCallback(particleId => {
|
|
49
|
+
setActiveCount(prev => prev - 1);
|
|
50
|
+
setParticles(prev => {
|
|
51
|
+
// Clean up completed particles periodically
|
|
52
|
+
if (prev.length > 100) {
|
|
53
|
+
return prev.filter(p => p.id !== particleId).slice(-50);
|
|
54
|
+
}
|
|
55
|
+
return prev;
|
|
56
|
+
});
|
|
57
|
+
}, []);
|
|
58
|
+
return /*#__PURE__*/_jsx(View, {
|
|
59
|
+
style: [styles.container, fullScreen && styles.fullScreen, {
|
|
60
|
+
zIndex
|
|
61
|
+
}, containerStyle],
|
|
62
|
+
pointerEvents: "none",
|
|
63
|
+
children: particles.map(particle => /*#__PURE__*/_jsx(ConfettiParticle, {
|
|
64
|
+
particle: particle,
|
|
65
|
+
duration: DEFAULT_CONFIG.duration,
|
|
66
|
+
onComplete: () => handleParticleComplete(particle.id)
|
|
67
|
+
}, particle.id))
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
ConfettiCanvas.displayName = 'ConfettiCanvas';
|
|
71
|
+
const styles = StyleSheet.create({
|
|
72
|
+
container: {
|
|
73
|
+
position: 'absolute',
|
|
74
|
+
width: '100%',
|
|
75
|
+
height: '100%'
|
|
76
|
+
},
|
|
77
|
+
fullScreen: {
|
|
78
|
+
top: 0,
|
|
79
|
+
left: 0,
|
|
80
|
+
right: 0,
|
|
81
|
+
bottom: 0
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=ConfettiCanvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useImperativeHandle","useState","StyleSheet","View","useWindowDimensions","createConfettiParticles","DEFAULT_CONFIG","ConfettiParticle","jsx","_jsx","ConfettiCanvas","forwardRef","containerStyle","zIndex","fullScreen","ref","particles","setParticles","activeCount","setActiveCount","width","height","fire","config","Promise","resolve","mergedConfig","origin","newParticles","prev","length","setTimeout","duration","reset","confetti","handleParticleComplete","particleId","filter","p","id","slice","style","styles","container","pointerEvents","children","map","particle","onComplete","displayName","create","position","top","left","right","bottom"],"sourceRoot":"../../src","sources":["ConfettiCanvas.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import Animated, { useAnimatedStyle, useSharedValue, withTiming, Easing, runOnJS } from 'react-native-reanimated';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const ConfettiParticle = ({
|
|
8
|
+
particle,
|
|
9
|
+
duration,
|
|
10
|
+
onComplete
|
|
11
|
+
}) => {
|
|
12
|
+
const translateX = useSharedValue(0);
|
|
13
|
+
const translateY = useSharedValue(0);
|
|
14
|
+
const rotation = useSharedValue(particle.rotation);
|
|
15
|
+
const opacity = useSharedValue(1);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
// Animate the particle
|
|
18
|
+
translateX.value = withTiming(particle.velocity.x * (duration / 16), {
|
|
19
|
+
duration,
|
|
20
|
+
easing: Easing.linear
|
|
21
|
+
});
|
|
22
|
+
translateY.value = withTiming(particle.velocity.y * (duration / 16), {
|
|
23
|
+
duration,
|
|
24
|
+
easing: Easing.bezier(0.33, 1, 0.68, 1) // Custom easing for gravity effect
|
|
25
|
+
});
|
|
26
|
+
rotation.value = withTiming(particle.rotation + particle.rotationVelocity * (duration / 16), {
|
|
27
|
+
duration,
|
|
28
|
+
easing: Easing.linear
|
|
29
|
+
});
|
|
30
|
+
opacity.value = withTiming(0, {
|
|
31
|
+
duration,
|
|
32
|
+
easing: Easing.linear
|
|
33
|
+
}, finished => {
|
|
34
|
+
if (finished && onComplete) {
|
|
35
|
+
runOnJS(onComplete)();
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}, [duration, onComplete, opacity, particle, rotation, translateX, translateY]);
|
|
39
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
40
|
+
return {
|
|
41
|
+
transform: [{
|
|
42
|
+
translateX: translateX.value
|
|
43
|
+
}, {
|
|
44
|
+
translateY: translateY.value
|
|
45
|
+
}, {
|
|
46
|
+
rotate: `${rotation.value}deg`
|
|
47
|
+
}],
|
|
48
|
+
opacity: opacity.value
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
const renderShape = () => {
|
|
52
|
+
const baseStyle = [styles.particle, {
|
|
53
|
+
width: particle.size,
|
|
54
|
+
height: particle.size,
|
|
55
|
+
backgroundColor: particle.color
|
|
56
|
+
}];
|
|
57
|
+
if (particle.shape === 'circle') {
|
|
58
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
59
|
+
style: [...baseStyle, styles.circle, animatedStyle]
|
|
60
|
+
});
|
|
61
|
+
} else if (particle.shape === 'triangle') {
|
|
62
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
63
|
+
style: [...baseStyle, styles.transparent, animatedStyle],
|
|
64
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
65
|
+
style: [styles.triangle, {
|
|
66
|
+
borderLeftWidth: particle.size / 2,
|
|
67
|
+
borderRightWidth: particle.size / 2,
|
|
68
|
+
borderBottomWidth: particle.size,
|
|
69
|
+
borderBottomColor: particle.color
|
|
70
|
+
}]
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Square (default)
|
|
76
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
77
|
+
style: [...baseStyle, animatedStyle]
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
81
|
+
style: [styles.container, {
|
|
82
|
+
left: particle.x,
|
|
83
|
+
top: particle.y
|
|
84
|
+
}],
|
|
85
|
+
children: renderShape()
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
const styles = StyleSheet.create({
|
|
89
|
+
container: {
|
|
90
|
+
position: 'absolute'
|
|
91
|
+
},
|
|
92
|
+
particle: {
|
|
93
|
+
position: 'absolute'
|
|
94
|
+
},
|
|
95
|
+
circle: {
|
|
96
|
+
borderRadius: 999
|
|
97
|
+
},
|
|
98
|
+
transparent: {
|
|
99
|
+
backgroundColor: 'transparent'
|
|
100
|
+
},
|
|
101
|
+
triangle: {
|
|
102
|
+
width: 0,
|
|
103
|
+
height: 0,
|
|
104
|
+
backgroundColor: 'transparent',
|
|
105
|
+
borderStyle: 'solid',
|
|
106
|
+
borderLeftColor: 'transparent',
|
|
107
|
+
borderRightColor: 'transparent'
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=ConfettiParticle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","StyleSheet","Animated","useAnimatedStyle","useSharedValue","withTiming","Easing","runOnJS","jsx","_jsx","ConfettiParticle","particle","duration","onComplete","translateX","translateY","rotation","opacity","value","velocity","x","easing","linear","y","bezier","rotationVelocity","finished","animatedStyle","transform","rotate","renderShape","baseStyle","styles","width","size","height","backgroundColor","color","shape","View","style","circle","transparent","children","triangle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderBottomColor","container","left","top","create","position","borderRadius","borderStyle","borderLeftColor","borderRightColor"],"sourceRoot":"../../src","sources":["ConfettiParticle.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IACbC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,EACVC,MAAM,EACNC,OAAO,QACF,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASjC,OAAO,MAAMC,gBAAiC,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,QAAQ;EAAEC;AAAW,CAAC,KAAK;EACvF,MAAMC,UAAU,GAAGV,cAAc,CAAC,CAAC,CAAC;EACpC,MAAMW,UAAU,GAAGX,cAAc,CAAC,CAAC,CAAC;EACpC,MAAMY,QAAQ,GAAGZ,cAAc,CAACO,QAAQ,CAACK,QAAQ,CAAC;EAClD,MAAMC,OAAO,GAAGb,cAAc,CAAC,CAAC,CAAC;EAEjCJ,SAAS,CAAC,MAAM;IACd;IACAc,UAAU,CAACI,KAAK,GAAGb,UAAU,CAACM,QAAQ,CAACQ,QAAQ,CAACC,CAAC,IAAIR,QAAQ,GAAG,EAAE,CAAC,EAAE;MACnEA,QAAQ;MACRS,MAAM,EAAEf,MAAM,CAACgB;IACjB,CAAC,CAAC;IAEFP,UAAU,CAACG,KAAK,GAAGb,UAAU,CAACM,QAAQ,CAACQ,QAAQ,CAACI,CAAC,IAAIX,QAAQ,GAAG,EAAE,CAAC,EAAE;MACnEA,QAAQ;MACRS,MAAM,EAAEf,MAAM,CAACkB,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE;IAC3C,CAAC,CAAC;IAEFR,QAAQ,CAACE,KAAK,GAAGb,UAAU,CACzBM,QAAQ,CAACK,QAAQ,GAAGL,QAAQ,CAACc,gBAAgB,IAAIb,QAAQ,GAAG,EAAE,CAAC,EAC/D;MACEA,QAAQ;MACRS,MAAM,EAAEf,MAAM,CAACgB;IACjB,CACF,CAAC;IAEDL,OAAO,CAACC,KAAK,GAAGb,UAAU,CACxB,CAAC,EACD;MACEO,QAAQ;MACRS,MAAM,EAAEf,MAAM,CAACgB;IACjB,CAAC,EACDI,QAAQ,IAAI;MACV,IAAIA,QAAQ,IAAIb,UAAU,EAAE;QAC1BN,OAAO,CAACM,UAAU,CAAC,CAAC,CAAC;MACvB;IACF,CACF,CAAC;EACH,CAAC,EAAE,CAACD,QAAQ,EAAEC,UAAU,EAAEI,OAAO,EAAEN,QAAQ,EAAEK,QAAQ,EAAEF,UAAU,EAAEC,UAAU,CAAC,CAAC;EAE/E,MAAMY,aAAa,GAAGxB,gBAAgB,CAAC,MAAM;IAC3C,OAAO;MACLyB,SAAS,EAAE,CACT;QAAEd,UAAU,EAAEA,UAAU,CAACI;MAAM,CAAC,EAChC;QAAEH,UAAU,EAAEA,UAAU,CAACG;MAAM,CAAC,EAChC;QAAEW,MAAM,EAAE,GAAGb,QAAQ,CAACE,KAAK;MAAM,CAAC,CACnC;MACDD,OAAO,EAAEA,OAAO,CAACC;IACnB,CAAC;EACH,CAAC,CAAC;EAEF,MAAMY,WAAW,GAAGA,CAAA,KAAM;IACxB,MAAMC,SAAS,GAAG,CAChBC,MAAM,CAACrB,QAAQ,EACf;MACEsB,KAAK,EAAEtB,QAAQ,CAACuB,IAAI;MACpBC,MAAM,EAAExB,QAAQ,CAACuB,IAAI;MACrBE,eAAe,EAAEzB,QAAQ,CAAC0B;IAC5B,CAAC,CACF;IAED,IAAI1B,QAAQ,CAAC2B,KAAK,KAAK,QAAQ,EAAE;MAC/B,oBACE7B,IAAA,CAACP,QAAQ,CAACqC,IAAI;QAACC,KAAK,EAAE,CAAC,GAAGT,SAAS,EAAEC,MAAM,CAACS,MAAM,EAAEd,aAAa;MAAE,CAAE,CAAC;IAE1E,CAAC,MAAM,IAAIhB,QAAQ,CAAC2B,KAAK,KAAK,UAAU,EAAE;MACxC,oBACE7B,IAAA,CAACP,QAAQ,CAACqC,IAAI;QAACC,KAAK,EAAE,CAAC,GAAGT,SAAS,EAAEC,MAAM,CAACU,WAAW,EAAEf,aAAa,CAAE;QAAAgB,QAAA,eACtElC,IAAA,CAACP,QAAQ,CAACqC,IAAI;UACZC,KAAK,EAAE,CACLR,MAAM,CAACY,QAAQ,EACf;YACEC,eAAe,EAAElC,QAAQ,CAACuB,IAAI,GAAG,CAAC;YAClCY,gBAAgB,EAAEnC,QAAQ,CAACuB,IAAI,GAAG,CAAC;YACnCa,iBAAiB,EAAEpC,QAAQ,CAACuB,IAAI;YAChCc,iBAAiB,EAAErC,QAAQ,CAAC0B;UAC9B,CAAC;QACD,CACH;MAAC,CACW,CAAC;IAEpB;;IAEA;IACA,oBAAO5B,IAAA,CAACP,QAAQ,CAACqC,IAAI;MAACC,KAAK,EAAE,CAAC,GAAGT,SAAS,EAAEJ,aAAa;IAAE,CAAE,CAAC;EAChE,CAAC;EAED,oBACElB,IAAA,CAACP,QAAQ,CAACqC,IAAI;IACZC,KAAK,EAAE,CACLR,MAAM,CAACiB,SAAS,EAChB;MACEC,IAAI,EAAEvC,QAAQ,CAACS,CAAC;MAChB+B,GAAG,EAAExC,QAAQ,CAACY;IAChB,CAAC,CACD;IAAAoB,QAAA,EACDb,WAAW,CAAC;EAAC,CACD,CAAC;AAEpB,CAAC;AAED,MAAME,MAAM,GAAG/B,UAAU,CAACmD,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACTI,QAAQ,EAAE;EACZ,CAAC;EACD1C,QAAQ,EAAE;IACR0C,QAAQ,EAAE;EACZ,CAAC;EACDZ,MAAM,EAAE;IACNa,YAAY,EAAE;EAChB,CAAC;EACDZ,WAAW,EAAE;IACXN,eAAe,EAAE;EACnB,CAAC;EACDQ,QAAQ,EAAE;IACRX,KAAK,EAAE,CAAC;IACRE,MAAM,EAAE,CAAC;IACTC,eAAe,EAAE,aAAa;IAC9BmB,WAAW,EAAE,OAAO;IACpBC,eAAe,EAAE,aAAa;IAC9BC,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ConfettiCanvas","useConfetti","presets"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,kBAAkB;AACjD,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,OAAO,QAAQ,WAAW","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|