react-native-directional-toggle 0.1.0 → 0.1.2

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.
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AnimatedSwitch = AnimatedSwitch;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
10
+ var _reactNativeWorklets = require("react-native-worklets");
11
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ const DEFAULT_ANIMATION = {
15
+ duration: 150,
16
+ damping: 5,
17
+ stiffness: 100
18
+ };
19
+ function AnimatedSwitch({
20
+ options,
21
+ value,
22
+ onChange,
23
+ vertical = false,
24
+ style,
25
+ thumbStyle,
26
+ textStyle,
27
+ activeTextStyle,
28
+ inactiveTextStyle,
29
+ animationConfig = DEFAULT_ANIMATION
30
+ }) {
31
+ const itemSizeSV = (0, _reactNativeReanimated.useSharedValue)(0);
32
+ const translate = (0, _reactNativeReanimated.useSharedValue)(0);
33
+ const indexSV = (0, _reactNativeReanimated.useSharedValue)(0);
34
+ const currentIndex = options.findIndex(o => o.value === value);
35
+
36
+ // Measure container layout
37
+ const onLayout = (0, _react.useCallback)(e => {
38
+ const {
39
+ width,
40
+ height
41
+ } = e.nativeEvent.layout;
42
+ const totalSize = vertical ? height - 4 : width - 4;
43
+ const itemSize = totalSize / options.length;
44
+ itemSizeSV.value = itemSize;
45
+
46
+ // Fix initial position on layout
47
+ if (currentIndex >= 0 && itemSize > 0) {
48
+ translate.value = currentIndex * itemSize;
49
+ }
50
+ }, [vertical, options.length, currentIndex, itemSizeSV, translate]);
51
+
52
+ // Sync with external value changes
53
+ (0, _react.useEffect)(() => {
54
+ if (currentIndex >= 0 && itemSizeSV.value > 0) {
55
+ indexSV.value = currentIndex;
56
+ translate.value = (0, _reactNativeReanimated.withTiming)(currentIndex * itemSizeSV.value, animationConfig);
57
+ }
58
+ // eslint-disable-next-line react-hooks/exhaustive-deps
59
+ }, [currentIndex, animationConfig]);
60
+ const emitChange = (0, _react.useCallback)(index => {
61
+ // Clamp index to safe bounds
62
+ const safeIndex = Math.max(0, Math.min(index, options.length - 1));
63
+ if (options[safeIndex]) {
64
+ onChange(options[safeIndex].value);
65
+ }
66
+ }, [onChange, options]);
67
+ const handlePress = index => {
68
+ if (itemSizeSV.value === 0) return;
69
+ indexSV.value = index;
70
+ translate.value = (0, _reactNativeReanimated.withTiming)(index * itemSizeSV.value, animationConfig);
71
+ emitChange(index);
72
+ };
73
+ const panGesture = _reactNativeGestureHandler.Gesture.Pan().onUpdate(e => {
74
+ if (itemSizeSV.value === 0) return;
75
+ const term = vertical ? e.translationY : e.translationX;
76
+ const startPos = indexSV.value * itemSizeSV.value;
77
+ const pos = startPos + term;
78
+ const max = (options.length - 1) * itemSizeSV.value;
79
+ translate.value = Math.min(Math.max(0, pos), max);
80
+ }).onEnd(() => {
81
+ if (itemSizeSV.value === 0) return;
82
+ const index = Math.round(translate.value / itemSizeSV.value);
83
+ indexSV.value = index;
84
+ translate.value = (0, _reactNativeReanimated.withSpring)(index * itemSizeSV.value, animationConfig);
85
+ (0, _reactNativeWorklets.scheduleOnRN)(emitChange, index);
86
+ });
87
+ const animatedThumbStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
88
+ // If layout not ready, hide thumb or show nothing
89
+ if (itemSizeSV.value === 0) return {
90
+ opacity: 0
91
+ };
92
+ const transform = vertical ? [{
93
+ translateY: translate.value
94
+ }] : [{
95
+ translateX: translate.value
96
+ }];
97
+ const sizeStyle = vertical ? {
98
+ height: itemSizeSV.value,
99
+ width: '100%'
100
+ } : {
101
+ width: itemSizeSV.value,
102
+ height: '100%'
103
+ };
104
+ return {
105
+ position: 'absolute',
106
+ left: 2,
107
+ top: 2,
108
+ ...sizeStyle,
109
+ transform,
110
+ opacity: 1
111
+ };
112
+ });
113
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
114
+ gesture: panGesture,
115
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
116
+ onLayout: onLayout,
117
+ style: [styles.container, vertical ? styles.vertical : styles.horizontal, style // User override
118
+ ],
119
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
120
+ style: [styles.thumb, thumbStyle, animatedThumbStyle]
121
+ }), options.map((opt, index) => {
122
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(OptionItem, {
123
+ label: opt.label,
124
+ onPress: () => handlePress(index),
125
+ index: index,
126
+ translate: translate,
127
+ itemSizeSV: itemSizeSV,
128
+ textStyle: textStyle,
129
+ activeTextStyle: activeTextStyle,
130
+ inactiveTextStyle: inactiveTextStyle
131
+ }, opt.value);
132
+ })]
133
+ })
134
+ });
135
+ }
136
+
137
+ // Sub-component for individual options to isolate animated styles
138
+ const OptionItem = ({
139
+ label,
140
+ onPress,
141
+ index,
142
+ translate,
143
+ itemSizeSV,
144
+ textStyle,
145
+ activeTextStyle,
146
+ inactiveTextStyle
147
+ }) => {
148
+ const activeColor = _reactNative.StyleSheet.flatten(activeTextStyle)?.color ?? '#000';
149
+ const inactiveColor = _reactNative.StyleSheet.flatten(inactiveTextStyle)?.color ?? '#999';
150
+ const textAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
151
+ const center = index * itemSizeSV.value;
152
+ const color = (0, _reactNativeReanimated.interpolateColor)(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [inactiveColor, activeColor, inactiveColor]);
153
+ return {
154
+ color
155
+ };
156
+ });
157
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
158
+ style: styles.option,
159
+ onPress: onPress,
160
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
161
+ style: [styles.text, textStyle, textAnimatedStyle],
162
+ numberOfLines: 1,
163
+ children: label
164
+ })
165
+ });
166
+ };
167
+ const styles = _reactNative.StyleSheet.create({
168
+ container: {
169
+ // backgroundColor: '#f0f0f0',
170
+ borderRadius: 16,
171
+ overflow: 'hidden',
172
+ padding: 2
173
+ // position: 'relative',
174
+ },
175
+ horizontal: {
176
+ flexDirection: 'row'
177
+ },
178
+ vertical: {
179
+ flexDirection: 'column'
180
+ },
181
+ thumb: {
182
+ // backgroundColor: '#fff',
183
+ borderRadius: 16,
184
+ shadowColor: '#000',
185
+ shadowOffset: {
186
+ width: 0,
187
+ height: 1
188
+ },
189
+ shadowOpacity: 0.1,
190
+ shadowRadius: 1,
191
+ elevation: 1
192
+ },
193
+ option: {
194
+ flex: 1,
195
+ alignItems: 'center',
196
+ justifyContent: 'center'
197
+ // zIndex: 1
198
+ },
199
+ text: {
200
+ fontSize: 14,
201
+ fontWeight: '500'
202
+ }
203
+ });
204
+ //# sourceMappingURL=AnimatedSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_reactNativeGestureHandler","_reactNativeWorklets","_reactNativeReanimated","_interopRequireWildcard","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_ANIMATION","duration","damping","stiffness","AnimatedSwitch","options","value","onChange","vertical","style","thumbStyle","textStyle","activeTextStyle","inactiveTextStyle","animationConfig","itemSizeSV","useSharedValue","translate","indexSV","currentIndex","findIndex","onLayout","useCallback","width","height","nativeEvent","layout","totalSize","itemSize","length","useEffect","withTiming","emitChange","index","safeIndex","Math","max","min","handlePress","panGesture","Gesture","Pan","onUpdate","term","translationY","translationX","startPos","pos","onEnd","round","withSpring","scheduleOnRN","animatedThumbStyle","useAnimatedStyle","opacity","transform","translateY","translateX","sizeStyle","position","left","top","jsx","GestureDetector","gesture","children","jsxs","View","styles","container","horizontal","thumb","map","opt","OptionItem","label","onPress","activeColor","StyleSheet","flatten","color","inactiveColor","textAnimatedStyle","center","interpolateColor","Pressable","option","Text","text","numberOfLines","create","borderRadius","overflow","padding","flexDirection","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","flex","alignItems","justifyContent","fontSize","fontWeight"],"sourceRoot":"../../src","sources":["AnimatedSwitch.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "AnimatedSwitch", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _AnimatedSwitch.AnimatedSwitch;
10
+ }
11
+ });
12
+ exports.default = void 0;
13
+ var _AnimatedSwitch = require("./AnimatedSwitch");
14
+ var _default = exports.default = _AnimatedSwitch.AnimatedSwitch;
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_AnimatedSwitch","require","_default","exports","default","AnimatedSwitch"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAA4E,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAE7DC,8BAAc","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -1,190 +1,199 @@
1
1
  "use strict";
2
2
 
3
- import { useCallback, useEffect } from "react";
4
- import { Pressable, StyleSheet, View } from "react-native";
5
- import { Gesture, GestureDetector } from "react-native-gesture-handler";
6
- import Animated, { interpolateColor, runOnJS, useAnimatedStyle, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
3
+ import { useCallback, useEffect } from 'react';
4
+ import { Pressable, StyleSheet, View } from 'react-native';
5
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
6
+ import { scheduleOnRN } from 'react-native-worklets';
7
+ import Animated, { interpolateColor, useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
7
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- const THUMB_INSET = 4;
9
- const VERTICAL_WIDTH = 128;
9
+ const DEFAULT_ANIMATION = {
10
+ duration: 150,
11
+ damping: 5,
12
+ stiffness: 100
13
+ };
10
14
  export function AnimatedSwitch({
11
15
  options,
12
16
  value,
13
17
  onChange,
14
- height = 40,
15
18
  vertical = false,
16
- colors = {
17
- activeText: "#373737",
18
- inactiveText: "#dededeff",
19
- bgFront: "#d4d4d4",
20
- bgBack: "#798393ff"
21
- },
22
- animationConfig = {
23
- duration: 100,
24
- damping: 50,
25
- stiffness: 200
26
- }
19
+ style,
20
+ thumbStyle,
21
+ textStyle,
22
+ activeTextStyle,
23
+ inactiveTextStyle,
24
+ animationConfig = DEFAULT_ANIMATION
27
25
  }) {
28
- /** ===== SharedValues ===== */
29
26
  const itemSizeSV = useSharedValue(0);
30
27
  const translate = useSharedValue(0);
31
28
  const indexSV = useSharedValue(0);
32
29
  const currentIndex = options.findIndex(o => o.value === value);
33
30
 
34
- /** * 1. 监听外部 value 变化
35
- * 当外部修改 value 时,滑块应动画移动到新位置
36
- */
31
+ // Measure container layout
32
+ const onLayout = useCallback(e => {
33
+ const {
34
+ width,
35
+ height
36
+ } = e.nativeEvent.layout;
37
+ const totalSize = vertical ? height - 4 : width - 4;
38
+ const itemSize = totalSize / options.length;
39
+ itemSizeSV.value = itemSize;
40
+
41
+ // Fix initial position on layout
42
+ if (currentIndex >= 0 && itemSize > 0) {
43
+ translate.value = currentIndex * itemSize;
44
+ }
45
+ }, [vertical, options.length, currentIndex, itemSizeSV, translate]);
46
+
47
+ // Sync with external value changes
37
48
  useEffect(() => {
38
- if (currentIndex >= 0) {
49
+ if (currentIndex >= 0 && itemSizeSV.value > 0) {
39
50
  indexSV.value = currentIndex;
40
- // 只有当 itemSizeSV 已经有值(即 Layout 已完成)时才执行动画
41
- if (itemSizeSV.value > 0) {
42
- translate.value = withTiming(currentIndex * itemSizeSV.value, {
43
- duration: animationConfig.duration
44
- });
45
- }
51
+ translate.value = withTiming(currentIndex * itemSizeSV.value, animationConfig);
46
52
  }
47
- }, [currentIndex, animationConfig.duration]);
48
-
49
- /** ===== JS 回调 ===== */
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ }, [currentIndex, animationConfig]);
50
55
  const emitChange = useCallback(index => {
51
- if (options.length > 0 && index >= 0 && index < options.length) {
52
- onChange(options[index]?.value || "");
56
+ // Clamp index to safe bounds
57
+ const safeIndex = Math.max(0, Math.min(index, options.length - 1));
58
+ if (options[safeIndex]) {
59
+ onChange(options[safeIndex].value);
53
60
  }
54
61
  }, [onChange, options]);
55
-
56
- /** ===== Tap 点击切换 ===== */
57
62
  const handlePress = index => {
63
+ if (itemSizeSV.value === 0) return;
58
64
  indexSV.value = index;
59
- translate.value = withTiming(index * itemSizeSV.value, {
60
- duration: animationConfig.duration ?? 150
61
- });
65
+ translate.value = withTiming(index * itemSizeSV.value, animationConfig);
62
66
  emitChange(index);
63
67
  };
64
-
65
- /** ===== Drag 手势 ===== */
66
68
  const panGesture = Gesture.Pan().onUpdate(e => {
67
- const delta = vertical ? e.translationY : e.translationX;
68
- // 基于手势开始时的位置进行偏移计算
69
- const pos = delta + indexSV.value * itemSizeSV.value;
69
+ if (itemSizeSV.value === 0) return;
70
+ const term = vertical ? e.translationY : e.translationX;
71
+ const startPos = indexSV.value * itemSizeSV.value;
72
+ const pos = startPos + term;
70
73
  const max = (options.length - 1) * itemSizeSV.value;
71
74
  translate.value = Math.min(Math.max(0, pos), max);
72
75
  }).onEnd(() => {
76
+ if (itemSizeSV.value === 0) return;
73
77
  const index = Math.round(translate.value / itemSizeSV.value);
74
78
  indexSV.value = index;
75
- translate.value = withSpring(index * itemSizeSV.value, {
76
- damping: animationConfig.damping ?? 20,
77
- stiffness: animationConfig.stiffness ?? 200
78
- });
79
- runOnJS(emitChange)(index);
79
+ translate.value = withSpring(index * itemSizeSV.value, animationConfig);
80
+ scheduleOnRN(emitChange, index);
80
81
  });
81
-
82
- /** ===== Thumb 动画样式 ===== */
83
82
  const animatedThumbStyle = useAnimatedStyle(() => {
84
- if (vertical) {
85
- return {
86
- height: itemSizeSV.value - THUMB_INSET * 2,
87
- top: THUMB_INSET,
88
- left: THUMB_INSET,
89
- right: THUMB_INSET,
90
- transform: [{
91
- translateY: translate.value
92
- }]
93
- };
94
- }
95
- return {
96
- width: itemSizeSV.value - THUMB_INSET * 2,
97
- left: THUMB_INSET,
98
- top: THUMB_INSET,
99
- bottom: THUMB_INSET,
100
- transform: [{
101
- translateX: translate.value
102
- }]
83
+ // If layout not ready, hide thumb or show nothing
84
+ if (itemSizeSV.value === 0) return {
85
+ opacity: 0
86
+ };
87
+ const transform = vertical ? [{
88
+ translateY: translate.value
89
+ }] : [{
90
+ translateX: translate.value
91
+ }];
92
+ const sizeStyle = vertical ? {
93
+ height: itemSizeSV.value,
94
+ width: '100%'
95
+ } : {
96
+ width: itemSizeSV.value,
97
+ height: '100%'
103
98
  };
104
- });
105
-
106
- /** ===== Label 动画样式 ===== */
107
- const getLabelAnimatedStyle = index => useAnimatedStyle(() => {
108
- const center = index * itemSizeSV.value;
109
- const color = interpolateColor(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [colors.inactiveText, colors.activeText, colors.inactiveText]);
110
99
  return {
111
- color
100
+ position: 'absolute',
101
+ left: 2,
102
+ top: 2,
103
+ ...sizeStyle,
104
+ transform,
105
+ opacity: 1
112
106
  };
113
107
  });
114
-
115
- /** * 2. Layout 初始化
116
- * 这是修复初始显示问题的关键
117
- */
118
- const onLayout = e => {
119
- const size = vertical ? e.nativeEvent.layout.height : e.nativeEvent.layout.width;
120
- const newItemSize = size / options.length;
121
- itemSizeSV.value = newItemSize;
122
-
123
- // 核心修复:在获取到尺寸的第一时间,根据 currentIndex 强行同步 translate 的值
124
- if (currentIndex >= 0) {
125
- translate.value = currentIndex * newItemSize;
126
- }
127
- };
128
108
  return /*#__PURE__*/_jsx(GestureDetector, {
129
109
  gesture: panGesture,
130
110
  children: /*#__PURE__*/_jsxs(View, {
131
111
  onLayout: onLayout,
132
- style: [styles.container, {
133
- backgroundColor: colors.bgBack
134
- }, vertical ? {
135
- height: height * options.length,
136
- width: VERTICAL_WIDTH,
137
- flexDirection: "column"
138
- } : {
139
- height,
140
- flexDirection: "row"
141
- }],
112
+ style: [styles.container, vertical ? styles.vertical : styles.horizontal, style // User override
113
+ ],
142
114
  children: [/*#__PURE__*/_jsx(Animated.View, {
143
- pointerEvents: "none",
144
- style: [styles.thumbBase, {
145
- backgroundColor: colors.bgFront
146
- }, animatedThumbStyle]
115
+ style: [styles.thumb, thumbStyle, animatedThumbStyle]
147
116
  }), options.map((opt, index) => {
148
- const labelStyle = getLabelAnimatedStyle(index);
149
- return /*#__PURE__*/_jsx(Pressable, {
150
- style: styles.item,
117
+ return /*#__PURE__*/_jsx(OptionItem, {
118
+ label: opt.label,
151
119
  onPress: () => handlePress(index),
152
- children: /*#__PURE__*/_jsx(Animated.Text, {
153
- style: [styles.label, labelStyle],
154
- children: opt.label
155
- })
120
+ index: index,
121
+ translate: translate,
122
+ itemSizeSV: itemSizeSV,
123
+ textStyle: textStyle,
124
+ activeTextStyle: activeTextStyle,
125
+ inactiveTextStyle: inactiveTextStyle
156
126
  }, opt.value);
157
127
  })]
158
128
  })
159
129
  });
160
130
  }
131
+
132
+ // Sub-component for individual options to isolate animated styles
133
+ const OptionItem = ({
134
+ label,
135
+ onPress,
136
+ index,
137
+ translate,
138
+ itemSizeSV,
139
+ textStyle,
140
+ activeTextStyle,
141
+ inactiveTextStyle
142
+ }) => {
143
+ const activeColor = StyleSheet.flatten(activeTextStyle)?.color ?? '#000';
144
+ const inactiveColor = StyleSheet.flatten(inactiveTextStyle)?.color ?? '#999';
145
+ const textAnimatedStyle = useAnimatedStyle(() => {
146
+ const center = index * itemSizeSV.value;
147
+ const color = interpolateColor(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [inactiveColor, activeColor, inactiveColor]);
148
+ return {
149
+ color
150
+ };
151
+ });
152
+ return /*#__PURE__*/_jsx(Pressable, {
153
+ style: styles.option,
154
+ onPress: onPress,
155
+ children: /*#__PURE__*/_jsx(Animated.Text, {
156
+ style: [styles.text, textStyle, textAnimatedStyle],
157
+ numberOfLines: 1,
158
+ children: label
159
+ })
160
+ });
161
+ };
161
162
  const styles = StyleSheet.create({
162
163
  container: {
164
+ // backgroundColor: '#f0f0f0',
163
165
  borderRadius: 16,
164
- overflow: "hidden",
165
- flex: 1
166
+ overflow: 'hidden',
167
+ padding: 2
168
+ // position: 'relative',
166
169
  },
167
- thumbBase: {
168
- position: "absolute",
169
- borderRadius: 12,
170
+ horizontal: {
171
+ flexDirection: 'row'
172
+ },
173
+ vertical: {
174
+ flexDirection: 'column'
175
+ },
176
+ thumb: {
177
+ // backgroundColor: '#fff',
178
+ borderRadius: 16,
170
179
  shadowColor: '#000',
171
- shadowOpacity: 0.3,
172
180
  shadowOffset: {
173
181
  width: 0,
174
182
  height: 1
175
183
  },
176
- shadowRadius: 2,
177
- elevation: 2
184
+ shadowOpacity: 0.1,
185
+ shadowRadius: 1,
186
+ elevation: 1
178
187
  },
179
- item: {
188
+ option: {
180
189
  flex: 1,
181
- alignItems: "center",
182
- justifyContent: "center",
183
- zIndex: 1 // 确保文字在滑块上方
190
+ alignItems: 'center',
191
+ justifyContent: 'center'
192
+ // zIndex: 1
184
193
  },
185
- label: {
194
+ text: {
186
195
  fontSize: 14,
187
- fontWeight: "600"
196
+ fontWeight: '500'
188
197
  }
189
198
  });
190
199
  //# sourceMappingURL=AnimatedSwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","Pressable","StyleSheet","View","Gesture","GestureDetector","Animated","interpolateColor","runOnJS","useAnimatedStyle","useSharedValue","withSpring","withTiming","jsx","_jsx","jsxs","_jsxs","THUMB_INSET","VERTICAL_WIDTH","AnimatedSwitch","options","value","onChange","height","vertical","colors","activeText","inactiveText","bgFront","bgBack","animationConfig","duration","damping","stiffness","itemSizeSV","translate","indexSV","currentIndex","findIndex","o","emitChange","index","length","handlePress","panGesture","Pan","onUpdate","e","delta","translationY","translationX","pos","max","Math","min","onEnd","round","animatedThumbStyle","top","left","right","transform","translateY","width","bottom","translateX","getLabelAnimatedStyle","center","color","onLayout","size","nativeEvent","layout","newItemSize","gesture","children","style","styles","container","backgroundColor","flexDirection","pointerEvents","thumbBase","map","opt","labelStyle","item","onPress","Text","label","create","borderRadius","overflow","flex","position","shadowColor","shadowOpacity","shadowOffset","shadowRadius","elevation","alignItems","justifyContent","zIndex","fontSize","fontWeight"],"sourceRoot":"../../src","sources":["AnimatedSwitch.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","Pressable","StyleSheet","View","Gesture","GestureDetector","scheduleOnRN","Animated","interpolateColor","useAnimatedStyle","useSharedValue","withSpring","withTiming","jsx","_jsx","jsxs","_jsxs","DEFAULT_ANIMATION","duration","damping","stiffness","AnimatedSwitch","options","value","onChange","vertical","style","thumbStyle","textStyle","activeTextStyle","inactiveTextStyle","animationConfig","itemSizeSV","translate","indexSV","currentIndex","findIndex","o","onLayout","e","width","height","nativeEvent","layout","totalSize","itemSize","length","emitChange","index","safeIndex","Math","max","min","handlePress","panGesture","Pan","onUpdate","term","translationY","translationX","startPos","pos","onEnd","round","animatedThumbStyle","opacity","transform","translateY","translateX","sizeStyle","position","left","top","gesture","children","styles","container","horizontal","thumb","map","opt","OptionItem","label","onPress","activeColor","flatten","color","inactiveColor","textAnimatedStyle","center","option","Text","text","numberOfLines","create","borderRadius","overflow","padding","flexDirection","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","flex","alignItems","justifyContent","fontSize","fontWeight"],"sourceRoot":"../../src","sources":["AnimatedSwitch.tsx"],"mappings":"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","ignoreList":[]}
@@ -2,4 +2,5 @@
2
2
 
3
3
  import { AnimatedSwitch } from "./AnimatedSwitch.js";
4
4
  export default AnimatedSwitch;
5
+ export { AnimatedSwitch };
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AnimatedSwitch"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,qBAAkB;AAEjD,eAAeA,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["AnimatedSwitch"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,cAAc,QAAkC,qBAAkB;AAE3E,eAAeA,cAAc;AAC7B,SAASA,cAAc","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}