react-native-confetti-reanimated 0.1.0 → 0.1.2
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/README.md +38 -38
- package/lib/commonjs/ConfettiCanvas.js +8 -7
- package/lib/commonjs/ConfettiCanvas.js.map +1 -1
- package/lib/commonjs/ConfettiParticle.js +134 -53
- package/lib/commonjs/ConfettiParticle.js.map +1 -1
- package/lib/commonjs/presets.js +65 -79
- package/lib/commonjs/presets.js.map +1 -1
- package/lib/commonjs/utils.js +65 -10
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/ConfettiCanvas.js +8 -7
- package/lib/module/ConfettiCanvas.js.map +1 -1
- package/lib/module/ConfettiParticle.js +135 -54
- package/lib/module/ConfettiParticle.js.map +1 -1
- package/lib/module/presets.js +64 -78
- package/lib/module/presets.js.map +1 -1
- package/lib/module/utils.js +65 -10
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/ConfettiCanvas.d.ts.map +1 -1
- package/lib/typescript/ConfettiParticle.d.ts +2 -1
- package/lib/typescript/ConfettiParticle.d.ts.map +1 -1
- package/lib/typescript/presets.d.ts +22 -26
- package/lib/typescript/presets.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +4 -3
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +10 -14
- package/src/ConfettiCanvas.tsx +19 -14
- package/src/ConfettiParticle.tsx +153 -75
- package/src/presets.ts +56 -70
- package/src/types.ts +4 -3
- package/src/utils.ts +44 -20
- package/lib/module/package.json +0 -1
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useEffect } from 'react';
|
|
4
4
|
import { StyleSheet } from 'react-native';
|
|
5
|
-
import Animated, { useAnimatedStyle, useSharedValue,
|
|
5
|
+
import Animated, { useAnimatedStyle, useSharedValue, useFrameCallback, cancelAnimation } from 'react-native-reanimated';
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
export const ConfettiParticle = ({
|
|
8
8
|
particle,
|
|
9
|
+
config,
|
|
9
10
|
duration,
|
|
10
11
|
onComplete
|
|
11
12
|
}) => {
|
|
@@ -13,68 +14,159 @@ export const ConfettiParticle = ({
|
|
|
13
14
|
const translateY = useSharedValue(0);
|
|
14
15
|
const rotation = useSharedValue(particle.rotation);
|
|
15
16
|
const opacity = useSharedValue(1);
|
|
17
|
+
|
|
18
|
+
// Velocity state
|
|
19
|
+
const velX = useSharedValue(particle.velocity.x);
|
|
20
|
+
const velY = useSharedValue(particle.velocity.y);
|
|
21
|
+
const startTime = useSharedValue(Date.now());
|
|
22
|
+
const isComplete = useSharedValue(false);
|
|
23
|
+
|
|
24
|
+
// Canvas-confetti realistic wobble and tilt variables
|
|
25
|
+
const wobble = useSharedValue(Math.random() * 10);
|
|
26
|
+
const wobbleSpeed = useSharedValue(Math.min(0.11, Math.random() * 0.1 + 0.05));
|
|
27
|
+
const tiltAngle = useSharedValue(particle.tiltAngle);
|
|
28
|
+
const tiltSin = useSharedValue(0);
|
|
29
|
+
const tiltCos = useSharedValue(0);
|
|
30
|
+
const random = useSharedValue(Math.random() + 2);
|
|
31
|
+
const tick = useSharedValue(0);
|
|
32
|
+
const totalTicks = useSharedValue(duration / 1000 * 60); // 60fps
|
|
33
|
+
|
|
16
34
|
useEffect(() => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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)();
|
|
35
|
+
startTime.value = Date.now();
|
|
36
|
+
tick.value = 0;
|
|
37
|
+
|
|
38
|
+
// Cleanup callback
|
|
39
|
+
const timer = setTimeout(() => {
|
|
40
|
+
isComplete.value = true;
|
|
41
|
+
if (onComplete) {
|
|
42
|
+
onComplete();
|
|
36
43
|
}
|
|
37
|
-
});
|
|
38
|
-
|
|
44
|
+
}, duration);
|
|
45
|
+
return () => {
|
|
46
|
+
clearTimeout(timer);
|
|
47
|
+
cancelAnimation(translateX);
|
|
48
|
+
cancelAnimation(translateY);
|
|
49
|
+
cancelAnimation(rotation);
|
|
50
|
+
cancelAnimation(opacity);
|
|
51
|
+
};
|
|
52
|
+
}, [duration, onComplete, opacity, isComplete, startTime, translateX, translateY, rotation, tick]);
|
|
53
|
+
|
|
54
|
+
// Real-time physics simulation using frame callback
|
|
55
|
+
useFrameCallback(() => {
|
|
56
|
+
'worklet';
|
|
57
|
+
|
|
58
|
+
if (isComplete.value) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const elapsed = Date.now() - startTime.value;
|
|
62
|
+
if (elapsed >= duration) {
|
|
63
|
+
isComplete.value = true;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Update position based on current velocity
|
|
68
|
+
translateX.value += velX.value;
|
|
69
|
+
translateY.value += velY.value;
|
|
70
|
+
|
|
71
|
+
// Apply gravity (increases downward velocity) - realistic physics!
|
|
72
|
+
velY.value += config.gravity;
|
|
73
|
+
|
|
74
|
+
// Apply drift (horizontal wind)
|
|
75
|
+
velX.value += config.drift;
|
|
76
|
+
|
|
77
|
+
// Apply decay (air resistance)
|
|
78
|
+
velX.value *= config.decay;
|
|
79
|
+
velY.value *= config.decay;
|
|
80
|
+
|
|
81
|
+
// Update rotation - ALL particles spin faster when moving fast, slower when slowing down
|
|
82
|
+
const speed = Math.sqrt(velX.value * velX.value + velY.value * velY.value);
|
|
83
|
+
const speedBoost = 1 + speed / 20;
|
|
84
|
+
rotation.value += particle.rotationVelocity * speedBoost;
|
|
85
|
+
|
|
86
|
+
// Canvas-confetti wobble effect (creates side-to-side flutter)
|
|
87
|
+
wobble.value += wobbleSpeed.value;
|
|
88
|
+
|
|
89
|
+
// Canvas-confetti tilt animation (creates 3D tumbling effect)
|
|
90
|
+
tiltAngle.value += 0.1;
|
|
91
|
+
tiltSin.value = Math.sin(tiltAngle.value);
|
|
92
|
+
tiltCos.value = Math.cos(tiltAngle.value);
|
|
93
|
+
random.value = Math.random() + 2;
|
|
94
|
+
|
|
95
|
+
// Update tick for progressive opacity fade
|
|
96
|
+
tick.value += 1;
|
|
97
|
+
|
|
98
|
+
// Canvas-confetti progressive fade: opacity decreases linearly over lifetime
|
|
99
|
+
const progress = tick.value / totalTicks.value;
|
|
100
|
+
opacity.value = 1 - progress;
|
|
101
|
+
});
|
|
39
102
|
const animatedStyle = useAnimatedStyle(() => {
|
|
103
|
+
// Canvas-confetti wobble calculation (circular motion)
|
|
104
|
+
const wobbleX = 10 * config.scalar * Math.cos(wobble.value);
|
|
105
|
+
const wobbleY = 10 * config.scalar * Math.sin(wobble.value);
|
|
106
|
+
|
|
107
|
+
// Canvas-confetti 3D-like positioning with tilt
|
|
108
|
+
const x1 = translateX.value + random.value * tiltCos.value;
|
|
109
|
+
const y1 = translateY.value + random.value * tiltSin.value;
|
|
110
|
+
const x2 = translateX.value + wobbleX + random.value * tiltCos.value;
|
|
111
|
+
const y2 = translateY.value + wobbleY + random.value * tiltSin.value;
|
|
112
|
+
|
|
113
|
+
// Dynamic scaling based on wobble (creates 3D depth perception)
|
|
114
|
+
const scaleX = Math.abs(x2 - x1) * 0.1;
|
|
115
|
+
const scaleY = Math.abs(y2 - y1) * 0.1;
|
|
40
116
|
return {
|
|
41
117
|
transform: [{
|
|
42
|
-
translateX:
|
|
118
|
+
translateX: x2
|
|
43
119
|
}, {
|
|
44
|
-
translateY:
|
|
120
|
+
translateY: y2
|
|
45
121
|
}, {
|
|
46
122
|
rotate: `${rotation.value}deg`
|
|
123
|
+
}, {
|
|
124
|
+
scaleX: Math.max(0.3, scaleX)
|
|
125
|
+
},
|
|
126
|
+
// Prevent too small
|
|
127
|
+
{
|
|
128
|
+
scaleY: Math.max(0.3, scaleY)
|
|
47
129
|
}],
|
|
48
130
|
opacity: opacity.value
|
|
49
131
|
};
|
|
50
132
|
});
|
|
51
133
|
const renderShape = () => {
|
|
52
|
-
const baseStyle = [styles.particle, {
|
|
53
|
-
width: particle.size,
|
|
54
|
-
height: particle.size,
|
|
55
|
-
backgroundColor: particle.color
|
|
56
|
-
}];
|
|
57
134
|
if (particle.shape === 'circle') {
|
|
135
|
+
// Circles for snow - perfectly round
|
|
136
|
+
const size = particle.width;
|
|
58
137
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
59
|
-
style: [
|
|
138
|
+
style: [styles.particle, styles.circle, {
|
|
139
|
+
width: size,
|
|
140
|
+
height: size,
|
|
141
|
+
backgroundColor: particle.color
|
|
142
|
+
}, animatedStyle]
|
|
60
143
|
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
144
|
+
}
|
|
145
|
+
if (particle.shape === 'star') {
|
|
146
|
+
// Stars using Unicode character
|
|
147
|
+
const fontSize = particle.width * 1.5;
|
|
148
|
+
return /*#__PURE__*/_jsx(Animated.Text, {
|
|
149
|
+
style: [styles.particle, {
|
|
150
|
+
fontSize,
|
|
151
|
+
color: particle.color,
|
|
152
|
+
textShadowColor: particle.color,
|
|
153
|
+
textShadowOffset: {
|
|
154
|
+
width: 0,
|
|
155
|
+
height: 0
|
|
156
|
+
},
|
|
157
|
+
textShadowRadius: 3
|
|
158
|
+
}, animatedStyle],
|
|
159
|
+
children: "\u2605"
|
|
72
160
|
});
|
|
73
161
|
}
|
|
74
162
|
|
|
75
|
-
//
|
|
163
|
+
// Rectangles - sharp, thin confetti strips
|
|
76
164
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
77
|
-
style: [
|
|
165
|
+
style: [styles.particle, {
|
|
166
|
+
width: particle.width,
|
|
167
|
+
height: particle.height,
|
|
168
|
+
backgroundColor: particle.color
|
|
169
|
+
}, animatedStyle]
|
|
78
170
|
});
|
|
79
171
|
};
|
|
80
172
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
@@ -94,17 +186,6 @@ const styles = StyleSheet.create({
|
|
|
94
186
|
},
|
|
95
187
|
circle: {
|
|
96
188
|
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
189
|
}
|
|
109
190
|
});
|
|
110
191
|
//# sourceMappingURL=ConfettiParticle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","StyleSheet","Animated","useAnimatedStyle","useSharedValue","
|
|
1
|
+
{"version":3,"names":["React","useEffect","StyleSheet","Animated","useAnimatedStyle","useSharedValue","useFrameCallback","cancelAnimation","jsx","_jsx","ConfettiParticle","particle","config","duration","onComplete","translateX","translateY","rotation","opacity","velX","velocity","x","velY","y","startTime","Date","now","isComplete","wobble","Math","random","wobbleSpeed","min","tiltAngle","tiltSin","tiltCos","tick","totalTicks","value","timer","setTimeout","clearTimeout","elapsed","gravity","drift","decay","speed","sqrt","speedBoost","rotationVelocity","sin","cos","progress","animatedStyle","wobbleX","scalar","wobbleY","x1","y1","x2","y2","scaleX","abs","scaleY","transform","rotate","max","renderShape","shape","size","width","View","style","styles","circle","height","backgroundColor","color","fontSize","Text","textShadowColor","textShadowOffset","textShadowRadius","children","container","left","top","create","position","borderRadius"],"sourceRoot":"../../src","sources":["ConfettiParticle.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/presets.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Basic
|
|
8
|
+
* Basic Cannon - The default basic blast of confetti
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const basicCannon = {
|
|
11
11
|
particleCount: 100,
|
|
12
12
|
spread: 70,
|
|
13
13
|
origin: {
|
|
@@ -16,36 +16,70 @@ export const celebration = {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Random Direction - Random amount in random directions
|
|
20
|
+
*/
|
|
21
|
+
export const randomDirection = {
|
|
22
|
+
particleCount: Math.floor(200 + Math.random() * 100),
|
|
23
|
+
angle: Math.random() * 360,
|
|
24
|
+
spread: 180 + Math.random() * 180,
|
|
25
|
+
origin: {
|
|
26
|
+
x: Math.random(),
|
|
27
|
+
y: Math.random() - 0.2
|
|
28
|
+
},
|
|
29
|
+
startVelocity: 30 + Math.random() * 20
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Realistic Look - Mix multiple effects to avoid "flattened cone"
|
|
34
|
+
* Fires 3 bursts with varying parameters for natural look
|
|
35
|
+
*/
|
|
36
|
+
export const realistic = {
|
|
37
|
+
particleCount: 100,
|
|
38
|
+
// Per burst (will fire 3x)
|
|
39
|
+
spread: 70,
|
|
40
|
+
startVelocity: 45,
|
|
41
|
+
decay: 0.91,
|
|
42
|
+
scalar: 1,
|
|
43
|
+
origin: {
|
|
44
|
+
y: 0.7
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Fireworks - From the sides
|
|
20
50
|
*/
|
|
21
51
|
export const fireworks = {
|
|
22
|
-
particleCount:
|
|
52
|
+
particleCount: 100,
|
|
23
53
|
spread: 360,
|
|
24
54
|
startVelocity: 30,
|
|
25
55
|
decay: 0.94,
|
|
26
|
-
scalar: 1.2
|
|
56
|
+
scalar: 1.2,
|
|
57
|
+
origin: {
|
|
58
|
+
y: 0.6
|
|
59
|
+
}
|
|
27
60
|
};
|
|
28
61
|
|
|
29
62
|
/**
|
|
30
|
-
*
|
|
63
|
+
* Stars - Burst of star shapes
|
|
31
64
|
*/
|
|
32
|
-
export const
|
|
65
|
+
export const stars = {
|
|
33
66
|
particleCount: 50,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
67
|
+
spread: 360,
|
|
68
|
+
startVelocity: 20,
|
|
69
|
+
decay: 0.95,
|
|
70
|
+
gravity: 0.5,
|
|
71
|
+
shapes: ['star'],
|
|
72
|
+
scalar: 1.5,
|
|
73
|
+
// Scaled appropriately for star character
|
|
74
|
+
colors: ['#FFD700', '#FFA500', '#FFFF00']
|
|
41
75
|
};
|
|
42
76
|
|
|
43
77
|
/**
|
|
44
|
-
* Confetti from left side
|
|
78
|
+
* Left Cannon - Confetti from left side
|
|
45
79
|
*/
|
|
46
80
|
export const leftCannon = {
|
|
47
81
|
particleCount: 50,
|
|
48
|
-
angle:
|
|
82
|
+
angle: 60,
|
|
49
83
|
spread: 55,
|
|
50
84
|
origin: {
|
|
51
85
|
x: 0,
|
|
@@ -55,11 +89,11 @@ export const leftCannon = {
|
|
|
55
89
|
};
|
|
56
90
|
|
|
57
91
|
/**
|
|
58
|
-
* Confetti from right side
|
|
92
|
+
* Right Cannon - Confetti from right side
|
|
59
93
|
*/
|
|
60
94
|
export const rightCannon = {
|
|
61
95
|
particleCount: 50,
|
|
62
|
-
angle:
|
|
96
|
+
angle: 120,
|
|
63
97
|
spread: 55,
|
|
64
98
|
origin: {
|
|
65
99
|
x: 1,
|
|
@@ -69,74 +103,26 @@ export const rightCannon = {
|
|
|
69
103
|
};
|
|
70
104
|
|
|
71
105
|
/**
|
|
72
|
-
*
|
|
106
|
+
* Bottom Cannon - Confetti from bottom
|
|
73
107
|
*/
|
|
74
|
-
export const
|
|
75
|
-
particleCount: 200,
|
|
76
|
-
spread: 160,
|
|
77
|
-
origin: {
|
|
78
|
-
y: 0.5
|
|
79
|
-
},
|
|
80
|
-
startVelocity: 35,
|
|
81
|
-
gravity: 1.5,
|
|
82
|
-
drift: 1,
|
|
83
|
-
tilt: true,
|
|
84
|
-
shapes: ['square', 'circle', 'triangle'],
|
|
85
|
-
scalar: 0.8
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Snow effect
|
|
90
|
-
*/
|
|
91
|
-
export const snow = {
|
|
92
|
-
particleCount: 100,
|
|
93
|
-
spread: 180,
|
|
94
|
-
origin: {
|
|
95
|
-
y: -0.1
|
|
96
|
-
},
|
|
97
|
-
startVelocity: 0,
|
|
98
|
-
gravity: 0.3,
|
|
99
|
-
drift: 1,
|
|
100
|
-
colors: ['#ffffff', '#e8f4ff', '#c9e5ff'],
|
|
101
|
-
shapes: ['circle'],
|
|
102
|
-
scalar: 0.6,
|
|
103
|
-
angle: 270
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Stars effect
|
|
108
|
-
*/
|
|
109
|
-
export const stars = {
|
|
108
|
+
export const bottomCannon = {
|
|
110
109
|
particleCount: 50,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
decay: 0.95,
|
|
114
|
-
gravity: 0.5,
|
|
115
|
-
colors: ['#FFD700', '#FFA500', '#FFFF00'],
|
|
116
|
-
shapes: ['circle'],
|
|
117
|
-
scalar: 0.5
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* School pride (custom colors)
|
|
122
|
-
*/
|
|
123
|
-
export const schoolPride = {
|
|
124
|
-
particleCount: 100,
|
|
125
|
-
spread: 160,
|
|
110
|
+
angle: 90,
|
|
111
|
+
spread: 45,
|
|
126
112
|
origin: {
|
|
127
|
-
y:
|
|
113
|
+
y: 1,
|
|
114
|
+
x: 0.5
|
|
128
115
|
},
|
|
129
|
-
|
|
116
|
+
startVelocity: 55
|
|
130
117
|
};
|
|
131
118
|
export const presets = {
|
|
132
|
-
|
|
119
|
+
basicCannon,
|
|
120
|
+
randomDirection,
|
|
121
|
+
realistic,
|
|
133
122
|
fireworks,
|
|
134
|
-
|
|
123
|
+
stars,
|
|
135
124
|
leftCannon,
|
|
136
125
|
rightCannon,
|
|
137
|
-
|
|
138
|
-
snow,
|
|
139
|
-
stars,
|
|
140
|
-
schoolPride
|
|
126
|
+
bottomCannon
|
|
141
127
|
};
|
|
142
128
|
//# sourceMappingURL=presets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["basicCannon","particleCount","spread","origin","y","randomDirection","Math","floor","random","angle","x","startVelocity","realistic","decay","scalar","fireworks","stars","gravity","shapes","colors","leftCannon","rightCannon","bottomCannon","presets"],"sourceRoot":"../../src","sources":["presets.ts"],"mappings":";;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,MAAMA,WAA2B,GAAG;EACzCC,aAAa,EAAE,GAAG;EAClBC,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE;IAAEC,CAAC,EAAE;EAAI;AACnB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,eAA+B,GAAG;EAC7CJ,aAAa,EAAEK,IAAI,CAACC,KAAK,CAAC,GAAG,GAAGD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;EACpDC,KAAK,EAAEH,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG;EAC1BN,MAAM,EAAE,GAAG,GAAGI,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG;EACjCL,MAAM,EAAE;IACNO,CAAC,EAAEJ,IAAI,CAACE,MAAM,CAAC,CAAC;IAChBJ,CAAC,EAAEE,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG;EACrB,CAAC;EACDG,aAAa,EAAE,EAAE,GAAGL,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMI,SAAyB,GAAG;EACvCX,aAAa,EAAE,GAAG;EAAE;EACpBC,MAAM,EAAE,EAAE;EACVS,aAAa,EAAE,EAAE;EACjBE,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,CAAC;EACTX,MAAM,EAAE;IAAEC,CAAC,EAAE;EAAI;AACnB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMW,SAAyB,GAAG;EACvCd,aAAa,EAAE,GAAG;EAClBC,MAAM,EAAE,GAAG;EACXS,aAAa,EAAE,EAAE;EACjBE,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,GAAG;EACXX,MAAM,EAAE;IAAEC,CAAC,EAAE;EAAI;AACnB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMY,KAAqB,GAAG;EACnCf,aAAa,EAAE,EAAE;EACjBC,MAAM,EAAE,GAAG;EACXS,aAAa,EAAE,EAAE;EACjBE,KAAK,EAAE,IAAI;EACXI,OAAO,EAAE,GAAG;EACZC,MAAM,EAAE,CAAC,MAAM,CAAC;EAChBJ,MAAM,EAAE,GAAG;EAAE;EACbK,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS;AAC1C,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,UAA0B,GAAG;EACxCnB,aAAa,EAAE,EAAE;EACjBQ,KAAK,EAAE,EAAE;EACTP,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE;IAAEO,CAAC,EAAE,CAAC;IAAEN,CAAC,EAAE;EAAI,CAAC;EACxBO,aAAa,EAAE;AACjB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMU,WAA2B,GAAG;EACzCpB,aAAa,EAAE,EAAE;EACjBQ,KAAK,EAAE,GAAG;EACVP,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE;IAAEO,CAAC,EAAE,CAAC;IAAEN,CAAC,EAAE;EAAI,CAAC;EACxBO,aAAa,EAAE;AACjB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMW,YAA4B,GAAG;EAC1CrB,aAAa,EAAE,EAAE;EACjBQ,KAAK,EAAE,EAAE;EACTP,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE;IAAEC,CAAC,EAAE,CAAC;IAAEM,CAAC,EAAE;EAAI,CAAC;EACxBC,aAAa,EAAE;AACjB,CAAC;AAED,OAAO,MAAMY,OAAO,GAAG;EACrBvB,WAAW;EACXK,eAAe;EACfO,SAAS;EACTG,SAAS;EACTC,KAAK;EACLI,UAAU;EACVC,WAAW;EACXC;AACF,CAAC","ignoreList":[]}
|
package/lib/module/utils.js
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// Canvas-confetti uses highly contrasting, distinct colors for realistic effect
|
|
4
|
+
// Each color is maximally different from others for clear visibility
|
|
5
|
+
export const DEFAULT_COLORS = [
|
|
6
|
+
// Primary vibrant colors (maximally distinct)
|
|
7
|
+
'#26ccff',
|
|
8
|
+
// Bright Cyan
|
|
9
|
+
'#a25afd',
|
|
10
|
+
// Purple
|
|
11
|
+
'#ff5e7e',
|
|
12
|
+
// Pink
|
|
13
|
+
'#88ff5a',
|
|
14
|
+
// Lime Green
|
|
15
|
+
'#fcff42',
|
|
16
|
+
// Yellow
|
|
17
|
+
'#ffa62d',
|
|
18
|
+
// Orange
|
|
19
|
+
'#ff36ff',
|
|
20
|
+
// Magenta
|
|
21
|
+
// Secondary distinct colors
|
|
22
|
+
'#1e90ff',
|
|
23
|
+
// Dodger Blue
|
|
24
|
+
'#9400d3',
|
|
25
|
+
// Dark Violet
|
|
26
|
+
'#ff1493',
|
|
27
|
+
// Deep Pink
|
|
28
|
+
'#32cd32',
|
|
29
|
+
// Lime
|
|
30
|
+
'#ffd700',
|
|
31
|
+
// Gold
|
|
32
|
+
'#ff6347',
|
|
33
|
+
// Tomato
|
|
34
|
+
'#00ffff',
|
|
35
|
+
// Cyan
|
|
36
|
+
'#ff00ff',
|
|
37
|
+
// Fuchsia
|
|
38
|
+
// Additional contrast colors
|
|
39
|
+
'#00ff00',
|
|
40
|
+
// Pure Green
|
|
41
|
+
'#ff0000',
|
|
42
|
+
// Pure Red
|
|
43
|
+
'#0000ff',
|
|
44
|
+
// Pure Blue
|
|
45
|
+
'#ffff00' // Pure Yellow
|
|
46
|
+
];
|
|
4
47
|
export const DEFAULT_CONFIG = {
|
|
5
48
|
particleCount: 50,
|
|
6
49
|
angle: 90,
|
|
@@ -16,7 +59,8 @@ export const DEFAULT_CONFIG = {
|
|
|
16
59
|
x: 0.5,
|
|
17
60
|
y: 0.5
|
|
18
61
|
},
|
|
19
|
-
shapes: ['square'
|
|
62
|
+
shapes: ['square'],
|
|
63
|
+
// Rectangular strips are most realistic
|
|
20
64
|
tilt: true,
|
|
21
65
|
tiltAngleIncrement: 10,
|
|
22
66
|
tickDuration: 200,
|
|
@@ -56,22 +100,34 @@ export const createConfettiParticles = (config, screenWidth, screenHeight) => {
|
|
|
56
100
|
const particles = [];
|
|
57
101
|
const angleInRadians = degreesToRadians(config.angle);
|
|
58
102
|
const spreadInRadians = degreesToRadians(config.spread);
|
|
103
|
+
const timestamp = Date.now();
|
|
59
104
|
for (let i = 0; i < config.particleCount; i++) {
|
|
60
|
-
|
|
61
|
-
const
|
|
105
|
+
// Add spread variation to the angle
|
|
106
|
+
const spreadVariation = randomRange(-spreadInRadians / 2, spreadInRadians / 2);
|
|
107
|
+
const particleAngle = angleInRadians + spreadVariation;
|
|
108
|
+
// Randomize velocity within range
|
|
109
|
+
const velocityMagnitude = config.startVelocity * (0.5 + Math.random() * 0.5);
|
|
110
|
+
// Create confetti particles - broader and shorter like canvas-confetti
|
|
111
|
+
const baseWidth = (6 + Math.random() * 4) * config.scalar; // 6-10px wide (BROADER)
|
|
112
|
+
const aspectRatio = 0.5 + Math.random() * 0.3; // 0.5-0.8 ratio (SHORTER than wide)
|
|
62
113
|
const particle = {
|
|
63
|
-
id: `confetti-${i}-${
|
|
114
|
+
id: `confetti-${timestamp}-${i}-${Math.random()}`,
|
|
64
115
|
color: randomFromArray(config.colors),
|
|
65
116
|
shape: randomFromArray(config.shapes),
|
|
66
117
|
x: (config.origin.x ?? 0.5) * screenWidth,
|
|
67
118
|
y: (config.origin.y ?? 0.5) * screenHeight,
|
|
68
|
-
|
|
119
|
+
width: baseWidth,
|
|
120
|
+
height: baseWidth * aspectRatio,
|
|
121
|
+
// Height is SMALLER than width
|
|
69
122
|
velocity: {
|
|
70
|
-
|
|
71
|
-
|
|
123
|
+
// Canvas-confetti uses pixels per frame (60fps)
|
|
124
|
+
// Use velocity as-is for proper scaling to device
|
|
125
|
+
x: Math.cos(particleAngle) * velocityMagnitude,
|
|
126
|
+
y: -Math.sin(particleAngle) * velocityMagnitude // Negative = upward initially
|
|
72
127
|
},
|
|
73
128
|
rotation: Math.random() * 360,
|
|
74
|
-
rotationVelocity: randomRange(-
|
|
129
|
+
rotationVelocity: randomRange(-50, 50),
|
|
130
|
+
// Very wide range for dramatic spinning
|
|
75
131
|
tiltAngle: config.tilt ? Math.random() * config.tiltAngleIncrement : 0,
|
|
76
132
|
opacity: 1
|
|
77
133
|
};
|
|
@@ -88,7 +144,6 @@ export const updateParticle = (particle, config, deltaTime) => {
|
|
|
88
144
|
|
|
89
145
|
// Apply gravity
|
|
90
146
|
const newVelocityY = particle.velocity.y - config.gravity * dt;
|
|
91
|
-
|
|
92
147
|
// Apply drift
|
|
93
148
|
const newVelocityX = particle.velocity.x + config.drift * dt;
|
|
94
149
|
|
package/lib/module/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_COLORS","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","
|
|
1
|
+
{"version":3,"names":["DEFAULT_COLORS","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","timestamp","Date","now","i","spreadVariation","particleAngle","velocityMagnitude","baseWidth","aspectRatio","particle","id","color","shape","width","height","velocity","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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfettiCanvas.d.ts","sourceRoot":"","sources":["../../src/ConfettiCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAE1E,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"ConfettiCanvas.d.ts","sourceRoot":"","sources":["../../src/ConfettiCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAE1E,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,eAAO,MAAM,cAAc,6FA8E1B,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { ConfettiParticle as ConfettiParticleType } from './types';
|
|
2
|
+
import type { ConfettiParticle as ConfettiParticleType, ConfettiConfig } from './types';
|
|
3
3
|
interface Props {
|
|
4
4
|
particle: ConfettiParticleType;
|
|
5
|
+
config: Required<ConfettiConfig>;
|
|
5
6
|
duration: number;
|
|
6
7
|
onComplete?: () => void;
|
|
7
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfettiParticle.d.ts","sourceRoot":"","sources":["../../src/ConfettiParticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfettiParticle.d.ts","sourceRoot":"","sources":["../../src/ConfettiParticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAQzC,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAExF,UAAU,KAAK;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6L5C,CAAC"}
|