related-ui-components 3.2.6 → 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.
@@ -5,15 +5,66 @@ import { View, StyleSheet, Animated, Easing } from "react-native";
5
5
  import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
6
6
  import { Button } from "../Button/index.js";
7
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- const colors = ["#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080", "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE", "#40E0D0", "#FFD700", "#C0C0C0", "#FFDAB9", "#E6E6FA", "#008080", "#FF7F50", "#DC143C", "#87CEEB", "#7FFF00", "#CCCCFF", "#FF6347", "#FA8072"];
8
+ //default random colors
9
+ const colors = ["#FF0000",
10
+ // Red
11
+ "#FFA500",
12
+ // Orange
13
+ "#FFFF00",
14
+ // Yellow
15
+ "#008000",
16
+ // Green
17
+ "#0000FF",
18
+ // Blue
19
+ "#800080",
20
+ // Purple
21
+ "#FFC0CB",
22
+ // Pink
23
+ "#00FFFF",
24
+ // Cyan
25
+ "#FF00FF",
26
+ // Magenta
27
+ "#00FF00",
28
+ // Lime
29
+ "#4B0082",
30
+ // Indigo
31
+ "#EE82EE",
32
+ // Violet
33
+ "#40E0D0",
34
+ // Turquoise
35
+ "#FFD700",
36
+ // Gold
37
+ "#C0C0C0",
38
+ // Silver
39
+ "#FFDAB9",
40
+ // Peach
41
+ "#E6E6FA",
42
+ // Lavender
43
+ "#008080",
44
+ // Teal
45
+ "#FF7F50",
46
+ // Coral
47
+ "#DC143C",
48
+ // Crimson
49
+ "#87CEEB",
50
+ // Sky Blue
51
+ "#7FFF00",
52
+ // Chartreuse
53
+ "#CCCCFF",
54
+ // Periwinkle
55
+ "#FF6347",
56
+ // Tomato
57
+ "#FA8072" // Salmon
58
+ ];
9
59
  const SpinWheel = ({
10
60
  items,
11
61
  predeterminedWinner,
62
+ // Destructure new prop
12
63
  size = 300,
13
64
  spinDuration = 5000,
65
+ winner,
66
+ minSpinDuration = 2000,
14
67
  enabled = true,
15
- onSpinPress,
16
- minSpinTime = 2000,
17
68
  onSpinStart,
18
69
  onSpinEnd,
19
70
  containerStyle,
@@ -32,15 +83,52 @@ const SpinWheel = ({
32
83
  centerComponent
33
84
  }) => {
34
85
  const wheelItems = items.length > 0 ? items : [];
86
+ const spinLoop = useRef(null);
87
+ const spinStartTime = useRef(0);
35
88
  const [spinning, setSpinning] = useState(false);
36
89
  const [_, setWinner] = useState(null);
37
90
  const rotateValue = useRef(new Animated.Value(0)).current;
91
+
92
+ // Track rotation manually for calculations
38
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
+ };
39
130
 
40
- // Track the async winner state
41
- const asyncWinnerRef = useRef(null);
42
- const spinStartTimeRef = useRef(0);
43
- const continuousSpinRef = useRef(null);
131
+ // Update tracked rotation when animation completes
44
132
  useEffect(() => {
45
133
  const listener = rotateValue.addListener(({
46
134
  value
@@ -51,7 +139,11 @@ const SpinWheel = ({
51
139
  rotateValue.removeListener(listener);
52
140
  };
53
141
  }, [rotateValue]);
142
+
143
+ // Calculate angle for each segment
54
144
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
145
+
146
+ // Create wheel segments
55
147
  const generateWheelPaths = () => {
56
148
  if (wheelItems.length === 0) return [];
57
149
  return wheelItems.map((item, index) => {
@@ -68,45 +160,57 @@ const SpinWheel = ({
68
160
  const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
69
161
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
70
162
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
163
+
164
+ // decorationX and decorationY are calculated but not used in the provided JSX
165
+ // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
166
+ // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
167
+
71
168
  return {
72
169
  path: pathData,
73
170
  item,
74
171
  textX,
75
172
  textY,
173
+ // decorationX,
174
+ // decorationY,
76
175
  angle: (startAngle + endAngle) / 2
77
176
  };
78
177
  });
79
178
  };
80
179
  const wheelPaths = generateWheelPaths();
81
- const startContinuousSpin = () => {
82
- const numberOfSpins = 2;
83
- const targetRotation = numberOfSpins * 360;
84
- continuousSpinRef.current = Animated.loop(Animated.timing(rotateValue, {
85
- toValue: rotationRef.current + targetRotation / 360,
86
- duration: 2000,
87
- easing: Easing.linear,
88
- useNativeDriver: true
89
- }));
90
- continuousSpinRef.current.start();
91
- };
92
- const stopAndLandOnWinner = winner => {
93
- if (continuousSpinRef.current) {
94
- continuousSpinRef.current.stop();
95
- continuousSpinRef.current = null;
180
+
181
+ // Handle spin button press
182
+ const handleSpin = () => {
183
+ if (spinning || !enabled || wheelItems.length === 0) return;
184
+ setSpinning(true);
185
+ onSpinStart?.();
186
+ let targetRotation = 0;
187
+ let winnerTargetIndex = -1;
188
+ if (predeterminedWinner) {
189
+ const winnerId = typeof predeterminedWinner === "object" ? predeterminedWinner.id : predeterminedWinner;
190
+ winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
96
191
  }
97
- const winnerId = typeof winner === "object" ? winner.id : winner;
98
- const winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
99
- if (winnerTargetIndex === -1) {
100
- handleSpinEnd();
101
- return;
192
+ if (winnerTargetIndex !== -1) {
193
+ const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
194
+ const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
195
+ const currentAbsoluteAngle = rotationRef.current * 360;
196
+ const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
197
+
198
+ // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
199
+ const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
200
+
201
+ // Number of full spins (e.g., 3 to 5)
202
+ const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
203
+ targetRotation = numberOfFullSpins * 360 + angleOffset;
204
+
205
+ // Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
206
+ if (targetRotation < 360) {
207
+ targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
208
+ }
209
+ } else {
210
+ const randomSpins = 3 + Math.random() * 2;
211
+ const randomAngle = Math.random() * 360;
212
+ targetRotation = 360 * randomSpins + randomAngle;
102
213
  }
103
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
104
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
105
- const currentAbsoluteAngle = rotationRef.current * 360;
106
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
107
- const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
108
- const additionalSpins = 2;
109
- const targetRotation = additionalSpins * 360 + angleOffset;
110
214
  Animated.timing(rotateValue, {
111
215
  toValue: rotationRef.current + targetRotation / 360,
112
216
  duration: spinDuration,
@@ -114,66 +218,8 @@ const SpinWheel = ({
114
218
  useNativeDriver: true
115
219
  }).start(() => handleSpinEnd());
116
220
  };
117
- const handleSpin = async () => {
118
- if (spinning || !enabled || wheelItems.length === 0) return;
119
- setSpinning(true);
120
- asyncWinnerRef.current = null;
121
- spinStartTimeRef.current = Date.now();
122
- onSpinStart?.();
123
221
 
124
- // If using async API call
125
- if (onSpinPress) {
126
- startContinuousSpin();
127
- try {
128
- const winner = await onSpinPress();
129
- const elapsedTime = Date.now() - spinStartTimeRef.current;
130
- const remainingBufferTime = Math.max(0, minSpinTime - elapsedTime);
131
- if (remainingBufferTime > 0) {
132
- setTimeout(() => {
133
- stopAndLandOnWinner(winner);
134
- }, remainingBufferTime);
135
- } else {
136
- stopAndLandOnWinner(winner);
137
- }
138
- } catch (error) {
139
- console.error("Error fetching winner:", error);
140
- if (continuousSpinRef.current) {
141
- continuousSpinRef.current.stop();
142
- }
143
- setSpinning(false);
144
- }
145
- } else {
146
- // Original behavior with predeterminedWinner
147
- let targetRotation = 0;
148
- let winnerTargetIndex = -1;
149
- if (predeterminedWinner) {
150
- const winnerId = typeof predeterminedWinner === "object" ? predeterminedWinner.id : predeterminedWinner;
151
- winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
152
- }
153
- if (winnerTargetIndex !== -1) {
154
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
155
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
156
- const currentAbsoluteAngle = rotationRef.current * 360;
157
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
158
- const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
159
- const numberOfFullSpins = 3 + Math.floor(Math.random() * 3);
160
- targetRotation = numberOfFullSpins * 360 + angleOffset;
161
- if (targetRotation < 360) {
162
- targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
163
- }
164
- } else {
165
- const randomSpins = 3 + Math.random() * 2;
166
- const randomAngle = Math.random() * 360;
167
- targetRotation = 360 * randomSpins + randomAngle;
168
- }
169
- Animated.timing(rotateValue, {
170
- toValue: rotationRef.current + targetRotation / 360,
171
- duration: spinDuration,
172
- easing: Easing.out(Easing.cubic),
173
- useNativeDriver: true
174
- }).start(() => handleSpinEnd());
175
- }
176
- };
222
+ // Handle spin completion
177
223
  const handleSpinEnd = () => {
178
224
  setSpinning(false);
179
225
  const normalizedAngle = rotationRef.current * 360 % 360;
@@ -188,6 +234,17 @@ const SpinWheel = ({
188
234
  onSpinEnd?.(wheelItems[0]);
189
235
  }
190
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]);
246
+
247
+ // Animation interpolation for rotation
191
248
  const rotate = rotateValue.interpolate({
192
249
  inputRange: [0, 1],
193
250
  outputRange: ["0deg", "360deg"]
@@ -220,11 +277,13 @@ const SpinWheel = ({
220
277
  textX,
221
278
  textY,
222
279
  angle
223
- }) => {
280
+ }, index) => {
224
281
  return /*#__PURE__*/_jsxs(React.Fragment, {
225
282
  children: [/*#__PURE__*/_jsx(Path, {
226
283
  d: path,
227
284
  fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
285
+ // stroke="#FA8072"
286
+ // strokeWidth={1}
228
287
  }), /*#__PURE__*/_jsx(SvgText, {
229
288
  x: textX,
230
289
  y: textY,
@@ -233,7 +292,7 @@ const SpinWheel = ({
233
292
  fontWeight: wheelTextStyle?.fontWeight || "bold",
234
293
  textAnchor: "middle",
235
294
  alignmentBaseline: "central",
236
- transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
295
+ transform: `rotate(${angle + 180}, ${textX}, ${textY} )`,
237
296
  children: item.label
238
297
  })]
239
298
  }, item.id);
@@ -252,6 +311,7 @@ const SpinWheel = ({
252
311
  position: "absolute",
253
312
  top: "50%",
254
313
  left: "50%",
314
+ // Center the component perfectly
255
315
  transform: [{
256
316
  translateX: -(actualCenterSize / 2)
257
317
  }, {
@@ -291,7 +351,7 @@ const SpinWheel = ({
291
351
  },
292
352
  children: /*#__PURE__*/_jsx(Button, {
293
353
  style: [styles.actionButton, actionButtonStyle],
294
- onPress: handleSpin,
354
+ onPress: startInfiniteSpin,
295
355
  title: spinButtonText,
296
356
  disabled: spinning,
297
357
  textStyle: [styles.actionButtonText, actionButtonTextStyle],
@@ -306,7 +366,7 @@ const styles = StyleSheet.create({
306
366
  alignItems: "center",
307
367
  justifyContent: "center",
308
368
  marginTop: 20,
309
- marginBottom: 70
369
+ marginBottom: 70 // Space for the button
310
370
  },
311
371
  wheelContainer: {
312
372
  overflow: "hidden",
@@ -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","onSpinPress","minSpinTime","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","asyncWinnerRef","spinStartTimeRef","continuousSpinRef","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","startContinuousSpin","numberOfSpins","targetRotation","loop","timing","toValue","duration","easing","linear","useNativeDriver","start","stopAndLandOnWinner","winner","stop","winnerId","id","winnerTargetIndex","findIndex","handleSpinEnd","targetSegmentCenterAngle","targetNormalizedAngle","currentAbsoluteAngle","currentNormalizedAngle","angleOffset","additionalSpins","out","cubic","handleSpin","Date","now","elapsedTime","remainingBufferTime","max","setTimeout","error","console","numberOfFullSpins","floor","random","randomSpins","randomAngle","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,11 +12,12 @@ 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;
18
- onSpinPress?: () => Promise<SpinWheelItem | string | number>;
19
- minSpinTime?: number;
20
21
  onSpinStart?: () => void;
21
22
  onSpinEnd?: (item: SpinWheelItem) => void;
22
23
  containerStyle?: ViewStyle;
@@ -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;AAUD,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,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;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA2XvC,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.6",
3
+ "version": "3.2.7",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -20,28 +20,57 @@ export interface SpinWheelItem {
20
20
  textColor?: string;
21
21
  }
22
22
 
23
+ //default random colors
23
24
  const colors = [
24
- "#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080",
25
- "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE",
26
- "#40E0D0", "#FFD700", "#C0C0C0", "#FFDAB9", "#E6E6FA", "#008080",
27
- "#FF7F50", "#DC143C", "#87CEEB", "#7FFF00", "#CCCCFF", "#FF6347",
28
- "#FA8072",
25
+ "#FF0000", // Red
26
+ "#FFA500", // Orange
27
+ "#FFFF00", // Yellow
28
+ "#008000", // Green
29
+ "#0000FF", // Blue
30
+ "#800080", // Purple
31
+ "#FFC0CB", // Pink
32
+ "#00FFFF", // Cyan
33
+ "#FF00FF", // Magenta
34
+ "#00FF00", // Lime
35
+ "#4B0082", // Indigo
36
+ "#EE82EE", // Violet
37
+ "#40E0D0", // Turquoise
38
+ "#FFD700", // Gold
39
+ "#C0C0C0", // Silver
40
+ "#FFDAB9", // Peach
41
+ "#E6E6FA", // Lavender
42
+ "#008080", // Teal
43
+ "#FF7F50", // Coral
44
+ "#DC143C", // Crimson
45
+ "#87CEEB", // Sky Blue
46
+ "#7FFF00", // Chartreuse
47
+ "#CCCCFF", // Periwinkle
48
+ "#FF6347", // Tomato
49
+ "#FA8072", // Salmon
29
50
  ];
30
51
 
31
52
  interface SpinWheelProps {
53
+ // Data
32
54
  items: SpinWheelItem[];
33
55
  predeterminedWinner?: SpinWheelItem | string | number;
56
+
57
+ // Dimensions
34
58
  size?: number;
59
+
60
+ startSpin?: boolean; // start spinning immediately
61
+ winner?: SpinWheelItem | string | number; // winner from API
62
+ minSpinDuration?: number; // buffer in ms before stopping
63
+
64
+ // Behavior
35
65
  spinDuration?: number;
36
66
  friction?: number;
37
67
  enabled?: boolean;
38
-
39
- // New props for async winner
40
- onSpinPress?: () => Promise<SpinWheelItem | string | number>;
41
- minSpinTime?: number; // Minimum time to spin before winner can be set
42
-
68
+
69
+ // Events
43
70
  onSpinStart?: () => void;
44
71
  onSpinEnd?: (item: SpinWheelItem) => void;
72
+
73
+ // Styling
45
74
  containerStyle?: ViewStyle;
46
75
  centerStyle?: ViewStyle;
47
76
  spinButtonText?: string;
@@ -50,22 +79,25 @@ interface SpinWheelProps {
50
79
  actionButtonStyle?: ViewStyle;
51
80
  actionButtonTextStyle?: TextStyle;
52
81
  actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
82
+
53
83
  wheelBorderColor?: string;
54
84
  wheelBorderWidth?: number;
55
85
  wheelTextColor?: string;
56
86
  knobColor?: string;
87
+
57
88
  centerSize?: number;
58
- centerComponent?: React.ReactNode;
89
+
90
+ centerComponent?: React.ReactNode; // Note: centerComponent prop is declared but not used
59
91
  }
60
92
 
61
93
  const SpinWheel: React.FC<SpinWheelProps> = ({
62
94
  items,
63
- predeterminedWinner,
95
+ predeterminedWinner, // Destructure new prop
64
96
  size = 300,
65
97
  spinDuration = 5000,
98
+ winner,
99
+ minSpinDuration = 2000,
66
100
  enabled = true,
67
- onSpinPress,
68
- minSpinTime = 2000,
69
101
  onSpinStart,
70
102
  onSpinEnd,
71
103
  containerStyle,
@@ -85,16 +117,67 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
85
117
  }) => {
86
118
  const wheelItems = items.length > 0 ? items : [];
87
119
 
120
+ const spinLoop = useRef<Animated.CompositeAnimation | null>(null);
121
+ const spinStartTime = useRef<number>(0);
122
+
88
123
  const [spinning, setSpinning] = useState(false);
89
124
  const [_, setWinner] = useState<SpinWheelItem | null>(null);
90
125
  const rotateValue = useRef(new Animated.Value(0)).current;
126
+
127
+ // Track rotation manually for calculations
91
128
  const rotationRef = useRef(0);
92
-
93
- // Track the async winner state
94
- const asyncWinnerRef = useRef<SpinWheelItem | string | number | null>(null);
95
- const spinStartTimeRef = useRef<number>(0);
96
- const continuousSpinRef = useRef<Animated.CompositeAnimation | null>(null);
97
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
+
180
+ // Update tracked rotation when animation completes
98
181
  useEffect(() => {
99
182
  const listener = rotateValue.addListener(({ value }) => {
100
183
  rotationRef.current = value;
@@ -105,8 +188,10 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
105
188
  };
106
189
  }, [rotateValue]);
107
190
 
191
+ // Calculate angle for each segment
108
192
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
109
193
 
194
+ // Create wheel segments
110
195
  const generateWheelPaths = () => {
111
196
  if (wheelItems.length === 0) return [];
112
197
  return wheelItems.map((item, index) => {
@@ -134,11 +219,17 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
134
219
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
135
220
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
136
221
 
222
+ // decorationX and decorationY are calculated but not used in the provided JSX
223
+ // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
224
+ // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
225
+
137
226
  return {
138
227
  path: pathData,
139
228
  item,
140
229
  textX,
141
230
  textY,
231
+ // decorationX,
232
+ // decorationY,
142
233
  angle: (startAngle + endAngle) / 2,
143
234
  };
144
235
  });
@@ -146,49 +237,50 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
146
237
 
147
238
  const wheelPaths = generateWheelPaths();
148
239
 
149
- const startContinuousSpin = () => {
150
- const numberOfSpins = 2;
151
- const targetRotation = numberOfSpins * 360;
240
+ // Handle spin button press
241
+ const handleSpin = () => {
242
+ if (spinning || !enabled || wheelItems.length === 0) return;
152
243
 
153
- continuousSpinRef.current = Animated.loop(
154
- Animated.timing(rotateValue, {
155
- toValue: rotationRef.current + targetRotation / 360,
156
- duration: 2000,
157
- easing: Easing.linear,
158
- useNativeDriver: true,
159
- })
160
- );
244
+ setSpinning(true);
245
+ onSpinStart?.();
161
246
 
162
- continuousSpinRef.current.start();
163
- };
247
+ let targetRotation = 0;
248
+ let winnerTargetIndex = -1;
164
249
 
165
- const stopAndLandOnWinner = (winner: SpinWheelItem | string | number) => {
166
- if (continuousSpinRef.current) {
167
- continuousSpinRef.current.stop();
168
- continuousSpinRef.current = null;
250
+ if (predeterminedWinner) {
251
+ const winnerId =
252
+ typeof predeterminedWinner === "object"
253
+ ? predeterminedWinner.id
254
+ : predeterminedWinner;
255
+ winnerTargetIndex = wheelItems.findIndex((item) => item.id === winnerId);
169
256
  }
170
257
 
171
- const winnerId = typeof winner === "object" ? winner.id : winner;
172
- const winnerTargetIndex = wheelItems.findIndex(
173
- (item) => item.id === winnerId
174
- );
258
+ if (winnerTargetIndex !== -1) {
259
+ const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
175
260
 
176
- if (winnerTargetIndex === -1) {
177
- handleSpinEnd();
178
- return;
179
- }
261
+ const targetNormalizedAngle =
262
+ (270 - targetSegmentCenterAngle + 360) % 360;
180
263
 
181
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
182
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
264
+ const currentAbsoluteAngle = rotationRef.current * 360;
265
+ const currentNormalizedAngle = ((currentAbsoluteAngle % 360) + 360) % 360;
183
266
 
184
- const currentAbsoluteAngle = rotationRef.current * 360;
185
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
267
+ // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
268
+ const angleOffset =
269
+ (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
186
270
 
187
- const angleOffset =
188
- (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
271
+ // Number of full spins (e.g., 3 to 5)
272
+ const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
273
+ targetRotation = numberOfFullSpins * 360 + angleOffset;
189
274
 
190
- const additionalSpins = 2;
191
- const targetRotation = additionalSpins * 360 + angleOffset;
275
+ // Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
276
+ if (targetRotation < 360) {
277
+ targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
278
+ }
279
+ } else {
280
+ const randomSpins = 3 + Math.random() * 2;
281
+ const randomAngle = Math.random() * 360;
282
+ targetRotation = 360 * randomSpins + randomAngle;
283
+ }
192
284
 
193
285
  Animated.timing(rotateValue, {
194
286
  toValue: rotationRef.current + targetRotation / 360,
@@ -198,87 +290,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
198
290
  }).start(() => handleSpinEnd());
199
291
  };
200
292
 
201
- const handleSpin = async () => {
202
- if (spinning || !enabled || wheelItems.length === 0) return;
203
-
204
- setSpinning(true);
205
- asyncWinnerRef.current = null;
206
- spinStartTimeRef.current = Date.now();
207
- onSpinStart?.();
208
-
209
- // If using async API call
210
- if (onSpinPress) {
211
- startContinuousSpin();
212
-
213
- try {
214
- const winner = await onSpinPress();
215
- const elapsedTime = Date.now() - spinStartTimeRef.current;
216
- const remainingBufferTime = Math.max(0, minSpinTime - elapsedTime);
217
-
218
- if (remainingBufferTime > 0) {
219
- setTimeout(() => {
220
- stopAndLandOnWinner(winner);
221
- }, remainingBufferTime);
222
- } else {
223
- stopAndLandOnWinner(winner);
224
- }
225
- } catch (error) {
226
- console.error("Error fetching winner:", error);
227
- if (continuousSpinRef.current) {
228
- continuousSpinRef.current.stop();
229
- }
230
- setSpinning(false);
231
- }
232
- } else {
233
- // Original behavior with predeterminedWinner
234
- let targetRotation = 0;
235
- let winnerTargetIndex = -1;
236
-
237
- if (predeterminedWinner) {
238
- const winnerId =
239
- typeof predeterminedWinner === "object"
240
- ? predeterminedWinner.id
241
- : predeterminedWinner;
242
- winnerTargetIndex = wheelItems.findIndex(
243
- (item) => item.id === winnerId
244
- );
245
- }
246
-
247
- if (winnerTargetIndex !== -1) {
248
- const targetSegmentCenterAngle =
249
- (winnerTargetIndex + 0.5) * anglePerItem;
250
-
251
- const targetNormalizedAngle =
252
- (270 - targetSegmentCenterAngle + 360) % 360;
253
-
254
- const currentAbsoluteAngle = rotationRef.current * 360;
255
- const currentNormalizedAngle =
256
- (currentAbsoluteAngle % 360 + 360) % 360;
257
-
258
- const angleOffset =
259
- (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
260
-
261
- const numberOfFullSpins = 3 + Math.floor(Math.random() * 3);
262
- targetRotation = numberOfFullSpins * 360 + angleOffset;
263
-
264
- if (targetRotation < 360) {
265
- targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
266
- }
267
- } else {
268
- const randomSpins = 3 + Math.random() * 2;
269
- const randomAngle = Math.random() * 360;
270
- targetRotation = 360 * randomSpins + randomAngle;
271
- }
272
-
273
- Animated.timing(rotateValue, {
274
- toValue: rotationRef.current + targetRotation / 360,
275
- duration: spinDuration,
276
- easing: Easing.out(Easing.cubic),
277
- useNativeDriver: true,
278
- }).start(() => handleSpinEnd());
279
- }
280
- };
281
-
293
+ // Handle spin completion
282
294
  const handleSpinEnd = () => {
283
295
  setSpinning(false);
284
296
 
@@ -301,6 +313,20 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
301
313
  }
302
314
  };
303
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
+
329
+ // Animation interpolation for rotation
304
330
  const rotate = rotateValue.interpolate({
305
331
  inputRange: [0, 1],
306
332
  outputRange: ["0deg", "360deg"],
@@ -311,6 +337,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
311
337
  return (
312
338
  <View style={[styles.container, containerStyle]}>
313
339
  <View style={{ width: size, height: size }}>
340
+ {/* The wheel */}
314
341
  <Animated.View
315
342
  style={[
316
343
  styles.wheelContainer,
@@ -324,7 +351,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
324
351
  >
325
352
  <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
326
353
  <G>
327
- {wheelPaths.map(({ path, item, textX, textY, angle }) => {
354
+ {wheelPaths.map(({ path, item, textX, textY, angle }, index) => {
328
355
  return (
329
356
  <React.Fragment key={item.id}>
330
357
  <Path
@@ -334,18 +361,18 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
334
361
  ? colors[Math.floor(Math.random() * colors.length)]
335
362
  : item.color
336
363
  }
364
+ // stroke="#FA8072"
365
+ // strokeWidth={1}
337
366
  />
338
367
  <SvgText
339
368
  x={textX}
340
369
  y={textY}
341
370
  fill={item.textColor || wheelTextColor}
342
371
  fontSize={wheelTextStyle?.fontSize || 14}
343
- fontWeight={
344
- (wheelTextStyle?.fontWeight as any) || "bold"
345
- }
372
+ fontWeight={(wheelTextStyle?.fontWeight as any) || "bold"}
346
373
  textAnchor="middle"
347
374
  alignmentBaseline="central"
348
- transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
375
+ transform={`rotate(${angle + 180}, ${textX}, ${textY} )`}
349
376
  >
350
377
  {item.label}
351
378
  </SvgText>
@@ -367,12 +394,14 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
367
394
  </Svg>
368
395
  </Animated.View>
369
396
 
397
+ {/* The center circle */}
370
398
  {centerComponent ? (
371
399
  <View
372
400
  style={{
373
401
  position: "absolute",
374
402
  top: "50%",
375
403
  left: "50%",
404
+ // Center the component perfectly
376
405
  transform: [
377
406
  { translateX: -(actualCenterSize / 2) },
378
407
  { translateY: -(actualCenterSize / 2) },
@@ -400,6 +429,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
400
429
  />
401
430
  )}
402
431
 
432
+ {/* The pointer is a triangle on top */}
403
433
  <View
404
434
  style={[
405
435
  styles.pointerPosition,
@@ -415,6 +445,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
415
445
  />
416
446
  </View>
417
447
 
448
+ {/* Action Button */}
418
449
  <View
419
450
  style={{
420
451
  position: "absolute",
@@ -427,12 +458,21 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
427
458
  >
428
459
  <Button
429
460
  style={[styles.actionButton, actionButtonStyle]}
430
- onPress={handleSpin}
461
+ onPress={startInfiniteSpin}
431
462
  title={spinButtonText}
432
463
  disabled={spinning}
433
464
  textStyle={[styles.actionButtonText, actionButtonTextStyle]}
434
465
  {...actionButtonProps}
435
466
  />
467
+ {/* <TouchableOpacity
468
+ onPress={handleSpin}
469
+ disabled={spinning || !enabled || wheelItems.length === 0}
470
+ style={[styles.actionButton, actionButtonStyle]}
471
+ >
472
+ <Text style={[styles.actionButtonText, actionButtonTextStyle]}>
473
+ {spinButtonText}
474
+ </Text>
475
+ </TouchableOpacity> */}
436
476
  </View>
437
477
  </View>
438
478
  </View>
@@ -444,7 +484,7 @@ const styles = StyleSheet.create({
444
484
  alignItems: "center",
445
485
  justifyContent: "center",
446
486
  marginTop: 20,
447
- marginBottom: 70,
487
+ marginBottom: 70, // Space for the button
448
488
  },
449
489
  wheelContainer: {
450
490
  overflow: "hidden",