@retray-dev/ui-kit 2.5.1 → 2.6.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.
- package/COMPONENTS.md +153 -6
- package/dist/index.d.mts +98 -8
- package/dist/index.d.ts +98 -8
- package/dist/index.js +591 -505
- package/dist/index.mjs +533 -436
- package/package.json +23 -21
- package/src/components/Accordion/Accordion.tsx +61 -57
- package/src/components/Alert/Alert.tsx +11 -10
- package/src/components/AlertBanner/AlertBanner.tsx +23 -10
- package/src/components/Avatar/Avatar.tsx +9 -8
- package/src/components/Badge/Badge.tsx +27 -12
- package/src/components/Button/Button.tsx +30 -12
- package/src/components/Card/Card.tsx +12 -11
- package/src/components/Checkbox/Checkbox.tsx +16 -13
- package/src/components/Chip/Chip.tsx +8 -7
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +12 -11
- package/src/components/CurrencyDisplay/CurrencyDisplay.tsx +2 -1
- package/src/components/CurrencyInput/CurrencyInput.tsx +2 -1
- package/src/components/EmptyState/EmptyState.tsx +34 -21
- package/src/components/Input/Input.tsx +44 -22
- package/src/components/LabelValue/LabelValue.tsx +6 -5
- package/src/components/ListItem/ListItem.tsx +46 -22
- package/src/components/MonthPicker/MonthPicker.tsx +9 -8
- package/src/components/Progress/Progress.tsx +2 -1
- package/src/components/RadioGroup/RadioGroup.tsx +18 -15
- package/src/components/Select/Select.tsx +25 -24
- package/src/components/Sheet/Sheet.tsx +15 -14
- package/src/components/Slider/Slider.tsx +7 -6
- package/src/components/Switch/Switch.tsx +7 -6
- package/src/components/Tabs/Tabs.tsx +17 -14
- package/src/components/Text/Text.tsx +7 -6
- package/src/components/Textarea/Textarea.tsx +9 -8
- package/src/components/Toast/Toast.tsx +30 -19
- package/src/components/Toggle/Toggle.tsx +36 -10
- package/src/index.ts +4 -0
- package/src/utils/haptics.ts +32 -0
- package/src/utils/icons.ts +73 -0
- package/src/utils/scaling.ts +26 -0
package/dist/index.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React24 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
|
-
var
|
|
5
|
+
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
6
|
+
var AntDesign = require('@expo/vector-icons/AntDesign');
|
|
7
|
+
var Entypo = require('@expo/vector-icons/Entypo');
|
|
8
|
+
var Feather = require('@expo/vector-icons/Feather');
|
|
9
|
+
var FontAwesome5 = require('@expo/vector-icons/FontAwesome5');
|
|
10
|
+
var MaterialIcons = require('@expo/vector-icons/MaterialIcons');
|
|
11
|
+
var Ionicons = require('@expo/vector-icons/Ionicons');
|
|
6
12
|
var vectorIcons = require('@expo/vector-icons');
|
|
7
13
|
var expoLinearGradient = require('expo-linear-gradient');
|
|
8
|
-
var
|
|
14
|
+
var Animated10 = require('react-native-reanimated');
|
|
9
15
|
var RNSlider = require('@react-native-community/slider');
|
|
10
16
|
var bottomSheet = require('@gorhom/bottom-sheet');
|
|
11
17
|
var picker = require('@react-native-picker/picker');
|
|
@@ -15,30 +21,22 @@ var reactNativeSafeAreaContext = require('react-native-safe-area-context');
|
|
|
15
21
|
|
|
16
22
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function () { return e[k]; }
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
n.default = e;
|
|
33
|
-
return Object.freeze(n);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
var React23__default = /*#__PURE__*/_interopDefault(React23);
|
|
37
|
-
var Haptics12__namespace = /*#__PURE__*/_interopNamespace(Haptics12);
|
|
38
|
-
var ReanimatedAnimated__default = /*#__PURE__*/_interopDefault(ReanimatedAnimated);
|
|
24
|
+
var React24__default = /*#__PURE__*/_interopDefault(React24);
|
|
25
|
+
var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
|
|
26
|
+
var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
|
|
27
|
+
var Feather__default = /*#__PURE__*/_interopDefault(Feather);
|
|
28
|
+
var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
|
|
29
|
+
var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
|
|
30
|
+
var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
|
|
31
|
+
var Animated10__default = /*#__PURE__*/_interopDefault(Animated10);
|
|
39
32
|
var RNSlider__default = /*#__PURE__*/_interopDefault(RNSlider);
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
35
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
36
|
+
}) : x)(function(x) {
|
|
37
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
38
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
39
|
+
});
|
|
42
40
|
|
|
43
41
|
// src/theme/colors.ts
|
|
44
42
|
var defaultLight = {
|
|
@@ -85,38 +83,101 @@ var defaultDark = {
|
|
|
85
83
|
};
|
|
86
84
|
|
|
87
85
|
// src/theme/ThemeProvider.tsx
|
|
88
|
-
var ThemeContext =
|
|
86
|
+
var ThemeContext = React24.createContext({
|
|
89
87
|
colors: defaultLight,
|
|
90
88
|
colorScheme: "light"
|
|
91
89
|
});
|
|
92
90
|
function ThemeProvider({ children, theme, colorScheme = "system" }) {
|
|
93
91
|
const systemScheme = reactNative.useColorScheme() ?? "light";
|
|
94
92
|
const resolvedScheme = colorScheme === "system" ? systemScheme : colorScheme;
|
|
95
|
-
const colors =
|
|
93
|
+
const colors = React24.useMemo(() => {
|
|
96
94
|
const base = resolvedScheme === "dark" ? defaultDark : defaultLight;
|
|
97
95
|
const override = resolvedScheme === "dark" ? theme?.dark : theme?.light;
|
|
98
96
|
return override ? { ...base, ...override } : base;
|
|
99
97
|
}, [resolvedScheme, theme]);
|
|
100
|
-
return /* @__PURE__ */
|
|
98
|
+
return /* @__PURE__ */ React24__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
|
|
101
99
|
}
|
|
102
100
|
function useTheme() {
|
|
103
|
-
const context =
|
|
101
|
+
const context = React24.useContext(ThemeContext);
|
|
104
102
|
if (!context) {
|
|
105
103
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
106
104
|
}
|
|
107
105
|
return context;
|
|
108
106
|
}
|
|
107
|
+
var Haptics = null;
|
|
108
|
+
if (reactNative.Platform.OS !== "web") {
|
|
109
|
+
Haptics = __require("expo-haptics");
|
|
110
|
+
}
|
|
111
|
+
function selectionAsync() {
|
|
112
|
+
Haptics?.selectionAsync();
|
|
113
|
+
}
|
|
114
|
+
function impactLight() {
|
|
115
|
+
Haptics?.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
|
116
|
+
}
|
|
117
|
+
function notificationSuccess() {
|
|
118
|
+
Haptics?.notificationAsync(Haptics.NotificationFeedbackType.Success);
|
|
119
|
+
}
|
|
120
|
+
function notificationError() {
|
|
121
|
+
Haptics?.notificationAsync(Haptics.NotificationFeedbackType.Error);
|
|
122
|
+
}
|
|
123
|
+
var isWeb = reactNative.Platform.OS === "web";
|
|
124
|
+
var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
|
|
125
|
+
var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
|
|
126
|
+
var ms = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateScale;
|
|
127
|
+
var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalScale;
|
|
128
|
+
var ICON_FAMILIES = [
|
|
129
|
+
{ name: "Ionicons", component: Ionicons__default.default, glyphMap: Ionicons__default.default.glyphMap },
|
|
130
|
+
{ name: "MaterialIcons", component: MaterialIcons__default.default, glyphMap: MaterialIcons__default.default.glyphMap },
|
|
131
|
+
{ name: "FontAwesome5", component: FontAwesome5__default.default, glyphMap: FontAwesome5__default.default.glyphMap },
|
|
132
|
+
{ name: "Entypo", component: Entypo__default.default, glyphMap: Entypo__default.default.glyphMap },
|
|
133
|
+
{ name: "AntDesign", component: AntDesign__default.default, glyphMap: AntDesign__default.default.glyphMap },
|
|
134
|
+
{ name: "Feather", component: Feather__default.default, glyphMap: Feather__default.default.glyphMap }
|
|
135
|
+
];
|
|
136
|
+
var resolvedCache = null;
|
|
137
|
+
function buildCache() {
|
|
138
|
+
const cache = /* @__PURE__ */ new Map();
|
|
139
|
+
for (const family of ICON_FAMILIES) {
|
|
140
|
+
if (!family.glyphMap) continue;
|
|
141
|
+
for (const iconName of Object.keys(family.glyphMap)) {
|
|
142
|
+
cache.set(iconName, family);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return cache;
|
|
146
|
+
}
|
|
147
|
+
function resolveFamily(name) {
|
|
148
|
+
if (!resolvedCache) {
|
|
149
|
+
resolvedCache = buildCache();
|
|
150
|
+
}
|
|
151
|
+
return resolvedCache.get(name) ?? null;
|
|
152
|
+
}
|
|
153
|
+
function Icon({ name, size, color, family }) {
|
|
154
|
+
let resolved = null;
|
|
155
|
+
if (family) {
|
|
156
|
+
resolved = ICON_FAMILIES.find((f) => f.name === family) ?? null;
|
|
157
|
+
} else {
|
|
158
|
+
resolved = resolveFamily(name);
|
|
159
|
+
}
|
|
160
|
+
if (!resolved) return null;
|
|
161
|
+
const Component = resolved.component;
|
|
162
|
+
return React24__default.default.createElement(Component, { name, size, color });
|
|
163
|
+
}
|
|
164
|
+
function renderIcon(name, size, color) {
|
|
165
|
+
return React24__default.default.createElement(Icon, { name, size, color });
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// src/components/Button/Button.tsx
|
|
109
169
|
var nativeDriver = reactNative.Platform.OS !== "web";
|
|
110
170
|
var containerSizeStyles = {
|
|
111
|
-
sm: { paddingHorizontal: 20, paddingVertical: 10 },
|
|
112
|
-
md: { paddingHorizontal: 24, paddingVertical: 14 },
|
|
113
|
-
lg: { paddingHorizontal: 32, paddingVertical: 18 }
|
|
171
|
+
sm: { paddingHorizontal: s(20), paddingVertical: vs(10) },
|
|
172
|
+
md: { paddingHorizontal: s(24), paddingVertical: vs(14) },
|
|
173
|
+
lg: { paddingHorizontal: s(32), paddingVertical: vs(18) }
|
|
114
174
|
};
|
|
115
175
|
var labelSizeStyles = {
|
|
116
|
-
sm: { fontSize: 15 },
|
|
117
|
-
md: { fontSize: 17 },
|
|
118
|
-
lg: { fontSize: 18 }
|
|
176
|
+
sm: { fontSize: ms(15) },
|
|
177
|
+
md: { fontSize: ms(17) },
|
|
178
|
+
lg: { fontSize: ms(18) }
|
|
119
179
|
};
|
|
180
|
+
var iconSizeMap = { sm: 16, md: 18, lg: 20 };
|
|
120
181
|
function Button({
|
|
121
182
|
label,
|
|
122
183
|
variant = "primary",
|
|
@@ -124,6 +185,8 @@ function Button({
|
|
|
124
185
|
loading = false,
|
|
125
186
|
fullWidth = false,
|
|
126
187
|
icon,
|
|
188
|
+
iconName,
|
|
189
|
+
iconColor,
|
|
127
190
|
iconPosition = "left",
|
|
128
191
|
disabled,
|
|
129
192
|
style,
|
|
@@ -132,10 +195,10 @@ function Button({
|
|
|
132
195
|
}) {
|
|
133
196
|
const { colors } = useTheme();
|
|
134
197
|
const isDisabled = disabled || loading;
|
|
135
|
-
const
|
|
198
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
136
199
|
const handlePressIn = () => {
|
|
137
200
|
if (isDisabled) return;
|
|
138
|
-
reactNative.Animated.spring(
|
|
201
|
+
reactNative.Animated.spring(scale2, {
|
|
139
202
|
toValue: 0.95,
|
|
140
203
|
useNativeDriver: nativeDriver,
|
|
141
204
|
speed: 40,
|
|
@@ -143,10 +206,10 @@ function Button({
|
|
|
143
206
|
}).start();
|
|
144
207
|
};
|
|
145
208
|
const handlePressOut = () => {
|
|
146
|
-
reactNative.Animated.spring(
|
|
209
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver, speed: 40, bounciness: 4 }).start();
|
|
147
210
|
};
|
|
148
211
|
const handlePress = (e) => {
|
|
149
|
-
|
|
212
|
+
impactLight();
|
|
150
213
|
onPress?.(e);
|
|
151
214
|
};
|
|
152
215
|
const containerVariantStyle = {
|
|
@@ -163,8 +226,9 @@ function Button({
|
|
|
163
226
|
ghost: { color: colors.foreground },
|
|
164
227
|
destructive: { color: colors.destructiveForeground }
|
|
165
228
|
}[variant];
|
|
229
|
+
const effectiveIcon = iconName ? renderIcon(iconName, iconSizeMap[size], iconColor ?? labelVariantStyle.color) : typeof icon === "function" ? icon({ label, size, variant }) : icon;
|
|
166
230
|
const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" || variant === "secondary" ? colors.primaryForeground : colors.foreground;
|
|
167
|
-
return /* @__PURE__ */
|
|
231
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [fullWidth && styles.fullWidth, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
168
232
|
reactNative.TouchableOpacity,
|
|
169
233
|
{
|
|
170
234
|
style: [
|
|
@@ -183,7 +247,7 @@ function Button({
|
|
|
183
247
|
onPressOut: handlePressOut,
|
|
184
248
|
...props
|
|
185
249
|
},
|
|
186
|
-
loading ? /* @__PURE__ */
|
|
250
|
+
loading ? /* @__PURE__ */ React24__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0] }, label), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon))
|
|
187
251
|
));
|
|
188
252
|
}
|
|
189
253
|
var styles = reactNative.StyleSheet.create({
|
|
@@ -203,21 +267,21 @@ var styles = reactNative.StyleSheet.create({
|
|
|
203
267
|
fontWeight: "600"
|
|
204
268
|
},
|
|
205
269
|
labelWithIcon: {
|
|
206
|
-
marginHorizontal: 8
|
|
270
|
+
marginHorizontal: s(8)
|
|
207
271
|
}
|
|
208
272
|
});
|
|
209
273
|
var variantStyles = {
|
|
210
|
-
h1: { fontSize: 40, fontWeight: "700", lineHeight: 52 },
|
|
211
|
-
h2: { fontSize: 28, fontWeight: "700", lineHeight: 36 },
|
|
212
|
-
h3: { fontSize: 22, fontWeight: "600", lineHeight: 30 },
|
|
213
|
-
body: { fontSize: 17, fontWeight: "400", lineHeight: 26 },
|
|
214
|
-
caption: { fontSize: 13, fontWeight: "400", lineHeight: 20 },
|
|
215
|
-
label: { fontSize: 15, fontWeight: "500", lineHeight: 22 }
|
|
274
|
+
h1: { fontSize: ms(40), fontWeight: "700", lineHeight: mvs(52) },
|
|
275
|
+
h2: { fontSize: ms(28), fontWeight: "700", lineHeight: mvs(36) },
|
|
276
|
+
h3: { fontSize: ms(22), fontWeight: "600", lineHeight: mvs(30) },
|
|
277
|
+
body: { fontSize: ms(17), fontWeight: "400", lineHeight: mvs(26) },
|
|
278
|
+
caption: { fontSize: ms(13), fontWeight: "400", lineHeight: mvs(20) },
|
|
279
|
+
label: { fontSize: ms(15), fontWeight: "500", lineHeight: mvs(22) }
|
|
216
280
|
};
|
|
217
281
|
function Text2({ variant = "body", color, style, children, ...props }) {
|
|
218
282
|
const { colors } = useTheme();
|
|
219
283
|
const defaultColor = variant === "caption" ? colors.mutedForeground : colors.foreground;
|
|
220
|
-
return /* @__PURE__ */
|
|
284
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
221
285
|
reactNative.Text,
|
|
222
286
|
{
|
|
223
287
|
style: [variantStyles[variant], { color: color ?? defaultColor }, style],
|
|
@@ -228,14 +292,15 @@ function Text2({ variant = "body", color, style, children, ...props }) {
|
|
|
228
292
|
);
|
|
229
293
|
}
|
|
230
294
|
var webInputResetStyle = reactNative.Platform.OS === "web" ? { outlineStyle: "none", outlineWidth: 0, outlineColor: "transparent", boxShadow: "none" } : {};
|
|
231
|
-
function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, type = "text", containerStyle, style, onFocus, onBlur, secureTextEntry, ...props }) {
|
|
295
|
+
function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, prefixIcon, suffixIcon, prefixIconColor, suffixIconColor, type = "text", containerStyle, style, onFocus, onBlur, secureTextEntry, ...props }) {
|
|
232
296
|
const { colors } = useTheme();
|
|
233
|
-
const [focused, setFocused] =
|
|
234
|
-
const [showPassword, setShowPassword] =
|
|
297
|
+
const [focused, setFocused] = React24.useState(false);
|
|
298
|
+
const [showPassword, setShowPassword] = React24.useState(false);
|
|
235
299
|
const isPassword = type === "password";
|
|
236
300
|
const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
|
|
237
|
-
const
|
|
238
|
-
|
|
301
|
+
const effectivePrefix = prefixIcon ? renderIcon(prefixIcon, 20, prefixIconColor ?? colors.mutedForeground) : prefix;
|
|
302
|
+
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: () => setShowPassword(!showPassword), style: styles2.passwordToggle, activeOpacity: 0.6 }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.AntDesign, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.mutedForeground })) : suffixIcon ? renderIcon(suffixIcon, 20, suffixIconColor ?? colors.mutedForeground) : suffix;
|
|
303
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles2.container, containerStyle] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
239
304
|
reactNative.View,
|
|
240
305
|
{
|
|
241
306
|
style: [
|
|
@@ -246,8 +311,8 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
|
|
|
246
311
|
}
|
|
247
312
|
]
|
|
248
313
|
},
|
|
249
|
-
|
|
250
|
-
/* @__PURE__ */
|
|
314
|
+
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.prefixText, { color: colors.mutedForeground }, prefixStyle], allowFontScaling: true }, effectivePrefix) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles2.prefixContainer }, effectivePrefix) : null,
|
|
315
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
251
316
|
reactNative.TextInput,
|
|
252
317
|
{
|
|
253
318
|
style: [
|
|
@@ -272,67 +337,68 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
|
|
|
272
337
|
...props
|
|
273
338
|
}
|
|
274
339
|
),
|
|
275
|
-
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */
|
|
276
|
-
), error ? /* @__PURE__ */
|
|
340
|
+
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.suffixText, { color: colors.mutedForeground }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles2.suffixContainer }, effectiveSuffix) : null
|
|
341
|
+
), error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
277
342
|
}
|
|
278
343
|
var styles2 = reactNative.StyleSheet.create({
|
|
279
344
|
container: {
|
|
280
|
-
gap: 8
|
|
345
|
+
gap: vs(8)
|
|
281
346
|
},
|
|
282
347
|
label: {
|
|
283
|
-
fontSize: 15,
|
|
348
|
+
fontSize: ms(15),
|
|
284
349
|
fontWeight: "500"
|
|
285
350
|
},
|
|
286
351
|
inputWrapper: {
|
|
287
352
|
flexDirection: "row",
|
|
288
353
|
alignItems: "center",
|
|
289
354
|
borderWidth: 1.5,
|
|
290
|
-
borderRadius: 8,
|
|
291
|
-
paddingHorizontal: 16,
|
|
292
|
-
paddingVertical: 14
|
|
355
|
+
borderRadius: ms(8),
|
|
356
|
+
paddingHorizontal: s(16),
|
|
357
|
+
paddingVertical: vs(14)
|
|
293
358
|
},
|
|
294
359
|
input: {
|
|
295
360
|
flex: 1,
|
|
296
|
-
fontSize: 17,
|
|
361
|
+
fontSize: ms(17),
|
|
297
362
|
paddingVertical: 0
|
|
298
363
|
},
|
|
299
364
|
prefixContainer: {
|
|
300
|
-
marginRight: 8
|
|
365
|
+
marginRight: s(8)
|
|
301
366
|
},
|
|
302
367
|
prefixText: {
|
|
303
|
-
fontSize: 17,
|
|
304
|
-
marginRight: 8
|
|
368
|
+
fontSize: ms(17),
|
|
369
|
+
marginRight: s(8)
|
|
305
370
|
},
|
|
306
371
|
suffixContainer: {
|
|
307
|
-
marginLeft: 8
|
|
372
|
+
marginLeft: s(8)
|
|
308
373
|
},
|
|
309
374
|
suffixText: {
|
|
310
|
-
fontSize: 17,
|
|
311
|
-
marginLeft: 8
|
|
375
|
+
fontSize: ms(17),
|
|
376
|
+
marginLeft: s(8)
|
|
312
377
|
},
|
|
313
378
|
passwordToggle: {
|
|
314
|
-
padding: 4
|
|
379
|
+
padding: s(4)
|
|
315
380
|
},
|
|
316
381
|
helperText: {
|
|
317
|
-
fontSize: 13
|
|
382
|
+
fontSize: ms(13)
|
|
318
383
|
}
|
|
319
384
|
});
|
|
320
385
|
var sizePadding = {
|
|
321
|
-
sm: { paddingHorizontal: 8, paddingVertical: 2 },
|
|
322
|
-
md: { paddingHorizontal: 10, paddingVertical: 4 },
|
|
323
|
-
lg: { paddingHorizontal: 12, paddingVertical: 6 }
|
|
386
|
+
sm: { paddingHorizontal: s(8), paddingVertical: vs(2) },
|
|
387
|
+
md: { paddingHorizontal: s(10), paddingVertical: vs(4) },
|
|
388
|
+
lg: { paddingHorizontal: s(12), paddingVertical: vs(6) }
|
|
324
389
|
};
|
|
325
390
|
var sizeFontSize = {
|
|
326
|
-
sm: { fontSize: 11 },
|
|
327
|
-
md: { fontSize: 13 },
|
|
328
|
-
lg: { fontSize: 15 }
|
|
391
|
+
sm: { fontSize: ms(11) },
|
|
392
|
+
md: { fontSize: ms(13) },
|
|
393
|
+
lg: { fontSize: ms(15) }
|
|
329
394
|
};
|
|
330
395
|
var sizeIconGap = {
|
|
331
|
-
sm: 4,
|
|
332
|
-
md: 6,
|
|
333
|
-
lg: 6
|
|
396
|
+
sm: s(4),
|
|
397
|
+
md: s(6),
|
|
398
|
+
lg: s(6)
|
|
334
399
|
};
|
|
335
|
-
|
|
400
|
+
var sizeIconSize = { sm: 10, md: 12, lg: 14 };
|
|
401
|
+
function Badge({ label, children, variant = "default", size = "md", icon, iconName, iconColor, style }) {
|
|
336
402
|
const { colors } = useTheme();
|
|
337
403
|
const containerStyle = {
|
|
338
404
|
default: { backgroundColor: colors.primary },
|
|
@@ -346,12 +412,13 @@ function Badge({ label, children, variant = "default", size = "md", icon, style
|
|
|
346
412
|
destructive: colors.destructiveForeground,
|
|
347
413
|
outline: colors.foreground
|
|
348
414
|
}[variant];
|
|
415
|
+
const effectiveIcon = iconName ? renderIcon(iconName, sizeIconSize[size], iconColor ?? textColor) : icon;
|
|
349
416
|
const content = children ?? label;
|
|
350
|
-
return /* @__PURE__ */
|
|
417
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles3.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style] }, effectiveIcon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles3.iconContainer }, effectiveIcon) : null, typeof content === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles3.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content);
|
|
351
418
|
}
|
|
352
419
|
var styles3 = reactNative.StyleSheet.create({
|
|
353
420
|
container: {
|
|
354
|
-
borderRadius: 6,
|
|
421
|
+
borderRadius: ms(6),
|
|
355
422
|
alignSelf: "flex-start",
|
|
356
423
|
flexDirection: "row",
|
|
357
424
|
alignItems: "center"
|
|
@@ -367,10 +434,10 @@ var styles3 = reactNative.StyleSheet.create({
|
|
|
367
434
|
var nativeDriver2 = reactNative.Platform.OS !== "web";
|
|
368
435
|
function Card({ children, variant = "elevated", onPress, style }) {
|
|
369
436
|
const { colors } = useTheme();
|
|
370
|
-
const
|
|
437
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
371
438
|
const handlePressIn = () => {
|
|
372
439
|
if (!onPress) return;
|
|
373
|
-
reactNative.Animated.spring(
|
|
440
|
+
reactNative.Animated.spring(scale2, {
|
|
374
441
|
toValue: 0.98,
|
|
375
442
|
useNativeDriver: nativeDriver2,
|
|
376
443
|
speed: 40,
|
|
@@ -379,7 +446,7 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
379
446
|
};
|
|
380
447
|
const handlePressOut = () => {
|
|
381
448
|
if (!onPress) return;
|
|
382
|
-
reactNative.Animated.spring(
|
|
449
|
+
reactNative.Animated.spring(scale2, {
|
|
383
450
|
toValue: 1,
|
|
384
451
|
useNativeDriver: nativeDriver2,
|
|
385
452
|
speed: 40,
|
|
@@ -388,7 +455,7 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
388
455
|
};
|
|
389
456
|
const handlePress = () => {
|
|
390
457
|
if (!onPress) return;
|
|
391
|
-
|
|
458
|
+
impactLight();
|
|
392
459
|
onPress();
|
|
393
460
|
};
|
|
394
461
|
const variantStyle = {
|
|
@@ -414,9 +481,9 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
414
481
|
elevation: 0
|
|
415
482
|
}
|
|
416
483
|
}[variant];
|
|
417
|
-
const cardContent = /* @__PURE__ */
|
|
484
|
+
const cardContent = /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.card, variantStyle, style] }, children);
|
|
418
485
|
if (onPress) {
|
|
419
|
-
return /* @__PURE__ */
|
|
486
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
420
487
|
reactNative.TouchableOpacity,
|
|
421
488
|
{
|
|
422
489
|
onPress: handlePress,
|
|
@@ -431,46 +498,46 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
431
498
|
return cardContent;
|
|
432
499
|
}
|
|
433
500
|
function CardHeader({ children, style }) {
|
|
434
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.header, style] }, children);
|
|
435
502
|
}
|
|
436
503
|
function CardTitle({ children, style }) {
|
|
437
504
|
const { colors } = useTheme();
|
|
438
|
-
return /* @__PURE__ */
|
|
505
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles4.title, { color: colors.cardForeground }, style], allowFontScaling: true }, children);
|
|
439
506
|
}
|
|
440
507
|
function CardDescription({ children, style }) {
|
|
441
508
|
const { colors } = useTheme();
|
|
442
|
-
return /* @__PURE__ */
|
|
509
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles4.description, { color: colors.mutedForeground }, style], allowFontScaling: true }, children);
|
|
443
510
|
}
|
|
444
511
|
function CardContent({ children, style }) {
|
|
445
|
-
return /* @__PURE__ */
|
|
512
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.content, style] }, children);
|
|
446
513
|
}
|
|
447
514
|
function CardFooter({ children, style }) {
|
|
448
|
-
return /* @__PURE__ */
|
|
515
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.footer, style] }, children);
|
|
449
516
|
}
|
|
450
517
|
var styles4 = reactNative.StyleSheet.create({
|
|
451
518
|
card: {
|
|
452
|
-
borderRadius: 12,
|
|
519
|
+
borderRadius: ms(12),
|
|
453
520
|
borderWidth: 1
|
|
454
521
|
},
|
|
455
522
|
header: {
|
|
456
|
-
padding: 24,
|
|
523
|
+
padding: s(24),
|
|
457
524
|
paddingBottom: 0,
|
|
458
|
-
gap: 8
|
|
525
|
+
gap: vs(8)
|
|
459
526
|
},
|
|
460
527
|
title: {
|
|
461
|
-
fontSize: 20,
|
|
528
|
+
fontSize: ms(20),
|
|
462
529
|
fontWeight: "600",
|
|
463
|
-
lineHeight: 28
|
|
530
|
+
lineHeight: mvs(28)
|
|
464
531
|
},
|
|
465
532
|
description: {
|
|
466
|
-
fontSize: 15,
|
|
467
|
-
lineHeight: 22
|
|
533
|
+
fontSize: ms(15),
|
|
534
|
+
lineHeight: mvs(22)
|
|
468
535
|
},
|
|
469
536
|
content: {
|
|
470
|
-
padding: 24
|
|
537
|
+
padding: s(24)
|
|
471
538
|
},
|
|
472
539
|
footer: {
|
|
473
|
-
padding: 24,
|
|
540
|
+
padding: s(24),
|
|
474
541
|
paddingTop: 0,
|
|
475
542
|
flexDirection: "row",
|
|
476
543
|
alignItems: "center"
|
|
@@ -478,7 +545,7 @@ var styles4 = reactNative.StyleSheet.create({
|
|
|
478
545
|
});
|
|
479
546
|
function Separator({ orientation = "horizontal", style }) {
|
|
480
547
|
const { colors } = useTheme();
|
|
481
|
-
return /* @__PURE__ */
|
|
548
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
482
549
|
reactNative.View,
|
|
483
550
|
{
|
|
484
551
|
style: [
|
|
@@ -506,14 +573,14 @@ var sizeMap = {
|
|
|
506
573
|
};
|
|
507
574
|
function Spinner({ size = "md", color, ...props }) {
|
|
508
575
|
const { colors } = useTheme();
|
|
509
|
-
return /* @__PURE__ */
|
|
576
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap[size], color: color ?? colors.primary, ...props });
|
|
510
577
|
}
|
|
511
578
|
function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
512
579
|
const { colors, colorScheme } = useTheme();
|
|
513
|
-
const shimmerAnim =
|
|
514
|
-
const [containerWidth, setContainerWidth] =
|
|
580
|
+
const shimmerAnim = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
581
|
+
const [containerWidth, setContainerWidth] = React24.useState(300);
|
|
515
582
|
const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
|
|
516
|
-
|
|
583
|
+
React24.useEffect(() => {
|
|
517
584
|
const animation = reactNative.Animated.loop(
|
|
518
585
|
reactNative.Animated.timing(shimmerAnim, {
|
|
519
586
|
toValue: 1,
|
|
@@ -528,7 +595,7 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
528
595
|
inputRange: [0, 1],
|
|
529
596
|
outputRange: [-containerWidth, containerWidth]
|
|
530
597
|
});
|
|
531
|
-
return /* @__PURE__ */
|
|
598
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
532
599
|
reactNative.View,
|
|
533
600
|
{
|
|
534
601
|
style: [
|
|
@@ -538,7 +605,7 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
538
605
|
],
|
|
539
606
|
onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width)
|
|
540
607
|
},
|
|
541
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [reactNative.StyleSheet.absoluteFill, { transform: [{ translateX }] }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
542
609
|
expoLinearGradient.LinearGradient,
|
|
543
610
|
{
|
|
544
611
|
colors: ["transparent", shimmerHighlight, "transparent"],
|
|
@@ -555,20 +622,20 @@ var styles6 = reactNative.StyleSheet.create({
|
|
|
555
622
|
}
|
|
556
623
|
});
|
|
557
624
|
var sizeMap2 = {
|
|
558
|
-
sm: 28,
|
|
559
|
-
md: 40,
|
|
560
|
-
lg: 56,
|
|
561
|
-
xl: 72
|
|
625
|
+
sm: s(28),
|
|
626
|
+
md: s(40),
|
|
627
|
+
lg: s(56),
|
|
628
|
+
xl: s(72)
|
|
562
629
|
};
|
|
563
630
|
var fontSizeMap = {
|
|
564
|
-
sm: 12,
|
|
565
|
-
md: 16,
|
|
566
|
-
lg: 22,
|
|
567
|
-
xl: 28
|
|
631
|
+
sm: ms(12),
|
|
632
|
+
md: ms(16),
|
|
633
|
+
lg: ms(22),
|
|
634
|
+
xl: ms(28)
|
|
568
635
|
};
|
|
569
636
|
function Avatar({ src, fallback, size = "md", style }) {
|
|
570
637
|
const { colors } = useTheme();
|
|
571
|
-
const [imageError, setImageError] =
|
|
638
|
+
const [imageError, setImageError] = React24.useState(false);
|
|
572
639
|
const dimension = sizeMap2[size];
|
|
573
640
|
const showFallback = !src || imageError;
|
|
574
641
|
const containerStyle = {
|
|
@@ -578,14 +645,14 @@ function Avatar({ src, fallback, size = "md", style }) {
|
|
|
578
645
|
backgroundColor: colors.muted,
|
|
579
646
|
overflow: "hidden"
|
|
580
647
|
};
|
|
581
|
-
return /* @__PURE__ */
|
|
648
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles7.base, containerStyle, style] }, !showFallback ? /* @__PURE__ */ React24__default.default.createElement(
|
|
582
649
|
reactNative.Image,
|
|
583
650
|
{
|
|
584
651
|
source: { uri: src },
|
|
585
652
|
style: { width: dimension, height: dimension },
|
|
586
653
|
onError: () => setImageError(true)
|
|
587
654
|
}
|
|
588
|
-
) : /* @__PURE__ */
|
|
655
|
+
) : /* @__PURE__ */ React24__default.default.createElement(
|
|
589
656
|
reactNative.Text,
|
|
590
657
|
{
|
|
591
658
|
style: [styles7.fallback, { color: colors.mutedForeground, fontSize: fontSizeMap[size] }],
|
|
@@ -603,21 +670,22 @@ var styles7 = reactNative.StyleSheet.create({
|
|
|
603
670
|
fontWeight: "500"
|
|
604
671
|
}
|
|
605
672
|
});
|
|
606
|
-
function AlertBanner({ title, description, variant = "default", icon, style }) {
|
|
673
|
+
function AlertBanner({ title, description, variant = "default", icon, iconName, iconColor, style }) {
|
|
607
674
|
const { colors } = useTheme();
|
|
608
675
|
const borderColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.border;
|
|
609
676
|
const titleColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.foreground;
|
|
610
677
|
const descColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.mutedForeground;
|
|
611
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
612
|
-
|
|
678
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 18, color: titleColor }) : variant === "destructive" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 20, color: titleColor }) : /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 18, color: titleColor });
|
|
679
|
+
const effectiveIcon = iconName ? renderIcon(iconName, 18, iconColor ?? titleColor) : icon ?? defaultIcon;
|
|
680
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles8.container, { backgroundColor: colors.card, borderColor }, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles8.icon }, effectiveIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles8.content }, title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles8.title, { color: titleColor }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles8.description, { color: descColor }], allowFontScaling: true }, description) : null));
|
|
613
681
|
}
|
|
614
682
|
var styles8 = reactNative.StyleSheet.create({
|
|
615
683
|
container: {
|
|
616
684
|
flexDirection: "row",
|
|
617
685
|
borderWidth: 1,
|
|
618
|
-
borderRadius: 12,
|
|
619
|
-
padding: 16,
|
|
620
|
-
gap: 12,
|
|
686
|
+
borderRadius: ms(12),
|
|
687
|
+
padding: s(16),
|
|
688
|
+
gap: s(12),
|
|
621
689
|
shadowColor: "#000",
|
|
622
690
|
shadowOffset: { width: 0, height: 4 },
|
|
623
691
|
shadowOpacity: 0.06,
|
|
@@ -629,24 +697,24 @@ var styles8 = reactNative.StyleSheet.create({
|
|
|
629
697
|
},
|
|
630
698
|
content: {
|
|
631
699
|
flex: 1,
|
|
632
|
-
gap: 4
|
|
700
|
+
gap: vs(4)
|
|
633
701
|
},
|
|
634
702
|
title: {
|
|
635
|
-
fontSize: 14,
|
|
703
|
+
fontSize: ms(14),
|
|
636
704
|
fontWeight: "500",
|
|
637
|
-
lineHeight: 20
|
|
705
|
+
lineHeight: mvs(20)
|
|
638
706
|
},
|
|
639
707
|
description: {
|
|
640
|
-
fontSize: 14,
|
|
641
|
-
lineHeight: 20
|
|
708
|
+
fontSize: ms(14),
|
|
709
|
+
lineHeight: mvs(20)
|
|
642
710
|
}
|
|
643
711
|
});
|
|
644
712
|
function Progress({ value = 0, max = 100, style }) {
|
|
645
713
|
const { colors } = useTheme();
|
|
646
714
|
const percent = Math.min(Math.max(value / max * 100, 0), 100);
|
|
647
|
-
const [trackWidth, setTrackWidth] =
|
|
648
|
-
const animatedWidth =
|
|
649
|
-
|
|
715
|
+
const [trackWidth, setTrackWidth] = React24.useState(0);
|
|
716
|
+
const animatedWidth = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
717
|
+
React24.useEffect(() => {
|
|
650
718
|
if (trackWidth === 0) return;
|
|
651
719
|
reactNative.Animated.spring(animatedWidth, {
|
|
652
720
|
toValue: percent / 100 * trackWidth,
|
|
@@ -655,13 +723,13 @@ function Progress({ value = 0, max = 100, style }) {
|
|
|
655
723
|
bounciness: 0
|
|
656
724
|
}).start();
|
|
657
725
|
}, [percent, trackWidth]);
|
|
658
|
-
return /* @__PURE__ */
|
|
726
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
659
727
|
reactNative.View,
|
|
660
728
|
{
|
|
661
729
|
style: [styles9.track, { backgroundColor: colors.muted }, style],
|
|
662
730
|
onLayout: (e) => setTrackWidth(e.nativeEvent.layout.width)
|
|
663
731
|
},
|
|
664
|
-
/* @__PURE__ */
|
|
732
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
665
733
|
reactNative.Animated.View,
|
|
666
734
|
{
|
|
667
735
|
style: [styles9.indicator, { width: animatedWidth, backgroundColor: colors.primary }]
|
|
@@ -671,7 +739,7 @@ function Progress({ value = 0, max = 100, style }) {
|
|
|
671
739
|
}
|
|
672
740
|
var styles9 = reactNative.StyleSheet.create({
|
|
673
741
|
track: {
|
|
674
|
-
height: 8,
|
|
742
|
+
height: vs(8),
|
|
675
743
|
borderRadius: 999,
|
|
676
744
|
overflow: "hidden",
|
|
677
745
|
width: "100%"
|
|
@@ -681,10 +749,11 @@ var styles9 = reactNative.StyleSheet.create({
|
|
|
681
749
|
borderRadius: 999
|
|
682
750
|
}
|
|
683
751
|
});
|
|
684
|
-
function EmptyState({ icon, title, description, action, size = "default", style }) {
|
|
752
|
+
function EmptyState({ icon, iconName, iconColor, title, description, action, size = "default", style }) {
|
|
685
753
|
const { colors } = useTheme();
|
|
686
754
|
const isCompact = size === "compact";
|
|
687
|
-
|
|
755
|
+
const effectiveIcon = iconName ? renderIcon(iconName, isCompact ? 32 : 48, iconColor ?? colors.mutedForeground) : icon;
|
|
756
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
688
757
|
reactNative.View,
|
|
689
758
|
{
|
|
690
759
|
style: [
|
|
@@ -694,7 +763,7 @@ function EmptyState({ icon, title, description, action, size = "default", style
|
|
|
694
763
|
style
|
|
695
764
|
]
|
|
696
765
|
},
|
|
697
|
-
|
|
766
|
+
effectiveIcon ? /* @__PURE__ */ React24__default.default.createElement(
|
|
698
767
|
reactNative.View,
|
|
699
768
|
{
|
|
700
769
|
style: [
|
|
@@ -703,17 +772,17 @@ function EmptyState({ icon, title, description, action, size = "default", style
|
|
|
703
772
|
{ backgroundColor: colors.muted }
|
|
704
773
|
]
|
|
705
774
|
},
|
|
706
|
-
|
|
775
|
+
effectiveIcon
|
|
707
776
|
) : null,
|
|
708
|
-
/* @__PURE__ */
|
|
777
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles10.textWrapper }, /* @__PURE__ */ React24__default.default.createElement(
|
|
709
778
|
reactNative.Text,
|
|
710
779
|
{
|
|
711
780
|
style: [styles10.title, isCompact && styles10.titleCompact, { color: colors.foreground }],
|
|
712
781
|
allowFontScaling: true
|
|
713
782
|
},
|
|
714
783
|
title
|
|
715
|
-
), description && !isCompact ? /* @__PURE__ */
|
|
716
|
-
action && !isCompact ? /* @__PURE__ */
|
|
784
|
+
), description && !isCompact ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles10.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null),
|
|
785
|
+
action && !isCompact ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles10.action }, action) : null
|
|
717
786
|
);
|
|
718
787
|
}
|
|
719
788
|
var styles10 = reactNative.StyleSheet.create({
|
|
@@ -722,46 +791,46 @@ var styles10 = reactNative.StyleSheet.create({
|
|
|
722
791
|
justifyContent: "center",
|
|
723
792
|
borderWidth: 1,
|
|
724
793
|
borderStyle: "dashed",
|
|
725
|
-
borderRadius: 12,
|
|
726
|
-
padding: 32,
|
|
727
|
-
gap: 16
|
|
794
|
+
borderRadius: ms(12),
|
|
795
|
+
padding: s(32),
|
|
796
|
+
gap: vs(16)
|
|
728
797
|
},
|
|
729
798
|
containerCompact: {
|
|
730
|
-
padding: 20,
|
|
731
|
-
gap: 10
|
|
799
|
+
padding: s(20),
|
|
800
|
+
gap: vs(10)
|
|
732
801
|
},
|
|
733
802
|
iconWrapper: {
|
|
734
|
-
width: 48,
|
|
735
|
-
height: 48,
|
|
736
|
-
borderRadius: 12,
|
|
803
|
+
width: s(48),
|
|
804
|
+
height: s(48),
|
|
805
|
+
borderRadius: ms(12),
|
|
737
806
|
alignItems: "center",
|
|
738
807
|
justifyContent: "center"
|
|
739
808
|
},
|
|
740
809
|
iconWrapperCompact: {
|
|
741
|
-
width: 36,
|
|
742
|
-
height: 36,
|
|
743
|
-
borderRadius: 8
|
|
810
|
+
width: s(36),
|
|
811
|
+
height: s(36),
|
|
812
|
+
borderRadius: ms(8)
|
|
744
813
|
},
|
|
745
814
|
textWrapper: {
|
|
746
815
|
alignItems: "center",
|
|
747
|
-
gap: 8,
|
|
748
|
-
maxWidth: 320
|
|
816
|
+
gap: vs(8),
|
|
817
|
+
maxWidth: s(320)
|
|
749
818
|
},
|
|
750
819
|
title: {
|
|
751
|
-
fontSize: 18,
|
|
820
|
+
fontSize: ms(18),
|
|
752
821
|
fontWeight: "500",
|
|
753
822
|
textAlign: "center"
|
|
754
823
|
},
|
|
755
824
|
titleCompact: {
|
|
756
|
-
fontSize: 15
|
|
825
|
+
fontSize: ms(15)
|
|
757
826
|
},
|
|
758
827
|
description: {
|
|
759
|
-
fontSize: 14,
|
|
760
|
-
lineHeight: 20,
|
|
828
|
+
fontSize: ms(14),
|
|
829
|
+
lineHeight: mvs(20),
|
|
761
830
|
textAlign: "center"
|
|
762
831
|
},
|
|
763
832
|
action: {
|
|
764
|
-
marginTop: 8
|
|
833
|
+
marginTop: vs(8)
|
|
765
834
|
}
|
|
766
835
|
});
|
|
767
836
|
var webInputResetStyle2 = reactNative.Platform.OS === "web" ? { outlineStyle: "none", outlineWidth: 0, outlineColor: "transparent", boxShadow: "none" } : {};
|
|
@@ -777,8 +846,8 @@ function Textarea({
|
|
|
777
846
|
...props
|
|
778
847
|
}) {
|
|
779
848
|
const { colors } = useTheme();
|
|
780
|
-
const [focused, setFocused] =
|
|
781
|
-
return /* @__PURE__ */
|
|
849
|
+
const [focused, setFocused] = React24.useState(false);
|
|
850
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles11.container, containerStyle] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
782
851
|
reactNative.TextInput,
|
|
783
852
|
{
|
|
784
853
|
multiline: true,
|
|
@@ -790,7 +859,7 @@ function Textarea({
|
|
|
790
859
|
borderColor: error ? colors.destructive : focused ? colors.ring ?? colors.primary : colors.border,
|
|
791
860
|
color: colors.foreground,
|
|
792
861
|
backgroundColor: colors.background,
|
|
793
|
-
minHeight: rows * 30
|
|
862
|
+
minHeight: rows * vs(30)
|
|
794
863
|
},
|
|
795
864
|
webInputResetStyle2,
|
|
796
865
|
style
|
|
@@ -807,27 +876,28 @@ function Textarea({
|
|
|
807
876
|
allowFontScaling: true,
|
|
808
877
|
...props
|
|
809
878
|
}
|
|
810
|
-
), error ? /* @__PURE__ */
|
|
879
|
+
), error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
811
880
|
}
|
|
812
881
|
var styles11 = reactNative.StyleSheet.create({
|
|
813
882
|
container: {
|
|
814
|
-
gap: 8
|
|
883
|
+
gap: vs(8)
|
|
815
884
|
},
|
|
816
885
|
label: {
|
|
817
|
-
fontSize: 15,
|
|
886
|
+
fontSize: ms(15),
|
|
818
887
|
fontWeight: "500"
|
|
819
888
|
},
|
|
820
889
|
input: {
|
|
821
890
|
borderWidth: 1.5,
|
|
822
|
-
borderRadius: 8,
|
|
823
|
-
paddingHorizontal: 16,
|
|
824
|
-
paddingVertical: 14,
|
|
825
|
-
fontSize: 17
|
|
891
|
+
borderRadius: ms(8),
|
|
892
|
+
paddingHorizontal: s(16),
|
|
893
|
+
paddingVertical: vs(14),
|
|
894
|
+
fontSize: ms(17)
|
|
826
895
|
},
|
|
827
896
|
helperText: {
|
|
828
|
-
fontSize: 13
|
|
897
|
+
fontSize: ms(13)
|
|
829
898
|
}
|
|
830
899
|
});
|
|
900
|
+
var nativeDriver3 = reactNative.Platform.OS !== "web";
|
|
831
901
|
function Checkbox({
|
|
832
902
|
checked = false,
|
|
833
903
|
onCheckedChange,
|
|
@@ -836,20 +906,20 @@ function Checkbox({
|
|
|
836
906
|
style
|
|
837
907
|
}) {
|
|
838
908
|
const { colors } = useTheme();
|
|
839
|
-
const
|
|
909
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
840
910
|
const handlePressIn = () => {
|
|
841
911
|
if (disabled) return;
|
|
842
|
-
reactNative.Animated.spring(
|
|
912
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver3, speed: 40, bounciness: 0 }).start();
|
|
843
913
|
};
|
|
844
914
|
const handlePressOut = () => {
|
|
845
|
-
reactNative.Animated.spring(
|
|
915
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver3, speed: 40, bounciness: 4 }).start();
|
|
846
916
|
};
|
|
847
|
-
return /* @__PURE__ */
|
|
917
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
848
918
|
reactNative.TouchableOpacity,
|
|
849
919
|
{
|
|
850
920
|
style: [styles12.row, style],
|
|
851
921
|
onPress: () => {
|
|
852
|
-
|
|
922
|
+
selectionAsync();
|
|
853
923
|
onCheckedChange?.(!checked);
|
|
854
924
|
},
|
|
855
925
|
onPressIn: handlePressIn,
|
|
@@ -858,7 +928,7 @@ function Checkbox({
|
|
|
858
928
|
activeOpacity: 1,
|
|
859
929
|
touchSoundDisabled: true
|
|
860
930
|
},
|
|
861
|
-
/* @__PURE__ */
|
|
931
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
862
932
|
reactNative.View,
|
|
863
933
|
{
|
|
864
934
|
style: [
|
|
@@ -870,9 +940,9 @@ function Checkbox({
|
|
|
870
940
|
}
|
|
871
941
|
]
|
|
872
942
|
},
|
|
873
|
-
checked ? /* @__PURE__ */
|
|
943
|
+
checked ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles12.checkmark, { borderColor: colors.primaryForeground }] }) : null
|
|
874
944
|
),
|
|
875
|
-
label ? /* @__PURE__ */
|
|
945
|
+
label ? /* @__PURE__ */ React24__default.default.createElement(
|
|
876
946
|
reactNative.Text,
|
|
877
947
|
{
|
|
878
948
|
style: [styles12.label, { color: disabled ? colors.mutedForeground : colors.foreground }]
|
|
@@ -885,43 +955,43 @@ var styles12 = reactNative.StyleSheet.create({
|
|
|
885
955
|
row: {
|
|
886
956
|
flexDirection: "row",
|
|
887
957
|
alignItems: "center",
|
|
888
|
-
gap: 12
|
|
958
|
+
gap: s(12)
|
|
889
959
|
},
|
|
890
960
|
box: {
|
|
891
|
-
width: 24,
|
|
892
|
-
height: 24,
|
|
893
|
-
borderRadius: 8,
|
|
961
|
+
width: s(24),
|
|
962
|
+
height: s(24),
|
|
963
|
+
borderRadius: ms(8),
|
|
894
964
|
borderWidth: 1.5,
|
|
895
965
|
alignItems: "center",
|
|
896
966
|
justifyContent: "center"
|
|
897
967
|
},
|
|
898
968
|
checkmark: {
|
|
899
|
-
width: 12,
|
|
900
|
-
height: 7,
|
|
969
|
+
width: s(12),
|
|
970
|
+
height: vs(7),
|
|
901
971
|
borderLeftWidth: 2,
|
|
902
972
|
borderBottomWidth: 2,
|
|
903
973
|
transform: [{ rotate: "-45deg" }, { translateY: -1 }]
|
|
904
974
|
},
|
|
905
975
|
label: {
|
|
906
|
-
fontSize: 15,
|
|
907
|
-
lineHeight: 22
|
|
976
|
+
fontSize: ms(15),
|
|
977
|
+
lineHeight: mvs(22)
|
|
908
978
|
}
|
|
909
979
|
});
|
|
910
|
-
var
|
|
911
|
-
var TRACK_WIDTH = 60;
|
|
912
|
-
var TRACK_HEIGHT = 36;
|
|
913
|
-
var THUMB_SIZE = 28;
|
|
914
|
-
var THUMB_OFFSET = 4;
|
|
980
|
+
var nativeDriver4 = reactNative.Platform.OS !== "web";
|
|
981
|
+
var TRACK_WIDTH = s(60);
|
|
982
|
+
var TRACK_HEIGHT = vs(36);
|
|
983
|
+
var THUMB_SIZE = s(28);
|
|
984
|
+
var THUMB_OFFSET = s(4);
|
|
915
985
|
var THUMB_TRAVEL = TRACK_WIDTH - THUMB_SIZE - THUMB_OFFSET * 2;
|
|
916
986
|
function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
917
987
|
const { colors } = useTheme();
|
|
918
|
-
const translateX =
|
|
919
|
-
const trackOpacity =
|
|
920
|
-
|
|
988
|
+
const translateX = React24.useRef(new reactNative.Animated.Value(checked ? THUMB_TRAVEL : 0)).current;
|
|
989
|
+
const trackOpacity = React24.useRef(new reactNative.Animated.Value(checked ? 1 : 0)).current;
|
|
990
|
+
React24.useEffect(() => {
|
|
921
991
|
reactNative.Animated.parallel([
|
|
922
992
|
reactNative.Animated.spring(translateX, {
|
|
923
993
|
toValue: checked ? THUMB_TRAVEL : 0,
|
|
924
|
-
useNativeDriver:
|
|
994
|
+
useNativeDriver: nativeDriver4,
|
|
925
995
|
bounciness: 4
|
|
926
996
|
}),
|
|
927
997
|
reactNative.Animated.timing(trackOpacity, {
|
|
@@ -935,11 +1005,11 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
935
1005
|
inputRange: [0, 1],
|
|
936
1006
|
outputRange: [colors.muted, colors.primary]
|
|
937
1007
|
});
|
|
938
|
-
return /* @__PURE__ */
|
|
1008
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [{ opacity: disabled ? 0.45 : 1 }, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
939
1009
|
reactNative.TouchableOpacity,
|
|
940
1010
|
{
|
|
941
1011
|
onPress: () => {
|
|
942
|
-
|
|
1012
|
+
selectionAsync();
|
|
943
1013
|
onCheckedChange?.(!checked);
|
|
944
1014
|
},
|
|
945
1015
|
disabled,
|
|
@@ -947,7 +1017,7 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
947
1017
|
touchSoundDisabled: true,
|
|
948
1018
|
style: styles13.wrapper
|
|
949
1019
|
},
|
|
950
|
-
/* @__PURE__ */
|
|
1020
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles13.track, { backgroundColor: trackColor }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
951
1021
|
reactNative.Animated.View,
|
|
952
1022
|
{
|
|
953
1023
|
style: [
|
|
@@ -982,10 +1052,11 @@ var styles13 = reactNative.StyleSheet.create({
|
|
|
982
1052
|
}
|
|
983
1053
|
});
|
|
984
1054
|
var sizeStyles = {
|
|
985
|
-
sm: { paddingHorizontal: 12, paddingVertical: 8, minWidth: 40, minHeight: 40 },
|
|
986
|
-
md: { paddingHorizontal: 16, paddingVertical: 12, minWidth: 44, minHeight: 44 },
|
|
987
|
-
lg: { paddingHorizontal: 20, paddingVertical: 14, minWidth: 48, minHeight: 48 }
|
|
1055
|
+
sm: { paddingHorizontal: s(12), paddingVertical: vs(8), minWidth: s(40), minHeight: vs(40) },
|
|
1056
|
+
md: { paddingHorizontal: s(16), paddingVertical: vs(12), minWidth: s(44), minHeight: vs(44) },
|
|
1057
|
+
lg: { paddingHorizontal: s(20), paddingVertical: vs(14), minWidth: s(48), minHeight: vs(48) }
|
|
988
1058
|
};
|
|
1059
|
+
var iconSizeMap2 = { sm: 16, md: 18, lg: 20 };
|
|
989
1060
|
function Toggle({
|
|
990
1061
|
pressed = false,
|
|
991
1062
|
onPressedChange,
|
|
@@ -994,14 +1065,18 @@ function Toggle({
|
|
|
994
1065
|
label,
|
|
995
1066
|
icon,
|
|
996
1067
|
activeIcon,
|
|
1068
|
+
iconName,
|
|
1069
|
+
activeIconName,
|
|
1070
|
+
iconColor,
|
|
1071
|
+
activeIconColor,
|
|
997
1072
|
disabled,
|
|
998
1073
|
style,
|
|
999
1074
|
...props
|
|
1000
1075
|
}) {
|
|
1001
1076
|
const { colors } = useTheme();
|
|
1002
|
-
const
|
|
1003
|
-
const pressAnim =
|
|
1004
|
-
|
|
1077
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1078
|
+
const pressAnim = React24.useRef(new reactNative.Animated.Value(pressed ? 1 : 0)).current;
|
|
1079
|
+
React24.useEffect(() => {
|
|
1005
1080
|
reactNative.Animated.timing(pressAnim, {
|
|
1006
1081
|
toValue: pressed ? 1 : 0,
|
|
1007
1082
|
duration: 150,
|
|
@@ -1011,10 +1086,10 @@ function Toggle({
|
|
|
1011
1086
|
}, [pressed, pressAnim]);
|
|
1012
1087
|
const handlePressIn = () => {
|
|
1013
1088
|
if (disabled) return;
|
|
1014
|
-
reactNative.Animated.spring(
|
|
1089
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: true, speed: 40, bounciness: 0 }).start();
|
|
1015
1090
|
};
|
|
1016
1091
|
const handlePressOut = () => {
|
|
1017
|
-
reactNative.Animated.spring(
|
|
1092
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: true, speed: 40, bounciness: 4 }).start();
|
|
1018
1093
|
};
|
|
1019
1094
|
const borderColor = pressAnim.interpolate({
|
|
1020
1095
|
inputRange: [0, 1],
|
|
@@ -1028,6 +1103,7 @@ function Toggle({
|
|
|
1028
1103
|
inputRange: [0, 1],
|
|
1029
1104
|
outputRange: [colors.foreground, colors.primary]
|
|
1030
1105
|
});
|
|
1106
|
+
const iconSize = iconSizeMap2[size];
|
|
1031
1107
|
const LeftIcon = () => {
|
|
1032
1108
|
const renderProp = (prop) => {
|
|
1033
1109
|
if (!prop) return null;
|
|
@@ -1035,19 +1111,21 @@ function Toggle({
|
|
|
1035
1111
|
return prop;
|
|
1036
1112
|
};
|
|
1037
1113
|
if (pressed) {
|
|
1114
|
+
if (activeIconName) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, renderIcon(activeIconName, iconSize, activeIconColor ?? colors.primary));
|
|
1038
1115
|
const active = renderProp(activeIcon);
|
|
1039
|
-
if (active) return /* @__PURE__ */
|
|
1040
|
-
return /* @__PURE__ */
|
|
1116
|
+
if (active) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, active);
|
|
1117
|
+
return /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: iconSize, color: colors.primary });
|
|
1041
1118
|
}
|
|
1119
|
+
if (iconName) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, renderIcon(iconName, iconSize, iconColor ?? colors.mutedForeground));
|
|
1042
1120
|
const custom = renderProp(icon);
|
|
1043
|
-
if (custom) return /* @__PURE__ */
|
|
1044
|
-
return /* @__PURE__ */
|
|
1121
|
+
if (custom) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, custom);
|
|
1122
|
+
return /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: iconSize, color: colors.mutedForeground });
|
|
1045
1123
|
};
|
|
1046
|
-
return /* @__PURE__ */
|
|
1124
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles14.disabled, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1047
1125
|
reactNative.TouchableOpacity,
|
|
1048
1126
|
{
|
|
1049
1127
|
onPress: () => {
|
|
1050
|
-
|
|
1128
|
+
selectionAsync();
|
|
1051
1129
|
onPressedChange?.(!pressed);
|
|
1052
1130
|
},
|
|
1053
1131
|
onPressIn: handlePressIn,
|
|
@@ -1057,7 +1135,7 @@ function Toggle({
|
|
|
1057
1135
|
touchSoundDisabled: true,
|
|
1058
1136
|
...props
|
|
1059
1137
|
},
|
|
1060
|
-
/* @__PURE__ */
|
|
1138
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1061
1139
|
reactNative.Animated.View,
|
|
1062
1140
|
{
|
|
1063
1141
|
style: [
|
|
@@ -1066,49 +1144,50 @@ function Toggle({
|
|
|
1066
1144
|
{ borderColor, backgroundColor, borderWidth: 2 }
|
|
1067
1145
|
]
|
|
1068
1146
|
},
|
|
1069
|
-
/* @__PURE__ */
|
|
1147
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles14.inner }, /* @__PURE__ */ React24__default.default.createElement(LeftIcon, null), label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.Text, { style: [styles14.label, { color: textColor }] }, label) : null)
|
|
1070
1148
|
)
|
|
1071
1149
|
));
|
|
1072
1150
|
}
|
|
1073
1151
|
var styles14 = reactNative.StyleSheet.create({
|
|
1074
1152
|
base: {
|
|
1075
|
-
borderRadius: 8
|
|
1153
|
+
borderRadius: ms(8)
|
|
1076
1154
|
},
|
|
1077
1155
|
inner: {
|
|
1078
1156
|
flexDirection: "row",
|
|
1079
1157
|
alignItems: "center",
|
|
1080
1158
|
justifyContent: "center",
|
|
1081
|
-
gap: 8
|
|
1159
|
+
gap: s(8)
|
|
1082
1160
|
},
|
|
1083
1161
|
disabled: {
|
|
1084
1162
|
opacity: 0.45
|
|
1085
1163
|
},
|
|
1086
1164
|
label: {
|
|
1087
|
-
fontSize: 14,
|
|
1165
|
+
fontSize: ms(14),
|
|
1088
1166
|
fontWeight: "500"
|
|
1089
1167
|
}
|
|
1090
1168
|
});
|
|
1169
|
+
var nativeDriver5 = reactNative.Platform.OS !== "web";
|
|
1091
1170
|
function RadioItem({
|
|
1092
1171
|
option,
|
|
1093
1172
|
selected,
|
|
1094
1173
|
onSelect
|
|
1095
1174
|
}) {
|
|
1096
1175
|
const { colors } = useTheme();
|
|
1097
|
-
const
|
|
1176
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1098
1177
|
const handlePressIn = () => {
|
|
1099
1178
|
if (option.disabled) return;
|
|
1100
|
-
reactNative.Animated.spring(
|
|
1179
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver5, speed: 40, bounciness: 0 }).start();
|
|
1101
1180
|
};
|
|
1102
1181
|
const handlePressOut = () => {
|
|
1103
|
-
reactNative.Animated.spring(
|
|
1182
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver5, speed: 40, bounciness: 4 }).start();
|
|
1104
1183
|
};
|
|
1105
|
-
return /* @__PURE__ */
|
|
1184
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1106
1185
|
reactNative.TouchableOpacity,
|
|
1107
1186
|
{
|
|
1108
1187
|
style: styles15.row,
|
|
1109
1188
|
onPress: () => {
|
|
1110
1189
|
if (!option.disabled) {
|
|
1111
|
-
|
|
1190
|
+
selectionAsync();
|
|
1112
1191
|
onSelect();
|
|
1113
1192
|
}
|
|
1114
1193
|
},
|
|
@@ -1118,7 +1197,7 @@ function RadioItem({
|
|
|
1118
1197
|
touchSoundDisabled: true,
|
|
1119
1198
|
disabled: option.disabled
|
|
1120
1199
|
},
|
|
1121
|
-
/* @__PURE__ */
|
|
1200
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1122
1201
|
reactNative.View,
|
|
1123
1202
|
{
|
|
1124
1203
|
style: [
|
|
@@ -1129,9 +1208,9 @@ function RadioItem({
|
|
|
1129
1208
|
}
|
|
1130
1209
|
]
|
|
1131
1210
|
},
|
|
1132
|
-
selected ? /* @__PURE__ */
|
|
1211
|
+
selected ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles15.dot, { backgroundColor: colors.primary }] }) : null
|
|
1133
1212
|
),
|
|
1134
|
-
/* @__PURE__ */
|
|
1213
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1135
1214
|
reactNative.Text,
|
|
1136
1215
|
{
|
|
1137
1216
|
style: [
|
|
@@ -1150,7 +1229,7 @@ function RadioGroup({
|
|
|
1150
1229
|
orientation = "vertical",
|
|
1151
1230
|
style
|
|
1152
1231
|
}) {
|
|
1153
|
-
return /* @__PURE__ */
|
|
1232
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles15.container, orientation === "horizontal" && styles15.horizontal, style] }, options.map((option) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1154
1233
|
RadioItem,
|
|
1155
1234
|
{
|
|
1156
1235
|
key: option.value,
|
|
@@ -1162,7 +1241,7 @@ function RadioGroup({
|
|
|
1162
1241
|
}
|
|
1163
1242
|
var styles15 = reactNative.StyleSheet.create({
|
|
1164
1243
|
container: {
|
|
1165
|
-
gap: 12
|
|
1244
|
+
gap: vs(12)
|
|
1166
1245
|
},
|
|
1167
1246
|
horizontal: {
|
|
1168
1247
|
flexDirection: "row",
|
|
@@ -1171,26 +1250,27 @@ var styles15 = reactNative.StyleSheet.create({
|
|
|
1171
1250
|
row: {
|
|
1172
1251
|
flexDirection: "row",
|
|
1173
1252
|
alignItems: "center",
|
|
1174
|
-
gap: 12
|
|
1253
|
+
gap: s(12)
|
|
1175
1254
|
},
|
|
1176
1255
|
radio: {
|
|
1177
|
-
width: 24,
|
|
1178
|
-
height: 24,
|
|
1179
|
-
borderRadius: 12,
|
|
1256
|
+
width: s(24),
|
|
1257
|
+
height: s(24),
|
|
1258
|
+
borderRadius: s(12),
|
|
1180
1259
|
borderWidth: 1.5,
|
|
1181
1260
|
alignItems: "center",
|
|
1182
1261
|
justifyContent: "center"
|
|
1183
1262
|
},
|
|
1184
1263
|
dot: {
|
|
1185
|
-
width: 10,
|
|
1186
|
-
height: 10,
|
|
1187
|
-
borderRadius: 5
|
|
1264
|
+
width: s(10),
|
|
1265
|
+
height: s(10),
|
|
1266
|
+
borderRadius: s(5)
|
|
1188
1267
|
},
|
|
1189
1268
|
label: {
|
|
1190
|
-
fontSize: 14,
|
|
1191
|
-
lineHeight: 20
|
|
1269
|
+
fontSize: ms(14),
|
|
1270
|
+
lineHeight: mvs(20)
|
|
1192
1271
|
}
|
|
1193
1272
|
});
|
|
1273
|
+
var nativeDriver6 = reactNative.Platform.OS !== "web";
|
|
1194
1274
|
function TabTrigger({
|
|
1195
1275
|
tab,
|
|
1196
1276
|
isActive,
|
|
@@ -1198,14 +1278,14 @@ function TabTrigger({
|
|
|
1198
1278
|
onLayout
|
|
1199
1279
|
}) {
|
|
1200
1280
|
const { colors } = useTheme();
|
|
1201
|
-
const
|
|
1281
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1202
1282
|
const handlePressIn = () => {
|
|
1203
|
-
reactNative.Animated.spring(
|
|
1283
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver6, speed: 40, bounciness: 0 }).start();
|
|
1204
1284
|
};
|
|
1205
1285
|
const handlePressOut = () => {
|
|
1206
|
-
reactNative.Animated.spring(
|
|
1286
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver6, speed: 40, bounciness: 4 }).start();
|
|
1207
1287
|
};
|
|
1208
|
-
return /* @__PURE__ */
|
|
1288
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1209
1289
|
reactNative.TouchableOpacity,
|
|
1210
1290
|
{
|
|
1211
1291
|
style: styles16.trigger,
|
|
@@ -1216,7 +1296,7 @@ function TabTrigger({
|
|
|
1216
1296
|
activeOpacity: 1,
|
|
1217
1297
|
touchSoundDisabled: true
|
|
1218
1298
|
},
|
|
1219
|
-
/* @__PURE__ */
|
|
1299
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles16.triggerInner }, tab.icon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles16.triggerIcon }, typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
1220
1300
|
reactNative.Text,
|
|
1221
1301
|
{
|
|
1222
1302
|
style: [
|
|
@@ -1230,13 +1310,13 @@ function TabTrigger({
|
|
|
1230
1310
|
);
|
|
1231
1311
|
}
|
|
1232
1312
|
function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
1233
|
-
const [internal, setInternal] =
|
|
1313
|
+
const [internal, setInternal] = React24.useState(tabs[0]?.value ?? "");
|
|
1234
1314
|
const { colors } = useTheme();
|
|
1235
1315
|
const active = value ?? internal;
|
|
1236
|
-
const tabLayouts =
|
|
1237
|
-
const pillX =
|
|
1238
|
-
const pillWidth =
|
|
1239
|
-
const initialised =
|
|
1316
|
+
const tabLayouts = React24.useRef({});
|
|
1317
|
+
const pillX = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
1318
|
+
const pillWidth = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
1319
|
+
const initialised = React24.useRef(false);
|
|
1240
1320
|
const animatePill = (tabValue, animate) => {
|
|
1241
1321
|
const layout = tabLayouts.current[tabValue];
|
|
1242
1322
|
if (!layout) return;
|
|
@@ -1260,17 +1340,17 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1260
1340
|
pillWidth.setValue(layout.width);
|
|
1261
1341
|
}
|
|
1262
1342
|
};
|
|
1263
|
-
|
|
1343
|
+
React24.useEffect(() => {
|
|
1264
1344
|
if (initialised.current) {
|
|
1265
1345
|
animatePill(active, true);
|
|
1266
1346
|
}
|
|
1267
1347
|
}, [active]);
|
|
1268
1348
|
const handlePress = (v) => {
|
|
1269
|
-
|
|
1349
|
+
selectionAsync();
|
|
1270
1350
|
if (!value) setInternal(v);
|
|
1271
1351
|
onValueChange?.(v);
|
|
1272
1352
|
};
|
|
1273
|
-
return /* @__PURE__ */
|
|
1353
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles16.list, { backgroundColor: colors.muted }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1274
1354
|
reactNative.Animated.View,
|
|
1275
1355
|
{
|
|
1276
1356
|
style: [
|
|
@@ -1291,7 +1371,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1291
1371
|
}
|
|
1292
1372
|
]
|
|
1293
1373
|
}
|
|
1294
|
-
), tabs.map((tab) => /* @__PURE__ */
|
|
1374
|
+
), tabs.map((tab) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1295
1375
|
TabTrigger,
|
|
1296
1376
|
{
|
|
1297
1377
|
key: tab.value,
|
|
@@ -1311,21 +1391,21 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1311
1391
|
}
|
|
1312
1392
|
function TabsContent({ value, activeValue, children, style }) {
|
|
1313
1393
|
if (value !== activeValue) return null;
|
|
1314
|
-
return /* @__PURE__ */
|
|
1394
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, children);
|
|
1315
1395
|
}
|
|
1316
1396
|
var styles16 = reactNative.StyleSheet.create({
|
|
1317
1397
|
list: {
|
|
1318
1398
|
flexDirection: "row",
|
|
1319
|
-
borderRadius: 12,
|
|
1320
|
-
padding: 4,
|
|
1321
|
-
gap: 4
|
|
1399
|
+
borderRadius: ms(12),
|
|
1400
|
+
padding: s(4),
|
|
1401
|
+
gap: s(4)
|
|
1322
1402
|
},
|
|
1323
1403
|
pill: {},
|
|
1324
1404
|
trigger: {
|
|
1325
1405
|
flex: 1,
|
|
1326
|
-
paddingVertical: 12,
|
|
1327
|
-
paddingHorizontal: 16,
|
|
1328
|
-
borderRadius: 8,
|
|
1406
|
+
paddingVertical: vs(12),
|
|
1407
|
+
paddingHorizontal: s(16),
|
|
1408
|
+
borderRadius: ms(8),
|
|
1329
1409
|
alignItems: "center",
|
|
1330
1410
|
justifyContent: "center",
|
|
1331
1411
|
zIndex: 1
|
|
@@ -1334,15 +1414,15 @@ var styles16 = reactNative.StyleSheet.create({
|
|
|
1334
1414
|
flexDirection: "row",
|
|
1335
1415
|
alignItems: "center",
|
|
1336
1416
|
justifyContent: "center",
|
|
1337
|
-
gap: 8
|
|
1417
|
+
gap: s(8)
|
|
1338
1418
|
},
|
|
1339
1419
|
triggerIcon: {
|
|
1340
|
-
marginRight: 6,
|
|
1420
|
+
marginRight: s(6),
|
|
1341
1421
|
alignItems: "center",
|
|
1342
1422
|
justifyContent: "center"
|
|
1343
1423
|
},
|
|
1344
1424
|
triggerLabel: {
|
|
1345
|
-
fontSize: 15,
|
|
1425
|
+
fontSize: ms(15),
|
|
1346
1426
|
fontWeight: "400"
|
|
1347
1427
|
},
|
|
1348
1428
|
activeTriggerLabel: {
|
|
@@ -1355,56 +1435,54 @@ function AccordionItemComponent({
|
|
|
1355
1435
|
onToggle
|
|
1356
1436
|
}) {
|
|
1357
1437
|
const { colors } = useTheme();
|
|
1358
|
-
const
|
|
1359
|
-
const
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
const toggle = (open) => {
|
|
1363
|
-
const easing = open ? ReanimatedAnimated.Easing.out(ReanimatedAnimated.Easing.ease) : ReanimatedAnimated.Easing.in(ReanimatedAnimated.Easing.ease);
|
|
1364
|
-
animatedHeight.value = ReanimatedAnimated.withTiming(open ? contentHeight.current : 0, { duration: 220, easing });
|
|
1365
|
-
animatedRotation.value = ReanimatedAnimated.withTiming(open ? 1 : 0, { duration: 220, easing });
|
|
1366
|
-
};
|
|
1367
|
-
React23__default.default.useEffect(() => {
|
|
1368
|
-
toggle(isOpen);
|
|
1438
|
+
const isExpanded = Animated10.useSharedValue(isOpen);
|
|
1439
|
+
const height = Animated10.useSharedValue(0);
|
|
1440
|
+
React24__default.default.useEffect(() => {
|
|
1441
|
+
isExpanded.value = isOpen;
|
|
1369
1442
|
}, [isOpen]);
|
|
1370
|
-
const
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
}
|
|
1375
|
-
|
|
1376
|
-
const
|
|
1377
|
-
|
|
1443
|
+
const derivedHeight = Animated10.useDerivedValue(
|
|
1444
|
+
() => Animated10.withTiming(height.value * Number(isExpanded.value), {
|
|
1445
|
+
duration: 220,
|
|
1446
|
+
easing: isExpanded.value ? Animated10.Easing.out(Animated10.Easing.ease) : Animated10.Easing.in(Animated10.Easing.ease)
|
|
1447
|
+
})
|
|
1448
|
+
);
|
|
1449
|
+
const derivedRotation = Animated10.useDerivedValue(
|
|
1450
|
+
() => Animated10.withTiming(isExpanded.value ? 1 : 0, {
|
|
1451
|
+
duration: 220,
|
|
1452
|
+
easing: isExpanded.value ? Animated10.Easing.out(Animated10.Easing.ease) : Animated10.Easing.in(Animated10.Easing.ease)
|
|
1453
|
+
})
|
|
1454
|
+
);
|
|
1455
|
+
const bodyStyle = Animated10.useAnimatedStyle(() => ({
|
|
1456
|
+
height: derivedHeight.value,
|
|
1378
1457
|
overflow: "hidden"
|
|
1379
1458
|
}));
|
|
1380
|
-
const rotationStyle =
|
|
1381
|
-
transform: [{ rotate: `${
|
|
1459
|
+
const rotationStyle = Animated10.useAnimatedStyle(() => ({
|
|
1460
|
+
transform: [{ rotate: `${derivedRotation.value * 180}deg` }]
|
|
1382
1461
|
}));
|
|
1383
|
-
|
|
1384
|
-
reactNative.
|
|
1385
|
-
};
|
|
1386
|
-
const handlePressOut = () => {
|
|
1387
|
-
reactNative.Animated.spring(scale, { toValue: 1, useNativeDriver: true, speed: 40, bounciness: 4 }).start();
|
|
1388
|
-
};
|
|
1389
|
-
return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles17.item, { borderBottomColor: colors.border }] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale }] } }, /* @__PURE__ */ React23__default.default.createElement(
|
|
1390
|
-
reactNative.TouchableOpacity,
|
|
1462
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles17.item, { borderBottomColor: colors.border }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1463
|
+
reactNative.Pressable,
|
|
1391
1464
|
{
|
|
1392
|
-
style: styles17.trigger,
|
|
1465
|
+
style: ({ pressed }) => [styles17.trigger, { opacity: pressed ? 0.6 : 1 }],
|
|
1393
1466
|
onPress: () => {
|
|
1394
|
-
|
|
1467
|
+
selectionAsync();
|
|
1395
1468
|
onToggle();
|
|
1396
|
-
}
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1469
|
+
}
|
|
1470
|
+
},
|
|
1471
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles17.triggerText, { color: colors.foreground }] }, item.trigger),
|
|
1472
|
+
/* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: [styles17.chevron, rotationStyle] }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foreground }))
|
|
1473
|
+
), /* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: bodyStyle }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1474
|
+
reactNative.View,
|
|
1475
|
+
{
|
|
1476
|
+
style: styles17.content,
|
|
1477
|
+
onLayout: (e) => {
|
|
1478
|
+
height.value = e.nativeEvent.layout.height;
|
|
1479
|
+
}
|
|
1401
1480
|
},
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
)), /* @__PURE__ */ React23__default.default.createElement(ReanimatedAnimated__default.default.View, { style: heightStyle }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles17.content, onLayout }, item.content)));
|
|
1481
|
+
item.content
|
|
1482
|
+
)));
|
|
1405
1483
|
}
|
|
1406
1484
|
function Accordion({ items, type = "single", defaultValue, style }) {
|
|
1407
|
-
const [openValues, setOpenValues] =
|
|
1485
|
+
const [openValues, setOpenValues] = React24.useState(() => {
|
|
1408
1486
|
if (!defaultValue) return [];
|
|
1409
1487
|
return Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
1410
1488
|
});
|
|
@@ -1417,7 +1495,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
1417
1495
|
);
|
|
1418
1496
|
}
|
|
1419
1497
|
};
|
|
1420
|
-
return /* @__PURE__ */
|
|
1498
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, items.map((item) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1421
1499
|
AccordionItemComponent,
|
|
1422
1500
|
{
|
|
1423
1501
|
key: item.value,
|
|
@@ -1435,18 +1513,20 @@ var styles17 = reactNative.StyleSheet.create({
|
|
|
1435
1513
|
flexDirection: "row",
|
|
1436
1514
|
justifyContent: "space-between",
|
|
1437
1515
|
alignItems: "center",
|
|
1438
|
-
paddingVertical: 20
|
|
1516
|
+
paddingVertical: vs(20)
|
|
1439
1517
|
},
|
|
1440
1518
|
triggerText: {
|
|
1441
|
-
fontSize: 17,
|
|
1519
|
+
fontSize: ms(17),
|
|
1442
1520
|
fontWeight: "500",
|
|
1443
1521
|
flex: 1
|
|
1444
1522
|
},
|
|
1445
1523
|
chevron: {
|
|
1446
|
-
marginLeft: 8
|
|
1524
|
+
marginLeft: s(8)
|
|
1447
1525
|
},
|
|
1526
|
+
// position:'absolute' is the key — the inner View escapes the animated wrapper's
|
|
1527
|
+
// clipped height so onLayout always reports the true content height.
|
|
1448
1528
|
content: {
|
|
1449
|
-
paddingBottom: 20,
|
|
1529
|
+
paddingBottom: vs(20),
|
|
1450
1530
|
position: "absolute",
|
|
1451
1531
|
width: "100%"
|
|
1452
1532
|
}
|
|
@@ -1466,15 +1546,15 @@ function Slider({
|
|
|
1466
1546
|
style
|
|
1467
1547
|
}) {
|
|
1468
1548
|
const { colors } = useTheme();
|
|
1469
|
-
const lastSteppedValue =
|
|
1549
|
+
const lastSteppedValue = React24.useRef(value);
|
|
1470
1550
|
const handleValueChange = (v) => {
|
|
1471
1551
|
if (step && v !== lastSteppedValue.current) {
|
|
1472
1552
|
lastSteppedValue.current = v;
|
|
1473
|
-
|
|
1553
|
+
selectionAsync();
|
|
1474
1554
|
}
|
|
1475
1555
|
onValueChange?.(v);
|
|
1476
1556
|
};
|
|
1477
|
-
return /* @__PURE__ */
|
|
1557
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles18.wrapper, style], accessibilityLabel }, label || showValue ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles18.header }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles18.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles18.valueText, { color: colors.mutedForeground }], allowFontScaling: true }, formatValue2(value)) : null) : null, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: disabled ? styles18.disabled : void 0 }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1478
1558
|
RNSlider__default.default,
|
|
1479
1559
|
{
|
|
1480
1560
|
value,
|
|
@@ -1494,7 +1574,7 @@ function Slider({
|
|
|
1494
1574
|
}
|
|
1495
1575
|
var styles18 = reactNative.StyleSheet.create({
|
|
1496
1576
|
wrapper: {
|
|
1497
|
-
gap: 8
|
|
1577
|
+
gap: vs(8)
|
|
1498
1578
|
},
|
|
1499
1579
|
header: {
|
|
1500
1580
|
flexDirection: "row",
|
|
@@ -1502,16 +1582,16 @@ var styles18 = reactNative.StyleSheet.create({
|
|
|
1502
1582
|
alignItems: "center"
|
|
1503
1583
|
},
|
|
1504
1584
|
label: {
|
|
1505
|
-
fontSize: 15,
|
|
1585
|
+
fontSize: ms(15),
|
|
1506
1586
|
fontWeight: "500"
|
|
1507
1587
|
},
|
|
1508
1588
|
valueText: {
|
|
1509
|
-
fontSize: 14,
|
|
1589
|
+
fontSize: ms(14),
|
|
1510
1590
|
fontWeight: "500"
|
|
1511
1591
|
},
|
|
1512
1592
|
slider: {
|
|
1513
1593
|
width: "100%",
|
|
1514
|
-
height: 40
|
|
1594
|
+
height: vs(40)
|
|
1515
1595
|
},
|
|
1516
1596
|
disabled: {
|
|
1517
1597
|
opacity: 0.45
|
|
@@ -1527,16 +1607,16 @@ function Sheet({
|
|
|
1527
1607
|
style
|
|
1528
1608
|
}) {
|
|
1529
1609
|
const { colors } = useTheme();
|
|
1530
|
-
const ref =
|
|
1531
|
-
|
|
1610
|
+
const ref = React24.useRef(null);
|
|
1611
|
+
React24.useEffect(() => {
|
|
1532
1612
|
if (open) {
|
|
1533
|
-
|
|
1613
|
+
impactLight();
|
|
1534
1614
|
ref.current?.present();
|
|
1535
1615
|
} else {
|
|
1536
1616
|
ref.current?.dismiss();
|
|
1537
1617
|
}
|
|
1538
1618
|
}, [open]);
|
|
1539
|
-
const renderBackdrop = (props) => /* @__PURE__ */
|
|
1619
|
+
const renderBackdrop = (props) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1540
1620
|
bottomSheet.BottomSheetBackdrop,
|
|
1541
1621
|
{
|
|
1542
1622
|
...props,
|
|
@@ -1545,7 +1625,7 @@ function Sheet({
|
|
|
1545
1625
|
pressBehavior: "close"
|
|
1546
1626
|
}
|
|
1547
1627
|
);
|
|
1548
|
-
return /* @__PURE__ */
|
|
1628
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1549
1629
|
bottomSheet.BottomSheetModal,
|
|
1550
1630
|
{
|
|
1551
1631
|
ref,
|
|
@@ -1556,39 +1636,39 @@ function Sheet({
|
|
|
1556
1636
|
handleIndicatorStyle: [styles19.handle, { backgroundColor: colors.border }],
|
|
1557
1637
|
enablePanDownToClose: true
|
|
1558
1638
|
},
|
|
1559
|
-
/* @__PURE__ */
|
|
1639
|
+
/* @__PURE__ */ React24__default.default.createElement(bottomSheet.BottomSheetView, { style: [styles19.content, style] }, title || description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles19.header }, title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles19.title, { color: colors.cardForeground }] }, title) : null, description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles19.description, { color: colors.mutedForeground }] }, description) : null) : null, children)
|
|
1560
1640
|
);
|
|
1561
1641
|
}
|
|
1562
1642
|
var styles19 = reactNative.StyleSheet.create({
|
|
1563
1643
|
background: {
|
|
1564
|
-
borderTopLeftRadius: 16,
|
|
1565
|
-
borderTopRightRadius: 16
|
|
1644
|
+
borderTopLeftRadius: ms(16),
|
|
1645
|
+
borderTopRightRadius: ms(16)
|
|
1566
1646
|
},
|
|
1567
1647
|
handle: {
|
|
1568
|
-
width: 36,
|
|
1569
|
-
height: 4,
|
|
1570
|
-
borderRadius: 2
|
|
1648
|
+
width: s(36),
|
|
1649
|
+
height: vs(4),
|
|
1650
|
+
borderRadius: ms(2)
|
|
1571
1651
|
},
|
|
1572
1652
|
content: {
|
|
1573
|
-
paddingHorizontal: 24,
|
|
1574
|
-
paddingBottom: 32
|
|
1653
|
+
paddingHorizontal: s(24),
|
|
1654
|
+
paddingBottom: vs(32)
|
|
1575
1655
|
},
|
|
1576
1656
|
header: {
|
|
1577
|
-
gap: 8,
|
|
1578
|
-
marginBottom: 16
|
|
1657
|
+
gap: vs(8),
|
|
1658
|
+
marginBottom: vs(16)
|
|
1579
1659
|
},
|
|
1580
1660
|
title: {
|
|
1581
|
-
fontSize: 18,
|
|
1661
|
+
fontSize: ms(18),
|
|
1582
1662
|
fontWeight: "600"
|
|
1583
1663
|
},
|
|
1584
1664
|
description: {
|
|
1585
|
-
fontSize: 14,
|
|
1586
|
-
lineHeight: 20
|
|
1665
|
+
fontSize: ms(14),
|
|
1666
|
+
lineHeight: mvs(20)
|
|
1587
1667
|
}
|
|
1588
1668
|
});
|
|
1589
1669
|
var isIOS = reactNative.Platform.OS === "ios";
|
|
1590
1670
|
var isAndroid = reactNative.Platform.OS === "android";
|
|
1591
|
-
var
|
|
1671
|
+
var isWeb2 = reactNative.Platform.OS === "web";
|
|
1592
1672
|
function Select({
|
|
1593
1673
|
options,
|
|
1594
1674
|
value,
|
|
@@ -1600,21 +1680,21 @@ function Select({
|
|
|
1600
1680
|
style
|
|
1601
1681
|
}) {
|
|
1602
1682
|
const { colors } = useTheme();
|
|
1603
|
-
const
|
|
1604
|
-
const [pickerVisible, setPickerVisible] =
|
|
1605
|
-
const [pendingValue, setPendingValue] =
|
|
1606
|
-
const pickerRef =
|
|
1683
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1684
|
+
const [pickerVisible, setPickerVisible] = React24.useState(false);
|
|
1685
|
+
const [pendingValue, setPendingValue] = React24.useState(value);
|
|
1686
|
+
const pickerRef = React24.useRef(null);
|
|
1607
1687
|
const selected = options.find((o) => o.value === value);
|
|
1608
1688
|
const handlePressIn = () => {
|
|
1609
1689
|
if (disabled) return;
|
|
1610
|
-
reactNative.Animated.spring(
|
|
1690
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: true, speed: 40, bounciness: 0 }).start();
|
|
1611
1691
|
};
|
|
1612
1692
|
const handlePressOut = () => {
|
|
1613
|
-
reactNative.Animated.spring(
|
|
1693
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: true, speed: 40, bounciness: 4 }).start();
|
|
1614
1694
|
};
|
|
1615
1695
|
const handleOpen = () => {
|
|
1616
1696
|
if (disabled) return;
|
|
1617
|
-
|
|
1697
|
+
selectionAsync();
|
|
1618
1698
|
if (isIOS) {
|
|
1619
1699
|
setPendingValue(value);
|
|
1620
1700
|
setPickerVisible(true);
|
|
@@ -1627,12 +1707,12 @@ function Select({
|
|
|
1627
1707
|
};
|
|
1628
1708
|
const handleConfirm = () => {
|
|
1629
1709
|
if (pendingValue !== void 0 && pendingValue !== "") {
|
|
1630
|
-
|
|
1710
|
+
selectionAsync();
|
|
1631
1711
|
onValueChange?.(pendingValue);
|
|
1632
1712
|
}
|
|
1633
1713
|
setPickerVisible(false);
|
|
1634
1714
|
};
|
|
1635
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.container, style] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.label, { color: colors.foreground }] }, label) : null, !isWeb2 ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }], opacity: disabled ? 0.45 : 1 } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1636
1716
|
reactNative.TouchableOpacity,
|
|
1637
1717
|
{
|
|
1638
1718
|
style: [
|
|
@@ -1648,7 +1728,7 @@ function Select({
|
|
|
1648
1728
|
activeOpacity: 1,
|
|
1649
1729
|
touchSoundDisabled: true
|
|
1650
1730
|
},
|
|
1651
|
-
/* @__PURE__ */
|
|
1731
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1652
1732
|
reactNative.Text,
|
|
1653
1733
|
{
|
|
1654
1734
|
style: [
|
|
@@ -1660,8 +1740,8 @@ function Select({
|
|
|
1660
1740
|
},
|
|
1661
1741
|
selected?.label ?? placeholder
|
|
1662
1742
|
),
|
|
1663
|
-
/* @__PURE__ */
|
|
1664
|
-
)) : null, isIOS ? /* @__PURE__ */
|
|
1743
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-down", size: 20, color: colors.mutedForeground })
|
|
1744
|
+
)) : null, isIOS ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1665
1745
|
reactNative.Modal,
|
|
1666
1746
|
{
|
|
1667
1747
|
visible: pickerVisible,
|
|
@@ -1669,16 +1749,16 @@ function Select({
|
|
|
1669
1749
|
animationType: "slide",
|
|
1670
1750
|
onRequestClose: handleDismiss
|
|
1671
1751
|
},
|
|
1672
|
-
/* @__PURE__ */
|
|
1673
|
-
/* @__PURE__ */
|
|
1752
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { style: styles20.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
|
|
1753
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, null), /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: handleConfirm, style: styles20.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React24__default.default.createElement(
|
|
1674
1754
|
picker.Picker,
|
|
1675
1755
|
{
|
|
1676
1756
|
selectedValue: pendingValue ?? "",
|
|
1677
1757
|
onValueChange: (val) => setPendingValue(val),
|
|
1678
1758
|
itemStyle: { color: colors.foreground }
|
|
1679
1759
|
},
|
|
1680
|
-
!value ? /* @__PURE__ */
|
|
1681
|
-
options.map((o) => /* @__PURE__ */
|
|
1760
|
+
!value ? /* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", color: colors.mutedForeground, enabled: false }) : null,
|
|
1761
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1682
1762
|
picker.Picker.Item,
|
|
1683
1763
|
{
|
|
1684
1764
|
key: o.value,
|
|
@@ -1689,14 +1769,14 @@ function Select({
|
|
|
1689
1769
|
}
|
|
1690
1770
|
))
|
|
1691
1771
|
))
|
|
1692
|
-
) : null, isAndroid ? /* @__PURE__ */
|
|
1772
|
+
) : null, isAndroid ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1693
1773
|
picker.Picker,
|
|
1694
1774
|
{
|
|
1695
1775
|
ref: pickerRef,
|
|
1696
1776
|
selectedValue: value ?? "",
|
|
1697
1777
|
onValueChange: (val) => {
|
|
1698
1778
|
if (val !== "") {
|
|
1699
|
-
|
|
1779
|
+
selectionAsync();
|
|
1700
1780
|
onValueChange?.(val);
|
|
1701
1781
|
}
|
|
1702
1782
|
},
|
|
@@ -1705,8 +1785,8 @@ function Select({
|
|
|
1705
1785
|
prompt: label,
|
|
1706
1786
|
style: styles20.androidHiddenPicker
|
|
1707
1787
|
},
|
|
1708
|
-
!value ? /* @__PURE__ */
|
|
1709
|
-
options.map((o) => /* @__PURE__ */
|
|
1788
|
+
!value ? /* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
|
|
1789
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1710
1790
|
picker.Picker.Item,
|
|
1711
1791
|
{
|
|
1712
1792
|
key: o.value,
|
|
@@ -1715,7 +1795,7 @@ function Select({
|
|
|
1715
1795
|
enabled: !o.disabled
|
|
1716
1796
|
}
|
|
1717
1797
|
))
|
|
1718
|
-
) : null,
|
|
1798
|
+
) : null, isWeb2 ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1719
1799
|
picker.Picker,
|
|
1720
1800
|
{
|
|
1721
1801
|
selectedValue: value ?? "",
|
|
@@ -1735,8 +1815,8 @@ function Select({
|
|
|
1735
1815
|
}
|
|
1736
1816
|
]
|
|
1737
1817
|
},
|
|
1738
|
-
/* @__PURE__ */
|
|
1739
|
-
options.map((o) => /* @__PURE__ */
|
|
1818
|
+
/* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }),
|
|
1819
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1740
1820
|
picker.Picker.Item,
|
|
1741
1821
|
{
|
|
1742
1822
|
key: o.value,
|
|
@@ -1745,14 +1825,14 @@ function Select({
|
|
|
1745
1825
|
enabled: !o.disabled
|
|
1746
1826
|
}
|
|
1747
1827
|
))
|
|
1748
|
-
) : null, error ? /* @__PURE__ */
|
|
1828
|
+
) : null, error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.helperText, { color: colors.destructive }] }, error) : null);
|
|
1749
1829
|
}
|
|
1750
1830
|
var styles20 = reactNative.StyleSheet.create({
|
|
1751
1831
|
container: {
|
|
1752
|
-
gap: 8
|
|
1832
|
+
gap: vs(8)
|
|
1753
1833
|
},
|
|
1754
1834
|
label: {
|
|
1755
|
-
fontSize: 15,
|
|
1835
|
+
fontSize: ms(15),
|
|
1756
1836
|
fontWeight: "500"
|
|
1757
1837
|
},
|
|
1758
1838
|
trigger: {
|
|
@@ -1760,9 +1840,9 @@ var styles20 = reactNative.StyleSheet.create({
|
|
|
1760
1840
|
alignItems: "center",
|
|
1761
1841
|
justifyContent: "space-between",
|
|
1762
1842
|
borderWidth: 1.5,
|
|
1763
|
-
borderRadius: 8,
|
|
1764
|
-
paddingHorizontal: 16,
|
|
1765
|
-
paddingVertical: 14,
|
|
1843
|
+
borderRadius: ms(8),
|
|
1844
|
+
paddingHorizontal: s(16),
|
|
1845
|
+
paddingVertical: vs(14),
|
|
1766
1846
|
shadowColor: "#000",
|
|
1767
1847
|
shadowOffset: { width: 0, height: 1 },
|
|
1768
1848
|
shadowOpacity: 0.04,
|
|
@@ -1770,41 +1850,41 @@ var styles20 = reactNative.StyleSheet.create({
|
|
|
1770
1850
|
elevation: 1
|
|
1771
1851
|
},
|
|
1772
1852
|
triggerText: {
|
|
1773
|
-
fontSize: 17,
|
|
1853
|
+
fontSize: ms(17),
|
|
1774
1854
|
flex: 1
|
|
1775
1855
|
},
|
|
1776
1856
|
chevron: {
|
|
1777
|
-
marginLeft: 8
|
|
1857
|
+
marginLeft: s(8)
|
|
1778
1858
|
},
|
|
1779
1859
|
helperText: {
|
|
1780
|
-
fontSize: 13
|
|
1860
|
+
fontSize: ms(13)
|
|
1781
1861
|
},
|
|
1782
1862
|
iosBackdrop: {
|
|
1783
1863
|
flex: 1,
|
|
1784
1864
|
backgroundColor: "rgba(0,0,0,0.4)"
|
|
1785
1865
|
},
|
|
1786
1866
|
iosSheet: {
|
|
1787
|
-
borderTopLeftRadius: 16,
|
|
1788
|
-
borderTopRightRadius: 16,
|
|
1789
|
-
paddingBottom: 32
|
|
1867
|
+
borderTopLeftRadius: ms(16),
|
|
1868
|
+
borderTopRightRadius: ms(16),
|
|
1869
|
+
paddingBottom: vs(32)
|
|
1790
1870
|
},
|
|
1791
1871
|
iosToolbar: {
|
|
1792
1872
|
flexDirection: "row",
|
|
1793
1873
|
alignItems: "center",
|
|
1794
1874
|
justifyContent: "space-between",
|
|
1795
|
-
paddingHorizontal: 16,
|
|
1796
|
-
paddingVertical: 12,
|
|
1875
|
+
paddingHorizontal: s(16),
|
|
1876
|
+
paddingVertical: vs(12),
|
|
1797
1877
|
borderBottomWidth: 1
|
|
1798
1878
|
},
|
|
1799
1879
|
iosToolbarTitle: {
|
|
1800
|
-
fontSize: 17,
|
|
1880
|
+
fontSize: ms(17),
|
|
1801
1881
|
fontWeight: "600"
|
|
1802
1882
|
},
|
|
1803
1883
|
iosDoneBtn: {
|
|
1804
|
-
padding: 4
|
|
1884
|
+
padding: s(4)
|
|
1805
1885
|
},
|
|
1806
1886
|
iosDoneBtnText: {
|
|
1807
|
-
fontSize: 17,
|
|
1887
|
+
fontSize: ms(17),
|
|
1808
1888
|
fontWeight: "600"
|
|
1809
1889
|
},
|
|
1810
1890
|
androidHiddenPicker: {
|
|
@@ -1814,34 +1894,34 @@ var styles20 = reactNative.StyleSheet.create({
|
|
|
1814
1894
|
},
|
|
1815
1895
|
webPicker: {
|
|
1816
1896
|
borderWidth: 1.5,
|
|
1817
|
-
borderRadius: 8,
|
|
1818
|
-
paddingHorizontal: 16,
|
|
1819
|
-
paddingVertical: 14,
|
|
1820
|
-
fontSize: 17
|
|
1897
|
+
borderRadius: ms(8),
|
|
1898
|
+
paddingHorizontal: s(16),
|
|
1899
|
+
paddingVertical: vs(14),
|
|
1900
|
+
fontSize: ms(17)
|
|
1821
1901
|
}
|
|
1822
1902
|
});
|
|
1823
|
-
var ToastContext =
|
|
1903
|
+
var ToastContext = React24.createContext({
|
|
1824
1904
|
toast: () => {
|
|
1825
1905
|
},
|
|
1826
1906
|
dismiss: () => {
|
|
1827
1907
|
}
|
|
1828
1908
|
});
|
|
1829
1909
|
function useToast() {
|
|
1830
|
-
return
|
|
1910
|
+
return React24.useContext(ToastContext);
|
|
1831
1911
|
}
|
|
1832
1912
|
var SWIPE_THRESHOLD = 80;
|
|
1833
1913
|
var VELOCITY_THRESHOLD = 800;
|
|
1834
1914
|
function ToastNotification({ item, onDismiss }) {
|
|
1835
1915
|
const { colors } = useTheme();
|
|
1836
|
-
const translateY =
|
|
1837
|
-
const translateX =
|
|
1838
|
-
const opacity =
|
|
1839
|
-
|
|
1840
|
-
translateY.value =
|
|
1841
|
-
opacity.value =
|
|
1916
|
+
const translateY = Animated10.useSharedValue(-80);
|
|
1917
|
+
const translateX = Animated10.useSharedValue(0);
|
|
1918
|
+
const opacity = Animated10.useSharedValue(0);
|
|
1919
|
+
React24.useEffect(() => {
|
|
1920
|
+
translateY.value = Animated10.withTiming(0, { duration: 120, easing: Animated10.Easing.out(Animated10.Easing.exp) });
|
|
1921
|
+
opacity.value = Animated10.withTiming(1, { duration: 100 });
|
|
1842
1922
|
const timer = setTimeout(() => {
|
|
1843
|
-
translateY.value =
|
|
1844
|
-
opacity.value =
|
|
1923
|
+
translateY.value = Animated10.withTiming(-80, { duration: 200 });
|
|
1924
|
+
opacity.value = Animated10.withTiming(0, { duration: 200 }, (done) => {
|
|
1845
1925
|
if (done) reactNativeWorklets.scheduleOnRN(onDismiss);
|
|
1846
1926
|
});
|
|
1847
1927
|
}, item.duration ?? 3e3);
|
|
@@ -1853,15 +1933,15 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1853
1933
|
const shouldDismiss = Math.abs(translateX.value) > SWIPE_THRESHOLD || Math.abs(e.velocityX) > VELOCITY_THRESHOLD;
|
|
1854
1934
|
if (shouldDismiss) {
|
|
1855
1935
|
const direction = translateX.value > 0 ? 1 : -1;
|
|
1856
|
-
translateX.value =
|
|
1936
|
+
translateX.value = Animated10.withTiming(direction * 500, { duration: 200 }, (done) => {
|
|
1857
1937
|
if (done) reactNativeWorklets.scheduleOnRN(onDismiss);
|
|
1858
1938
|
});
|
|
1859
|
-
opacity.value =
|
|
1939
|
+
opacity.value = Animated10.withTiming(0, { duration: 150 });
|
|
1860
1940
|
} else {
|
|
1861
|
-
translateX.value =
|
|
1941
|
+
translateX.value = Animated10.withSpring(0, { damping: 20, stiffness: 300 });
|
|
1862
1942
|
}
|
|
1863
1943
|
});
|
|
1864
|
-
const animatedStyle =
|
|
1944
|
+
const animatedStyle = Animated10.useAnimatedStyle(() => ({
|
|
1865
1945
|
opacity: opacity.value,
|
|
1866
1946
|
transform: [{ translateY: translateY.value }, { translateX: translateX.value }]
|
|
1867
1947
|
}));
|
|
@@ -1875,49 +1955,49 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1875
1955
|
destructive: colors.destructiveForeground,
|
|
1876
1956
|
success: colors.successForeground
|
|
1877
1957
|
}[item.variant ?? "default"];
|
|
1878
|
-
const defaultIcon = item.variant === "success" ? /* @__PURE__ */
|
|
1879
|
-
const leftIcon = item.icon ?? defaultIcon;
|
|
1880
|
-
return /* @__PURE__ */
|
|
1958
|
+
const defaultIcon = item.variant === "success" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 22, color: textColor }) : item.variant === "destructive" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 24, color: textColor }) : /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 22, color: textColor });
|
|
1959
|
+
const leftIcon = item.iconName ? renderIcon(item.iconName, 22, item.iconColor ?? textColor) : item.icon ?? defaultIcon;
|
|
1960
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: [styles21.toast, { backgroundColor: bgColor }, animatedStyle] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles21.leftIconContainer }, leftIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles21.toastContent }, item.title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles21.toastTitle, { color: textColor }] }, item.title) : null, item.description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles21.toastDescription, { color: textColor, opacity: 0.85 }] }, item.description) : null), /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: onDismiss, style: styles21.dismissButton, touchSoundDisabled: true }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.AntDesign, { name: "close-circle", size: 18, color: textColor }))));
|
|
1881
1961
|
}
|
|
1882
1962
|
function ToastProvider({ children }) {
|
|
1883
|
-
const [toasts, setToasts] =
|
|
1963
|
+
const [toasts, setToasts] = React24.useState([]);
|
|
1884
1964
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
1885
|
-
const toast =
|
|
1965
|
+
const toast = React24.useCallback((item) => {
|
|
1886
1966
|
const id = Math.random().toString(36).slice(2);
|
|
1887
1967
|
if (item.variant === "success") {
|
|
1888
|
-
|
|
1968
|
+
notificationSuccess();
|
|
1889
1969
|
} else if (item.variant === "destructive") {
|
|
1890
|
-
|
|
1970
|
+
notificationError();
|
|
1891
1971
|
} else {
|
|
1892
|
-
|
|
1972
|
+
impactLight();
|
|
1893
1973
|
}
|
|
1894
1974
|
setToasts((prev) => [{ ...item, id }, ...prev].slice(0, 3));
|
|
1895
1975
|
}, []);
|
|
1896
|
-
const dismiss =
|
|
1976
|
+
const dismiss = React24.useCallback((id) => {
|
|
1897
1977
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
1898
1978
|
}, []);
|
|
1899
|
-
return /* @__PURE__ */
|
|
1979
|
+
return /* @__PURE__ */ React24__default.default.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles21.container, reactNative.Platform.OS === "web" && styles21.containerWeb, { top: insets.top + 8 }], pointerEvents: "box-none" }, toasts.map((item) => /* @__PURE__ */ React24__default.default.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
|
|
1900
1980
|
}
|
|
1901
1981
|
var styles21 = reactNative.StyleSheet.create({
|
|
1902
1982
|
container: {
|
|
1903
1983
|
position: "absolute",
|
|
1904
|
-
left: 16,
|
|
1905
|
-
right: 16,
|
|
1906
|
-
gap: 8,
|
|
1984
|
+
left: s(16),
|
|
1985
|
+
right: s(16),
|
|
1986
|
+
gap: vs(8),
|
|
1907
1987
|
zIndex: 9999
|
|
1908
1988
|
},
|
|
1909
1989
|
containerWeb: {
|
|
1910
1990
|
left: void 0,
|
|
1911
1991
|
right: void 0,
|
|
1912
1992
|
alignSelf: "center",
|
|
1913
|
-
width: 400
|
|
1993
|
+
width: s(400)
|
|
1914
1994
|
},
|
|
1915
1995
|
toast: {
|
|
1916
1996
|
flexDirection: "row",
|
|
1917
1997
|
alignItems: "center",
|
|
1918
|
-
borderRadius: 16,
|
|
1919
|
-
paddingHorizontal: 20,
|
|
1920
|
-
paddingVertical: 14,
|
|
1998
|
+
borderRadius: ms(16),
|
|
1999
|
+
paddingHorizontal: s(20),
|
|
2000
|
+
paddingVertical: vs(14),
|
|
1921
2001
|
shadowColor: "#000",
|
|
1922
2002
|
shadowOffset: { width: 0, height: 4 },
|
|
1923
2003
|
shadowOpacity: 0.15,
|
|
@@ -1926,24 +2006,24 @@ var styles21 = reactNative.StyleSheet.create({
|
|
|
1926
2006
|
},
|
|
1927
2007
|
toastContent: {
|
|
1928
2008
|
flex: 1,
|
|
1929
|
-
gap: 4
|
|
2009
|
+
gap: vs(4)
|
|
1930
2010
|
},
|
|
1931
2011
|
leftIconContainer: {
|
|
1932
|
-
width: 40,
|
|
2012
|
+
width: s(40),
|
|
1933
2013
|
alignItems: "center",
|
|
1934
2014
|
justifyContent: "center",
|
|
1935
|
-
marginRight: 8
|
|
2015
|
+
marginRight: s(8)
|
|
1936
2016
|
},
|
|
1937
2017
|
toastTitle: {
|
|
1938
|
-
fontSize: 15,
|
|
2018
|
+
fontSize: ms(15),
|
|
1939
2019
|
fontWeight: "600"
|
|
1940
2020
|
},
|
|
1941
2021
|
toastDescription: {
|
|
1942
|
-
fontSize: 14
|
|
2022
|
+
fontSize: ms(14)
|
|
1943
2023
|
},
|
|
1944
2024
|
dismissButton: {
|
|
1945
|
-
padding: 8,
|
|
1946
|
-
marginLeft: 4
|
|
2025
|
+
padding: s(8),
|
|
2026
|
+
marginLeft: s(4)
|
|
1947
2027
|
}
|
|
1948
2028
|
});
|
|
1949
2029
|
function formatCurrency(raw, separator) {
|
|
@@ -1975,8 +2055,8 @@ function CurrencyInput({
|
|
|
1975
2055
|
const raw = parseFloat(formatted.replace(separatorRegex, "") || "0");
|
|
1976
2056
|
onChangeValue?.(isNaN(raw) ? 0 : raw);
|
|
1977
2057
|
};
|
|
1978
|
-
const inputStyle = size === "large" ? { fontSize: 36 } : {};
|
|
1979
|
-
return /* @__PURE__ */
|
|
2058
|
+
const inputStyle = size === "large" ? { fontSize: ms(36) } : {};
|
|
2059
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1980
2060
|
Input,
|
|
1981
2061
|
{
|
|
1982
2062
|
value,
|
|
@@ -2007,21 +2087,25 @@ function formatValue(value, prefix, showDecimals) {
|
|
|
2007
2087
|
function CurrencyDisplay({ value, prefix = "$", showDecimals = false, textColor, style }) {
|
|
2008
2088
|
const { colors } = useTheme();
|
|
2009
2089
|
const formatted = formatValue(value, prefix, showDecimals);
|
|
2010
|
-
return /* @__PURE__ */
|
|
2090
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles22.container, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles22.amount, { color: textColor ?? colors.foreground }], allowFontScaling: true }, formatted));
|
|
2011
2091
|
}
|
|
2012
2092
|
var styles22 = reactNative.StyleSheet.create({
|
|
2013
2093
|
container: {},
|
|
2014
2094
|
amount: {
|
|
2015
|
-
fontSize: 56,
|
|
2095
|
+
fontSize: ms(56),
|
|
2016
2096
|
fontWeight: "700"
|
|
2017
2097
|
}
|
|
2018
2098
|
});
|
|
2019
|
-
var
|
|
2099
|
+
var nativeDriver7 = reactNative.Platform.OS !== "web";
|
|
2020
2100
|
function ListItem({
|
|
2021
2101
|
leftRender,
|
|
2022
2102
|
rightRender,
|
|
2023
2103
|
trailing,
|
|
2024
2104
|
icon,
|
|
2105
|
+
leftIcon,
|
|
2106
|
+
rightIcon,
|
|
2107
|
+
leftIconColor,
|
|
2108
|
+
rightIconColor,
|
|
2025
2109
|
title,
|
|
2026
2110
|
subtitle,
|
|
2027
2111
|
caption,
|
|
@@ -2036,30 +2120,30 @@ function ListItem({
|
|
|
2036
2120
|
captionStyle
|
|
2037
2121
|
}) {
|
|
2038
2122
|
const { colors } = useTheme();
|
|
2039
|
-
const
|
|
2123
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
2040
2124
|
const handlePressIn = () => {
|
|
2041
2125
|
if (!onPress || disabled) return;
|
|
2042
|
-
reactNative.Animated.spring(
|
|
2126
|
+
reactNative.Animated.spring(scale2, {
|
|
2043
2127
|
toValue: 0.97,
|
|
2044
|
-
useNativeDriver:
|
|
2128
|
+
useNativeDriver: nativeDriver7,
|
|
2045
2129
|
speed: 40,
|
|
2046
2130
|
bounciness: 0
|
|
2047
2131
|
}).start();
|
|
2048
2132
|
};
|
|
2049
2133
|
const handlePressOut = () => {
|
|
2050
|
-
reactNative.Animated.spring(
|
|
2134
|
+
reactNative.Animated.spring(scale2, {
|
|
2051
2135
|
toValue: 1,
|
|
2052
|
-
useNativeDriver:
|
|
2136
|
+
useNativeDriver: nativeDriver7,
|
|
2053
2137
|
speed: 40,
|
|
2054
2138
|
bounciness: 4
|
|
2055
2139
|
}).start();
|
|
2056
2140
|
};
|
|
2057
2141
|
const handlePress = () => {
|
|
2058
|
-
|
|
2142
|
+
selectionAsync();
|
|
2059
2143
|
onPress?.();
|
|
2060
2144
|
};
|
|
2061
|
-
const effectiveLeft = leftRender ?? icon;
|
|
2062
|
-
const effectiveRight = rightRender ?? trailing;
|
|
2145
|
+
const effectiveLeft = leftIcon ? renderIcon(leftIcon, 24, leftIconColor ?? colors.foreground) : leftRender ?? icon;
|
|
2146
|
+
const effectiveRight = rightIcon ? renderIcon(rightIcon, 24, rightIconColor ?? colors.mutedForeground) : rightRender ?? trailing;
|
|
2063
2147
|
const cardStyle = variant === "card" ? {
|
|
2064
2148
|
backgroundColor: colors.card,
|
|
2065
2149
|
borderRadius: 12,
|
|
@@ -2071,7 +2155,7 @@ function ListItem({
|
|
|
2071
2155
|
shadowRadius: 6,
|
|
2072
2156
|
elevation: 2
|
|
2073
2157
|
} : {};
|
|
2074
|
-
return /* @__PURE__ */
|
|
2158
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles23.disabled] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2075
2159
|
reactNative.TouchableOpacity,
|
|
2076
2160
|
{
|
|
2077
2161
|
style: [styles23.container, cardStyle, style],
|
|
@@ -2082,8 +2166,8 @@ function ListItem({
|
|
|
2082
2166
|
activeOpacity: 1,
|
|
2083
2167
|
touchSoundDisabled: true
|
|
2084
2168
|
},
|
|
2085
|
-
effectiveLeft ? /* @__PURE__ */
|
|
2086
|
-
/* @__PURE__ */
|
|
2169
|
+
effectiveLeft ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.leftContainer }, effectiveLeft) : null,
|
|
2170
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.content }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2087
2171
|
reactNative.Text,
|
|
2088
2172
|
{
|
|
2089
2173
|
style: [styles23.title, { color: colors.foreground }, titleStyle],
|
|
@@ -2091,7 +2175,7 @@ function ListItem({
|
|
|
2091
2175
|
allowFontScaling: true
|
|
2092
2176
|
},
|
|
2093
2177
|
title
|
|
2094
|
-
), subtitle ? /* @__PURE__ */
|
|
2178
|
+
), subtitle ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2095
2179
|
reactNative.Text,
|
|
2096
2180
|
{
|
|
2097
2181
|
style: [styles23.subtitle, { color: colors.mutedForeground }, subtitleStyle],
|
|
@@ -2099,7 +2183,7 @@ function ListItem({
|
|
|
2099
2183
|
allowFontScaling: true
|
|
2100
2184
|
},
|
|
2101
2185
|
subtitle
|
|
2102
|
-
) : null, caption ? /* @__PURE__ */
|
|
2186
|
+
) : null, caption ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2103
2187
|
reactNative.Text,
|
|
2104
2188
|
{
|
|
2105
2189
|
style: [styles23.caption, { color: colors.mutedForeground }, captionStyle],
|
|
@@ -2108,20 +2192,20 @@ function ListItem({
|
|
|
2108
2192
|
},
|
|
2109
2193
|
caption
|
|
2110
2194
|
) : null),
|
|
2111
|
-
effectiveRight !== void 0 ? /* @__PURE__ */
|
|
2195
|
+
effectiveRight !== void 0 ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2112
2196
|
reactNative.Text,
|
|
2113
2197
|
{
|
|
2114
2198
|
style: [styles23.rightText, { color: colors.mutedForeground }],
|
|
2115
2199
|
allowFontScaling: true
|
|
2116
2200
|
},
|
|
2117
2201
|
effectiveRight
|
|
2118
|
-
) : effectiveRight) : showChevron ? /* @__PURE__ */
|
|
2119
|
-
), showSeparator ? /* @__PURE__ */
|
|
2202
|
+
) : effectiveRight) : showChevron ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.mutedForeground }) : null
|
|
2203
|
+
), showSeparator ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2120
2204
|
reactNative.View,
|
|
2121
2205
|
{
|
|
2122
2206
|
style: [
|
|
2123
2207
|
styles23.separator,
|
|
2124
|
-
{ backgroundColor: colors.border, marginLeft: effectiveLeft ? 16 + 44 + 12 : 16 }
|
|
2208
|
+
{ backgroundColor: colors.border, marginLeft: effectiveLeft ? s(16) + s(44) + s(12) : s(16) }
|
|
2125
2209
|
]
|
|
2126
2210
|
}
|
|
2127
2211
|
) : null);
|
|
@@ -2130,63 +2214,63 @@ var styles23 = reactNative.StyleSheet.create({
|
|
|
2130
2214
|
container: {
|
|
2131
2215
|
flexDirection: "row",
|
|
2132
2216
|
alignItems: "center",
|
|
2133
|
-
paddingHorizontal: 16,
|
|
2134
|
-
paddingVertical: 14,
|
|
2135
|
-
gap: 12
|
|
2217
|
+
paddingHorizontal: s(16),
|
|
2218
|
+
paddingVertical: vs(14),
|
|
2219
|
+
gap: s(12)
|
|
2136
2220
|
},
|
|
2137
2221
|
leftContainer: {
|
|
2138
|
-
width: 44,
|
|
2139
|
-
height: 44,
|
|
2222
|
+
width: s(44),
|
|
2223
|
+
height: s(44),
|
|
2140
2224
|
alignItems: "center",
|
|
2141
2225
|
justifyContent: "center",
|
|
2142
2226
|
flexShrink: 0
|
|
2143
2227
|
},
|
|
2144
2228
|
content: {
|
|
2145
2229
|
flex: 1,
|
|
2146
|
-
gap: 4
|
|
2230
|
+
gap: vs(4)
|
|
2147
2231
|
},
|
|
2148
2232
|
title: {
|
|
2149
|
-
fontSize: 17,
|
|
2233
|
+
fontSize: ms(17),
|
|
2150
2234
|
fontWeight: "500",
|
|
2151
|
-
lineHeight: 24
|
|
2235
|
+
lineHeight: mvs(24)
|
|
2152
2236
|
},
|
|
2153
2237
|
subtitle: {
|
|
2154
|
-
fontSize: 14,
|
|
2238
|
+
fontSize: ms(14),
|
|
2155
2239
|
fontWeight: "400",
|
|
2156
|
-
lineHeight: 20
|
|
2240
|
+
lineHeight: mvs(20)
|
|
2157
2241
|
},
|
|
2158
2242
|
caption: {
|
|
2159
|
-
fontSize: 12,
|
|
2243
|
+
fontSize: ms(12),
|
|
2160
2244
|
fontWeight: "400",
|
|
2161
|
-
lineHeight: 16,
|
|
2245
|
+
lineHeight: mvs(16),
|
|
2162
2246
|
opacity: 0.7
|
|
2163
2247
|
},
|
|
2164
2248
|
rightContainer: {
|
|
2165
2249
|
alignItems: "flex-end",
|
|
2166
2250
|
justifyContent: "center",
|
|
2167
2251
|
flexShrink: 0,
|
|
2168
|
-
maxWidth: 160
|
|
2252
|
+
maxWidth: s(160)
|
|
2169
2253
|
},
|
|
2170
2254
|
rightText: {
|
|
2171
|
-
fontSize: 15
|
|
2255
|
+
fontSize: ms(15)
|
|
2172
2256
|
},
|
|
2173
2257
|
chevron: {
|
|
2174
|
-
marginLeft: 4
|
|
2258
|
+
marginLeft: s(4)
|
|
2175
2259
|
},
|
|
2176
2260
|
separator: {
|
|
2177
2261
|
height: reactNative.StyleSheet.hairlineWidth,
|
|
2178
|
-
marginRight: 16
|
|
2262
|
+
marginRight: s(16)
|
|
2179
2263
|
},
|
|
2180
2264
|
disabled: {
|
|
2181
2265
|
opacity: 0.45
|
|
2182
2266
|
}
|
|
2183
2267
|
});
|
|
2184
|
-
var
|
|
2268
|
+
var nativeDriver8 = reactNative.Platform.OS !== "web";
|
|
2185
2269
|
function Chip({ label, selected = false, onPress, style }) {
|
|
2186
2270
|
const { colors } = useTheme();
|
|
2187
|
-
const
|
|
2188
|
-
const pressAnim =
|
|
2189
|
-
|
|
2271
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
2272
|
+
const pressAnim = React24.useRef(new reactNative.Animated.Value(selected ? 1 : 0)).current;
|
|
2273
|
+
React24.useEffect(() => {
|
|
2190
2274
|
reactNative.Animated.timing(pressAnim, {
|
|
2191
2275
|
toValue: selected ? 1 : 0,
|
|
2192
2276
|
duration: 150,
|
|
@@ -2195,23 +2279,23 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2195
2279
|
}).start();
|
|
2196
2280
|
}, [selected, pressAnim]);
|
|
2197
2281
|
const handlePressIn = () => {
|
|
2198
|
-
reactNative.Animated.spring(
|
|
2282
|
+
reactNative.Animated.spring(scale2, {
|
|
2199
2283
|
toValue: 0.95,
|
|
2200
|
-
useNativeDriver:
|
|
2284
|
+
useNativeDriver: nativeDriver8,
|
|
2201
2285
|
speed: 40,
|
|
2202
2286
|
bounciness: 0
|
|
2203
2287
|
}).start();
|
|
2204
2288
|
};
|
|
2205
2289
|
const handlePressOut = () => {
|
|
2206
|
-
reactNative.Animated.spring(
|
|
2290
|
+
reactNative.Animated.spring(scale2, {
|
|
2207
2291
|
toValue: 1,
|
|
2208
|
-
useNativeDriver:
|
|
2292
|
+
useNativeDriver: nativeDriver8,
|
|
2209
2293
|
speed: 40,
|
|
2210
2294
|
bounciness: 4
|
|
2211
2295
|
}).start();
|
|
2212
2296
|
};
|
|
2213
2297
|
const handlePress = () => {
|
|
2214
|
-
|
|
2298
|
+
selectionAsync();
|
|
2215
2299
|
onPress?.();
|
|
2216
2300
|
};
|
|
2217
2301
|
const backgroundColor = pressAnim.interpolate({
|
|
@@ -2226,7 +2310,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2226
2310
|
inputRange: [0, 1],
|
|
2227
2311
|
outputRange: [colors.border, colors.primary]
|
|
2228
2312
|
});
|
|
2229
|
-
return /* @__PURE__ */
|
|
2313
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles24.wrapper, { transform: [{ scale: scale2 }] }, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2230
2314
|
reactNative.TouchableOpacity,
|
|
2231
2315
|
{
|
|
2232
2316
|
onPress: handlePress,
|
|
@@ -2235,7 +2319,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2235
2319
|
activeOpacity: 1,
|
|
2236
2320
|
touchSoundDisabled: true
|
|
2237
2321
|
},
|
|
2238
|
-
/* @__PURE__ */
|
|
2322
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles24.chip, { backgroundColor, borderColor }] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.Text, { style: [styles24.label, { color: textColor }], allowFontScaling: true }, label))
|
|
2239
2323
|
));
|
|
2240
2324
|
}
|
|
2241
2325
|
function ChipGroup({ options, value, onValueChange, multiSelect = false, style }) {
|
|
@@ -2260,7 +2344,7 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
2260
2344
|
}
|
|
2261
2345
|
return optionValue === value;
|
|
2262
2346
|
};
|
|
2263
|
-
return /* @__PURE__ */
|
|
2347
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles24.group, style] }, options.map((opt) => /* @__PURE__ */ React24__default.default.createElement(
|
|
2264
2348
|
Chip,
|
|
2265
2349
|
{
|
|
2266
2350
|
key: opt.value,
|
|
@@ -2274,21 +2358,21 @@ var styles24 = reactNative.StyleSheet.create({
|
|
|
2274
2358
|
wrapper: {},
|
|
2275
2359
|
chip: {
|
|
2276
2360
|
borderRadius: 999,
|
|
2277
|
-
paddingHorizontal: 14,
|
|
2278
|
-
paddingVertical: 8,
|
|
2361
|
+
paddingHorizontal: s(14),
|
|
2362
|
+
paddingVertical: vs(8),
|
|
2279
2363
|
borderWidth: 1.5,
|
|
2280
2364
|
alignItems: "center",
|
|
2281
2365
|
justifyContent: "center"
|
|
2282
2366
|
},
|
|
2283
2367
|
label: {
|
|
2284
|
-
fontSize: 14,
|
|
2368
|
+
fontSize: ms(14),
|
|
2285
2369
|
fontWeight: "500",
|
|
2286
|
-
lineHeight: 20
|
|
2370
|
+
lineHeight: mvs(20)
|
|
2287
2371
|
},
|
|
2288
2372
|
group: {
|
|
2289
2373
|
flexDirection: "row",
|
|
2290
2374
|
flexWrap: "wrap",
|
|
2291
|
-
gap: 8
|
|
2375
|
+
gap: s(8)
|
|
2292
2376
|
}
|
|
2293
2377
|
});
|
|
2294
2378
|
function ConfirmDialog({
|
|
@@ -2302,15 +2386,15 @@ function ConfirmDialog({
|
|
|
2302
2386
|
onCancel
|
|
2303
2387
|
}) {
|
|
2304
2388
|
const { colors } = useTheme();
|
|
2305
|
-
return /* @__PURE__ */
|
|
2389
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Modal, { visible, transparent: true, animationType: "fade", onRequestClose: onCancel }, /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { style: styles25.overlay, activeOpacity: 1, onPress: onCancel }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2306
2390
|
reactNative.View,
|
|
2307
2391
|
{
|
|
2308
2392
|
style: [styles25.dialog, { backgroundColor: colors.card }],
|
|
2309
2393
|
onStartShouldSetResponder: () => true
|
|
2310
2394
|
},
|
|
2311
|
-
/* @__PURE__ */
|
|
2312
|
-
description ? /* @__PURE__ */
|
|
2313
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles25.title, { color: colors.cardForeground }], allowFontScaling: true }, title),
|
|
2396
|
+
description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles25.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null,
|
|
2397
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles25.actions }, /* @__PURE__ */ React24__default.default.createElement(Button, { label: cancelLabel, variant: "outline", fullWidth: true, onPress: onCancel }), /* @__PURE__ */ React24__default.default.createElement(Button, { label: confirmLabel, variant: confirmVariant, fullWidth: true, onPress: onConfirm }))
|
|
2314
2398
|
)));
|
|
2315
2399
|
}
|
|
2316
2400
|
var styles25 = reactNative.StyleSheet.create({
|
|
@@ -2319,14 +2403,14 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
2319
2403
|
backgroundColor: "rgba(0,0,0,0.5)",
|
|
2320
2404
|
justifyContent: "center",
|
|
2321
2405
|
alignItems: "center",
|
|
2322
|
-
padding: 24
|
|
2406
|
+
padding: s(24)
|
|
2323
2407
|
},
|
|
2324
2408
|
dialog: {
|
|
2325
2409
|
width: "100%",
|
|
2326
|
-
maxWidth: 400,
|
|
2327
|
-
borderRadius: 16,
|
|
2328
|
-
padding: 24,
|
|
2329
|
-
gap: 12,
|
|
2410
|
+
maxWidth: s(400),
|
|
2411
|
+
borderRadius: ms(16),
|
|
2412
|
+
padding: s(24),
|
|
2413
|
+
gap: vs(12),
|
|
2330
2414
|
shadowColor: "#000",
|
|
2331
2415
|
shadowOffset: { width: 0, height: 8 },
|
|
2332
2416
|
shadowOpacity: 0.15,
|
|
@@ -2334,38 +2418,38 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
2334
2418
|
elevation: 8
|
|
2335
2419
|
},
|
|
2336
2420
|
title: {
|
|
2337
|
-
fontSize: 18,
|
|
2421
|
+
fontSize: ms(18),
|
|
2338
2422
|
fontWeight: "600",
|
|
2339
|
-
lineHeight: 26
|
|
2423
|
+
lineHeight: mvs(26)
|
|
2340
2424
|
},
|
|
2341
2425
|
description: {
|
|
2342
|
-
fontSize: 15,
|
|
2343
|
-
lineHeight: 22
|
|
2426
|
+
fontSize: ms(15),
|
|
2427
|
+
lineHeight: mvs(22)
|
|
2344
2428
|
},
|
|
2345
2429
|
actions: {
|
|
2346
|
-
gap: 10,
|
|
2347
|
-
marginTop: 8
|
|
2430
|
+
gap: vs(10),
|
|
2431
|
+
marginTop: vs(8)
|
|
2348
2432
|
}
|
|
2349
2433
|
});
|
|
2350
2434
|
function LabelValue({ label, value, style }) {
|
|
2351
2435
|
const { colors } = useTheme();
|
|
2352
|
-
return /* @__PURE__ */
|
|
2436
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles26.container, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles26.label, { color: colors.mutedForeground }], allowFontScaling: true }, label), typeof value === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles26.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
|
|
2353
2437
|
}
|
|
2354
2438
|
var styles26 = reactNative.StyleSheet.create({
|
|
2355
2439
|
container: {
|
|
2356
2440
|
flexDirection: "row",
|
|
2357
2441
|
justifyContent: "space-between",
|
|
2358
2442
|
alignItems: "center",
|
|
2359
|
-
gap: 12
|
|
2443
|
+
gap: s(12)
|
|
2360
2444
|
},
|
|
2361
2445
|
label: {
|
|
2362
|
-
fontSize: 13,
|
|
2363
|
-
lineHeight: 18
|
|
2446
|
+
fontSize: ms(13),
|
|
2447
|
+
lineHeight: mvs(18)
|
|
2364
2448
|
},
|
|
2365
2449
|
value: {
|
|
2366
|
-
fontSize: 15,
|
|
2450
|
+
fontSize: ms(15),
|
|
2367
2451
|
fontWeight: "500",
|
|
2368
|
-
lineHeight: 22,
|
|
2452
|
+
lineHeight: mvs(22),
|
|
2369
2453
|
textAlign: "right"
|
|
2370
2454
|
}
|
|
2371
2455
|
});
|
|
@@ -2386,7 +2470,7 @@ var MONTH_NAMES = [
|
|
|
2386
2470
|
function MonthPicker({ value, onChange, style }) {
|
|
2387
2471
|
const { colors } = useTheme();
|
|
2388
2472
|
const handlePrev = () => {
|
|
2389
|
-
|
|
2473
|
+
selectionAsync();
|
|
2390
2474
|
if (value.month === 1) {
|
|
2391
2475
|
onChange({ month: 12, year: value.year - 1 });
|
|
2392
2476
|
} else {
|
|
@@ -2394,14 +2478,14 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2394
2478
|
}
|
|
2395
2479
|
};
|
|
2396
2480
|
const handleNext = () => {
|
|
2397
|
-
|
|
2481
|
+
selectionAsync();
|
|
2398
2482
|
if (value.month === 12) {
|
|
2399
2483
|
onChange({ month: 1, year: value.year + 1 });
|
|
2400
2484
|
} else {
|
|
2401
2485
|
onChange({ month: value.month + 1, year: value.year });
|
|
2402
2486
|
}
|
|
2403
2487
|
};
|
|
2404
|
-
return /* @__PURE__ */
|
|
2488
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles27.container, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2405
2489
|
reactNative.TouchableOpacity,
|
|
2406
2490
|
{
|
|
2407
2491
|
style: styles27.arrow,
|
|
@@ -2409,8 +2493,8 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2409
2493
|
activeOpacity: 0.6,
|
|
2410
2494
|
touchSoundDisabled: true
|
|
2411
2495
|
},
|
|
2412
|
-
/* @__PURE__ */
|
|
2413
|
-
), /* @__PURE__ */
|
|
2496
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
|
|
2497
|
+
), /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles27.label, { color: colors.foreground }], allowFontScaling: true }, MONTH_NAMES[value.month - 1], " ", value.year), /* @__PURE__ */ React24__default.default.createElement(
|
|
2414
2498
|
reactNative.TouchableOpacity,
|
|
2415
2499
|
{
|
|
2416
2500
|
style: styles27.arrow,
|
|
@@ -2418,7 +2502,7 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2418
2502
|
activeOpacity: 0.6,
|
|
2419
2503
|
touchSoundDisabled: true
|
|
2420
2504
|
},
|
|
2421
|
-
/* @__PURE__ */
|
|
2505
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
|
|
2422
2506
|
));
|
|
2423
2507
|
}
|
|
2424
2508
|
var styles27 = reactNative.StyleSheet.create({
|
|
@@ -2428,17 +2512,17 @@ var styles27 = reactNative.StyleSheet.create({
|
|
|
2428
2512
|
justifyContent: "space-between"
|
|
2429
2513
|
},
|
|
2430
2514
|
arrow: {
|
|
2431
|
-
width: 44,
|
|
2432
|
-
height: 44,
|
|
2515
|
+
width: s(44),
|
|
2516
|
+
height: s(44),
|
|
2433
2517
|
alignItems: "center",
|
|
2434
2518
|
justifyContent: "center"
|
|
2435
2519
|
},
|
|
2436
2520
|
label: {
|
|
2437
|
-
fontSize: 17,
|
|
2521
|
+
fontSize: ms(17),
|
|
2438
2522
|
fontWeight: "500",
|
|
2439
|
-
lineHeight: 24,
|
|
2523
|
+
lineHeight: mvs(24),
|
|
2440
2524
|
textAlign: "center",
|
|
2441
|
-
minWidth: 160
|
|
2525
|
+
minWidth: s(160)
|
|
2442
2526
|
}
|
|
2443
2527
|
});
|
|
2444
2528
|
|
|
@@ -2465,6 +2549,7 @@ exports.CurrencyDisplay = CurrencyDisplay;
|
|
|
2465
2549
|
exports.CurrencyInput = CurrencyInput;
|
|
2466
2550
|
exports.CurrencyInputLarge = CurrencyInput;
|
|
2467
2551
|
exports.EmptyState = EmptyState;
|
|
2552
|
+
exports.Icon = Icon;
|
|
2468
2553
|
exports.Input = Input;
|
|
2469
2554
|
exports.LabelValue = LabelValue;
|
|
2470
2555
|
exports.ListItem = ListItem;
|
|
@@ -2487,5 +2572,6 @@ exports.ToastProvider = ToastProvider;
|
|
|
2487
2572
|
exports.Toggle = Toggle;
|
|
2488
2573
|
exports.defaultDark = defaultDark;
|
|
2489
2574
|
exports.defaultLight = defaultLight;
|
|
2575
|
+
exports.renderIcon = renderIcon;
|
|
2490
2576
|
exports.useTheme = useTheme;
|
|
2491
2577
|
exports.useToast = useToast;
|