related-ui-components 4.1.1 → 4.1.3

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.
@@ -1,90 +1,85 @@
1
1
  "use strict";
2
2
 
3
- import React, { useState, useRef, useEffect } from "react";
4
- import { View, StyleSheet, Animated, Easing } from "react-native";
5
- import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
6
- import { Button } from "../Button/index.js";
3
+ import React, { useEffect, useRef, useState } from "react";
4
+ import { Animated, Easing, StyleSheet, View } from "react-native";
5
+ import { Circle, G, Path, Svg, Text as SvgText } from "react-native-svg";
7
6
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- //default random colors
9
7
  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
8
+ // Config for the single animation
9
+ const TOTAL_SPINS = 5; // How many full rotations before stopping
10
+ const SPIN_DURATION = 4000; // Total time for the one animation
14
11
 
15
12
  const SpinWheel = ({
16
13
  items,
17
14
  size = 300,
18
15
  winner,
19
- minSpinDuration = 2000,
20
- onSpinStart,
21
16
  onSpinEnd,
22
17
  containerStyle,
23
18
  centerStyle,
24
- spinButtonText = "Spin",
25
19
  wheelTextStyle,
26
20
  knobStyle,
27
21
  knobColor = "#D81E5B",
28
- actionButtonStyle,
29
- actionButtonTextStyle,
30
22
  wheelBorderColor,
31
23
  wheelBorderWidth,
32
24
  wheelTextColor = "#FFFFFF",
33
- actionButtonProps,
34
25
  centerSize,
35
26
  centerComponent
36
27
  }) => {
37
28
  const wheelItems = items.length > 0 ? items : [];
38
- const spinLoop = useRef(null);
39
- const spinStartTime = useRef(0);
40
29
  const [spinning, setSpinning] = useState(false);
30
+
31
+ // 0-1 represents 0-360 degrees. We keep increasing this value.
41
32
  const rotateValue = useRef(new Animated.Value(0)).current;
42
33
  const rotationRef = useRef(0);
43
- const startInfiniteSpin = () => {
44
- rotateValue.setValue(rotationRef.current);
45
- spinStartTime.current = Date.now();
46
- spinLoop.current = Animated.loop(Animated.timing(rotateValue, {
47
- toValue: rotationRef.current + 1,
48
- duration: ROTATION_DURATION,
49
- easing: Easing.linear,
50
- useNativeDriver: true
51
- }));
52
- spinLoop.current.start();
53
- setSpinning(true);
54
- onSpinStart?.();
55
- };
56
- const stopOnWinner = winnerValue => {
57
- if (!spinLoop.current) return;
58
- spinLoop.current.stop();
59
- spinLoop.current = null;
34
+
35
+ // Sync the ref with the animated value to ensure we start next spin from where we left off
36
+ useEffect(() => {
37
+ const listener = rotateValue.addListener(({
38
+ value
39
+ }) => {
40
+ rotationRef.current = value;
41
+ });
42
+ return () => {
43
+ rotateValue.removeListener(listener);
44
+ };
45
+ }, [rotateValue]);
46
+
47
+ // Main Logic: Trigger spin when 'winner' is provided
48
+ useEffect(() => {
49
+ if (winner != null && !spinning) {
50
+ spinToWinner(winner);
51
+ }
52
+ }, [winner]);
53
+ const spinToWinner = winnerValue => {
60
54
  const winnerId = typeof winnerValue === "object" ? winnerValue.id : winnerValue;
61
55
  const index = items.findIndex(i => i.id === winnerId);
62
- if (index === -1) return;
56
+ if (index === -1) {
57
+ console.warn("Winner not found in items array");
58
+ return;
59
+ }
60
+ setSpinning(true);
63
61
 
64
- // Calculate target angle (pointer at top = 270 degrees)
62
+ // 1. Calculate the angle where the item is centered
65
63
  const anglePerItem = 360 / items.length;
64
+ // We want the item centered at 270 degrees (top of the wheel in standard SVG)
66
65
  const segmentCenter = (index + 0.5) * anglePerItem;
67
66
  const targetAngle = (270 - segmentCenter + 360) % 360;
68
67
 
69
- // Get current rotation position
70
- const currentRotation = rotationRef.current;
71
- const currentAngle = currentRotation * 360 % 360;
68
+ // 2. Calculate offset from current position
69
+ const currentRotationDegrees = rotationRef.current * 360 % 360;
70
+ const offset = (targetAngle - currentRotationDegrees + 360) % 360;
72
71
 
73
- // Calculate shortest path to target
74
- let offset = (targetAngle - currentAngle + 360) % 360;
72
+ // 3. Calculate total rotation:
73
+ // Current Rotation + (Distance to target) + (Extra Full Spins)
74
+ // We divide by 360 because our Animated.Value goes from 0 to 1 for a full circle
75
+ const finalRotation = rotationRef.current + (offset + 360 * TOTAL_SPINS) / 360;
75
76
 
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
77
+ // 4. One smooth animation
84
78
  Animated.timing(rotateValue, {
85
79
  toValue: finalRotation,
86
- duration: DECEL_DURATION,
80
+ duration: SPIN_DURATION,
87
81
  easing: Easing.out(Easing.cubic),
82
+ // Starts fast, slows down smoothly
88
83
  useNativeDriver: true
89
84
  }).start(() => {
90
85
  rotationRef.current = finalRotation;
@@ -92,16 +87,6 @@ const SpinWheel = ({
92
87
  onSpinEnd?.(items[index]);
93
88
  });
94
89
  };
95
- useEffect(() => {
96
- const listener = rotateValue.addListener(({
97
- value
98
- }) => {
99
- rotationRef.current = value;
100
- });
101
- return () => {
102
- rotateValue.removeListener(listener);
103
- };
104
- }, [rotateValue]);
105
90
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
106
91
  const generateWheelPaths = () => {
107
92
  if (wheelItems.length === 0) return [];
@@ -129,15 +114,6 @@ const SpinWheel = ({
129
114
  });
130
115
  };
131
116
  const wheelPaths = generateWheelPaths();
132
- useEffect(() => {
133
- if (!winner || !spinning) return;
134
- const elapsed = Date.now() - spinStartTime.current;
135
- const delay = Math.max(0, minSpinDuration - elapsed);
136
- const timeout = setTimeout(() => {
137
- stopOnWinner(winner);
138
- }, delay);
139
- return () => clearTimeout(timeout);
140
- }, [winner, spinning]);
141
117
  const rotate = rotateValue.interpolate({
142
118
  inputRange: [0, 1],
143
119
  outputRange: ["0deg", "360deg"]
@@ -230,23 +206,6 @@ const SpinWheel = ({
230
206
  borderBottomColor: knobColor
231
207
  }, knobStyle]
232
208
  })
233
- }), /*#__PURE__*/_jsx(View, {
234
- style: {
235
- position: "absolute",
236
- width: "100%",
237
- alignItems: "center",
238
- justifyContent: "center",
239
- bottom: -70,
240
- zIndex: 2
241
- },
242
- children: /*#__PURE__*/_jsx(Button, {
243
- style: [styles.actionButton, actionButtonStyle],
244
- onPress: startInfiniteSpin,
245
- title: spinButtonText,
246
- disabled: spinning,
247
- textStyle: [styles.actionButtonText, actionButtonTextStyle],
248
- ...actionButtonProps
249
- })
250
209
  })]
251
210
  })
252
211
  });
@@ -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","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
+ {"version":3,"names":["React","useEffect","useRef","useState","Animated","Easing","StyleSheet","View","Circle","G","Path","Svg","Text","SvgText","jsx","_jsx","jsxs","_jsxs","colors","TOTAL_SPINS","SPIN_DURATION","SpinWheel","items","size","winner","onSpinEnd","containerStyle","centerStyle","wheelTextStyle","knobStyle","knobColor","wheelBorderColor","wheelBorderWidth","wheelTextColor","centerSize","centerComponent","wheelItems","length","spinning","setSpinning","rotateValue","Value","current","rotationRef","listener","addListener","value","removeListener","spinToWinner","winnerValue","winnerId","id","index","findIndex","i","console","warn","anglePerItem","segmentCenter","targetAngle","currentRotationDegrees","offset","finalRotation","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","generateWheelPaths","map","item","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","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","create","alignItems","justifyContent","marginTop","marginBottom","overflow","backgroundColor","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","actionButton","paddingHorizontal","paddingVertical","shadowColor","shadowRadius","actionButtonText"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
@@ -35,7 +35,8 @@ const DefaultModalUI = ({
35
35
  animateFrom = "center",
36
36
  avoidKeyboard = true,
37
37
  backdropStyle,
38
- containerStyle
38
+ containerStyle,
39
+ closeIconComponent
39
40
  } = options;
40
41
  useEffect(() => {
41
42
  if (isVisible) setIsRendered(true);
@@ -58,6 +59,9 @@ const DefaultModalUI = ({
58
59
  const backdropAnimatedStyle = useAnimatedStyle(() => ({
59
60
  opacity: opacity.value
60
61
  }));
62
+ const closeIconAnimatedStyle = useAnimatedStyle(() => ({
63
+ opacity: opacity.value
64
+ }));
61
65
  const contentAnimatedStyle = useAnimatedStyle(() => {
62
66
  let transform = [];
63
67
  if (animateFrom === "bottom") {
@@ -94,6 +98,22 @@ const DefaultModalUI = ({
94
98
  activeOpacity: 1,
95
99
  onPress: closeOnBackdropPress ? onClose : undefined
96
100
  })
101
+ }), closeIconComponent && /*#__PURE__*/_jsx(Animated.View, {
102
+ style: [styles.closeIconContainer, {
103
+ top: insets.top + 16
104
+ }, closeIconAnimatedStyle],
105
+ pointerEvents: "box-none",
106
+ children: /*#__PURE__*/_jsx(TouchableOpacity, {
107
+ onPress: onClose,
108
+ hitSlop: {
109
+ top: 10,
110
+ bottom: 10,
111
+ left: 10,
112
+ right: 10
113
+ },
114
+ activeOpacity: 0.7,
115
+ children: closeIconComponent
116
+ })
97
117
  }), /*#__PURE__*/_jsx(ContentWrapper, {
98
118
  behavior: "padding",
99
119
  keyboardVerticalOffset: 16,
@@ -134,7 +154,6 @@ export const UniversalModalProvider = ({
134
154
  });
135
155
  }, [defaultOptions]);
136
156
  const hideModal = useCallback(() => {
137
- const currentOnDismiss = state.options.onDismiss;
138
157
  setState(prev => ({
139
158
  ...prev,
140
159
  isVisible: false
@@ -148,9 +167,6 @@ export const UniversalModalProvider = ({
148
167
  content: null
149
168
  } : prev;
150
169
  });
151
- if (currentOnDismiss) {
152
- currentOnDismiss();
153
- }
154
170
  }, 350);
155
171
  }, []);
156
172
  const ModalUI = CustomModalComponent || DefaultModalUI;
@@ -197,6 +213,11 @@ const styles = StyleSheet.create({
197
213
  },
198
214
  baseContainer: {
199
215
  width: "90%"
216
+ },
217
+ closeIconContainer: {
218
+ position: "absolute",
219
+ right: 16,
220
+ zIndex: 2000
200
221
  }
201
222
  });
202
223
  //# sourceMappingURL=UniversalModalProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Portal","PortalHost","PortalProvider","React","createContext","useCallback","useContext","useEffect","useMemo","useState","BackHandler","StyleSheet","TouchableOpacity","View","KeyboardAvoidingView","Animated","Easing","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","ModalContext","undefined","DEFAULT_MODAL_HOST","DefaultModalUI","isVisible","children","options","onClose","insets","isRendered","setIsRendered","opacity","closeOnBackdropPress","closeOnBackButton","animationConfig","duration","easing","bezier","position","animateFrom","avoidKeyboard","backdropStyle","containerStyle","value","finished","backHandler","addEventListener","remove","backdropAnimatedStyle","contentAnimatedStyle","transform","push","translateY","scale","justifyContent","paddingBottom","bottom","paddingTop","top","ContentWrapper","style","absoluteFill","styles","overlayWrapper","backdrop","activeOpacity","onPress","behavior","keyboardVerticalOffset","keyboardView","pointerEvents","baseContainer","UniversalModalProvider","defaultOptions","portalHostName","CustomModalComponent","state","setState","content","showModal","hideModal","currentOnDismiss","onDismiss","prev","setTimeout","ModalUI","Provider","name","hostName","useModal","context","Error","create","zIndex","elevation","backgroundColor","alignItems","width"],"sourceRoot":"..\\..\\..\\src","sources":["contexts/UniversalModalProvider.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,UAAU,EAAEC,cAAc,QAAQ,gBAAgB;AACnE,OAAOC,KAAK,IACVC,aAAa,EAEbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,QAAQ,QACH,OAAO;AACd,SACEC,WAAW,EAEXC,UAAU,EACVC,gBAAgB,EAChBC,IAAI,QAEC,cAAc;AACrB,SAASC,oBAAoB,QAAQ,kCAAkC;AACvE,OAAOC,QAAQ,IACbC,MAAM,EACNC,OAAO,EACPC,gBAAgB,EAChBC,cAAc,EACdC,UAAU,QAEL,yBAAyB;AAChC,SAASC,iBAAiB,QAAQ,gCAAgC;;AAElE;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AA0CA;;AAEA,MAAMC,YAAY,gBAAGtB,aAAa,CAA+BuB,SAAS,CAAC;AAE3E,OAAO,MAAMC,kBAAkB,GAAG,oBAAoB;;AAEtD;AACA,MAAMC,cAKJ,GAAGA,CAAC;EAAEC,SAAS;EAAEC,QAAQ;EAAEC,OAAO;EAAEC;AAAQ,CAAC,KAAK;EAClD,MAAMC,MAAM,GAAGb,iBAAiB,CAAC,CAAC;EAClC,MAAM,CAACc,UAAU,EAAEC,aAAa,CAAC,GAAG3B,QAAQ,CAACqB,SAAS,CAAC;EACvD,MAAMO,OAAO,GAAGlB,cAAc,CAAC,CAAC,CAAC;EAEjC,MAAM;IACJmB,oBAAoB,GAAG,IAAI;IAC3BC,iBAAiB,GAAG,IAAI;IACxBC,eAAe,GAAG;MAChBC,QAAQ,EAAE,GAAG;MACbC,MAAM,EAAE1B,MAAM,CAAC2B,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACDC,QAAQ,GAAG,QAAQ;IACnBC,WAAW,GAAG,QAAQ;IACtBC,aAAa,GAAG,IAAI;IACpBC,aAAa;IACbC;EACF,CAAC,GAAGhB,OAAO;EAEXzB,SAAS,CAAC,MAAM;IACd,IAAIuB,SAAS,EAAEM,aAAa,CAAC,IAAI,CAAC;IAElCC,OAAO,CAACY,KAAK,GAAG7B,UAAU,CACxBU,SAAS,GAAG,CAAC,GAAG,CAAC,EACjBU,eAAe,EACdU,QAAQ,IAAK;MACZ,IAAIA,QAAQ,IAAI,CAACpB,SAAS,EAAE;QAC1Bb,OAAO,CAACmB,aAAa,CAAC,CAAC,KAAK,CAAC;MAC/B;IACF,CACF,CAAC;EACH,CAAC,EAAE,CAACN,SAAS,EAAEU,eAAe,EAAEH,OAAO,CAAC,CAAC;EAEzC9B,SAAS,CAAC,MAAM;IACd,MAAM4C,WAAW,GAAGzC,WAAW,CAAC0C,gBAAgB,CAC9C,mBAAmB,EACnB,MAAM;MACJ,IAAItB,SAAS,IAAIS,iBAAiB,EAAE;QAClCN,OAAO,CAAC,CAAC;QACT,OAAO,IAAI;MACb;MACA,OAAO,KAAK;IACd,CACF,CAAC;IACD,OAAO,MAAMkB,WAAW,CAACE,MAAM,CAAC,CAAC;EACnC,CAAC,EAAE,CAACvB,SAAS,EAAES,iBAAiB,EAAEN,OAAO,CAAC,CAAC;EAE3C,MAAMqB,qBAAqB,GAAGpC,gBAAgB,CAAC,OAAO;IACpDmB,OAAO,EAAEA,OAAO,CAACY;EACnB,CAAC,CAAC,CAAC;EAEH,MAAMM,oBAAoB,GAAGrC,gBAAgB,CAAC,MAAM;IAClD,IAAIsC,SAAS,GAAG,EAAE;IAClB,IAAIX,WAAW,KAAK,QAAQ,EAAE;MAC5BW,SAAS,CAACC,IAAI,CAAC;QAAEC,UAAU,EAAE,CAAC,CAAC,GAAGrB,OAAO,CAACY,KAAK,IAAI;MAAI,CAAC,CAAC;IAC3D,CAAC,MAAM,IAAIJ,WAAW,KAAK,KAAK,EAAE;MAChCW,SAAS,CAACC,IAAI,CAAC;QAAEC,UAAU,EAAE,CAAC,CAAC,GAAGrB,OAAO,CAACY,KAAK,IAAI,CAAC;MAAI,CAAC,CAAC;IAC5D,CAAC,MAAM;MACLO,SAAS,CAACC,IAAI,CAAC;QAAEE,KAAK,EAAE,GAAG,GAAGtB,OAAO,CAACY,KAAK,GAAG;MAAI,CAAC,CAAC;IACtD;IAEA,OAAO;MACLZ,OAAO,EAAEA,OAAO,CAACY,KAAK;MACtBO;IACF,CAAC;EACH,CAAC,CAAC;EAEF,IAAI,CAACrB,UAAU,EAAE,OAAO,IAAI;EAE5B,MAAMyB,cAAc,GAClBhB,QAAQ,KAAK,QAAQ,GACjB,UAAU,GACVA,QAAQ,KAAK,KAAK,GAChB,YAAY,GACZ,QAAQ;EAEhB,MAAMiB,aAAa,GAAGjB,QAAQ,KAAK,QAAQ,GAAGV,MAAM,CAAC4B,MAAM,GAAG,CAAC;EAC/D,MAAMC,UAAU,GAAGnB,QAAQ,KAAK,KAAK,GAAGV,MAAM,CAAC8B,GAAG,GAAG,CAAC;EAEtD,MAAMC,cAAc,GAAGnB,aAAa,GAAGhC,oBAAoB,GAAGD,IAAI;EAElE,oBACEY,KAAA,CAACZ,IAAI;IACHqD,KAAK,EAAE,CACLvD,UAAU,CAACwD,YAAY,EACvBC,MAAM,CAACC,cAAc,EACrB;MAAET;IAAe,CAAC,CAClB;IAAA7B,QAAA,gBAGFR,IAAA,CAACR,QAAQ,CAACF,IAAI;MACZqD,KAAK,EAAE,CACLvD,UAAU,CAACwD,YAAY,EACvBC,MAAM,CAACE,QAAQ,EACfvB,aAAa,EACbO,qBAAqB,CACrB;MAAAvB,QAAA,eAEFR,IAAA,CAACX,gBAAgB;QACfsD,KAAK,EAAEvD,UAAU,CAACwD,YAAa;QAC/BI,aAAa,EAAE,CAAE;QACjBC,OAAO,EAAElC,oBAAoB,GAAGL,OAAO,GAAGN;MAAU,CACrD;IAAC,CACW,CAAC,eAGhBJ,IAAA,CAAC0C,cAAc;MACbQ,QAAQ,EAAE,SAAU;MACpBC,sBAAsB,EAAE,EAAG;MAC3BR,KAAK,EAAE,CACLE,MAAM,CAACO,YAAY,EACnB;QAAEd,aAAa;QAAEE,UAAU;QAAEH;MAAe,CAAC,CAC7C;MACFgB,aAAa,EAAC,UAAU;MAAA7C,QAAA,eAExBR,IAAA,CAACR,QAAQ,CAACF,IAAI;QACZqD,KAAK,EAAE,CAACE,MAAM,CAACS,aAAa,EAAE7B,cAAc,EAAEO,oBAAoB,CAAE;QAAAxB,QAAA,EAEnEA;MAAQ,CACI;IAAC,CACF,CAAC;EAAA,CACb,CAAC;AAEX,CAAC;;AAED;AACA,OAAO,MAAM+C,sBAAoD,GAAGA,CAAC;EACnE/C,QAAQ;EACRgD,cAAc,GAAG,CAAC,CAAC;EACnBC,cAAc,GAAGpD,kBAAkB;EACnCqD;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG1E,QAAQ,CAI/B;IACDqB,SAAS,EAAE,KAAK;IAChBsD,OAAO,EAAE,IAAI;IACbpD,OAAO,EAAE+C;EACX,CAAC,CAAC;EAEF,MAAMM,SAAS,GAAGhF,WAAW,CAC3B,CAAC+E,OAAkB,EAAEpD,OAAsB,KAAK;IAC9CmD,QAAQ,CAAC;MACPrD,SAAS,EAAE,IAAI;MACfsD,OAAO;MACPpD,OAAO,EAAE;QAAE,GAAG+C,cAAc;QAAE,GAAG/C;MAAQ;IAC3C,CAAC,CAAC;EACJ,CAAC,EACD,CAAC+C,cAAc,CACjB,CAAC;EAED,MAAMO,SAAS,GAAGjF,WAAW,CAAC,MAAM;IAClC,MAAMkF,gBAAgB,GAAGL,KAAK,CAAClD,OAAO,CAACwD,SAAS;IAEhDL,QAAQ,CAAEM,IAAI,KAAM;MAAE,GAAGA,IAAI;MAAE3D,SAAS,EAAE;IAAM,CAAC,CAAC,CAAC;IACnD;IACA4D,UAAU,CAAC,MAAM;MACfP,QAAQ,CAAEM,IAAI,IAAK;QACjB;QACA,OAAO,CAACA,IAAI,CAAC3D,SAAS,GAAG;UAAE,GAAG2D,IAAI;UAAEL,OAAO,EAAE;QAAK,CAAC,GAAGK,IAAI;MAC5D,CAAC,CAAC;MAEF,IAAIF,gBAAgB,EAAE;QACpBA,gBAAgB,CAAC,CAAC;MACpB;IACF,CAAC,EAAE,GAAG,CAAC;EACT,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,OAAO,GAAGV,oBAAoB,IAAIpD,cAAc;EAEtD,MAAMoB,KAAK,GAAGzC,OAAO,CACnB,OAAO;IAAE6E,SAAS;IAAEC,SAAS;IAAExD,SAAS,EAAEoD,KAAK,CAACpD;EAAU,CAAC,CAAC,EAC5D,CAACuD,SAAS,EAAEC,SAAS,EAAEJ,KAAK,CAACpD,SAAS,CACxC,CAAC;EAED,oBACEP,IAAA,CAACG,YAAY,CAACkE,QAAQ;IAAC3C,KAAK,EAAEA,KAAM;IAAAlB,QAAA,eAClCN,KAAA,CAACvB,cAAc;MAAA6B,QAAA,GACZA,QAAQ,eACTR,IAAA,CAACtB,UAAU;QAAC4F,IAAI,EAAEb;MAAe,CAAE,CAAC,eACpCzD,IAAA,CAACvB,MAAM;QAAC8F,QAAQ,EAAEd,cAAe;QAAAjD,QAAA,eAC/BR,IAAA,CAACoE,OAAO;UACN7D,SAAS,EAAEoD,KAAK,CAACpD,SAAU;UAC3BE,OAAO,EAAEkD,KAAK,CAAClD,OAAQ;UACvBC,OAAO,EAAEqD,SAAU;UAAAvD,QAAA,EAElBmD,KAAK,CAACE;QAAO,CACP;MAAC,CACJ,CAAC;IAAA,CACK;EAAC,CACI,CAAC;AAE5B,CAAC;AAED,OAAO,MAAMW,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAMC,OAAO,GAAG1F,UAAU,CAACoB,YAAY,CAAC;EACxC,IAAI,CAACsE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,uDAAuD,CAAC;EAC1E;EACA,OAAOD,OAAO;AAChB,CAAC;AAED,MAAM5B,MAAM,GAAGzD,UAAU,CAACuF,MAAM,CAAC;EAC/B7B,cAAc,EAAE;IACd8B,MAAM,EAAE,IAAI;IACZC,SAAS,EAAE;EACb,CAAC;EACD9B,QAAQ,EAAE;IACR+B,eAAe,EAAE;EACnB,CAAC;EACD1B,YAAY,EAAE;IACZf,cAAc,EAAE,QAAQ;IACxB0C,UAAU,EAAE;EACd,CAAC;EACDzB,aAAa,EAAE;IACb0B,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Portal","PortalHost","PortalProvider","React","createContext","useCallback","useContext","useEffect","useMemo","useState","BackHandler","StyleSheet","TouchableOpacity","View","KeyboardAvoidingView","Animated","Easing","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","ModalContext","undefined","DEFAULT_MODAL_HOST","DefaultModalUI","isVisible","children","options","onClose","insets","isRendered","setIsRendered","opacity","closeOnBackdropPress","closeOnBackButton","animationConfig","duration","easing","bezier","position","animateFrom","avoidKeyboard","backdropStyle","containerStyle","closeIconComponent","value","finished","backHandler","addEventListener","remove","backdropAnimatedStyle","closeIconAnimatedStyle","contentAnimatedStyle","transform","push","translateY","scale","justifyContent","paddingBottom","bottom","paddingTop","top","ContentWrapper","style","absoluteFill","styles","overlayWrapper","backdrop","activeOpacity","onPress","closeIconContainer","pointerEvents","hitSlop","left","right","behavior","keyboardVerticalOffset","keyboardView","baseContainer","UniversalModalProvider","defaultOptions","portalHostName","CustomModalComponent","state","setState","content","showModal","hideModal","prev","setTimeout","ModalUI","Provider","name","hostName","useModal","context","Error","create","zIndex","elevation","backgroundColor","alignItems","width"],"sourceRoot":"..\\..\\..\\src","sources":["contexts/UniversalModalProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
- import { ViewStyle, TextStyle } from "react-native";
3
- import { AppButtonProps } from "../Button";
2
+ import { TextStyle, ViewStyle } from "react-native";
4
3
  export interface SpinWheelItem {
5
4
  id: string | number;
6
5
  label: string;
@@ -10,24 +9,15 @@ export interface SpinWheelItem {
10
9
  }
11
10
  interface SpinWheelProps {
12
11
  items: SpinWheelItem[];
13
- predeterminedWinner?: SpinWheelItem | string | number;
14
12
  size?: number;
15
- startSpin?: boolean;
16
13
  winner?: SpinWheelItem | string | number;
17
- minSpinDuration?: number;
18
14
  spinDuration?: number;
19
- friction?: number;
20
- enabled?: boolean;
21
15
  onSpinStart?: () => void;
22
16
  onSpinEnd?: (item: SpinWheelItem) => void;
23
17
  containerStyle?: ViewStyle;
24
18
  centerStyle?: ViewStyle;
25
- spinButtonText?: string;
26
19
  wheelTextStyle?: TextStyle;
27
20
  knobStyle?: ViewStyle;
28
- actionButtonStyle?: ViewStyle;
29
- actionButtonTextStyle?: TextStyle;
30
- actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
31
21
  wheelBorderColor?: string;
32
22
  wheelBorderWidth?: number;
33
23
  wheelTextColor?: string;
@@ -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;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"}
1
+ {"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../../../src/components/Wheel/Wheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAIL,SAAS,EAET,SAAS,EACV,MAAM,cAAc,CAAC;AAGtB,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,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,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;AAMD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4OvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
@@ -17,7 +17,8 @@ export interface ModalOptions {
17
17
  animateFrom?: "center" | "bottom" | "top";
18
18
  /** If true, avoids keyboard view. Default: true */
19
19
  avoidKeyboard?: boolean;
20
- onDismiss?: () => void;
20
+ /** Optional component to render as a close icon at the top right or left of the screen */
21
+ closeIconComponent?: ReactNode;
21
22
  }
22
23
  interface ModalContextType {
23
24
  showModal: (content: ReactNode, options?: ModalOptions) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"UniversalModalProvider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/UniversalModalProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAMV,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,SAAS,EAIT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAiB,EAMf,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAsIvD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoE/D,CAAC;AAEF,eAAO,MAAM,QAAQ,wBAMpB,CAAC"}
1
+ {"version":3,"file":"UniversalModalProvider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/UniversalModalProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAMV,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,SAAS,EAIT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAiB,EAMf,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AA8JvD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA8D/D,CAAC;AAEF,eAAO,MAAM,QAAQ,wBAMpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "related-ui-components",
3
- "version": "4.1.1",
3
+ "version": "4.1.3",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -1,16 +1,13 @@
1
- import React, { useState, useRef, useEffect } from "react";
1
+ import React, { useEffect, useRef, useState } from "react";
2
2
  import {
3
- View,
4
- StyleSheet,
5
3
  Animated,
6
- Text,
7
- TouchableOpacity,
8
4
  Easing,
9
- ViewStyle,
5
+ StyleSheet,
10
6
  TextStyle,
7
+ View,
8
+ ViewStyle,
11
9
  } from "react-native";
12
- import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
13
- import { AppButtonProps, Button } from "../Button";
10
+ import { Circle, G, Path, Svg, Text as SvgText } from "react-native-svg";
14
11
 
15
12
  export interface SpinWheelItem {
16
13
  id: string | number;
@@ -20,7 +17,6 @@ export interface SpinWheelItem {
20
17
  textColor?: string;
21
18
  }
22
19
 
23
- //default random colors
24
20
  const colors = [
25
21
  "#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080",
26
22
  "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE",
@@ -31,24 +27,15 @@ const colors = [
31
27
 
32
28
  interface SpinWheelProps {
33
29
  items: SpinWheelItem[];
34
- predeterminedWinner?: SpinWheelItem | string | number;
35
30
  size?: number;
36
- startSpin?: boolean;
37
31
  winner?: SpinWheelItem | string | number;
38
- minSpinDuration?: number;
39
32
  spinDuration?: number;
40
- friction?: number;
41
- enabled?: boolean;
42
33
  onSpinStart?: () => void;
43
34
  onSpinEnd?: (item: SpinWheelItem) => void;
44
35
  containerStyle?: ViewStyle;
45
36
  centerStyle?: ViewStyle;
46
- spinButtonText?: string;
47
37
  wheelTextStyle?: TextStyle;
48
38
  knobStyle?: ViewStyle;
49
- actionButtonStyle?: ViewStyle;
50
- actionButtonTextStyle?: TextStyle;
51
- actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
52
39
  wheelBorderColor?: string;
53
40
  wheelBorderWidth?: number;
54
41
  wheelTextColor?: string;
@@ -57,96 +44,83 @@ interface SpinWheelProps {
57
44
  centerComponent?: React.ReactNode;
58
45
  }
59
46
 
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
47
+ // Config for the single animation
48
+ const TOTAL_SPINS = 5; // How many full rotations before stopping
49
+ const SPIN_DURATION = 4000; // Total time for the one animation
64
50
 
65
51
  const SpinWheel: React.FC<SpinWheelProps> = ({
66
52
  items,
67
53
  size = 300,
68
54
  winner,
69
- minSpinDuration = 2000,
70
- onSpinStart,
71
55
  onSpinEnd,
72
56
  containerStyle,
73
57
  centerStyle,
74
- spinButtonText = "Spin",
75
58
  wheelTextStyle,
76
59
  knobStyle,
77
60
  knobColor = "#D81E5B",
78
- actionButtonStyle,
79
- actionButtonTextStyle,
80
61
  wheelBorderColor,
81
62
  wheelBorderWidth,
82
63
  wheelTextColor = "#FFFFFF",
83
- actionButtonProps,
84
64
  centerSize,
85
65
  centerComponent,
86
66
  }) => {
87
67
  const wheelItems = items.length > 0 ? items : [];
88
-
89
- const spinLoop = useRef<Animated.CompositeAnimation | null>(null);
90
- const spinStartTime = useRef<number>(0);
91
-
92
68
  const [spinning, setSpinning] = useState(false);
69
+
70
+ // 0-1 represents 0-360 degrees. We keep increasing this value.
93
71
  const rotateValue = useRef(new Animated.Value(0)).current;
94
72
  const rotationRef = useRef(0);
95
73
 
96
- const startInfiniteSpin = () => {
97
- rotateValue.setValue(rotationRef.current);
98
- spinStartTime.current = Date.now();
99
-
100
- spinLoop.current = Animated.loop(
101
- Animated.timing(rotateValue, {
102
- toValue: rotationRef.current + 1,
103
- duration: ROTATION_DURATION,
104
- easing: Easing.linear,
105
- useNativeDriver: true,
106
- })
107
- );
108
-
109
- spinLoop.current.start();
110
- setSpinning(true);
111
- onSpinStart?.();
112
- };
113
-
114
- const stopOnWinner = (winnerValue: SpinWheelItem | string | number) => {
115
- if (!spinLoop.current) return;
74
+ // Sync the ref with the animated value to ensure we start next spin from where we left off
75
+ useEffect(() => {
76
+ const listener = rotateValue.addListener(({ value }) => {
77
+ rotationRef.current = value;
78
+ });
79
+ return () => {
80
+ rotateValue.removeListener(listener);
81
+ };
82
+ }, [rotateValue]);
116
83
 
117
- spinLoop.current.stop();
118
- spinLoop.current = null;
84
+ // Main Logic: Trigger spin when 'winner' is provided
85
+ useEffect(() => {
86
+ if (winner != null && !spinning) {
87
+ spinToWinner(winner);
88
+ }
89
+ }, [winner]);
119
90
 
91
+ const spinToWinner = (winnerValue: SpinWheelItem | string | number) => {
120
92
  const winnerId =
121
93
  typeof winnerValue === "object" ? winnerValue.id : winnerValue;
122
94
 
123
95
  const index = items.findIndex((i) => i.id === winnerId);
124
- if (index === -1) return;
96
+ if (index === -1) {
97
+ console.warn("Winner not found in items array");
98
+ return;
99
+ }
125
100
 
126
- // Calculate target angle (pointer at top = 270 degrees)
101
+ setSpinning(true);
102
+
103
+ // 1. Calculate the angle where the item is centered
127
104
  const anglePerItem = 360 / items.length;
105
+ // We want the item centered at 270 degrees (top of the wheel in standard SVG)
128
106
  const segmentCenter = (index + 0.5) * anglePerItem;
129
107
  const targetAngle = (270 - segmentCenter + 360) % 360;
130
108
 
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;
109
+ // 2. Calculate offset from current position
110
+ const currentRotationDegrees = (rotationRef.current * 360) % 360;
111
+ const offset = (targetAngle - currentRotationDegrees + 360) % 360;
112
+
113
+ // 3. Calculate total rotation:
114
+ // Current Rotation + (Distance to target) + (Extra Full Spins)
115
+ // We divide by 360 because our Animated.Value goes from 0 to 1 for a full circle
116
+ const finalRotation =
117
+ rotationRef.current + (offset + 360 * TOTAL_SPINS) / 360;
144
118
 
145
- // Use ease-out cubic for smooth deceleration
119
+ // 4. One smooth animation
146
120
  Animated.timing(rotateValue, {
147
121
  toValue: finalRotation,
148
- duration: DECEL_DURATION,
149
- easing: Easing.out(Easing.cubic),
122
+ duration: SPIN_DURATION,
123
+ easing: Easing.out(Easing.cubic), // Starts fast, slows down smoothly
150
124
  useNativeDriver: true,
151
125
  }).start(() => {
152
126
  rotationRef.current = finalRotation;
@@ -155,16 +129,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
155
129
  });
156
130
  };
157
131
 
158
- useEffect(() => {
159
- const listener = rotateValue.addListener(({ value }) => {
160
- rotationRef.current = value;
161
- });
162
-
163
- return () => {
164
- rotateValue.removeListener(listener);
165
- };
166
- }, [rotateValue]);
167
-
168
132
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
169
133
 
170
134
  const generateWheelPaths = () => {
@@ -206,19 +170,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
206
170
 
207
171
  const wheelPaths = generateWheelPaths();
208
172
 
209
- useEffect(() => {
210
- if (!winner || !spinning) return;
211
-
212
- const elapsed = Date.now() - spinStartTime.current;
213
- const delay = Math.max(0, minSpinDuration - elapsed);
214
-
215
- const timeout = setTimeout(() => {
216
- stopOnWinner(winner);
217
- }, delay);
218
-
219
- return () => clearTimeout(timeout);
220
- }, [winner, spinning]);
221
-
222
173
  const rotate = rotateValue.interpolate({
223
174
  inputRange: [0, 1],
224
175
  outputRange: ["0deg", "360deg"],
@@ -330,26 +281,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
330
281
  ]}
331
282
  />
332
283
  </View>
333
-
334
- <View
335
- style={{
336
- position: "absolute",
337
- width: "100%",
338
- alignItems: "center",
339
- justifyContent: "center",
340
- bottom: -70,
341
- zIndex: 2,
342
- }}
343
- >
344
- <Button
345
- style={[styles.actionButton, actionButtonStyle]}
346
- onPress={startInfiniteSpin}
347
- title={spinButtonText}
348
- disabled={spinning}
349
- textStyle={[styles.actionButtonText, actionButtonTextStyle]}
350
- {...actionButtonProps}
351
- />
352
- </View>
353
284
  </View>
354
285
  </View>
355
286
  );
@@ -44,8 +44,8 @@ export interface ModalOptions {
44
44
  animateFrom?: "center" | "bottom" | "top";
45
45
  /** If true, avoids keyboard view. Default: true */
46
46
  avoidKeyboard?: boolean;
47
-
48
- onDismiss?: () => void;
47
+ /** Optional component to render as a close icon at the top right or left of the screen */
48
+ closeIconComponent?: ReactNode;
49
49
  }
50
50
 
51
51
  interface ModalContextType {
@@ -98,6 +98,7 @@ const DefaultModalUI: React.FC<{
98
98
  avoidKeyboard = true,
99
99
  backdropStyle,
100
100
  containerStyle,
101
+ closeIconComponent
101
102
  } = options;
102
103
 
103
104
  useEffect(() => {
@@ -132,6 +133,10 @@ const DefaultModalUI: React.FC<{
132
133
  opacity: opacity.value,
133
134
  }));
134
135
 
136
+ const closeIconAnimatedStyle = useAnimatedStyle(() => ({
137
+ opacity: opacity.value,
138
+ }));
139
+
135
140
  const contentAnimatedStyle = useAnimatedStyle(() => {
136
141
  let transform = [];
137
142
  if (animateFrom === "bottom") {
@@ -186,6 +191,25 @@ const DefaultModalUI: React.FC<{
186
191
  />
187
192
  </Animated.View>
188
193
 
194
+ {closeIconComponent && (
195
+ <Animated.View
196
+ style={[
197
+ styles.closeIconContainer,
198
+ { top: insets.top + 16 },
199
+ closeIconAnimatedStyle,
200
+ ]}
201
+ pointerEvents="box-none"
202
+ >
203
+ <TouchableOpacity
204
+ onPress={onClose}
205
+ hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
206
+ activeOpacity={0.7}
207
+ >
208
+ {closeIconComponent}
209
+ </TouchableOpacity>
210
+ </Animated.View>
211
+ )}
212
+
189
213
  {/* Content */}
190
214
  <ContentWrapper
191
215
  behavior={"padding"}
@@ -235,8 +259,6 @@ export const UniversalModalProvider: React.FC<ModalProviderProps> = ({
235
259
  );
236
260
 
237
261
  const hideModal = useCallback(() => {
238
- const currentOnDismiss = state.options.onDismiss;
239
-
240
262
  setState((prev) => ({ ...prev, isVisible: false }));
241
263
  // Clear content after animation normally finishes to avoid flicker
242
264
  setTimeout(() => {
@@ -244,10 +266,6 @@ export const UniversalModalProvider: React.FC<ModalProviderProps> = ({
244
266
  // Only clear if still hidden (prevent race condition if immediately reshown)
245
267
  return !prev.isVisible ? { ...prev, content: null } : prev;
246
268
  });
247
-
248
- if (currentOnDismiss) {
249
- currentOnDismiss();
250
- }
251
269
  }, 350);
252
270
  }, []);
253
271
 
@@ -300,4 +318,9 @@ const styles = StyleSheet.create({
300
318
  baseContainer: {
301
319
  width: "90%",
302
320
  },
321
+ closeIconContainer: {
322
+ position: "absolute",
323
+ right: 16,
324
+ zIndex: 2000,
325
+ },
303
326
  });