related-ui-components 3.2.5 → 3.2.6

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,64 +5,15 @@ 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
- //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
- ];
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"];
59
9
  const SpinWheel = ({
60
10
  items,
61
11
  predeterminedWinner,
62
- // Destructure new prop
63
12
  size = 300,
64
13
  spinDuration = 5000,
65
14
  enabled = true,
15
+ onSpinPress,
16
+ minSpinTime = 2000,
66
17
  onSpinStart,
67
18
  onSpinEnd,
68
19
  containerStyle,
@@ -84,11 +35,12 @@ const SpinWheel = ({
84
35
  const [spinning, setSpinning] = useState(false);
85
36
  const [_, setWinner] = useState(null);
86
37
  const rotateValue = useRef(new Animated.Value(0)).current;
87
-
88
- // Track rotation manually for calculations
89
38
  const rotationRef = useRef(0);
90
39
 
91
- // Update tracked rotation when animation completes
40
+ // Track the async winner state
41
+ const asyncWinnerRef = useRef(null);
42
+ const spinStartTimeRef = useRef(0);
43
+ const continuousSpinRef = useRef(null);
92
44
  useEffect(() => {
93
45
  const listener = rotateValue.addListener(({
94
46
  value
@@ -99,11 +51,7 @@ const SpinWheel = ({
99
51
  rotateValue.removeListener(listener);
100
52
  };
101
53
  }, [rotateValue]);
102
-
103
- // Calculate angle for each segment
104
54
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
105
-
106
- // Create wheel segments
107
55
  const generateWheelPaths = () => {
108
56
  if (wheelItems.length === 0) return [];
109
57
  return wheelItems.map((item, index) => {
@@ -120,57 +68,45 @@ const SpinWheel = ({
120
68
  const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
121
69
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
122
70
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
123
-
124
- // decorationX and decorationY are calculated but not used in the provided JSX
125
- // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
126
- // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
127
-
128
71
  return {
129
72
  path: pathData,
130
73
  item,
131
74
  textX,
132
75
  textY,
133
- // decorationX,
134
- // decorationY,
135
76
  angle: (startAngle + endAngle) / 2
136
77
  };
137
78
  });
138
79
  };
139
80
  const wheelPaths = generateWheelPaths();
140
-
141
- // Handle spin button press
142
- const handleSpin = () => {
143
- if (spinning || !enabled || wheelItems.length === 0) return;
144
- setSpinning(true);
145
- onSpinStart?.();
146
- let targetRotation = 0;
147
- let winnerTargetIndex = -1;
148
- if (predeterminedWinner) {
149
- const winnerId = typeof predeterminedWinner === "object" ? predeterminedWinner.id : predeterminedWinner;
150
- winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
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;
151
96
  }
152
- if (winnerTargetIndex !== -1) {
153
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
154
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
155
- const currentAbsoluteAngle = rotationRef.current * 360;
156
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
157
-
158
- // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
159
- const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
160
-
161
- // Number of full spins (e.g., 3 to 5)
162
- const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
163
- targetRotation = numberOfFullSpins * 360 + angleOffset;
164
-
165
- // Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
166
- if (targetRotation < 360) {
167
- targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
168
- }
169
- } else {
170
- const randomSpins = 3 + Math.random() * 2;
171
- const randomAngle = Math.random() * 360;
172
- targetRotation = 360 * randomSpins + randomAngle;
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;
173
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;
174
110
  Animated.timing(rotateValue, {
175
111
  toValue: rotationRef.current + targetRotation / 360,
176
112
  duration: spinDuration,
@@ -178,8 +114,66 @@ const SpinWheel = ({
178
114
  useNativeDriver: true
179
115
  }).start(() => handleSpinEnd());
180
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?.();
181
123
 
182
- // Handle spin completion
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
+ };
183
177
  const handleSpinEnd = () => {
184
178
  setSpinning(false);
185
179
  const normalizedAngle = rotationRef.current * 360 % 360;
@@ -194,8 +188,6 @@ const SpinWheel = ({
194
188
  onSpinEnd?.(wheelItems[0]);
195
189
  }
196
190
  };
197
-
198
- // Animation interpolation for rotation
199
191
  const rotate = rotateValue.interpolate({
200
192
  inputRange: [0, 1],
201
193
  outputRange: ["0deg", "360deg"]
@@ -228,13 +220,11 @@ const SpinWheel = ({
228
220
  textX,
229
221
  textY,
230
222
  angle
231
- }, index) => {
223
+ }) => {
232
224
  return /*#__PURE__*/_jsxs(React.Fragment, {
233
225
  children: [/*#__PURE__*/_jsx(Path, {
234
226
  d: path,
235
227
  fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
236
- // stroke="#FA8072"
237
- // strokeWidth={1}
238
228
  }), /*#__PURE__*/_jsx(SvgText, {
239
229
  x: textX,
240
230
  y: textY,
@@ -243,7 +233,7 @@ const SpinWheel = ({
243
233
  fontWeight: wheelTextStyle?.fontWeight || "bold",
244
234
  textAnchor: "middle",
245
235
  alignmentBaseline: "central",
246
- transform: `rotate(${angle + 180}, ${textX}, ${textY} )`,
236
+ transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
247
237
  children: item.label
248
238
  })]
249
239
  }, item.id);
@@ -262,7 +252,6 @@ const SpinWheel = ({
262
252
  position: "absolute",
263
253
  top: "50%",
264
254
  left: "50%",
265
- // Center the component perfectly
266
255
  transform: [{
267
256
  translateX: -(actualCenterSize / 2)
268
257
  }, {
@@ -317,7 +306,7 @@ const styles = StyleSheet.create({
317
306
  alignItems: "center",
318
307
  justifyContent: "center",
319
308
  marginTop: 20,
320
- marginBottom: 70 // Space for the button
309
+ marginBottom: 70
321
310
  },
322
311
  wheelContainer: {
323
312
  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","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","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":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,MAAM,EAAEC,SAAS,QAAQ,OAAO;AAC1D,SACEC,IAAI,EACJC,UAAU,EACVC,QAAQ,EAGRC,MAAM,QAGD,cAAc;AACrB,SAASC,GAAG,EAAEC,IAAI,EAAEC,CAAC,EAAEC,IAAI,IAAIC,OAAO,EAAEC,MAAM,QAAQ,kBAAkB;AACxE,SAAyBC,MAAM,QAAQ,oBAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUnD,MAAMC,MAAM,GAAG,CACb,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAChE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAChE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAChE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAChE,SAAS,CACV;AAgCD,MAAMC,SAAmC,GAAGA,CAAC;EAC3CC,KAAK;EACLC,mBAAmB;EACnBC,IAAI,GAAG,GAAG;EACVC,YAAY,GAAG,IAAI;EACnBC,OAAO,GAAG,IAAI;EACdC,WAAW;EACXC,WAAW,GAAG,IAAI;EAClBC,WAAW;EACXC,SAAS;EACTC,cAAc;EACdC,WAAW;EACXC,cAAc,GAAG,MAAM;EACvBC,cAAc;EACdC,SAAS;EACTC,SAAS,GAAG,SAAS;EACrBC,iBAAiB;EACjBC,qBAAqB;EACrBC,gBAAgB;EAChBC,gBAAgB;EAChBC,cAAc,GAAG,SAAS;EAC1BC,iBAAiB;EACjBC,UAAU;EACVC;AACF,CAAC,KAAK;EACJ,MAAMC,UAAU,GAAGvB,KAAK,CAACwB,MAAM,GAAG,CAAC,GAAGxB,KAAK,GAAG,EAAE;EAEhD,MAAM,CAACyB,QAAQ,EAAEC,WAAW,CAAC,GAAG9C,QAAQ,CAAC,KAAK,CAAC;EAC/C,MAAM,CAAC+C,CAAC,EAAEC,SAAS,CAAC,GAAGhD,QAAQ,CAAuB,IAAI,CAAC;EAC3D,MAAMiD,WAAW,GAAGhD,MAAM,CAAC,IAAII,QAAQ,CAAC6C,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EACzD,MAAMC,WAAW,GAAGnD,MAAM,CAAC,CAAC,CAAC;;EAE7B;EACA,MAAMoD,cAAc,GAAGpD,MAAM,CAAyC,IAAI,CAAC;EAC3E,MAAMqD,gBAAgB,GAAGrD,MAAM,CAAS,CAAC,CAAC;EAC1C,MAAMsD,iBAAiB,GAAGtD,MAAM,CAAqC,IAAI,CAAC;EAE1EC,SAAS,CAAC,MAAM;IACd,MAAMsD,QAAQ,GAAGP,WAAW,CAACQ,WAAW,CAAC,CAAC;MAAEC;IAAM,CAAC,KAAK;MACtDN,WAAW,CAACD,OAAO,GAAGO,KAAK;IAC7B,CAAC,CAAC;IAEF,OAAO,MAAM;MACXT,WAAW,CAACU,cAAc,CAACH,QAAQ,CAAC;IACtC,CAAC;EACH,CAAC,EAAE,CAACP,WAAW,CAAC,CAAC;EAEjB,MAAMW,YAAY,GAAGjB,UAAU,CAACC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGD,UAAU,CAACC,MAAM,GAAG,CAAC;EAExE,MAAMiB,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAIlB,UAAU,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;IACtC,OAAOD,UAAU,CAACmB,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MACrC,MAAMC,UAAU,GAAGD,KAAK,GAAGJ,YAAY;MACvC,MAAMM,QAAQ,GAAG,CAACF,KAAK,GAAG,CAAC,IAAIJ,YAAY;MAE3C,MAAMO,QAAQ,GAAIF,UAAU,GAAGG,IAAI,CAACC,EAAE,GAAI,GAAG;MAC7C,MAAMC,MAAM,GAAIJ,QAAQ,GAAGE,IAAI,CAACC,EAAE,GAAI,GAAG;MAEzC,MAAME,EAAE,GAAGjD,IAAI,GAAG,CAAC,GAAIA,IAAI,GAAG,CAAC,GAAI8C,IAAI,CAACI,GAAG,CAACL,QAAQ,CAAC;MACrD,MAAMM,EAAE,GAAGnD,IAAI,GAAG,CAAC,GAAIA,IAAI,GAAG,CAAC,GAAI8C,IAAI,CAACM,GAAG,CAACP,QAAQ,CAAC;MACrD,MAAMQ,EAAE,GAAGrD,IAAI,GAAG,CAAC,GAAIA,IAAI,GAAG,CAAC,GAAI8C,IAAI,CAACI,GAAG,CAACF,MAAM,CAAC;MACnD,MAAMM,EAAE,GAAGtD,IAAI,GAAG,CAAC,GAAIA,IAAI,GAAG,CAAC,GAAI8C,IAAI,CAACM,GAAG,CAACJ,MAAM,CAAC;MAEnD,MAAMO,YAAY,GAAGX,QAAQ,GAAGD,UAAU,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG;MAE7D,MAAMa,QAAQ,GAAG,CACf,KAAKxD,IAAI,GAAG,CAAC,IAAIA,IAAI,GAAG,CAAC,EAAE,EAC3B,KAAKiD,EAAE,IAAIE,EAAE,EAAE,EACf,KAAKnD,IAAI,GAAG,CAAC,IAAIA,IAAI,GAAG,CAAC,MAAMuD,YAAY,MAAMF,EAAE,IAAIC,EAAE,EAAE,EAC3D,GAAG,CACJ,CAACG,IAAI,CAAC,GAAG,CAAC;MAEX,MAAMC,MAAM,GAAI,CAACf,UAAU,GAAGC,QAAQ,IAAI,CAAC,IAAKE,IAAI,CAACC,EAAE,GAAG,GAAG,CAAC;MAC9D,MAAMY,KAAK,GAAG3D,IAAI,GAAG,CAAC,GAAGA,IAAI,GAAG,IAAI,GAAG8C,IAAI,CAACI,GAAG,CAACQ,MAAM,CAAC;MACvD,MAAME,KAAK,GAAG5D,IAAI,GAAG,CAAC,GAAGA,IAAI,GAAG,IAAI,GAAG8C,IAAI,CAACM,GAAG,CAACM,MAAM,CAAC;MAEvD,OAAO;QACLG,IAAI,EAAEL,QAAQ;QACdf,IAAI;QACJkB,KAAK;QACLC,KAAK;QACLE,KAAK,EAAE,CAACnB,UAAU,GAAGC,QAAQ,IAAI;MACnC,CAAC;IACH,CAAC,CAAC;EACJ,CAAC;EAED,MAAMmB,UAAU,GAAGxB,kBAAkB,CAAC,CAAC;EAEvC,MAAMyB,mBAAmB,GAAGA,CAAA,KAAM;IAChC,MAAMC,aAAa,GAAG,CAAC;IACvB,MAAMC,cAAc,GAAGD,aAAa,GAAG,GAAG;IAE1ChC,iBAAiB,CAACJ,OAAO,GAAG9C,QAAQ,CAACoF,IAAI,CACvCpF,QAAQ,CAACqF,MAAM,CAACzC,WAAW,EAAE;MAC3B0C,OAAO,EAAEvC,WAAW,CAACD,OAAO,GAAGqC,cAAc,GAAG,GAAG;MACnDI,QAAQ,EAAE,IAAI;MACdC,MAAM,EAAEvF,MAAM,CAACwF,MAAM;MACrBC,eAAe,EAAE;IACnB,CAAC,CACH,CAAC;IAEDxC,iBAAiB,CAACJ,OAAO,CAAC6C,KAAK,CAAC,CAAC;EACnC,CAAC;EAED,MAAMC,mBAAmB,GAAIC,MAAuC,IAAK;IACvE,IAAI3C,iBAAiB,CAACJ,OAAO,EAAE;MAC7BI,iBAAiB,CAACJ,OAAO,CAACgD,IAAI,CAAC,CAAC;MAChC5C,iBAAiB,CAACJ,OAAO,GAAG,IAAI;IAClC;IAEA,MAAMiD,QAAQ,GAAG,OAAOF,MAAM,KAAK,QAAQ,GAAGA,MAAM,CAACG,EAAE,GAAGH,MAAM;IAChE,MAAMI,iBAAiB,GAAG3D,UAAU,CAAC4D,SAAS,CAC3CxC,IAAI,IAAKA,IAAI,CAACsC,EAAE,KAAKD,QACxB,CAAC;IAED,IAAIE,iBAAiB,KAAK,CAAC,CAAC,EAAE;MAC5BE,aAAa,CAAC,CAAC;MACf;IACF;IAEA,MAAMC,wBAAwB,GAAG,CAACH,iBAAiB,GAAG,GAAG,IAAI1C,YAAY;IACzE,MAAM8C,qBAAqB,GAAG,CAAC,GAAG,GAAGD,wBAAwB,GAAG,GAAG,IAAI,GAAG;IAE1E,MAAME,oBAAoB,GAAGvD,WAAW,CAACD,OAAO,GAAG,GAAG;IACtD,MAAMyD,sBAAsB,GAAG,CAACD,oBAAoB,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG;IAEvE,MAAME,WAAW,GACf,CAACH,qBAAqB,GAAGE,sBAAsB,GAAG,GAAG,IAAI,GAAG;IAE9D,MAAME,eAAe,GAAG,CAAC;IACzB,MAAMtB,cAAc,GAAGsB,eAAe,GAAG,GAAG,GAAGD,WAAW;IAE1DxG,QAAQ,CAACqF,MAAM,CAACzC,WAAW,EAAE;MAC3B0C,OAAO,EAAEvC,WAAW,CAACD,OAAO,GAAGqC,cAAc,GAAG,GAAG;MACnDI,QAAQ,EAAErE,YAAY;MACtBsE,MAAM,EAAEvF,MAAM,CAACyG,GAAG,CAACzG,MAAM,CAAC0G,KAAK,CAAC;MAChCjB,eAAe,EAAE;IACnB,CAAC,CAAC,CAACC,KAAK,CAAC,MAAMQ,aAAa,CAAC,CAAC,CAAC;EACjC,CAAC;EAED,MAAMS,UAAU,GAAG,MAAAA,CAAA,KAAY;IAC7B,IAAIpE,QAAQ,IAAI,CAACrB,OAAO,IAAImB,UAAU,CAACC,MAAM,KAAK,CAAC,EAAE;IAErDE,WAAW,CAAC,IAAI,CAAC;IACjBO,cAAc,CAACF,OAAO,GAAG,IAAI;IAC7BG,gBAAgB,CAACH,OAAO,GAAG+D,IAAI,CAACC,GAAG,CAAC,CAAC;IACrCxF,WAAW,GAAG,CAAC;;IAEf;IACA,IAAIF,WAAW,EAAE;MACf6D,mBAAmB,CAAC,CAAC;MAErB,IAAI;QACF,MAAMY,MAAM,GAAG,MAAMzE,WAAW,CAAC,CAAC;QAClC,MAAM2F,WAAW,GAAGF,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG7D,gBAAgB,CAACH,OAAO;QACzD,MAAMkE,mBAAmB,GAAGjD,IAAI,CAACkD,GAAG,CAAC,CAAC,EAAE5F,WAAW,GAAG0F,WAAW,CAAC;QAElE,IAAIC,mBAAmB,GAAG,CAAC,EAAE;UAC3BE,UAAU,CAAC,MAAM;YACftB,mBAAmB,CAACC,MAAM,CAAC;UAC7B,CAAC,EAAEmB,mBAAmB,CAAC;QACzB,CAAC,MAAM;UACLpB,mBAAmB,CAACC,MAAM,CAAC;QAC7B;MACF,CAAC,CAAC,OAAOsB,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAAC;QAC9C,IAAIjE,iBAAiB,CAACJ,OAAO,EAAE;UAC7BI,iBAAiB,CAACJ,OAAO,CAACgD,IAAI,CAAC,CAAC;QAClC;QACArD,WAAW,CAAC,KAAK,CAAC;MACpB;IACF,CAAC,MAAM;MACL;MACA,IAAI0C,cAAc,GAAG,CAAC;MACtB,IAAIc,iBAAiB,GAAG,CAAC,CAAC;MAE1B,IAAIjF,mBAAmB,EAAE;QACvB,MAAM+E,QAAQ,GACZ,OAAO/E,mBAAmB,KAAK,QAAQ,GACnCA,mBAAmB,CAACgF,EAAE,GACtBhF,mBAAmB;QACzBiF,iBAAiB,GAAG3D,UAAU,CAAC4D,SAAS,CACrCxC,IAAI,IAAKA,IAAI,CAACsC,EAAE,KAAKD,QACxB,CAAC;MACH;MAEA,IAAIE,iBAAiB,KAAK,CAAC,CAAC,EAAE;QAC5B,MAAMG,wBAAwB,GAC5B,CAACH,iBAAiB,GAAG,GAAG,IAAI1C,YAAY;QAE1C,MAAM8C,qBAAqB,GACzB,CAAC,GAAG,GAAGD,wBAAwB,GAAG,GAAG,IAAI,GAAG;QAE9C,MAAME,oBAAoB,GAAGvD,WAAW,CAACD,OAAO,GAAG,GAAG;QACtD,MAAMyD,sBAAsB,GAC1B,CAACD,oBAAoB,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG;QAE1C,MAAME,WAAW,GACf,CAACH,qBAAqB,GAAGE,sBAAsB,GAAG,GAAG,IAAI,GAAG;QAE9D,MAAMc,iBAAiB,GAAG,CAAC,GAAGtD,IAAI,CAACuD,KAAK,CAACvD,IAAI,CAACwD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3DpC,cAAc,GAAGkC,iBAAiB,GAAG,GAAG,GAAGb,WAAW;QAEtD,IAAIrB,cAAc,GAAG,GAAG,EAAE;UACxBA,cAAc,IAAI,GAAG,IAAI,CAAC,GAAGpB,IAAI,CAACuD,KAAK,CAACvD,IAAI,CAACwD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D;MACF,CAAC,MAAM;QACL,MAAMC,WAAW,GAAG,CAAC,GAAGzD,IAAI,CAACwD,MAAM,CAAC,CAAC,GAAG,CAAC;QACzC,MAAME,WAAW,GAAG1D,IAAI,CAACwD,MAAM,CAAC,CAAC,GAAG,GAAG;QACvCpC,cAAc,GAAG,GAAG,GAAGqC,WAAW,GAAGC,WAAW;MAClD;MAEAzH,QAAQ,CAACqF,MAAM,CAACzC,WAAW,EAAE;QAC3B0C,OAAO,EAAEvC,WAAW,CAACD,OAAO,GAAGqC,cAAc,GAAG,GAAG;QACnDI,QAAQ,EAAErE,YAAY;QACtBsE,MAAM,EAAEvF,MAAM,CAACyG,GAAG,CAACzG,MAAM,CAAC0G,KAAK,CAAC;QAChCjB,eAAe,EAAE;MACnB,CAAC,CAAC,CAACC,KAAK,CAAC,MAAMQ,aAAa,CAAC,CAAC,CAAC;IACjC;EACF,CAAC;EAED,MAAMA,aAAa,GAAGA,CAAA,KAAM;IAC1B1D,WAAW,CAAC,KAAK,CAAC;IAElB,MAAMiF,eAAe,GAAI3E,WAAW,CAACD,OAAO,GAAG,GAAG,GAAI,GAAG;IACzD,MAAM6E,YAAY,GAAG5D,IAAI,CAACuD,KAAK,CAC5B,CAACI,eAAe,GAAG,GAAG,IAAI,GAAG,GAAInE,YACpC,CAAC;IACD,MAAMqE,aAAa,GACjB,CAACtF,UAAU,CAACC,MAAM,GAAG,CAAC,GAAGoF,YAAY,IAAIrF,UAAU,CAACC,MAAM;IAE5D,MAAMsF,gBAAgB,GACpBD,aAAa,IAAI,CAAC,GAAGA,aAAa,GAAGtF,UAAU,CAACC,MAAM,GAAGqF,aAAa;IAExE,IAAIC,gBAAgB,IAAI,CAAC,IAAIA,gBAAgB,GAAGvF,UAAU,CAACC,MAAM,EAAE;MACjE,MAAMuF,WAAW,GAAGxF,UAAU,CAACuF,gBAAgB,CAAC;MAChDlF,SAAS,CAACmF,WAAW,CAAC;MACtBvG,SAAS,GAAGuG,WAAW,CAAC;IAC1B,CAAC,MAAM,IAAIxF,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;MAChChB,SAAS,GAAGe,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B;EACF,CAAC;EAED,MAAMyF,MAAM,GAAGnF,WAAW,CAACoF,WAAW,CAAC;IACrCC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClBC,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ;EAChC,CAAC,CAAC;EAEF,MAAMC,gBAAgB,GAAG/F,UAAU,KAAKgG,SAAS,GAAGhG,UAAU,GAAGnB,IAAI,GAAG,CAAC;EAEzE,oBACEP,IAAA,CAACZ,IAAI;IAACuI,KAAK,EAAE,CAACC,MAAM,CAACC,SAAS,EAAE/G,cAAc,CAAE;IAAAgH,QAAA,eAC9C5H,KAAA,CAACd,IAAI;MAACuI,KAAK,EAAE;QAAEI,KAAK,EAAExH,IAAI;QAAEyH,MAAM,EAAEzH;MAAK,CAAE;MAAAuH,QAAA,gBACzC9H,IAAA,CAACV,QAAQ,CAACF,IAAI;QACZuI,KAAK,EAAE,CACLC,MAAM,CAACK,cAAc,EACrB;UACEF,KAAK,EAAExH,IAAI;UACXyH,MAAM,EAAEzH,IAAI;UACZ2H,YAAY,EAAE3H,IAAI,GAAG,CAAC;UACtB4H,SAAS,EAAE,CAAC;YAAEd;UAAO,CAAC;QACxB,CAAC,CACD;QAAAS,QAAA,eAEF5H,KAAA,CAACV,GAAG;UAACuI,KAAK,EAAExH,IAAK;UAACyH,MAAM,EAAEzH,IAAK;UAAC6H,OAAO,EAAE,OAAO7H,IAAI,IAAIA,IAAI,EAAG;UAAAuH,QAAA,gBAC7D9H,IAAA,CAACN,CAAC;YAAAoI,QAAA,EACCxD,UAAU,CAACvB,GAAG,CAAC,CAAC;cAAEqB,IAAI;cAAEpB,IAAI;cAAEkB,KAAK;cAAEC,KAAK;cAAEE;YAAM,CAAC,KAAK;cACvD,oBACEnE,KAAA,CAAClB,KAAK,CAACqJ,QAAQ;gBAAAP,QAAA,gBACb9H,IAAA,CAACP,IAAI;kBACH6I,CAAC,EAAElE,IAAK;kBACRmE,IAAI,EACFvF,IAAI,CAACwF,KAAK,IAAI,EAAE,IAAIxF,IAAI,CAACwF,KAAK,IAAI,IAAI,GAClCrI,MAAM,CAACkD,IAAI,CAACuD,KAAK,CAACvD,IAAI,CAACwD,MAAM,CAAC,CAAC,GAAG1G,MAAM,CAAC0B,MAAM,CAAC,CAAC,GACjDmB,IAAI,CAACwF;gBACV,CACF,CAAC,eACFxI,IAAA,CAACJ,OAAO;kBACN6I,CAAC,EAAEvE,KAAM;kBACTwE,CAAC,EAAEvE,KAAM;kBACToE,IAAI,EAAEvF,IAAI,CAAC2F,SAAS,IAAInH,cAAe;kBACvCoH,QAAQ,EAAE3H,cAAc,EAAE2H,QAAQ,IAAI,EAAG;kBACzCC,UAAU,EACP5H,cAAc,EAAE4H,UAAU,IAAY,MACxC;kBACDC,UAAU,EAAC,QAAQ;kBACnBC,iBAAiB,EAAC,SAAS;kBAC3BZ,SAAS,EAAE,UAAU9D,KAAK,GAAG,GAAG,KAAKH,KAAK,KAAKC,KAAK,GAAI;kBAAA2D,QAAA,EAEvD9E,IAAI,CAACgG;gBAAK,CACJ,CAAC;cAAA,GAtBShG,IAAI,CAACsC,EAuBV,CAAC;YAErB,CAAC;UAAC,CACD,CAAC,EAEH/D,gBAAgB,iBACfvB,IAAA,CAACH,MAAM;YACLoJ,EAAE,EAAE1I,IAAI,GAAG,CAAE;YACb2I,EAAE,EAAE3I,IAAI,GAAG,CAAE;YACb4I,CAAC,EAAE5I,IAAI,GAAG,CAAC,GAAGgB,gBAAgB,GAAG,CAAE;YACnC6H,MAAM,EAAE9H,gBAAiB;YACzB+H,WAAW,EAAE9H,gBAAiB;YAC9BgH,IAAI,EAAC;UAAM,CACZ,CACF;QAAA,CACE;MAAC,CACO,CAAC,EAEf5G,eAAe,gBACd3B,IAAA,CAACZ,IAAI;QACHuI,KAAK,EAAE;UACL2B,QAAQ,EAAE,UAAU;UACpBC,GAAG,EAAE,KAAK;UACVC,IAAI,EAAE,KAAK;UACXrB,SAAS,EAAE,CACT;YAAEsB,UAAU,EAAE,EAAEhC,gBAAgB,GAAG,CAAC;UAAE,CAAC,EACvC;YAAEiC,UAAU,EAAE,EAAEjC,gBAAgB,GAAG,CAAC;UAAE,CAAC,CACxC;UACDkC,MAAM,EAAE;QACV,CAAE;QAAA7B,QAAA,EAEDnG;MAAe,CACZ,CAAC,gBAEP3B,IAAA,CAACZ,IAAI;QACHuI,KAAK,EAAE,CACLC,MAAM,CAACgC,WAAW,EAClB;UACE7B,KAAK,EAAEN,gBAAgB;UACvBO,MAAM,EAAEP,gBAAgB;UACxBS,YAAY,EAAET,gBAAgB,GAAG,CAAC;UAClCU,SAAS,EAAE,CACT;YAAEsB,UAAU,EAAE,CAAChC,gBAAgB,GAAG;UAAE,CAAC,EACrC;YAAEiC,UAAU,EAAE,CAACjC,gBAAgB,GAAG;UAAE,CAAC;QAEzC,CAAC,EACD1G,WAAW;MACX,CACH,CACF,eAEDf,IAAA,CAACZ,IAAI;QACHuI,KAAK,EAAE,CACLC,MAAM,CAACiC,eAAe,EACtBtI,gBAAgB,GAAG;UAAEgI,GAAG,EAAEhI;QAAiB,CAAC,GAAG,CAAC,CAAC,CACjD;QAAAuG,QAAA,eAEF9H,IAAA,CAACZ,IAAI;UACHuI,KAAK,EAAE,CACLC,MAAM,CAACkC,OAAO,EACd;YAAEC,iBAAiB,EAAE5I;UAAU,CAAC,EAChCD,SAAS;QACT,CACH;MAAC,CACE,CAAC,eAEPlB,IAAA,CAACZ,IAAI;QACHuI,KAAK,EAAE;UACL2B,QAAQ,EAAE,UAAU;UACpBvB,KAAK,EAAE,MAAM;UACbiC,UAAU,EAAE,QAAQ;UACpBC,cAAc,EAAE,QAAQ;UACxBC,MAAM,EAAE,CAAC,EAAE;UACXP,MAAM,EAAE;QACV,CAAE;QAAA7B,QAAA,eAEF9H,IAAA,CAACF,MAAM;UACL6H,KAAK,EAAE,CAACC,MAAM,CAACuC,YAAY,EAAE/I,iBAAiB,CAAE;UAChDgJ,OAAO,EAAElE,UAAW;UACpBmE,KAAK,EAAErJ,cAAe;UACtBsJ,QAAQ,EAAExI,QAAS;UACnByI,SAAS,EAAE,CAAC3C,MAAM,CAAC4C,gBAAgB,EAAEnJ,qBAAqB,CAAE;UAAA,GACxDI;QAAiB,CACtB;MAAC,CACE,CAAC;IAAA,CACH;EAAC,CACH,CAAC;AAEX,CAAC;AAED,MAAMmG,MAAM,GAAGvI,UAAU,CAACoL,MAAM,CAAC;EAC/B5C,SAAS,EAAE;IACTmC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBS,SAAS,EAAE,EAAE;IACbC,YAAY,EAAE;EAChB,CAAC;EACD1C,cAAc,EAAE;IACd2C,QAAQ,EAAE,QAAQ;IAClBC,eAAe,EAAE;EACnB,CAAC;EACDjB,WAAW,EAAE;IACXN,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,KAAK;IACVC,IAAI,EAAE,KAAK;IACXqB,eAAe,EAAE,SAAS;IAC1BC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,SAAS;IACtBpB,MAAM,EAAE;EACV,CAAC;EACDE,eAAe,EAAE;IACfP,QAAQ,EAAE,UAAU;IACpBE,IAAI,EAAE,KAAK;IACXrB,SAAS,EAAE,CAAC;MAAEsB,UAAU,EAAE,CAAC;IAAG,CAAC,EAAE;MAAEpC,MAAM,EAAE;IAAS,CAAC,CAAC;IACtDsC,MAAM,EAAE;EACV,CAAC;EACDG,OAAO,EAAE;IACP/B,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACT6C,eAAe,EAAE,aAAa;IAC9BG,WAAW,EAAE,OAAO;IACpBC,eAAe,EAAE,EAAE;IACnBC,gBAAgB,EAAE,EAAE;IACpBC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,aAAa;IAC9BC,gBAAgB,EAAE;EACpB,CAAC;EACDlB,YAAY,EAAE;IACZmB,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,EAAE;IACnBrD,YAAY,EAAE,EAAE;IAChBsD,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE,CAAC;IACfZ,eAAe,EAAE;EACnB,CAAC;EACDL,gBAAgB,EAAE;IAChB3B,UAAU,EAAE,MAAM;IAClBD,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEF,eAAexI,SAAS","ignoreList":[]}
@@ -15,6 +15,8 @@ interface SpinWheelProps {
15
15
  spinDuration?: number;
16
16
  friction?: number;
17
17
  enabled?: boolean;
18
+ onSpinPress?: () => Promise<SpinWheelItem | string | number>;
19
+ minSpinTime?: number;
18
20
  onSpinStart?: () => void;
19
21
  onSpinEnd?: (item: SpinWheelItem) => void;
20
22
  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;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;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"}
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.6",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -20,80 +20,52 @@ export interface SpinWheelItem {
20
20
  textColor?: string;
21
21
  }
22
22
 
23
- //default random colors
24
23
  const colors = [
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
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",
50
29
  ];
51
30
 
52
31
  interface SpinWheelProps {
53
- // Data
54
32
  items: SpinWheelItem[];
55
33
  predeterminedWinner?: SpinWheelItem | string | number;
56
-
57
- // Dimensions
58
34
  size?: number;
59
-
60
- // Behavior
61
35
  spinDuration?: number;
62
- friction?: number;
36
+ friction?: number;
63
37
  enabled?: boolean;
64
-
65
- // Events
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
+
66
43
  onSpinStart?: () => void;
67
44
  onSpinEnd?: (item: SpinWheelItem) => void;
68
-
69
- // Styling
70
45
  containerStyle?: ViewStyle;
71
46
  centerStyle?: ViewStyle;
72
47
  spinButtonText?: string;
73
48
  wheelTextStyle?: TextStyle;
74
49
  knobStyle?: ViewStyle;
75
50
  actionButtonStyle?: ViewStyle;
76
- actionButtonTextStyle?: TextStyle
77
- actionButtonProps?: Partial<
78
- Omit<AppButtonProps, "title" | "onPress">
79
- >;
80
-
81
- wheelBorderColor?: string;
51
+ actionButtonTextStyle?: TextStyle;
52
+ actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
53
+ wheelBorderColor?: string;
82
54
  wheelBorderWidth?: number;
83
55
  wheelTextColor?: string;
84
56
  knobColor?: string;
85
-
86
57
  centerSize?: number;
87
-
88
- centerComponent?: React.ReactNode; // Note: centerComponent prop is declared but not used
58
+ centerComponent?: React.ReactNode;
89
59
  }
90
60
 
91
61
  const SpinWheel: React.FC<SpinWheelProps> = ({
92
62
  items,
93
- predeterminedWinner, // Destructure new prop
63
+ predeterminedWinner,
94
64
  size = 300,
95
65
  spinDuration = 5000,
96
66
  enabled = true,
67
+ onSpinPress,
68
+ minSpinTime = 2000,
97
69
  onSpinStart,
98
70
  onSpinEnd,
99
71
  containerStyle,
@@ -109,18 +81,20 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
109
81
  wheelTextColor = "#FFFFFF",
110
82
  actionButtonProps,
111
83
  centerSize,
112
- centerComponent
84
+ centerComponent,
113
85
  }) => {
114
86
  const wheelItems = items.length > 0 ? items : [];
115
87
 
116
88
  const [spinning, setSpinning] = useState(false);
117
89
  const [_, setWinner] = useState<SpinWheelItem | null>(null);
118
90
  const rotateValue = useRef(new Animated.Value(0)).current;
119
-
120
- // Track rotation manually for calculations
121
91
  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);
122
97
 
123
- // Update tracked rotation when animation completes
124
98
  useEffect(() => {
125
99
  const listener = rotateValue.addListener(({ value }) => {
126
100
  rotationRef.current = value;
@@ -131,11 +105,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
131
105
  };
132
106
  }, [rotateValue]);
133
107
 
134
- // Calculate angle for each segment
135
- const anglePerItem =
136
- wheelItems.length > 0 ? 360 / wheelItems.length : 0;
108
+ const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
137
109
 
138
- // Create wheel segments
139
110
  const generateWheelPaths = () => {
140
111
  if (wheelItems.length === 0) return [];
141
112
  return wheelItems.map((item, index) => {
@@ -163,17 +134,11 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
163
134
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
164
135
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
165
136
 
166
- // decorationX and decorationY are calculated but not used in the provided JSX
167
- // const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
168
- // const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
169
-
170
137
  return {
171
138
  path: pathData,
172
139
  item,
173
140
  textX,
174
141
  textY,
175
- // decorationX,
176
- // decorationY,
177
142
  angle: (startAngle + endAngle) / 2,
178
143
  };
179
144
  });
@@ -181,52 +146,49 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
181
146
 
182
147
  const wheelPaths = generateWheelPaths();
183
148
 
184
- // Handle spin button press
185
- const handleSpin = () => {
186
- if (spinning || !enabled || wheelItems.length === 0) return;
187
-
188
- setSpinning(true);
189
- onSpinStart?.();
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
+ );
190
161
 
191
- let targetRotation = 0;
192
- let winnerTargetIndex = -1;
162
+ continuousSpinRef.current.start();
163
+ };
193
164
 
194
- if (predeterminedWinner) {
195
- const winnerId =
196
- typeof predeterminedWinner === "object"
197
- ? predeterminedWinner.id
198
- : predeterminedWinner;
199
- winnerTargetIndex = wheelItems.findIndex((item) => item.id === winnerId);
165
+ const stopAndLandOnWinner = (winner: SpinWheelItem | string | number) => {
166
+ if (continuousSpinRef.current) {
167
+ continuousSpinRef.current.stop();
168
+ continuousSpinRef.current = null;
200
169
  }
201
170
 
202
- if (winnerTargetIndex !== -1) {
203
- const targetSegmentCenterAngle =
204
- (winnerTargetIndex + 0.5) * anglePerItem;
205
-
206
- const targetNormalizedAngle =
207
- (270 - targetSegmentCenterAngle + 360) % 360;
171
+ const winnerId = typeof winner === "object" ? winner.id : winner;
172
+ const winnerTargetIndex = wheelItems.findIndex(
173
+ (item) => item.id === winnerId
174
+ );
208
175
 
209
- const currentAbsoluteAngle = rotationRef.current * 360;
210
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
176
+ if (winnerTargetIndex === -1) {
177
+ handleSpinEnd();
178
+ return;
179
+ }
211
180
 
212
- // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
213
- const angleOffset =
214
- (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
181
+ const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
182
+ const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
215
183
 
216
- // Number of full spins (e.g., 3 to 5)
217
- const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
218
- targetRotation = numberOfFullSpins * 360 + angleOffset;
184
+ const currentAbsoluteAngle = rotationRef.current * 360;
185
+ const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
219
186
 
220
- // Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
221
- if (targetRotation < 360) {
222
- targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
223
- }
187
+ const angleOffset =
188
+ (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
224
189
 
225
- } else {
226
- const randomSpins = 3 + Math.random() * 2;
227
- const randomAngle = Math.random() * 360;
228
- targetRotation = 360 * randomSpins + randomAngle;
229
- }
190
+ const additionalSpins = 2;
191
+ const targetRotation = additionalSpins * 360 + angleOffset;
230
192
 
231
193
  Animated.timing(rotateValue, {
232
194
  toValue: rotationRef.current + targetRotation / 360,
@@ -236,7 +198,87 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
236
198
  }).start(() => handleSpinEnd());
237
199
  };
238
200
 
239
- // Handle spin completion
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
+
240
282
  const handleSpinEnd = () => {
241
283
  setSpinning(false);
242
284
 
@@ -255,11 +297,10 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
255
297
  setWinner(winningItem);
256
298
  onSpinEnd?.(winningItem);
257
299
  } else if (wheelItems.length > 0) {
258
- onSpinEnd?.(wheelItems[0]);
300
+ onSpinEnd?.(wheelItems[0]);
259
301
  }
260
302
  };
261
303
 
262
- // Animation interpolation for rotation
263
304
  const rotate = rotateValue.interpolate({
264
305
  inputRange: [0, 1],
265
306
  outputRange: ["0deg", "360deg"],
@@ -270,7 +311,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
270
311
  return (
271
312
  <View style={[styles.container, containerStyle]}>
272
313
  <View style={{ width: size, height: size }}>
273
- {/* The wheel */}
274
314
  <Animated.View
275
315
  style={[
276
316
  styles.wheelContainer,
@@ -284,7 +324,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
284
324
  >
285
325
  <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
286
326
  <G>
287
- {wheelPaths.map(({ path, item, textX, textY, angle }, index) => {
327
+ {wheelPaths.map(({ path, item, textX, textY, angle }) => {
288
328
  return (
289
329
  <React.Fragment key={item.id}>
290
330
  <Path
@@ -294,18 +334,18 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
294
334
  ? colors[Math.floor(Math.random() * colors.length)]
295
335
  : item.color
296
336
  }
297
- // stroke="#FA8072"
298
- // strokeWidth={1}
299
337
  />
300
338
  <SvgText
301
339
  x={textX}
302
340
  y={textY}
303
341
  fill={item.textColor || wheelTextColor}
304
342
  fontSize={wheelTextStyle?.fontSize || 14}
305
- fontWeight={(wheelTextStyle?.fontWeight as any) || "bold"}
343
+ fontWeight={
344
+ (wheelTextStyle?.fontWeight as any) || "bold"
345
+ }
306
346
  textAnchor="middle"
307
347
  alignmentBaseline="central"
308
- transform={`rotate(${angle + 180}, ${textX}, ${textY} )`}
348
+ transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
309
349
  >
310
350
  {item.label}
311
351
  </SvgText>
@@ -327,14 +367,12 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
327
367
  </Svg>
328
368
  </Animated.View>
329
369
 
330
- {/* The center circle */}
331
370
  {centerComponent ? (
332
371
  <View
333
372
  style={{
334
373
  position: "absolute",
335
374
  top: "50%",
336
375
  left: "50%",
337
- // Center the component perfectly
338
376
  transform: [
339
377
  { translateX: -(actualCenterSize / 2) },
340
378
  { translateY: -(actualCenterSize / 2) },
@@ -362,7 +400,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
362
400
  />
363
401
  )}
364
402
 
365
- {/* The pointer is a triangle on top */}
366
403
  <View
367
404
  style={[
368
405
  styles.pointerPosition,
@@ -378,7 +415,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
378
415
  />
379
416
  </View>
380
417
 
381
- {/* Action Button */}
382
418
  <View
383
419
  style={{
384
420
  position: "absolute",
@@ -397,15 +433,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
397
433
  textStyle={[styles.actionButtonText, actionButtonTextStyle]}
398
434
  {...actionButtonProps}
399
435
  />
400
- {/* <TouchableOpacity
401
- onPress={handleSpin}
402
- disabled={spinning || !enabled || wheelItems.length === 0}
403
- style={[styles.actionButton, actionButtonStyle]}
404
- >
405
- <Text style={[styles.actionButtonText, actionButtonTextStyle]}>
406
- {spinButtonText}
407
- </Text>
408
- </TouchableOpacity> */}
409
436
  </View>
410
437
  </View>
411
438
  </View>
@@ -417,7 +444,7 @@ const styles = StyleSheet.create({
417
444
  alignItems: "center",
418
445
  justifyContent: "center",
419
446
  marginTop: 20,
420
- marginBottom: 70, // Space for the button
447
+ marginBottom: 70,
421
448
  },
422
449
  wheelContainer: {
423
450
  overflow: "hidden",
@@ -445,7 +472,7 @@ const styles = StyleSheet.create({
445
472
  borderStyle: "solid",
446
473
  borderLeftWidth: 10,
447
474
  borderRightWidth: 10,
448
- borderBottomWidth: 15,
475
+ borderBottomWidth: 15,
449
476
  borderLeftColor: "transparent",
450
477
  borderRightColor: "transparent",
451
478
  },
@@ -463,4 +490,4 @@ const styles = StyleSheet.create({
463
490
  },
464
491
  });
465
492
 
466
- export default SpinWheel;
493
+ export default SpinWheel;