react-native-confetti-reanimated 0.1.0 → 0.1.3

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 CHANGED
@@ -5,20 +5,13 @@ A high-performance confetti component for React Native, powered by [Reanimated 4
5
5
  [![npm version](https://img.shields.io/npm/v/react-native-confetti-reanimated.svg)](https://www.npmjs.com/package/react-native-confetti-reanimated)
6
6
  [![license](https://img.shields.io/npm/l/react-native-confetti-reanimated.svg)](https://github.com/andydev271/react-native-confetti-reanimated/blob/main/LICENSE)
7
7
 
8
- ## Preview
9
-
10
- <!-- Add your demo GIF here after generating it -->
11
- ![Confetti Demo](./assets/demo.gif)
12
-
13
- > **Note**: To generate demo GIFs, run the example app and record the screen. See [example/README.md](./example/README.md) for instructions.
14
-
15
8
  ## Features
16
9
 
17
10
  - 🚀 **High Performance** - Built with Reanimated 4 for smooth 60fps animations on UI thread
18
11
  - 📱 **Expo Compatible** - Works seamlessly with Expo managed workflow
19
12
  - 🎨 **Fully Customizable** - Control colors, shapes, physics, and more
20
- - 🎭 **Multiple Shapes** - Supports squares, circles, and triangles
21
- - 🎯 **Preset Effects** - Ready-to-use effects like fireworks, snow, stars
13
+ - 🎭 **Multiple Shapes** - Supports squares, circles, and stars
14
+ - 🎯 **Preset Effects** - Ready-to-use effects like fireworks, stars, and realistic confetti
22
15
  - 🌈 **Canvas Confetti API** - Familiar API inspired by canvas-confetti
23
16
  - 📦 **TypeScript** - Full TypeScript support
24
17
  - 🔧 **Lightweight** - Minimal dependencies
@@ -26,29 +19,27 @@ A high-performance confetti component for React Native, powered by [Reanimated 4
26
19
  ## Installation
27
20
 
28
21
  ```bash
29
- npm install react-native-confetti-reanimated react-native-reanimated react-native-worklets
22
+ npm install react-native-confetti-reanimated react-native-reanimated
30
23
  ```
31
24
 
32
25
  Or with Expo:
33
26
 
34
27
  ```bash
35
- npx expo install react-native-confetti-reanimated react-native-reanimated react-native-worklets
28
+ npx expo install react-native-confetti-reanimated react-native-reanimated
36
29
  ```
37
30
 
38
31
  ### Setup
39
32
 
40
33
  Add the Babel plugin to your `babel.config.js`:
41
34
 
42
- **For Expo projects:**
35
+ **For Expo projects (SDK 50+):**
43
36
 
44
37
  ```javascript
45
38
  module.exports = function (api) {
46
39
  api.cache(true);
47
40
  return {
48
41
  presets: ['babel-preset-expo'],
49
- plugins: [
50
- 'react-native-worklets/plugin',
51
- ],
42
+ // Reanimated plugin is automatically included in Expo SDK 50+
52
43
  };
53
44
  };
54
45
  ```
@@ -60,11 +51,12 @@ module.exports = {
60
51
  presets: ['module:metro-react-native-babel-preset'],
61
52
  plugins: [
62
53
  'react-native-worklets/plugin',
54
+ 'react-native-reanimated/plugin',
63
55
  ],
64
56
  };
65
57
  ```
66
58
 
67
- > ⚠️ **Important**: `react-native-worklets/plugin` must be listed last. Restart your app after updating Babel config.
59
+ > ⚠️ **Important**: For Expo, plugins are auto-included. For React Native CLI, add both plugins (worklets before reanimated). Restart your app after changes.
68
60
 
69
61
  ## Quick Start
70
62
 
@@ -92,16 +84,19 @@ export default function App() {
92
84
  ```tsx
93
85
  import { presets } from 'react-native-confetti-reanimated';
94
86
 
95
- // Celebration burst
96
- fire(presets.celebration);
87
+ // Basic cannon burst
88
+ fire(presets.basicCannon);
97
89
 
98
- // Fireworks effect
99
- fire(presets.fireworks);
90
+ // Random direction (different each time)
91
+ fire(presets.randomDirection);
92
+
93
+ // Realistic confetti (mixed bursts)
94
+ fire(presets.realistic);
100
95
 
101
- // Snow effect
102
- fire(presets.snow);
96
+ // Fireworks effect (continuous from sides)
97
+ fire(presets.fireworks);
103
98
 
104
- // Stars
99
+ // Stars burst
105
100
  fire(presets.stars);
106
101
  ```
107
102
 
@@ -184,7 +179,7 @@ interface ConfettiConfig {
184
179
  colors?: string[]; // Default: vibrant colors
185
180
  scalar?: number; // Default: 1
186
181
  origin?: { x?: number; y?: number }; // Default: { x: 0.5, y: 0.5 }
187
- shapes?: Array<'square' | 'circle' | 'triangle'>; // Default: ['square', 'circle']
182
+ shapes?: Array<'square' | 'circle' | 'star'>; // Default: ['square']
188
183
  tilt?: boolean; // Default: true
189
184
  tiltAngleIncrement?: number; // Default: 10
190
185
  }
@@ -193,19 +188,24 @@ interface ConfettiConfig {
193
188
  ### Available Presets
194
189
 
195
190
  ```typescript
196
- presets.celebration // 🎊 Basic celebration
197
- presets.fireworks // 🎆 Explosive effect
198
- presets.realistic // ✨ Realistic confetti
199
- presets.snow // ❄️ Falling snow
200
- presets.stars // ⭐ Twinkling stars
201
- presets.leftCannon // ⬅️ Left side cannon
202
- presets.rightCannon // ➡️ Right side cannon
203
- presets.bottomCannon // ⬆️ Bottom cannon
191
+ presets.basicCannon // 🎊 Basic celebration burst
192
+ presets.randomDirection // 🎲 Random direction & amount
193
+ presets.realistic // ✨ Realistic confetti (mixed bursts)
194
+ presets.fireworks // 🎆 Continuous fireworks from sides
195
+ presets.stars // ⭐ Golden star burst
196
+ presets.leftCannon // ⬅️ Left side cannon
197
+ presets.rightCannon // ➡️ Right side cannon
198
+ presets.bottomCannon // ⬆️ Bottom cannon
204
199
  ```
205
200
 
206
201
  ## Example App
207
202
 
208
- Check out the `example` directory for a complete demo app with all features.
203
+ Check out the `example` directory for a complete demo app with all features:
204
+ - 🎊 Basic Cannon
205
+ - 🎲 Random Direction
206
+ - ✨ Realistic Look
207
+ - 🎆 Fireworks
208
+ - ⭐ Stars
209
209
 
210
210
  ```bash
211
211
  cd example
@@ -219,16 +219,16 @@ Then use Expo Go to scan the QR code or press `i` for iOS / `a` for Android.
219
219
 
220
220
  - ✅ iOS
221
221
  - ✅ Android
222
- - ✅ Expo (SDK 50+)
222
+ - ✅ Expo (SDK 50+, tested with SDK 54)
223
223
 
224
224
  ## Requirements
225
225
 
226
- - React Native ≥ 0.74 (New Architecture/Fabric)
226
+ - React ≥ 18.0.0 (tested with React 19)
227
+ - React Native ≥ 0.74 (New Architecture/Fabric required)
227
228
  - React Native Reanimated ≥ 4.0.0
228
- - React Native Worklets 0.5.0
229
- - Expo SDK ≥ 50 (if using Expo)
229
+ - Expo SDK50 (tested with SDK 54)
230
230
 
231
- > **Note**: Reanimated 4 requires the React Native New Architecture (Fabric)
231
+ > **Note**: Reanimated 4 requires React Native's New Architecture (Fabric). Expo SDK 50+ has this enabled by default.
232
232
 
233
233
  ## Troubleshooting
234
234
 
@@ -16,7 +16,6 @@ const ConfettiCanvas = exports.ConfettiCanvas = /*#__PURE__*/_react.default.forw
16
16
  fullScreen = true
17
17
  }, ref) => {
18
18
  const [particles, setParticles] = (0, _react.useState)([]);
19
- const [activeCount, setActiveCount] = (0, _react.useState)(0);
20
19
  const {
21
20
  width,
22
21
  height
@@ -32,8 +31,11 @@ const ConfettiCanvas = exports.ConfettiCanvas = /*#__PURE__*/_react.default.forw
32
31
  }
33
32
  };
34
33
  const newParticles = (0, _utils.createConfettiParticles)(mergedConfig, width, height);
35
- setParticles(prev => [...prev, ...newParticles]);
36
- setActiveCount(prev => prev + newParticles.length);
34
+ const particlesWithConfig = newParticles.map(p => ({
35
+ ...p,
36
+ config: mergedConfig
37
+ }));
38
+ setParticles(prev => [...prev, ...particlesWithConfig]);
37
39
 
38
40
  // Resolve after the duration
39
41
  setTimeout(() => {
@@ -43,7 +45,6 @@ const ConfettiCanvas = exports.ConfettiCanvas = /*#__PURE__*/_react.default.forw
43
45
  }, [width, height]);
44
46
  const reset = (0, _react.useCallback)(() => {
45
47
  setParticles([]);
46
- setActiveCount(0);
47
48
  }, []);
48
49
  (0, _react.useImperativeHandle)(ref, () => {
49
50
  const confetti = fire;
@@ -51,13 +52,12 @@ const ConfettiCanvas = exports.ConfettiCanvas = /*#__PURE__*/_react.default.forw
51
52
  return confetti;
52
53
  }, [fire, reset]);
53
54
  const handleParticleComplete = (0, _react.useCallback)(particleId => {
54
- setActiveCount(prev => prev - 1);
55
55
  setParticles(prev => {
56
56
  // Clean up completed particles periodically
57
57
  if (prev.length > 100) {
58
58
  return prev.filter(p => p.id !== particleId).slice(-50);
59
59
  }
60
- return prev;
60
+ return prev.filter(p => p.id !== particleId);
61
61
  });
62
62
  }, []);
63
63
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -67,7 +67,8 @@ const ConfettiCanvas = exports.ConfettiCanvas = /*#__PURE__*/_react.default.forw
67
67
  pointerEvents: "none",
68
68
  children: particles.map(particle => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ConfettiParticle.ConfettiParticle, {
69
69
  particle: particle,
70
- duration: _utils.DEFAULT_CONFIG.duration,
70
+ config: particle.config,
71
+ duration: particle.config.duration,
71
72
  onComplete: () => handleParticleComplete(particle.id)
72
73
  }, particle.id))
73
74
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_utils","_ConfettiParticle","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ConfettiCanvas","exports","React","forwardRef","containerStyle","zIndex","fullScreen","ref","particles","setParticles","useState","activeCount","setActiveCount","width","height","useWindowDimensions","fire","useCallback","config","Promise","resolve","mergedConfig","DEFAULT_CONFIG","origin","newParticles","createConfettiParticles","prev","length","setTimeout","duration","reset","useImperativeHandle","confetti","handleParticleComplete","particleId","filter","p","id","slice","jsx","View","style","styles","container","pointerEvents","children","map","particle","ConfettiParticle","onComplete","displayName","StyleSheet","create","position","top","left","right","bottom"],"sourceRoot":"../../src","sources":["ConfettiCanvas.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_utils","_ConfettiParticle","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ConfettiCanvas","exports","React","forwardRef","containerStyle","zIndex","fullScreen","ref","particles","setParticles","useState","width","height","useWindowDimensions","fire","useCallback","config","Promise","resolve","mergedConfig","DEFAULT_CONFIG","origin","newParticles","createConfettiParticles","particlesWithConfig","map","p","prev","setTimeout","duration","reset","useImperativeHandle","confetti","handleParticleComplete","particleId","length","filter","id","slice","jsx","View","style","styles","container","pointerEvents","children","particle","ConfettiParticle","onComplete","displayName","StyleSheet","create","position","top","left","right","bottom"],"sourceRoot":"../../src","sources":["ConfettiCanvas.tsx"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ var _jsxRuntime = require("react/jsx-runtime");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
12
  const ConfettiParticle = ({
13
13
  particle,
14
+ config,
14
15
  duration,
15
16
  onComplete
16
17
  }) => {
@@ -18,68 +19,154 @@ const ConfettiParticle = ({
18
19
  const translateY = (0, _reactNativeReanimated.useSharedValue)(0);
19
20
  const rotation = (0, _reactNativeReanimated.useSharedValue)(particle.rotation);
20
21
  const opacity = (0, _reactNativeReanimated.useSharedValue)(1);
22
+
23
+ // Velocity state
24
+ const velX = (0, _reactNativeReanimated.useSharedValue)(particle.velocity.x);
25
+ const velY = (0, _reactNativeReanimated.useSharedValue)(particle.velocity.y);
26
+ const startTime = (0, _reactNativeReanimated.useSharedValue)(Date.now());
27
+ const isComplete = (0, _reactNativeReanimated.useSharedValue)(false);
28
+
29
+ // Canvas-confetti realistic wobble and tilt variables
30
+ const wobble = (0, _reactNativeReanimated.useSharedValue)(Math.random() * 10);
31
+ const wobbleSpeed = (0, _reactNativeReanimated.useSharedValue)(Math.min(0.11, Math.random() * 0.1 + 0.05));
32
+ const tiltAngle = (0, _reactNativeReanimated.useSharedValue)(particle.tiltAngle);
33
+ const tiltSin = (0, _reactNativeReanimated.useSharedValue)(0);
34
+ const tiltCos = (0, _reactNativeReanimated.useSharedValue)(0);
35
+ const random = (0, _reactNativeReanimated.useSharedValue)(Math.random() + 2);
36
+ const tick = (0, _reactNativeReanimated.useSharedValue)(0);
37
+ const totalTicks = (0, _reactNativeReanimated.useSharedValue)(duration / 1000 * 60); // 60fps
38
+
21
39
  (0, _react.useEffect)(() => {
22
- // Animate the particle
23
- translateX.value = (0, _reactNativeReanimated.withTiming)(particle.velocity.x * (duration / 16), {
24
- duration,
25
- easing: _reactNativeReanimated.Easing.linear
26
- });
27
- translateY.value = (0, _reactNativeReanimated.withTiming)(particle.velocity.y * (duration / 16), {
28
- duration,
29
- easing: _reactNativeReanimated.Easing.bezier(0.33, 1, 0.68, 1) // Custom easing for gravity effect
30
- });
31
- rotation.value = (0, _reactNativeReanimated.withTiming)(particle.rotation + particle.rotationVelocity * (duration / 16), {
32
- duration,
33
- easing: _reactNativeReanimated.Easing.linear
34
- });
35
- opacity.value = (0, _reactNativeReanimated.withTiming)(0, {
36
- duration,
37
- easing: _reactNativeReanimated.Easing.linear
38
- }, finished => {
39
- if (finished && onComplete) {
40
- (0, _reactNativeReanimated.runOnJS)(onComplete)();
40
+ startTime.value = Date.now();
41
+ tick.value = 0;
42
+
43
+ // Cleanup callback
44
+ const timer = setTimeout(() => {
45
+ isComplete.value = true;
46
+ if (onComplete) {
47
+ onComplete();
41
48
  }
42
- });
43
- }, [duration, onComplete, opacity, particle, rotation, translateX, translateY]);
49
+ }, duration);
50
+ return () => {
51
+ clearTimeout(timer);
52
+ (0, _reactNativeReanimated.cancelAnimation)(translateX);
53
+ (0, _reactNativeReanimated.cancelAnimation)(translateY);
54
+ (0, _reactNativeReanimated.cancelAnimation)(rotation);
55
+ (0, _reactNativeReanimated.cancelAnimation)(opacity);
56
+ };
57
+ }, [duration, onComplete, opacity, isComplete, startTime, translateX, translateY, rotation, tick]);
58
+
59
+ // Real-time physics simulation using frame callback
60
+ (0, _reactNativeReanimated.useFrameCallback)(() => {
61
+ 'worklet';
62
+
63
+ if (isComplete.value) {
64
+ return;
65
+ }
66
+ const elapsed = Date.now() - startTime.value;
67
+ if (elapsed >= duration) {
68
+ isComplete.value = true;
69
+ return;
70
+ }
71
+
72
+ // Update position based on current velocity
73
+ translateX.value += velX.value;
74
+ translateY.value += velY.value;
75
+
76
+ // Apply gravity (increases downward velocity) - realistic physics!
77
+ velY.value += config.gravity;
78
+
79
+ // Apply drift (horizontal wind)
80
+ velX.value += config.drift;
81
+
82
+ // Apply decay (air resistance)
83
+ velX.value *= config.decay;
84
+ velY.value *= config.decay;
85
+
86
+ // Update rotation - ALL particles spin faster when moving fast, slower when slowing down
87
+ const speed = Math.sqrt(velX.value * velX.value + velY.value * velY.value);
88
+ const speedBoost = 1 + speed / 20;
89
+ rotation.value += particle.rotationVelocity * speedBoost;
90
+
91
+ // Canvas-confetti wobble effect (creates side-to-side flutter)
92
+ wobble.value += wobbleSpeed.value;
93
+
94
+ // Canvas-confetti tilt animation (creates 3D tumbling effect)
95
+ tiltAngle.value += 0.1;
96
+ tiltSin.value = Math.sin(tiltAngle.value);
97
+ tiltCos.value = Math.cos(tiltAngle.value);
98
+ random.value = Math.random() + 2;
99
+
100
+ // Update tick for progressive opacity fade
101
+ tick.value += 1;
102
+
103
+ // Canvas-confetti progressive fade: opacity decreases linearly over lifetime
104
+ const progress = tick.value / totalTicks.value;
105
+ opacity.value = 1 - progress;
106
+ });
44
107
  const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
108
+ // Canvas-confetti wobble calculation (circular motion)
109
+ const wobbleX = 10 * config.scalar * Math.cos(wobble.value);
110
+ const wobbleY = 10 * config.scalar * Math.sin(wobble.value);
111
+
112
+ // Canvas-confetti 3D-like positioning with tilt
113
+ const x1 = translateX.value + random.value * tiltCos.value;
114
+ const y1 = translateY.value + random.value * tiltSin.value;
115
+ const x2 = translateX.value + wobbleX + random.value * tiltCos.value;
116
+ const y2 = translateY.value + wobbleY + random.value * tiltSin.value;
117
+
118
+ // Dynamic scaling based on wobble (creates 3D depth perception)
119
+ const scaleX = Math.abs(x2 - x1) * 0.1;
120
+ const scaleY = Math.abs(y2 - y1) * 0.1;
45
121
  return {
46
122
  transform: [{
47
- translateX: translateX.value
123
+ translateX: x2
48
124
  }, {
49
- translateY: translateY.value
125
+ translateY: y2
50
126
  }, {
51
127
  rotate: `${rotation.value}deg`
128
+ }, {
129
+ scaleX: Math.max(0.3, scaleX)
130
+ },
131
+ // Prevent too small
132
+ {
133
+ scaleY: Math.max(0.3, scaleY)
52
134
  }],
53
135
  opacity: opacity.value
54
136
  };
55
137
  });
56
138
  const renderShape = () => {
57
- const baseStyle = [styles.particle, {
58
- width: particle.size,
59
- height: particle.size,
60
- backgroundColor: particle.color
61
- }];
62
139
  if (particle.shape === 'circle') {
140
+ // Circles for snow - perfectly round
141
+ const size = particle.width;
63
142
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
64
- style: [...baseStyle, styles.circle, animatedStyle]
143
+ style: [styles.particle, styles.circle, {
144
+ width: size,
145
+ height: size,
146
+ backgroundColor: particle.color
147
+ }, animatedStyle]
65
148
  });
66
- } else if (particle.shape === 'triangle') {
67
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
68
- style: [...baseStyle, styles.transparent, animatedStyle],
69
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
70
- style: [styles.triangle, {
71
- borderLeftWidth: particle.size / 2,
72
- borderRightWidth: particle.size / 2,
73
- borderBottomWidth: particle.size,
74
- borderBottomColor: particle.color
75
- }]
76
- })
149
+ }
150
+ if (particle.shape === 'star') {
151
+ // Stars using Unicode character
152
+ const fontSize = particle.width * 1.5;
153
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
154
+ style: [styles.particle, styles.star, {
155
+ fontSize,
156
+ color: particle.color,
157
+ textShadowColor: particle.color
158
+ }, animatedStyle],
159
+ children: "\u2605"
77
160
  });
78
161
  }
79
162
 
80
- // Square (default)
163
+ // Rectangles - sharp, thin confetti strips
81
164
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
82
- style: [...baseStyle, animatedStyle]
165
+ style: [styles.particle, {
166
+ width: particle.width,
167
+ height: particle.height,
168
+ backgroundColor: particle.color
169
+ }, animatedStyle]
83
170
  });
84
171
  };
85
172
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
@@ -101,16 +188,12 @@ const styles = _reactNative.StyleSheet.create({
101
188
  circle: {
102
189
  borderRadius: 999
103
190
  },
104
- transparent: {
105
- backgroundColor: 'transparent'
106
- },
107
- triangle: {
108
- width: 0,
109
- height: 0,
110
- backgroundColor: 'transparent',
111
- borderStyle: 'solid',
112
- borderLeftColor: 'transparent',
113
- borderRightColor: 'transparent'
191
+ star: {
192
+ textShadowOffset: {
193
+ width: 0,
194
+ height: 0
195
+ },
196
+ textShadowRadius: 3
114
197
  }
115
198
  });
116
199
  //# sourceMappingURL=ConfettiParticle.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ConfettiParticle","particle","duration","onComplete","translateX","useSharedValue","translateY","rotation","opacity","useEffect","value","withTiming","velocity","x","easing","Easing","linear","y","bezier","rotationVelocity","finished","runOnJS","animatedStyle","useAnimatedStyle","transform","rotate","renderShape","baseStyle","styles","width","size","height","backgroundColor","color","shape","jsx","View","style","circle","transparent","children","triangle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderBottomColor","container","left","top","exports","StyleSheet","create","position","borderRadius","borderStyle","borderLeftColor","borderRightColor"],"sourceRoot":"../../src","sources":["ConfettiParticle.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ConfettiParticle","particle","config","duration","onComplete","translateX","useSharedValue","translateY","rotation","opacity","velX","velocity","x","velY","y","startTime","Date","now","isComplete","wobble","Math","random","wobbleSpeed","min","tiltAngle","tiltSin","tiltCos","tick","totalTicks","useEffect","value","timer","setTimeout","clearTimeout","cancelAnimation","useFrameCallback","elapsed","gravity","drift","decay","speed","sqrt","speedBoost","rotationVelocity","sin","cos","progress","animatedStyle","useAnimatedStyle","wobbleX","scalar","wobbleY","x1","y1","x2","y2","scaleX","abs","scaleY","transform","rotate","max","renderShape","shape","size","width","jsx","View","style","styles","circle","height","backgroundColor","color","fontSize","Text","star","textShadowColor","children","container","left","top","exports","StyleSheet","create","position","borderRadius","textShadowOffset","textShadowRadius"],"sourceRoot":"../../src","sources":["ConfettiParticle.tsx"],"mappings":"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","ignoreList":[]}