react-native-directional-toggle 0.1.1 → 0.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.
@@ -0,0 +1,211 @@
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
+ disabled = false
31
+ }) {
32
+ console.log('disabled ---->', disabled);
33
+ const itemSizeSV = (0, _reactNativeReanimated.useSharedValue)(0);
34
+ const translate = (0, _reactNativeReanimated.useSharedValue)(0);
35
+ const indexSV = (0, _reactNativeReanimated.useSharedValue)(0);
36
+ const currentIndex = options.findIndex(o => o.value === value);
37
+
38
+ // Measure container layout
39
+ const onLayout = (0, _react.useCallback)(e => {
40
+ const {
41
+ width,
42
+ height
43
+ } = e.nativeEvent.layout;
44
+ const totalSize = vertical ? height - 4 : width - 4;
45
+ const itemSize = totalSize / options.length;
46
+ itemSizeSV.value = itemSize;
47
+
48
+ // Fix initial position on layout
49
+ if (currentIndex >= 0 && itemSize > 0) {
50
+ translate.value = currentIndex * itemSize;
51
+ }
52
+ }, [vertical, options.length, currentIndex, itemSizeSV, translate]);
53
+
54
+ // Sync with external value changes
55
+ (0, _react.useEffect)(() => {
56
+ if (currentIndex >= 0 && itemSizeSV.value > 0) {
57
+ indexSV.value = currentIndex;
58
+ translate.value = (0, _reactNativeReanimated.withTiming)(currentIndex * itemSizeSV.value, animationConfig);
59
+ }
60
+ // eslint-disable-next-line react-hooks/exhaustive-deps
61
+ }, [currentIndex, animationConfig]);
62
+ const emitChange = (0, _react.useCallback)(index => {
63
+ // Clamp index to safe bounds
64
+ const safeIndex = Math.max(0, Math.min(index, options.length - 1));
65
+ if (options[safeIndex]) {
66
+ onChange(options[safeIndex].value);
67
+ }
68
+ }, [onChange, options]);
69
+ const handlePress = index => {
70
+ if (disabled || itemSizeSV.value === 0) return;
71
+ translate.value = (0, _reactNativeReanimated.withTiming)(index * itemSizeSV.value, animationConfig);
72
+ emitChange(index);
73
+ };
74
+ const panGesture = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Pan().enabled(!disabled).onUpdate(e => {
75
+ if (itemSizeSV.value === 0) return;
76
+ const term = vertical ? e.translationY : e.translationX;
77
+ const startPos = indexSV.value * itemSizeSV.value;
78
+ const pos = startPos + term;
79
+ const max = (options.length - 1) * itemSizeSV.value;
80
+ translate.value = Math.min(Math.max(0, pos), max);
81
+ }).onEnd(() => {
82
+ if (itemSizeSV.value === 0) return;
83
+ const index = Math.round(translate.value / itemSizeSV.value);
84
+ indexSV.value = index;
85
+ translate.value = (0, _reactNativeReanimated.withSpring)(index * itemSizeSV.value, animationConfig);
86
+ (0, _reactNativeWorklets.scheduleOnRN)(emitChange, index);
87
+ }),
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ [disabled]);
90
+ const animatedThumbStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
91
+ // If layout not ready, hide thumb or show nothing
92
+ if (itemSizeSV.value === 0) return {
93
+ opacity: 0
94
+ };
95
+ const transform = vertical ? [{
96
+ translateY: translate.value
97
+ }] : [{
98
+ translateX: translate.value
99
+ }];
100
+ const sizeStyle = vertical ? {
101
+ height: itemSizeSV.value,
102
+ width: '100%'
103
+ } : {
104
+ width: itemSizeSV.value,
105
+ height: '100%'
106
+ };
107
+ return {
108
+ position: 'absolute',
109
+ left: 2,
110
+ top: 2,
111
+ ...sizeStyle,
112
+ transform,
113
+ opacity: 1
114
+ };
115
+ });
116
+ const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
117
+ onLayout: onLayout,
118
+ style: [styles.container, vertical ? styles.vertical : styles.horizontal, disabled && styles.disabled, style],
119
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
120
+ style: [styles.thumb, thumbStyle, animatedThumbStyle]
121
+ }), options.map((opt, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(OptionItem, {
122
+ label: opt.label,
123
+ onPress: () => handlePress(index),
124
+ index: index,
125
+ translate: translate,
126
+ itemSizeSV: itemSizeSV,
127
+ textStyle: textStyle,
128
+ activeTextStyle: activeTextStyle,
129
+ inactiveTextStyle: inactiveTextStyle,
130
+ disabled: disabled
131
+ }, String(opt.value)))]
132
+ });
133
+
134
+ // disabled 时不挂载 GestureDetector
135
+ return disabled ? content : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
136
+ gesture: panGesture,
137
+ children: content
138
+ });
139
+ }
140
+
141
+ // Sub-component for individual options to isolate animated styles
142
+ const OptionItem = ({
143
+ label,
144
+ onPress,
145
+ index,
146
+ translate,
147
+ itemSizeSV,
148
+ textStyle,
149
+ activeTextStyle,
150
+ inactiveTextStyle,
151
+ disabled
152
+ }) => {
153
+ const activeColor = _reactNative.StyleSheet.flatten(activeTextStyle)?.color ?? '#000';
154
+ const inactiveColor = _reactNative.StyleSheet.flatten(inactiveTextStyle)?.color ?? '#999';
155
+ const textAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
156
+ const center = index * itemSizeSV.value;
157
+ const color = (0, _reactNativeReanimated.interpolateColor)(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [inactiveColor, activeColor, inactiveColor]);
158
+ return {
159
+ color
160
+ };
161
+ });
162
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
163
+ style: styles.option,
164
+ onPress: onPress,
165
+ disabled: disabled,
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
167
+ style: [styles.text, textStyle, textAnimatedStyle],
168
+ numberOfLines: 1,
169
+ children: label
170
+ })
171
+ });
172
+ };
173
+ const styles = _reactNative.StyleSheet.create({
174
+ container: {
175
+ borderRadius: 16,
176
+ overflow: 'hidden',
177
+ padding: 2,
178
+ position: 'relative'
179
+ },
180
+ disabled: {
181
+ opacity: 0.5
182
+ },
183
+ horizontal: {
184
+ flexDirection: 'row'
185
+ },
186
+ vertical: {
187
+ flexDirection: 'column'
188
+ },
189
+ thumb: {
190
+ borderRadius: 16,
191
+ shadowColor: '#000',
192
+ shadowOffset: {
193
+ width: 0,
194
+ height: 1
195
+ },
196
+ shadowOpacity: 0.1,
197
+ shadowRadius: 1,
198
+ elevation: 1
199
+ },
200
+ option: {
201
+ flex: 1,
202
+ alignItems: 'center',
203
+ justifyContent: 'center'
204
+ // zIndex: 1
205
+ },
206
+ text: {
207
+ fontSize: 14,
208
+ fontWeight: '500'
209
+ }
210
+ });
211
+ //# 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","disabled","console","log","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","useMemo","Gesture","Pan","enabled","onUpdate","term","translationY","translationX","startPos","pos","onEnd","round","withSpring","scheduleOnRN","animatedThumbStyle","useAnimatedStyle","opacity","transform","translateY","translateX","sizeStyle","position","left","top","content","jsxs","View","styles","container","horizontal","children","jsx","thumb","map","opt","OptionItem","label","onPress","String","GestureDetector","gesture","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,206 @@
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, useMemo } 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 = 36,
15
18
  vertical = false,
16
- colors = {
17
- activeText: "#373737",
18
- inactiveText: "#dededeff",
19
- bgFront: "#d4d4d4",
20
- bgBack: "#9a9a9a"
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,
25
+ disabled = false
27
26
  }) {
28
- /** ===== SharedValues ===== */
27
+ console.log('disabled ---->', disabled);
29
28
  const itemSizeSV = useSharedValue(0);
30
29
  const translate = useSharedValue(0);
31
30
  const indexSV = useSharedValue(0);
32
31
  const currentIndex = options.findIndex(o => o.value === value);
33
32
 
34
- /** * 1. 监听外部 value 变化
35
- * 当外部修改 value 时,滑块应动画移动到新位置
36
- */
33
+ // Measure container layout
34
+ const onLayout = useCallback(e => {
35
+ const {
36
+ width,
37
+ height
38
+ } = e.nativeEvent.layout;
39
+ const totalSize = vertical ? height - 4 : width - 4;
40
+ const itemSize = totalSize / options.length;
41
+ itemSizeSV.value = itemSize;
42
+
43
+ // Fix initial position on layout
44
+ if (currentIndex >= 0 && itemSize > 0) {
45
+ translate.value = currentIndex * itemSize;
46
+ }
47
+ }, [vertical, options.length, currentIndex, itemSizeSV, translate]);
48
+
49
+ // Sync with external value changes
37
50
  useEffect(() => {
38
- if (currentIndex >= 0) {
51
+ if (currentIndex >= 0 && itemSizeSV.value > 0) {
39
52
  indexSV.value = currentIndex;
40
- // 只有当 itemSizeSV 已经有值(即 Layout 已完成)时才执行动画
41
- if (itemSizeSV.value > 0) {
42
- translate.value = withTiming(currentIndex * itemSizeSV.value, {
43
- duration: animationConfig.duration
44
- });
45
- }
53
+ translate.value = withTiming(currentIndex * itemSizeSV.value, animationConfig);
46
54
  }
47
- }, [currentIndex, animationConfig.duration]);
48
-
49
- /** ===== JS 回调 ===== */
55
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ }, [currentIndex, animationConfig]);
50
57
  const emitChange = useCallback(index => {
51
- if (options.length > 0 && index >= 0 && index < options.length) {
52
- onChange(options[index]?.value || "");
58
+ // Clamp index to safe bounds
59
+ const safeIndex = Math.max(0, Math.min(index, options.length - 1));
60
+ if (options[safeIndex]) {
61
+ onChange(options[safeIndex].value);
53
62
  }
54
63
  }, [onChange, options]);
55
-
56
- /** ===== Tap 点击切换 ===== */
57
64
  const handlePress = index => {
58
- indexSV.value = index;
59
- translate.value = withTiming(index * itemSizeSV.value, {
60
- duration: animationConfig.duration ?? 150
61
- });
65
+ if (disabled || itemSizeSV.value === 0) return;
66
+ translate.value = withTiming(index * itemSizeSV.value, animationConfig);
62
67
  emitChange(index);
63
68
  };
64
-
65
- /** ===== Drag 手势 ===== */
66
- const panGesture = Gesture.Pan().onUpdate(e => {
67
- const delta = vertical ? e.translationY : e.translationX;
68
- // 基于手势开始时的位置进行偏移计算
69
- const pos = delta + indexSV.value * itemSizeSV.value;
69
+ const panGesture = useMemo(() => Gesture.Pan().enabled(!disabled).onUpdate(e => {
70
+ if (itemSizeSV.value === 0) return;
71
+ const term = vertical ? e.translationY : e.translationX;
72
+ const startPos = indexSV.value * itemSizeSV.value;
73
+ const pos = startPos + term;
70
74
  const max = (options.length - 1) * itemSizeSV.value;
71
75
  translate.value = Math.min(Math.max(0, pos), max);
72
76
  }).onEnd(() => {
77
+ if (itemSizeSV.value === 0) return;
73
78
  const index = Math.round(translate.value / itemSizeSV.value);
74
79
  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);
80
- });
81
-
82
- /** ===== Thumb 动画样式 ===== */
80
+ translate.value = withSpring(index * itemSizeSV.value, animationConfig);
81
+ scheduleOnRN(emitChange, index);
82
+ }),
83
+ // eslint-disable-next-line react-hooks/exhaustive-deps
84
+ [disabled]);
83
85
  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
- }
86
+ // If layout not ready, hide thumb or show nothing
87
+ if (itemSizeSV.value === 0) return {
88
+ opacity: 0
89
+ };
90
+ const transform = vertical ? [{
91
+ translateY: translate.value
92
+ }] : [{
93
+ translateX: translate.value
94
+ }];
95
+ const sizeStyle = vertical ? {
96
+ height: itemSizeSV.value,
97
+ width: '100%'
98
+ } : {
99
+ width: itemSizeSV.value,
100
+ height: '100%'
101
+ };
95
102
  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
- }]
103
+ position: 'absolute',
104
+ left: 2,
105
+ top: 2,
106
+ ...sizeStyle,
107
+ transform,
108
+ opacity: 1
103
109
  };
104
110
  });
111
+ const content = /*#__PURE__*/_jsxs(View, {
112
+ onLayout: onLayout,
113
+ style: [styles.container, vertical ? styles.vertical : styles.horizontal, disabled && styles.disabled, style],
114
+ children: [/*#__PURE__*/_jsx(Animated.View, {
115
+ style: [styles.thumb, thumbStyle, animatedThumbStyle]
116
+ }), options.map((opt, index) => /*#__PURE__*/_jsx(OptionItem, {
117
+ label: opt.label,
118
+ onPress: () => handlePress(index),
119
+ index: index,
120
+ translate: translate,
121
+ itemSizeSV: itemSizeSV,
122
+ textStyle: textStyle,
123
+ activeTextStyle: activeTextStyle,
124
+ inactiveTextStyle: inactiveTextStyle,
125
+ disabled: disabled
126
+ }, String(opt.value)))]
127
+ });
105
128
 
106
- /** ===== Label 动画样式 ===== */
107
- const getLabelAnimatedStyle = index => useAnimatedStyle(() => {
129
+ // disabled 时不挂载 GestureDetector
130
+ return disabled ? content : /*#__PURE__*/_jsx(GestureDetector, {
131
+ gesture: panGesture,
132
+ children: content
133
+ });
134
+ }
135
+
136
+ // Sub-component for individual options to isolate animated styles
137
+ const OptionItem = ({
138
+ label,
139
+ onPress,
140
+ index,
141
+ translate,
142
+ itemSizeSV,
143
+ textStyle,
144
+ activeTextStyle,
145
+ inactiveTextStyle,
146
+ disabled
147
+ }) => {
148
+ const activeColor = StyleSheet.flatten(activeTextStyle)?.color ?? '#000';
149
+ const inactiveColor = StyleSheet.flatten(inactiveTextStyle)?.color ?? '#999';
150
+ const textAnimatedStyle = useAnimatedStyle(() => {
108
151
  const center = index * itemSizeSV.value;
109
- const color = interpolateColor(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [colors.inactiveText, colors.activeText, colors.inactiveText]);
152
+ const color = interpolateColor(translate.value, [center - itemSizeSV.value, center, center + itemSizeSV.value], [inactiveColor, activeColor, inactiveColor]);
110
153
  return {
111
154
  color
112
155
  };
113
156
  });
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
- return /*#__PURE__*/_jsx(GestureDetector, {
129
- gesture: panGesture,
130
- children: /*#__PURE__*/_jsxs(View, {
131
- 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
- }],
142
- children: [/*#__PURE__*/_jsx(Animated.View, {
143
- pointerEvents: "none",
144
- style: [styles.thumbBase, {
145
- backgroundColor: colors.bgFront
146
- }, animatedThumbStyle]
147
- }), options.map((opt, index) => {
148
- const labelStyle = getLabelAnimatedStyle(index);
149
- return /*#__PURE__*/_jsx(Pressable, {
150
- style: styles.item,
151
- onPress: () => handlePress(index),
152
- children: /*#__PURE__*/_jsx(Animated.Text, {
153
- style: [styles.label, labelStyle],
154
- children: opt.label
155
- })
156
- }, opt.value);
157
- })]
157
+ return /*#__PURE__*/_jsx(Pressable, {
158
+ style: styles.option,
159
+ onPress: onPress,
160
+ disabled: disabled,
161
+ children: /*#__PURE__*/_jsx(Animated.Text, {
162
+ style: [styles.text, textStyle, textAnimatedStyle],
163
+ numberOfLines: 1,
164
+ children: label
158
165
  })
159
166
  });
160
- }
167
+ };
161
168
  const styles = StyleSheet.create({
162
169
  container: {
163
170
  borderRadius: 16,
164
- overflow: "hidden",
165
- flex: 1
171
+ overflow: 'hidden',
172
+ padding: 2,
173
+ position: 'relative'
174
+ },
175
+ disabled: {
176
+ opacity: 0.5
166
177
  },
167
- thumbBase: {
168
- position: "absolute",
169
- borderRadius: 12,
178
+ horizontal: {
179
+ flexDirection: 'row'
180
+ },
181
+ vertical: {
182
+ flexDirection: 'column'
183
+ },
184
+ thumb: {
185
+ borderRadius: 16,
170
186
  shadowColor: '#000',
171
- shadowOpacity: 0.3,
172
187
  shadowOffset: {
173
188
  width: 0,
174
189
  height: 1
175
190
  },
191
+ shadowOpacity: 0.1,
176
192
  shadowRadius: 1,
177
- elevation: 2
193
+ elevation: 1
178
194
  },
179
- item: {
195
+ option: {
180
196
  flex: 1,
181
- alignItems: "center",
182
- justifyContent: "center",
183
- zIndex: 1 // 确保文字在滑块上方
197
+ alignItems: 'center',
198
+ justifyContent: 'center'
199
+ // zIndex: 1
184
200
  },
185
- label: {
186
- fontSize: 13,
187
- fontWeight: "600"
201
+ text: {
202
+ fontSize: 14,
203
+ fontWeight: '500'
188
204
  }
189
205
  });
190
206
  //# 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","useMemo","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","disabled","console","log","itemSizeSV","translate","indexSV","currentIndex","findIndex","o","onLayout","e","width","height","nativeEvent","layout","totalSize","itemSize","length","emitChange","index","safeIndex","Math","max","min","handlePress","panGesture","Pan","enabled","onUpdate","term","translationY","translationX","startPos","pos","onEnd","round","animatedThumbStyle","opacity","transform","translateY","translateX","sizeStyle","position","left","top","content","styles","container","horizontal","children","thumb","map","opt","OptionItem","label","onPress","String","gesture","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":[]}