related-ui-components 3.2.5 → 3.2.7

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.
@@ -62,6 +62,8 @@ const SpinWheel = ({
62
62
  // Destructure new prop
63
63
  size = 300,
64
64
  spinDuration = 5000,
65
+ winner,
66
+ minSpinDuration = 2000,
65
67
  enabled = true,
66
68
  onSpinStart,
67
69
  onSpinEnd,
@@ -81,12 +83,50 @@ const SpinWheel = ({
81
83
  centerComponent
82
84
  }) => {
83
85
  const wheelItems = items.length > 0 ? items : [];
86
+ const spinLoop = useRef(null);
87
+ const spinStartTime = useRef(0);
84
88
  const [spinning, setSpinning] = useState(false);
85
89
  const [_, setWinner] = useState(null);
86
90
  const rotateValue = useRef(new Animated.Value(0)).current;
87
91
 
88
92
  // Track rotation manually for calculations
89
93
  const rotationRef = useRef(0);
94
+ const startInfiniteSpin = () => {
95
+ rotateValue.setValue(rotationRef.current);
96
+ spinStartTime.current = Date.now();
97
+ spinLoop.current = Animated.loop(Animated.timing(rotateValue, {
98
+ toValue: rotationRef.current + 1,
99
+ // 1 = full rotation
100
+ duration: 800,
101
+ easing: Easing.linear,
102
+ useNativeDriver: true
103
+ }));
104
+ spinLoop.current.start();
105
+ setSpinning(true);
106
+ onSpinStart?.();
107
+ };
108
+ const stopOnWinner = winnerValue => {
109
+ if (!spinLoop.current) return;
110
+ spinLoop.current.stop();
111
+ spinLoop.current = null;
112
+ const winnerId = typeof winnerValue === "object" ? winnerValue.id : winnerValue;
113
+ const index = items.findIndex(i => i.id === winnerId);
114
+ if (index === -1) return;
115
+ const segmentCenter = (index + 0.5) * anglePerItem;
116
+ const targetAngle = (270 - segmentCenter + 360) % 360;
117
+ const currentAngle = rotationRef.current * 360 % 360;
118
+ const offset = (targetAngle - currentAngle + 360) % 360;
119
+ const finalRotation = rotationRef.current + (offset + 3 * 360) / 360;
120
+ Animated.timing(rotateValue, {
121
+ toValue: finalRotation,
122
+ duration: 2500,
123
+ easing: Easing.out(Easing.cubic),
124
+ useNativeDriver: true
125
+ }).start(() => {
126
+ setSpinning(false);
127
+ onSpinEnd?.(items[index]);
128
+ });
129
+ };
90
130
 
91
131
  // Update tracked rotation when animation completes
92
132
  useEffect(() => {
@@ -194,6 +234,15 @@ const SpinWheel = ({
194
234
  onSpinEnd?.(wheelItems[0]);
195
235
  }
196
236
  };
237
+ useEffect(() => {
238
+ if (!winner || !spinning) return;
239
+ const elapsed = Date.now() - spinStartTime.current;
240
+ const delay = Math.max(0, minSpinDuration - elapsed);
241
+ const timeout = setTimeout(() => {
242
+ stopOnWinner(winner);
243
+ }, delay);
244
+ return () => clearTimeout(timeout);
245
+ }, [winner]);
197
246
 
198
247
  // Animation interpolation for rotation
199
248
  const rotate = rotateValue.interpolate({
@@ -302,7 +351,7 @@ const SpinWheel = ({
302
351
  },
303
352
  children: /*#__PURE__*/_jsx(Button, {
304
353
  style: [styles.actionButton, actionButtonStyle],
305
- onPress: handleSpin,
354
+ onPress: startInfiniteSpin,
306
355
  title: spinButtonText,
307
356
  disabled: spinning,
308
357
  textStyle: [styles.actionButtonText, actionButtonTextStyle],
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useRef","useEffect","View","StyleSheet","Animated","Easing","Svg","Path","G","Text","SvgText","Circle","Button","jsx","_jsx","jsxs","_jsxs","colors","SpinWheel","items","predeterminedWinner","size","spinDuration","enabled","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","centerComponent","wheelItems","length","spinning","setSpinning","_","setWinner","rotateValue","Value","current","rotationRef","listener","addListener","value","removeListener","anglePerItem","generateWheelPaths","map","item","index","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","handleSpin","targetRotation","winnerTargetIndex","winnerId","id","findIndex","targetSegmentCenterAngle","targetNormalizedAngle","currentAbsoluteAngle","currentNormalizedAngle","angleOffset","numberOfFullSpins","floor","random","randomSpins","randomAngle","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","handleSpinEnd","normalizedAngle","winningIndex","adjustedIndex","finalWinnerIndex","winningItem","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","x","y","textColor","fontSize","fontWeight","textAnchor","alignmentBaseline","label","cx","cy","r","stroke","strokeWidth","position","top","left","translateX","translateY","zIndex","wheelCenter","pointerPosition","pointer","borderBottomColor","alignItems","justifyContent","bottom","actionButton","onPress","title","disabled","textStyle","actionButtonText","create","marginTop","marginBottom","overflow","backgroundColor","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","paddingHorizontal","paddingVertical","shadowColor","shadowRadius"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useRef","useEffect","View","StyleSheet","Animated","Easing","Svg","Path","G","Text","SvgText","Circle","Button","jsx","_jsx","jsxs","_jsxs","colors","SpinWheel","items","predeterminedWinner","size","spinDuration","winner","minSpinDuration","enabled","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","centerComponent","wheelItems","length","spinLoop","spinStartTime","spinning","setSpinning","_","setWinner","rotateValue","Value","current","rotationRef","startInfiniteSpin","setValue","Date","now","loop","timing","toValue","duration","easing","linear","useNativeDriver","start","stopOnWinner","winnerValue","stop","winnerId","id","index","findIndex","i","segmentCenter","anglePerItem","targetAngle","currentAngle","offset","finalRotation","out","cubic","listener","addListener","value","removeListener","generateWheelPaths","map","item","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","handleSpin","targetRotation","winnerTargetIndex","targetSegmentCenterAngle","targetNormalizedAngle","currentAbsoluteAngle","currentNormalizedAngle","angleOffset","numberOfFullSpins","floor","random","randomSpins","randomAngle","handleSpinEnd","normalizedAngle","winningIndex","adjustedIndex","finalWinnerIndex","winningItem","elapsed","delay","max","timeout","setTimeout","clearTimeout","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","x","y","textColor","fontSize","fontWeight","textAnchor","alignmentBaseline","label","cx","cy","r","stroke","strokeWidth","position","top","left","translateX","translateY","zIndex","wheelCenter","pointerPosition","pointer","borderBottomColor","alignItems","justifyContent","bottom","actionButton","onPress","title","disabled","textStyle","actionButtonText","create","marginTop","marginBottom","overflow","backgroundColor","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","paddingHorizontal","paddingVertical","shadowColor","shadowRadius"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,9 @@ interface SpinWheelProps {
12
12
  items: SpinWheelItem[];
13
13
  predeterminedWinner?: SpinWheelItem | string | number;
14
14
  size?: number;
15
+ startSpin?: boolean;
16
+ winner?: SpinWheelItem | string | number;
17
+ minSpinDuration?: number;
15
18
  spinDuration?: number;
16
19
  friction?: number;
17
20
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../../../src/components/Wheel/Wheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAOL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD,UAAU,cAAc;IAEtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IAGtD,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAG1C,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,qBAAqB,CAAC,EAAE,SAAS,CAAA;IACjC,iBAAiB,CAAC,EAAE,OAAO,CACvB,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC,CAC5C,CAAC;IAEF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAkUvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../../../src/components/Wheel/Wheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAOL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+BD,UAAU,cAAc;IAEtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IAGtD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAG1C,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IAEvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmYvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "related-ui-components",
3
- "version": "3.2.5",
3
+ "version": "3.2.7",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -57,9 +57,13 @@ interface SpinWheelProps {
57
57
  // Dimensions
58
58
  size?: number;
59
59
 
60
+ startSpin?: boolean; // start spinning immediately
61
+ winner?: SpinWheelItem | string | number; // winner from API
62
+ minSpinDuration?: number; // buffer in ms before stopping
63
+
60
64
  // Behavior
61
65
  spinDuration?: number;
62
- friction?: number;
66
+ friction?: number;
63
67
  enabled?: boolean;
64
68
 
65
69
  // Events
@@ -73,12 +77,10 @@ interface SpinWheelProps {
73
77
  wheelTextStyle?: TextStyle;
74
78
  knobStyle?: ViewStyle;
75
79
  actionButtonStyle?: ViewStyle;
76
- actionButtonTextStyle?: TextStyle
77
- actionButtonProps?: Partial<
78
- Omit<AppButtonProps, "title" | "onPress">
79
- >;
80
+ actionButtonTextStyle?: TextStyle;
81
+ actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
80
82
 
81
- wheelBorderColor?: string;
83
+ wheelBorderColor?: string;
82
84
  wheelBorderWidth?: number;
83
85
  wheelTextColor?: string;
84
86
  knobColor?: string;
@@ -93,6 +95,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
93
95
  predeterminedWinner, // Destructure new prop
94
96
  size = 300,
95
97
  spinDuration = 5000,
98
+ winner,
99
+ minSpinDuration = 2000,
96
100
  enabled = true,
97
101
  onSpinStart,
98
102
  onSpinEnd,
@@ -109,10 +113,13 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
109
113
  wheelTextColor = "#FFFFFF",
110
114
  actionButtonProps,
111
115
  centerSize,
112
- centerComponent
116
+ centerComponent,
113
117
  }) => {
114
118
  const wheelItems = items.length > 0 ? items : [];
115
119
 
120
+ const spinLoop = useRef<Animated.CompositeAnimation | null>(null);
121
+ const spinStartTime = useRef<number>(0);
122
+
116
123
  const [spinning, setSpinning] = useState(false);
117
124
  const [_, setWinner] = useState<SpinWheelItem | null>(null);
118
125
  const rotateValue = useRef(new Animated.Value(0)).current;
@@ -120,6 +127,56 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
120
127
  // Track rotation manually for calculations
121
128
  const rotationRef = useRef(0);
122
129
 
130
+ const startInfiniteSpin = () => {
131
+ rotateValue.setValue(rotationRef.current);
132
+
133
+ spinStartTime.current = Date.now();
134
+
135
+ spinLoop.current = Animated.loop(
136
+ Animated.timing(rotateValue, {
137
+ toValue: rotationRef.current + 1, // 1 = full rotation
138
+ duration: 800,
139
+ easing: Easing.linear,
140
+ useNativeDriver: true,
141
+ })
142
+ );
143
+
144
+ spinLoop.current.start();
145
+ setSpinning(true);
146
+ onSpinStart?.();
147
+ };
148
+
149
+ const stopOnWinner = (winnerValue: SpinWheelItem | string | number) => {
150
+ if (!spinLoop.current) return;
151
+
152
+ spinLoop.current.stop();
153
+ spinLoop.current = null;
154
+
155
+ const winnerId =
156
+ typeof winnerValue === "object" ? winnerValue.id : winnerValue;
157
+
158
+ const index = items.findIndex((i) => i.id === winnerId);
159
+ if (index === -1) return;
160
+
161
+ const segmentCenter = (index + 0.5) * anglePerItem;
162
+ const targetAngle = (270 - segmentCenter + 360) % 360;
163
+
164
+ const currentAngle = (rotationRef.current * 360) % 360;
165
+ const offset = (targetAngle - currentAngle + 360) % 360;
166
+
167
+ const finalRotation = rotationRef.current + (offset + 3 * 360) / 360;
168
+
169
+ Animated.timing(rotateValue, {
170
+ toValue: finalRotation,
171
+ duration: 2500,
172
+ easing: Easing.out(Easing.cubic),
173
+ useNativeDriver: true,
174
+ }).start(() => {
175
+ setSpinning(false);
176
+ onSpinEnd?.(items[index]);
177
+ });
178
+ };
179
+
123
180
  // Update tracked rotation when animation completes
124
181
  useEffect(() => {
125
182
  const listener = rotateValue.addListener(({ value }) => {
@@ -132,8 +189,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
132
189
  }, [rotateValue]);
133
190
 
134
191
  // Calculate angle for each segment
135
- const anglePerItem =
136
- wheelItems.length > 0 ? 360 / wheelItems.length : 0;
192
+ const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
137
193
 
138
194
  // Create wheel segments
139
195
  const generateWheelPaths = () => {
@@ -200,14 +256,13 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
200
256
  }
201
257
 
202
258
  if (winnerTargetIndex !== -1) {
203
- const targetSegmentCenterAngle =
204
- (winnerTargetIndex + 0.5) * anglePerItem;
259
+ const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
205
260
 
206
261
  const targetNormalizedAngle =
207
262
  (270 - targetSegmentCenterAngle + 360) % 360;
208
263
 
209
264
  const currentAbsoluteAngle = rotationRef.current * 360;
210
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
265
+ const currentNormalizedAngle = ((currentAbsoluteAngle % 360) + 360) % 360;
211
266
 
212
267
  // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
213
268
  const angleOffset =
@@ -221,7 +276,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
221
276
  if (targetRotation < 360) {
222
277
  targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
223
278
  }
224
-
225
279
  } else {
226
280
  const randomSpins = 3 + Math.random() * 2;
227
281
  const randomAngle = Math.random() * 360;
@@ -255,10 +309,23 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
255
309
  setWinner(winningItem);
256
310
  onSpinEnd?.(winningItem);
257
311
  } else if (wheelItems.length > 0) {
258
- onSpinEnd?.(wheelItems[0]);
312
+ onSpinEnd?.(wheelItems[0]);
259
313
  }
260
314
  };
261
315
 
316
+ useEffect(() => {
317
+ if (!winner || !spinning) return;
318
+
319
+ const elapsed = Date.now() - spinStartTime.current;
320
+ const delay = Math.max(0, minSpinDuration - elapsed);
321
+
322
+ const timeout = setTimeout(() => {
323
+ stopOnWinner(winner);
324
+ }, delay);
325
+
326
+ return () => clearTimeout(timeout);
327
+ }, [winner]);
328
+
262
329
  // Animation interpolation for rotation
263
330
  const rotate = rotateValue.interpolate({
264
331
  inputRange: [0, 1],
@@ -391,7 +458,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
391
458
  >
392
459
  <Button
393
460
  style={[styles.actionButton, actionButtonStyle]}
394
- onPress={handleSpin}
461
+ onPress={startInfiniteSpin}
395
462
  title={spinButtonText}
396
463
  disabled={spinning}
397
464
  textStyle={[styles.actionButtonText, actionButtonTextStyle]}
@@ -445,7 +512,7 @@ const styles = StyleSheet.create({
445
512
  borderStyle: "solid",
446
513
  borderLeftWidth: 10,
447
514
  borderRightWidth: 10,
448
- borderBottomWidth: 15,
515
+ borderBottomWidth: 15,
449
516
  borderLeftColor: "transparent",
450
517
  borderRightColor: "transparent",
451
518
  },
@@ -463,4 +530,4 @@ const styles = StyleSheet.create({
463
530
  },
464
531
  });
465
532
 
466
- export default SpinWheel;
533
+ export default SpinWheel;