related-ui-components 3.2.8 → 4.0.0

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.
@@ -6,56 +6,12 @@ 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
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
+ 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"];
10
+ // Constants for consistent animation
11
+ const ROTATION_DURATION = 2500; // Duration for one full rotation
12
+ const DECEL_DURATION = 3000; // Duration for deceleration phase
13
+ const EXTRA_SPINS = 3; // Number of extra full rotations before stopping
14
+
59
15
  const SpinWheel = ({
60
16
  items,
61
17
  size = 300,
@@ -83,16 +39,13 @@ const SpinWheel = ({
83
39
  const spinStartTime = useRef(0);
84
40
  const [spinning, setSpinning] = useState(false);
85
41
  const rotateValue = useRef(new Animated.Value(0)).current;
86
-
87
- // Track rotation manually for calculations
88
42
  const rotationRef = useRef(0);
89
43
  const startInfiniteSpin = () => {
90
44
  rotateValue.setValue(rotationRef.current);
91
45
  spinStartTime.current = Date.now();
92
46
  spinLoop.current = Animated.loop(Animated.timing(rotateValue, {
93
47
  toValue: rotationRef.current + 1,
94
- // 1 = full rotation
95
- duration: 2500,
48
+ duration: ROTATION_DURATION,
96
49
  easing: Easing.linear,
97
50
  useNativeDriver: true
98
51
  }));
@@ -107,23 +60,38 @@ const SpinWheel = ({
107
60
  const winnerId = typeof winnerValue === "object" ? winnerValue.id : winnerValue;
108
61
  const index = items.findIndex(i => i.id === winnerId);
109
62
  if (index === -1) return;
63
+
64
+ // Calculate target angle (pointer at top = 270 degrees)
65
+ const anglePerItem = 360 / items.length;
110
66
  const segmentCenter = (index + 0.5) * anglePerItem;
111
67
  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;
68
+
69
+ // Get current rotation position
70
+ const currentRotation = rotationRef.current;
71
+ const currentAngle = currentRotation * 360 % 360;
72
+
73
+ // Calculate shortest path to target
74
+ let offset = (targetAngle - currentAngle + 360) % 360;
75
+
76
+ // Add extra full rotations for dramatic effect
77
+ const extraRotations = EXTRA_SPINS * 360;
78
+ const totalRotation = offset + extraRotations;
79
+
80
+ // Final rotation value
81
+ const finalRotation = currentRotation + totalRotation / 360;
82
+
83
+ // Use ease-out cubic for smooth deceleration
115
84
  Animated.timing(rotateValue, {
116
85
  toValue: finalRotation,
117
- duration: 2500,
86
+ duration: DECEL_DURATION,
118
87
  easing: Easing.out(Easing.cubic),
119
88
  useNativeDriver: true
120
89
  }).start(() => {
90
+ rotationRef.current = finalRotation;
121
91
  setSpinning(false);
122
92
  onSpinEnd?.(items[index]);
123
93
  });
124
94
  };
125
-
126
- // Update tracked rotation when animation completes
127
95
  useEffect(() => {
128
96
  const listener = rotateValue.addListener(({
129
97
  value
@@ -134,11 +102,7 @@ const SpinWheel = ({
134
102
  rotateValue.removeListener(listener);
135
103
  };
136
104
  }, [rotateValue]);
137
-
138
- // Calculate angle for each segment
139
105
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
140
-
141
- // Create wheel segments
142
106
  const generateWheelPaths = () => {
143
107
  if (wheelItems.length === 0) return [];
144
108
  return wheelItems.map((item, index) => {
@@ -155,18 +119,11 @@ const SpinWheel = ({
155
119
  const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
156
120
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
157
121
  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
-
163
122
  return {
164
123
  path: pathData,
165
124
  item,
166
125
  textX,
167
126
  textY,
168
- // decorationX,
169
- // decorationY,
170
127
  angle: (startAngle + endAngle) / 2
171
128
  };
172
129
  });
@@ -180,9 +137,7 @@ const SpinWheel = ({
180
137
  stopOnWinner(winner);
181
138
  }, delay);
182
139
  return () => clearTimeout(timeout);
183
- }, [winner]);
184
-
185
- // Animation interpolation for rotation
140
+ }, [winner, spinning]);
186
141
  const rotate = rotateValue.interpolate({
187
142
  inputRange: [0, 1],
188
143
  outputRange: ["0deg", "360deg"]
@@ -215,13 +170,11 @@ const SpinWheel = ({
215
170
  textX,
216
171
  textY,
217
172
  angle
218
- }, index) => {
173
+ }) => {
219
174
  return /*#__PURE__*/_jsxs(React.Fragment, {
220
175
  children: [/*#__PURE__*/_jsx(Path, {
221
176
  d: path,
222
177
  fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
223
- // stroke="#FA8072"
224
- // strokeWidth={1}
225
178
  }), /*#__PURE__*/_jsx(SvgText, {
226
179
  x: textX,
227
180
  y: textY,
@@ -230,7 +183,7 @@ const SpinWheel = ({
230
183
  fontWeight: wheelTextStyle?.fontWeight || "bold",
231
184
  textAnchor: "middle",
232
185
  alignmentBaseline: "central",
233
- transform: `rotate(${angle + 180}, ${textX}, ${textY} )`,
186
+ transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
234
187
  children: item.label
235
188
  })]
236
189
  }, item.id);
@@ -249,7 +202,6 @@ const SpinWheel = ({
249
202
  position: "absolute",
250
203
  top: "50%",
251
204
  left: "50%",
252
- // Center the component perfectly
253
205
  transform: [{
254
206
  translateX: -(actualCenterSize / 2)
255
207
  }, {
@@ -304,7 +256,7 @@ const styles = StyleSheet.create({
304
256
  alignItems: "center",
305
257
  justifyContent: "center",
306
258
  marginTop: 20,
307
- marginBottom: 70 // Space for the button
259
+ marginBottom: 70
308
260
  },
309
261
  wheelContainer: {
310
262
  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","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":[]}
1
+ {"version":3,"names":["React","useState","useRef","useEffect","View","StyleSheet","Animated","Easing","Svg","Path","G","Text","SvgText","Circle","Button","jsx","_jsx","jsxs","_jsxs","colors","ROTATION_DURATION","DECEL_DURATION","EXTRA_SPINS","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","anglePerItem","segmentCenter","targetAngle","currentRotation","currentAngle","offset","extraRotations","totalRotation","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":[]}
@@ -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;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"}
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;AAWD,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,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,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;AAOD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmSvC,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.8",
3
+ "version": "4.0.0",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -18,7 +18,6 @@
18
18
  "@shopify/react-native-skia": ">=v2.0.0-next.4",
19
19
  "country-telephone-data": ">=0.6.3",
20
20
  "date-fns": ">=4.1.0",
21
- "expo": "53.0.20",
22
21
  "expo-blur": ">=14.1.5",
23
22
  "expo-checkbox": ">=4.1.4",
24
23
  "expo-clipboard": ">=7.1.4",
@@ -28,21 +27,21 @@
28
27
  "react": "19.0.0",
29
28
  "react-native": "0.79.5",
30
29
  "react-native-calendars": ">=1.1312.0",
30
+ "react-native-color-matrix-image-filters": ">=7.0.2",
31
31
  "react-native-gesture-handler": ">=2.24.0",
32
32
  "react-native-picker-select": ">=9.3.1",
33
33
  "react-native-qrcode-svg": ">=6.3.15",
34
+ "react-native-reanimated": ">=3.0.0",
34
35
  "react-native-safe-area-context": ">=5.4.0",
35
36
  "react-native-svg": ">=15.11.2",
36
- "react-native-color-matrix-image-filters": ">=7.0.2",
37
- "react-native-toast-message": ">=2.3.3",
38
- "react-native-reanimated": ">=3.0.0"
37
+ "react-native-toast-message": ">=2.3.3"
39
38
  },
40
39
  "devDependencies": {
41
40
  "@babel/core": "^7.25.2",
42
41
  "@types/country-telephone-data": "^0.6.3",
43
- "@types/react": "~19.0.10",
42
+ "@types/react": "~19.1.10",
44
43
  "react-native-builder-bob": "^0.40.11",
45
- "typescript": "~5.8.3"
44
+ "typescript": "~5.9.2"
46
45
  },
47
46
  "private": false,
48
47
  "exports": {
@@ -77,5 +76,8 @@
77
76
  "eslintIgnore": [
78
77
  "node_modules/",
79
78
  "lib/"
80
- ]
79
+ ],
80
+ "dependencies": {
81
+ "expo": "^54.0.31"
82
+ }
81
83
  }
@@ -22,55 +22,25 @@ export interface SpinWheelItem {
22
22
 
23
23
  //default random colors
24
24
  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
25
+ "#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080",
26
+ "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE",
27
+ "#40E0D0", "#FFD700", "#C0C0C0", "#FFDAB9", "#E6E6FA", "#008080",
28
+ "#FF7F50", "#DC143C", "#87CEEB", "#7FFF00", "#CCCCFF", "#FF6347",
29
+ "#FA8072",
50
30
  ];
51
31
 
52
32
  interface SpinWheelProps {
53
- // Data
54
33
  items: SpinWheelItem[];
55
34
  predeterminedWinner?: SpinWheelItem | string | number;
56
-
57
- // Dimensions
58
35
  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
36
+ startSpin?: boolean;
37
+ winner?: SpinWheelItem | string | number;
38
+ minSpinDuration?: number;
65
39
  spinDuration?: number;
66
40
  friction?: number;
67
41
  enabled?: boolean;
68
-
69
- // Events
70
42
  onSpinStart?: () => void;
71
43
  onSpinEnd?: (item: SpinWheelItem) => void;
72
-
73
- // Styling
74
44
  containerStyle?: ViewStyle;
75
45
  centerStyle?: ViewStyle;
76
46
  spinButtonText?: string;
@@ -79,17 +49,19 @@ interface SpinWheelProps {
79
49
  actionButtonStyle?: ViewStyle;
80
50
  actionButtonTextStyle?: TextStyle;
81
51
  actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
82
-
83
52
  wheelBorderColor?: string;
84
53
  wheelBorderWidth?: number;
85
54
  wheelTextColor?: string;
86
55
  knobColor?: string;
87
-
88
56
  centerSize?: number;
89
-
90
- centerComponent?: React.ReactNode; // Note: centerComponent prop is declared but not used
57
+ centerComponent?: React.ReactNode;
91
58
  }
92
59
 
60
+ // Constants for consistent animation
61
+ const ROTATION_DURATION = 2500; // Duration for one full rotation
62
+ const DECEL_DURATION = 3000; // Duration for deceleration phase
63
+ const EXTRA_SPINS = 3; // Number of extra full rotations before stopping
64
+
93
65
  const SpinWheel: React.FC<SpinWheelProps> = ({
94
66
  items,
95
67
  size = 300,
@@ -119,19 +91,16 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
119
91
 
120
92
  const [spinning, setSpinning] = useState(false);
121
93
  const rotateValue = useRef(new Animated.Value(0)).current;
122
-
123
- // Track rotation manually for calculations
124
94
  const rotationRef = useRef(0);
125
95
 
126
96
  const startInfiniteSpin = () => {
127
97
  rotateValue.setValue(rotationRef.current);
128
-
129
98
  spinStartTime.current = Date.now();
130
99
 
131
100
  spinLoop.current = Animated.loop(
132
101
  Animated.timing(rotateValue, {
133
- toValue: rotationRef.current + 1, // 1 = full rotation
134
- duration: 2500,
102
+ toValue: rotationRef.current + 1,
103
+ duration: ROTATION_DURATION,
135
104
  easing: Easing.linear,
136
105
  useNativeDriver: true,
137
106
  })
@@ -154,26 +123,38 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
154
123
  const index = items.findIndex((i) => i.id === winnerId);
155
124
  if (index === -1) return;
156
125
 
126
+ // Calculate target angle (pointer at top = 270 degrees)
127
+ const anglePerItem = 360 / items.length;
157
128
  const segmentCenter = (index + 0.5) * anglePerItem;
158
129
  const targetAngle = (270 - segmentCenter + 360) % 360;
159
130
 
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
-
131
+ // Get current rotation position
132
+ const currentRotation = rotationRef.current;
133
+ const currentAngle = (currentRotation * 360) % 360;
134
+
135
+ // Calculate shortest path to target
136
+ let offset = (targetAngle - currentAngle + 360) % 360;
137
+
138
+ // Add extra full rotations for dramatic effect
139
+ const extraRotations = EXTRA_SPINS * 360;
140
+ const totalRotation = offset + extraRotations;
141
+
142
+ // Final rotation value
143
+ const finalRotation = currentRotation + totalRotation / 360;
144
+
145
+ // Use ease-out cubic for smooth deceleration
165
146
  Animated.timing(rotateValue, {
166
147
  toValue: finalRotation,
167
- duration: 2500,
148
+ duration: DECEL_DURATION,
168
149
  easing: Easing.out(Easing.cubic),
169
150
  useNativeDriver: true,
170
151
  }).start(() => {
152
+ rotationRef.current = finalRotation;
171
153
  setSpinning(false);
172
154
  onSpinEnd?.(items[index]);
173
155
  });
174
156
  };
175
157
 
176
- // Update tracked rotation when animation completes
177
158
  useEffect(() => {
178
159
  const listener = rotateValue.addListener(({ value }) => {
179
160
  rotationRef.current = value;
@@ -184,10 +165,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
184
165
  };
185
166
  }, [rotateValue]);
186
167
 
187
- // Calculate angle for each segment
188
168
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
189
169
 
190
- // Create wheel segments
191
170
  const generateWheelPaths = () => {
192
171
  if (wheelItems.length === 0) return [];
193
172
  return wheelItems.map((item, index) => {
@@ -215,17 +194,11 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
215
194
  const textX = size / 2 + size * 0.32 * Math.cos(midRad);
216
195
  const textY = size / 2 + size * 0.32 * Math.sin(midRad);
217
196
 
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
-
222
197
  return {
223
198
  path: pathData,
224
199
  item,
225
200
  textX,
226
201
  textY,
227
- // decorationX,
228
- // decorationY,
229
202
  angle: (startAngle + endAngle) / 2,
230
203
  };
231
204
  });
@@ -244,9 +217,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
244
217
  }, delay);
245
218
 
246
219
  return () => clearTimeout(timeout);
247
- }, [winner]);
220
+ }, [winner, spinning]);
248
221
 
249
- // Animation interpolation for rotation
250
222
  const rotate = rotateValue.interpolate({
251
223
  inputRange: [0, 1],
252
224
  outputRange: ["0deg", "360deg"],
@@ -257,7 +229,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
257
229
  return (
258
230
  <View style={[styles.container, containerStyle]}>
259
231
  <View style={{ width: size, height: size }}>
260
- {/* The wheel */}
261
232
  <Animated.View
262
233
  style={[
263
234
  styles.wheelContainer,
@@ -271,7 +242,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
271
242
  >
272
243
  <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
273
244
  <G>
274
- {wheelPaths.map(({ path, item, textX, textY, angle }, index) => {
245
+ {wheelPaths.map(({ path, item, textX, textY, angle }) => {
275
246
  return (
276
247
  <React.Fragment key={item.id}>
277
248
  <Path
@@ -281,8 +252,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
281
252
  ? colors[Math.floor(Math.random() * colors.length)]
282
253
  : item.color
283
254
  }
284
- // stroke="#FA8072"
285
- // strokeWidth={1}
286
255
  />
287
256
  <SvgText
288
257
  x={textX}
@@ -292,7 +261,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
292
261
  fontWeight={(wheelTextStyle?.fontWeight as any) || "bold"}
293
262
  textAnchor="middle"
294
263
  alignmentBaseline="central"
295
- transform={`rotate(${angle + 180}, ${textX}, ${textY} )`}
264
+ transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
296
265
  >
297
266
  {item.label}
298
267
  </SvgText>
@@ -314,14 +283,12 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
314
283
  </Svg>
315
284
  </Animated.View>
316
285
 
317
- {/* The center circle */}
318
286
  {centerComponent ? (
319
287
  <View
320
288
  style={{
321
289
  position: "absolute",
322
290
  top: "50%",
323
291
  left: "50%",
324
- // Center the component perfectly
325
292
  transform: [
326
293
  { translateX: -(actualCenterSize / 2) },
327
294
  { translateY: -(actualCenterSize / 2) },
@@ -349,7 +316,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
349
316
  />
350
317
  )}
351
318
 
352
- {/* The pointer is a triangle on top */}
353
319
  <View
354
320
  style={[
355
321
  styles.pointerPosition,
@@ -365,7 +331,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
365
331
  />
366
332
  </View>
367
333
 
368
- {/* Action Button */}
369
334
  <View
370
335
  style={{
371
336
  position: "absolute",
@@ -384,15 +349,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
384
349
  textStyle={[styles.actionButtonText, actionButtonTextStyle]}
385
350
  {...actionButtonProps}
386
351
  />
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> */}
396
352
  </View>
397
353
  </View>
398
354
  </View>
@@ -404,7 +360,7 @@ const styles = StyleSheet.create({
404
360
  alignItems: "center",
405
361
  justifyContent: "center",
406
362
  marginTop: 20,
407
- marginBottom: 70, // Space for the button
363
+ marginBottom: 70,
408
364
  },
409
365
  wheelContainer: {
410
366
  overflow: "hidden",