related-ui-components 3.2.6 → 3.2.8

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,62 @@ 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
- predeterminedWinner,
12
61
  size = 300,
13
- spinDuration = 5000,
14
- enabled = true,
15
- onSpinPress,
16
- minSpinTime = 2000,
62
+ winner,
63
+ minSpinDuration = 2000,
17
64
  onSpinStart,
18
65
  onSpinEnd,
19
66
  containerStyle,
@@ -32,15 +79,51 @@ const SpinWheel = ({
32
79
  centerComponent
33
80
  }) => {
34
81
  const wheelItems = items.length > 0 ? items : [];
82
+ const spinLoop = useRef(null);
83
+ const spinStartTime = useRef(0);
35
84
  const [spinning, setSpinning] = useState(false);
36
- const [_, setWinner] = useState(null);
37
85
  const rotateValue = useRef(new Animated.Value(0)).current;
86
+
87
+ // Track rotation manually for calculations
38
88
  const rotationRef = useRef(0);
89
+ const startInfiniteSpin = () => {
90
+ rotateValue.setValue(rotationRef.current);
91
+ spinStartTime.current = Date.now();
92
+ spinLoop.current = Animated.loop(Animated.timing(rotateValue, {
93
+ toValue: rotationRef.current + 1,
94
+ // 1 = full rotation
95
+ duration: 2500,
96
+ easing: Easing.linear,
97
+ useNativeDriver: true
98
+ }));
99
+ spinLoop.current.start();
100
+ setSpinning(true);
101
+ onSpinStart?.();
102
+ };
103
+ const stopOnWinner = winnerValue => {
104
+ if (!spinLoop.current) return;
105
+ spinLoop.current.stop();
106
+ spinLoop.current = null;
107
+ const winnerId = typeof winnerValue === "object" ? winnerValue.id : winnerValue;
108
+ const index = items.findIndex(i => i.id === winnerId);
109
+ if (index === -1) return;
110
+ const segmentCenter = (index + 0.5) * anglePerItem;
111
+ const targetAngle = (270 - segmentCenter + 360) % 360;
112
+ const currentAngle = rotationRef.current * 360 % 360;
113
+ const offset = (targetAngle - currentAngle + 360) % 360;
114
+ const finalRotation = rotationRef.current + (offset + 3 * 360) / 360;
115
+ Animated.timing(rotateValue, {
116
+ toValue: finalRotation,
117
+ duration: 2500,
118
+ easing: Easing.out(Easing.cubic),
119
+ useNativeDriver: true
120
+ }).start(() => {
121
+ setSpinning(false);
122
+ onSpinEnd?.(items[index]);
123
+ });
124
+ };
39
125
 
40
- // Track the async winner state
41
- const asyncWinnerRef = useRef(null);
42
- const spinStartTimeRef = useRef(0);
43
- const continuousSpinRef = useRef(null);
126
+ // Update tracked rotation when animation completes
44
127
  useEffect(() => {
45
128
  const listener = rotateValue.addListener(({
46
129
  value
@@ -51,7 +134,11 @@ const SpinWheel = ({
51
134
  rotateValue.removeListener(listener);
52
135
  };
53
136
  }, [rotateValue]);
137
+
138
+ // Calculate angle for each segment
54
139
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
140
+
141
+ // Create wheel segments
55
142
  const generateWheelPaths = () => {
56
143
  if (wheelItems.length === 0) return [];
57
144
  return wheelItems.map((item, index) => {
@@ -68,126 +155,34 @@ const SpinWheel = ({
68
155
  const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
69
156
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
70
157
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
158
+
159
+ // decorationX and decorationY are calculated but not used in the provided JSX
160
+ // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
161
+ // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
162
+
71
163
  return {
72
164
  path: pathData,
73
165
  item,
74
166
  textX,
75
167
  textY,
168
+ // decorationX,
169
+ // decorationY,
76
170
  angle: (startAngle + endAngle) / 2
77
171
  };
78
172
  });
79
173
  };
80
174
  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;
96
- }
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;
102
- }
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
- Animated.timing(rotateValue, {
111
- toValue: rotationRef.current + targetRotation / 360,
112
- duration: spinDuration,
113
- easing: Easing.out(Easing.cubic),
114
- useNativeDriver: true
115
- }).start(() => handleSpinEnd());
116
- };
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?.();
175
+ useEffect(() => {
176
+ if (!winner || !spinning) return;
177
+ const elapsed = Date.now() - spinStartTime.current;
178
+ const delay = Math.max(0, minSpinDuration - elapsed);
179
+ const timeout = setTimeout(() => {
180
+ stopOnWinner(winner);
181
+ }, delay);
182
+ return () => clearTimeout(timeout);
183
+ }, [winner]);
123
184
 
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
- };
177
- const handleSpinEnd = () => {
178
- setSpinning(false);
179
- const normalizedAngle = rotationRef.current * 360 % 360;
180
- const winningIndex = Math.floor((normalizedAngle - 270) % 360 / anglePerItem);
181
- const adjustedIndex = (wheelItems.length - 1 - winningIndex) % wheelItems.length;
182
- const finalWinnerIndex = adjustedIndex >= 0 ? adjustedIndex : wheelItems.length + adjustedIndex;
183
- if (finalWinnerIndex >= 0 && finalWinnerIndex < wheelItems.length) {
184
- const winningItem = wheelItems[finalWinnerIndex];
185
- setWinner(winningItem);
186
- onSpinEnd?.(winningItem);
187
- } else if (wheelItems.length > 0) {
188
- onSpinEnd?.(wheelItems[0]);
189
- }
190
- };
185
+ // Animation interpolation for rotation
191
186
  const rotate = rotateValue.interpolate({
192
187
  inputRange: [0, 1],
193
188
  outputRange: ["0deg", "360deg"]
@@ -220,11 +215,13 @@ const SpinWheel = ({
220
215
  textX,
221
216
  textY,
222
217
  angle
223
- }) => {
218
+ }, index) => {
224
219
  return /*#__PURE__*/_jsxs(React.Fragment, {
225
220
  children: [/*#__PURE__*/_jsx(Path, {
226
221
  d: path,
227
222
  fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
223
+ // stroke="#FA8072"
224
+ // strokeWidth={1}
228
225
  }), /*#__PURE__*/_jsx(SvgText, {
229
226
  x: textX,
230
227
  y: textY,
@@ -233,7 +230,7 @@ const SpinWheel = ({
233
230
  fontWeight: wheelTextStyle?.fontWeight || "bold",
234
231
  textAnchor: "middle",
235
232
  alignmentBaseline: "central",
236
- transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
233
+ transform: `rotate(${angle + 180}, ${textX}, ${textY} )`,
237
234
  children: item.label
238
235
  })]
239
236
  }, item.id);
@@ -252,6 +249,7 @@ const SpinWheel = ({
252
249
  position: "absolute",
253
250
  top: "50%",
254
251
  left: "50%",
252
+ // Center the component perfectly
255
253
  transform: [{
256
254
  translateX: -(actualCenterSize / 2)
257
255
  }, {
@@ -291,7 +289,7 @@ const SpinWheel = ({
291
289
  },
292
290
  children: /*#__PURE__*/_jsx(Button, {
293
291
  style: [styles.actionButton, actionButtonStyle],
294
- onPress: handleSpin,
292
+ onPress: startInfiniteSpin,
295
293
  title: spinButtonText,
296
294
  disabled: spinning,
297
295
  textStyle: [styles.actionButtonText, actionButtonTextStyle],
@@ -306,7 +304,7 @@ const styles = StyleSheet.create({
306
304
  alignItems: "center",
307
305
  justifyContent: "center",
308
306
  marginTop: 20,
309
- marginBottom: 70
307
+ marginBottom: 70 // Space for the button
310
308
  },
311
309
  wheelContainer: {
312
310
  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","size","winner","minSpinDuration","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","centerComponent","wheelItems","length","spinLoop","spinStartTime","spinning","setSpinning","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","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","floor","random","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,CAmTvC,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.8",
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,22 @@ 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,
64
95
  size = 300,
65
- spinDuration = 5000,
66
- enabled = true,
67
- onSpinPress,
68
- minSpinTime = 2000,
96
+ winner,
97
+ minSpinDuration = 2000,
69
98
  onSpinStart,
70
99
  onSpinEnd,
71
100
  containerStyle,
@@ -85,16 +114,66 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
85
114
  }) => {
86
115
  const wheelItems = items.length > 0 ? items : [];
87
116
 
117
+ const spinLoop = useRef<Animated.CompositeAnimation | null>(null);
118
+ const spinStartTime = useRef<number>(0);
119
+
88
120
  const [spinning, setSpinning] = useState(false);
89
- const [_, setWinner] = useState<SpinWheelItem | null>(null);
90
121
  const rotateValue = useRef(new Animated.Value(0)).current;
122
+
123
+ // Track rotation manually for calculations
91
124
  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
125
 
126
+ const startInfiniteSpin = () => {
127
+ rotateValue.setValue(rotationRef.current);
128
+
129
+ spinStartTime.current = Date.now();
130
+
131
+ spinLoop.current = Animated.loop(
132
+ Animated.timing(rotateValue, {
133
+ toValue: rotationRef.current + 1, // 1 = full rotation
134
+ duration: 2500,
135
+ easing: Easing.linear,
136
+ useNativeDriver: true,
137
+ })
138
+ );
139
+
140
+ spinLoop.current.start();
141
+ setSpinning(true);
142
+ onSpinStart?.();
143
+ };
144
+
145
+ const stopOnWinner = (winnerValue: SpinWheelItem | string | number) => {
146
+ if (!spinLoop.current) return;
147
+
148
+ spinLoop.current.stop();
149
+ spinLoop.current = null;
150
+
151
+ const winnerId =
152
+ typeof winnerValue === "object" ? winnerValue.id : winnerValue;
153
+
154
+ const index = items.findIndex((i) => i.id === winnerId);
155
+ if (index === -1) return;
156
+
157
+ const segmentCenter = (index + 0.5) * anglePerItem;
158
+ const targetAngle = (270 - segmentCenter + 360) % 360;
159
+
160
+ const currentAngle = (rotationRef.current * 360) % 360;
161
+ const offset = (targetAngle - currentAngle + 360) % 360;
162
+
163
+ const finalRotation = rotationRef.current + (offset + 3 * 360) / 360;
164
+
165
+ Animated.timing(rotateValue, {
166
+ toValue: finalRotation,
167
+ duration: 2500,
168
+ easing: Easing.out(Easing.cubic),
169
+ useNativeDriver: true,
170
+ }).start(() => {
171
+ setSpinning(false);
172
+ onSpinEnd?.(items[index]);
173
+ });
174
+ };
175
+
176
+ // Update tracked rotation when animation completes
98
177
  useEffect(() => {
99
178
  const listener = rotateValue.addListener(({ value }) => {
100
179
  rotationRef.current = value;
@@ -105,8 +184,10 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
105
184
  };
106
185
  }, [rotateValue]);
107
186
 
187
+ // Calculate angle for each segment
108
188
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
109
189
 
190
+ // Create wheel segments
110
191
  const generateWheelPaths = () => {
111
192
  if (wheelItems.length === 0) return [];
112
193
  return wheelItems.map((item, index) => {
@@ -134,11 +215,17 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
134
215
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
135
216
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
136
217
 
218
+ // decorationX and decorationY are calculated but not used in the provided JSX
219
+ // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
220
+ // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
221
+
137
222
  return {
138
223
  path: pathData,
139
224
  item,
140
225
  textX,
141
226
  textY,
227
+ // decorationX,
228
+ // decorationY,
142
229
  angle: (startAngle + endAngle) / 2,
143
230
  };
144
231
  });
@@ -146,161 +233,20 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
146
233
 
147
234
  const wheelPaths = generateWheelPaths();
148
235
 
149
- const startContinuousSpin = () => {
150
- const numberOfSpins = 2;
151
- const targetRotation = numberOfSpins * 360;
152
-
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
- );
161
-
162
- continuousSpinRef.current.start();
163
- };
164
-
165
- const stopAndLandOnWinner = (winner: SpinWheelItem | string | number) => {
166
- if (continuousSpinRef.current) {
167
- continuousSpinRef.current.stop();
168
- continuousSpinRef.current = null;
169
- }
170
-
171
- const winnerId = typeof winner === "object" ? winner.id : winner;
172
- const winnerTargetIndex = wheelItems.findIndex(
173
- (item) => item.id === winnerId
174
- );
175
-
176
- if (winnerTargetIndex === -1) {
177
- handleSpinEnd();
178
- return;
179
- }
180
-
181
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
182
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
183
-
184
- const currentAbsoluteAngle = rotationRef.current * 360;
185
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
186
-
187
- const angleOffset =
188
- (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
189
-
190
- const additionalSpins = 2;
191
- const targetRotation = additionalSpins * 360 + angleOffset;
192
-
193
- Animated.timing(rotateValue, {
194
- toValue: rotationRef.current + targetRotation / 360,
195
- duration: spinDuration,
196
- easing: Easing.out(Easing.cubic),
197
- useNativeDriver: true,
198
- }).start(() => handleSpinEnd());
199
- };
200
-
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
- }
236
+ useEffect(() => {
237
+ if (!winner || !spinning) return;
272
238
 
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
- };
239
+ const elapsed = Date.now() - spinStartTime.current;
240
+ const delay = Math.max(0, minSpinDuration - elapsed);
281
241
 
282
- const handleSpinEnd = () => {
283
- setSpinning(false);
242
+ const timeout = setTimeout(() => {
243
+ stopOnWinner(winner);
244
+ }, delay);
284
245
 
285
- const normalizedAngle = (rotationRef.current * 360) % 360;
286
- const winningIndex = Math.floor(
287
- ((normalizedAngle - 270) % 360) / anglePerItem
288
- );
289
- const adjustedIndex =
290
- (wheelItems.length - 1 - winningIndex) % wheelItems.length;
291
-
292
- const finalWinnerIndex =
293
- adjustedIndex >= 0 ? adjustedIndex : wheelItems.length + adjustedIndex;
294
-
295
- if (finalWinnerIndex >= 0 && finalWinnerIndex < wheelItems.length) {
296
- const winningItem = wheelItems[finalWinnerIndex];
297
- setWinner(winningItem);
298
- onSpinEnd?.(winningItem);
299
- } else if (wheelItems.length > 0) {
300
- onSpinEnd?.(wheelItems[0]);
301
- }
302
- };
246
+ return () => clearTimeout(timeout);
247
+ }, [winner]);
303
248
 
249
+ // Animation interpolation for rotation
304
250
  const rotate = rotateValue.interpolate({
305
251
  inputRange: [0, 1],
306
252
  outputRange: ["0deg", "360deg"],
@@ -311,6 +257,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
311
257
  return (
312
258
  <View style={[styles.container, containerStyle]}>
313
259
  <View style={{ width: size, height: size }}>
260
+ {/* The wheel */}
314
261
  <Animated.View
315
262
  style={[
316
263
  styles.wheelContainer,
@@ -324,7 +271,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
324
271
  >
325
272
  <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
326
273
  <G>
327
- {wheelPaths.map(({ path, item, textX, textY, angle }) => {
274
+ {wheelPaths.map(({ path, item, textX, textY, angle }, index) => {
328
275
  return (
329
276
  <React.Fragment key={item.id}>
330
277
  <Path
@@ -334,18 +281,18 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
334
281
  ? colors[Math.floor(Math.random() * colors.length)]
335
282
  : item.color
336
283
  }
284
+ // stroke="#FA8072"
285
+ // strokeWidth={1}
337
286
  />
338
287
  <SvgText
339
288
  x={textX}
340
289
  y={textY}
341
290
  fill={item.textColor || wheelTextColor}
342
291
  fontSize={wheelTextStyle?.fontSize || 14}
343
- fontWeight={
344
- (wheelTextStyle?.fontWeight as any) || "bold"
345
- }
292
+ fontWeight={(wheelTextStyle?.fontWeight as any) || "bold"}
346
293
  textAnchor="middle"
347
294
  alignmentBaseline="central"
348
- transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
295
+ transform={`rotate(${angle + 180}, ${textX}, ${textY} )`}
349
296
  >
350
297
  {item.label}
351
298
  </SvgText>
@@ -367,12 +314,14 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
367
314
  </Svg>
368
315
  </Animated.View>
369
316
 
317
+ {/* The center circle */}
370
318
  {centerComponent ? (
371
319
  <View
372
320
  style={{
373
321
  position: "absolute",
374
322
  top: "50%",
375
323
  left: "50%",
324
+ // Center the component perfectly
376
325
  transform: [
377
326
  { translateX: -(actualCenterSize / 2) },
378
327
  { translateY: -(actualCenterSize / 2) },
@@ -400,6 +349,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
400
349
  />
401
350
  )}
402
351
 
352
+ {/* The pointer is a triangle on top */}
403
353
  <View
404
354
  style={[
405
355
  styles.pointerPosition,
@@ -415,6 +365,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
415
365
  />
416
366
  </View>
417
367
 
368
+ {/* Action Button */}
418
369
  <View
419
370
  style={{
420
371
  position: "absolute",
@@ -427,12 +378,21 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
427
378
  >
428
379
  <Button
429
380
  style={[styles.actionButton, actionButtonStyle]}
430
- onPress={handleSpin}
381
+ onPress={startInfiniteSpin}
431
382
  title={spinButtonText}
432
383
  disabled={spinning}
433
384
  textStyle={[styles.actionButtonText, actionButtonTextStyle]}
434
385
  {...actionButtonProps}
435
386
  />
387
+ {/* <TouchableOpacity
388
+ onPress={handleSpin}
389
+ disabled={spinning || !enabled || wheelItems.length === 0}
390
+ style={[styles.actionButton, actionButtonStyle]}
391
+ >
392
+ <Text style={[styles.actionButtonText, actionButtonTextStyle]}>
393
+ {spinButtonText}
394
+ </Text>
395
+ </TouchableOpacity> */}
436
396
  </View>
437
397
  </View>
438
398
  </View>
@@ -444,7 +404,7 @@ const styles = StyleSheet.create({
444
404
  alignItems: "center",
445
405
  justifyContent: "center",
446
406
  marginTop: 20,
447
- marginBottom: 70,
407
+ marginBottom: 70, // Space for the button
448
408
  },
449
409
  wheelContainer: {
450
410
  overflow: "hidden",