@retray-dev/ui-kit 2.6.0 → 2.8.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 +125 -1
- package/README.md +20 -2
- package/dist/index.d.mts +95 -1
- package/dist/index.d.ts +95 -1
- package/dist/index.js +453 -293
- package/dist/index.mjs +377 -223
- package/package.json +1 -1
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Checkbox/Checkbox.tsx +1 -0
- package/src/components/IconButton/IconButton.tsx +147 -0
- package/src/components/IconButton/index.ts +2 -0
- package/src/components/RadioGroup/RadioGroup.tsx +1 -0
- package/src/components/Select/Select.tsx +2 -2
- package/src/components/Sheet/Sheet.tsx +2 -2
- package/src/components/Tabs/Tabs.tsx +1 -0
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Toggle/Toggle.tsx +1 -1
- package/src/index.ts +18 -0
- package/src/tokens.ts +69 -0
- package/src/utils/haptics.ts +18 -12
- package/src/components/Alert/Alert.tsx +0 -84
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React25 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
5
|
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
6
6
|
var AntDesign = require('@expo/vector-icons/AntDesign');
|
|
@@ -11,7 +11,7 @@ var MaterialIcons = require('@expo/vector-icons/MaterialIcons');
|
|
|
11
11
|
var Ionicons = require('@expo/vector-icons/Ionicons');
|
|
12
12
|
var vectorIcons = require('@expo/vector-icons');
|
|
13
13
|
var expoLinearGradient = require('expo-linear-gradient');
|
|
14
|
-
var
|
|
14
|
+
var Animated11 = require('react-native-reanimated');
|
|
15
15
|
var RNSlider = require('@react-native-community/slider');
|
|
16
16
|
var bottomSheet = require('@gorhom/bottom-sheet');
|
|
17
17
|
var picker = require('@react-native-picker/picker');
|
|
@@ -21,22 +21,17 @@ var reactNativeSafeAreaContext = require('react-native-safe-area-context');
|
|
|
21
21
|
|
|
22
22
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var React25__default = /*#__PURE__*/_interopDefault(React25);
|
|
25
25
|
var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
|
|
26
26
|
var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
|
|
27
27
|
var Feather__default = /*#__PURE__*/_interopDefault(Feather);
|
|
28
28
|
var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
|
|
29
29
|
var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
|
|
30
30
|
var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
|
|
31
|
-
var
|
|
31
|
+
var Animated11__default = /*#__PURE__*/_interopDefault(Animated11);
|
|
32
32
|
var RNSlider__default = /*#__PURE__*/_interopDefault(RNSlider);
|
|
33
33
|
|
|
34
|
-
|
|
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
|
-
});
|
|
34
|
+
// src/theme/ThemeProvider.tsx
|
|
40
35
|
|
|
41
36
|
// src/theme/colors.ts
|
|
42
37
|
var defaultLight = {
|
|
@@ -83,42 +78,50 @@ var defaultDark = {
|
|
|
83
78
|
};
|
|
84
79
|
|
|
85
80
|
// src/theme/ThemeProvider.tsx
|
|
86
|
-
var ThemeContext =
|
|
81
|
+
var ThemeContext = React25.createContext({
|
|
87
82
|
colors: defaultLight,
|
|
88
83
|
colorScheme: "light"
|
|
89
84
|
});
|
|
90
85
|
function ThemeProvider({ children, theme, colorScheme = "system" }) {
|
|
91
86
|
const systemScheme = reactNative.useColorScheme() ?? "light";
|
|
92
87
|
const resolvedScheme = colorScheme === "system" ? systemScheme : colorScheme;
|
|
93
|
-
const colors =
|
|
88
|
+
const colors = React25.useMemo(() => {
|
|
94
89
|
const base = resolvedScheme === "dark" ? defaultDark : defaultLight;
|
|
95
90
|
const override = resolvedScheme === "dark" ? theme?.dark : theme?.light;
|
|
96
91
|
return override ? { ...base, ...override } : base;
|
|
97
92
|
}, [resolvedScheme, theme]);
|
|
98
|
-
return /* @__PURE__ */
|
|
93
|
+
return /* @__PURE__ */ React25__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
|
|
99
94
|
}
|
|
100
95
|
function useTheme() {
|
|
101
|
-
const context =
|
|
96
|
+
const context = React25.useContext(ThemeContext);
|
|
102
97
|
if (!context) {
|
|
103
98
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
104
99
|
}
|
|
105
100
|
return context;
|
|
106
101
|
}
|
|
107
|
-
var
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
var _haptics = null;
|
|
103
|
+
async function getHaptics() {
|
|
104
|
+
if (reactNative.Platform.OS === "web") return null;
|
|
105
|
+
if (!_haptics) {
|
|
106
|
+
_haptics = await import('expo-haptics');
|
|
107
|
+
}
|
|
108
|
+
return _haptics;
|
|
110
109
|
}
|
|
111
110
|
function selectionAsync() {
|
|
112
|
-
|
|
111
|
+
if (reactNative.Platform.OS === "web") return;
|
|
112
|
+
getHaptics().then((h) => h?.selectionAsync());
|
|
113
113
|
}
|
|
114
114
|
function impactLight() {
|
|
115
|
-
|
|
115
|
+
if (reactNative.Platform.OS === "web") return;
|
|
116
|
+
getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Light));
|
|
116
117
|
}
|
|
117
118
|
function notificationSuccess() {
|
|
118
|
-
|
|
119
|
+
if (reactNative.Platform.OS === "web") return;
|
|
120
|
+
getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Success));
|
|
119
121
|
}
|
|
120
122
|
function notificationError() {
|
|
121
|
-
|
|
123
|
+
if (reactNative.Platform.OS === "web") return;
|
|
124
|
+
getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Error));
|
|
122
125
|
}
|
|
123
126
|
var isWeb = reactNative.Platform.OS === "web";
|
|
124
127
|
var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
|
|
@@ -159,10 +162,10 @@ function Icon({ name, size, color, family }) {
|
|
|
159
162
|
}
|
|
160
163
|
if (!resolved) return null;
|
|
161
164
|
const Component = resolved.component;
|
|
162
|
-
return
|
|
165
|
+
return React25__default.default.createElement(Component, { name, size, color });
|
|
163
166
|
}
|
|
164
167
|
function renderIcon(name, size, color) {
|
|
165
|
-
return
|
|
168
|
+
return React25__default.default.createElement(Icon, { name, size, color });
|
|
166
169
|
}
|
|
167
170
|
|
|
168
171
|
// src/components/Button/Button.tsx
|
|
@@ -195,7 +198,7 @@ function Button({
|
|
|
195
198
|
}) {
|
|
196
199
|
const { colors } = useTheme();
|
|
197
200
|
const isDisabled = disabled || loading;
|
|
198
|
-
const scale2 =
|
|
201
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
199
202
|
const handlePressIn = () => {
|
|
200
203
|
if (isDisabled) return;
|
|
201
204
|
reactNative.Animated.spring(scale2, {
|
|
@@ -228,7 +231,7 @@ function Button({
|
|
|
228
231
|
}[variant];
|
|
229
232
|
const effectiveIcon = iconName ? renderIcon(iconName, iconSizeMap[size], iconColor ?? labelVariantStyle.color) : typeof icon === "function" ? icon({ label, size, variant }) : icon;
|
|
230
233
|
const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" || variant === "secondary" ? colors.primaryForeground : colors.foreground;
|
|
231
|
-
return /* @__PURE__ */
|
|
234
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [fullWidth && styles.fullWidth, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
232
235
|
reactNative.TouchableOpacity,
|
|
233
236
|
{
|
|
234
237
|
style: [
|
|
@@ -247,7 +250,7 @@ function Button({
|
|
|
247
250
|
onPressOut: handlePressOut,
|
|
248
251
|
...props
|
|
249
252
|
},
|
|
250
|
-
loading ? /* @__PURE__ */
|
|
253
|
+
loading ? /* @__PURE__ */ React25__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, effectiveIcon), /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0], allowFontScaling: true }, label), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, effectiveIcon))
|
|
251
254
|
));
|
|
252
255
|
}
|
|
253
256
|
var styles = reactNative.StyleSheet.create({
|
|
@@ -270,6 +273,96 @@ var styles = reactNative.StyleSheet.create({
|
|
|
270
273
|
marginHorizontal: s(8)
|
|
271
274
|
}
|
|
272
275
|
});
|
|
276
|
+
var nativeDriver2 = reactNative.Platform.OS !== "web";
|
|
277
|
+
var sizeMap = {
|
|
278
|
+
sm: { container: s(40), icon: 18 },
|
|
279
|
+
md: { container: s(44), icon: 20 },
|
|
280
|
+
lg: { container: s(52), icon: 24 }
|
|
281
|
+
};
|
|
282
|
+
function IconButton({
|
|
283
|
+
iconName,
|
|
284
|
+
icon,
|
|
285
|
+
iconColor,
|
|
286
|
+
variant = "primary",
|
|
287
|
+
size = "md",
|
|
288
|
+
loading = false,
|
|
289
|
+
disabled,
|
|
290
|
+
style,
|
|
291
|
+
onPress,
|
|
292
|
+
...props
|
|
293
|
+
}) {
|
|
294
|
+
const { colors } = useTheme();
|
|
295
|
+
const isDisabled = disabled || loading;
|
|
296
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
297
|
+
const handlePressIn = () => {
|
|
298
|
+
if (isDisabled) return;
|
|
299
|
+
reactNative.Animated.spring(scale2, {
|
|
300
|
+
toValue: 0.95,
|
|
301
|
+
useNativeDriver: nativeDriver2,
|
|
302
|
+
speed: 40,
|
|
303
|
+
bounciness: 0
|
|
304
|
+
}).start();
|
|
305
|
+
};
|
|
306
|
+
const handlePressOut = () => {
|
|
307
|
+
reactNative.Animated.spring(scale2, {
|
|
308
|
+
toValue: 1,
|
|
309
|
+
useNativeDriver: nativeDriver2,
|
|
310
|
+
speed: 40,
|
|
311
|
+
bounciness: 4
|
|
312
|
+
}).start();
|
|
313
|
+
};
|
|
314
|
+
const handlePress = (e) => {
|
|
315
|
+
impactLight();
|
|
316
|
+
onPress?.(e);
|
|
317
|
+
};
|
|
318
|
+
const containerVariantStyle = {
|
|
319
|
+
primary: { backgroundColor: colors.primary },
|
|
320
|
+
secondary: { backgroundColor: colors.secondary },
|
|
321
|
+
outline: { backgroundColor: "transparent", borderWidth: 1.5, borderColor: colors.border },
|
|
322
|
+
ghost: { backgroundColor: "transparent" },
|
|
323
|
+
destructive: { backgroundColor: colors.destructive }
|
|
324
|
+
}[variant];
|
|
325
|
+
const defaultIconColor = {
|
|
326
|
+
primary: colors.primaryForeground,
|
|
327
|
+
secondary: colors.secondaryForeground,
|
|
328
|
+
outline: colors.foreground,
|
|
329
|
+
ghost: colors.foreground,
|
|
330
|
+
destructive: colors.destructiveForeground
|
|
331
|
+
}[variant];
|
|
332
|
+
const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" || variant === "secondary" ? colors.primaryForeground : colors.foreground;
|
|
333
|
+
const { container: containerSize, icon: iconSize } = sizeMap[size];
|
|
334
|
+
const resolvedIcon = iconName ? renderIcon(iconName, iconSize, iconColor ?? defaultIconColor) : icon;
|
|
335
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React25__default.default.createElement(
|
|
336
|
+
reactNative.TouchableOpacity,
|
|
337
|
+
{
|
|
338
|
+
style: [
|
|
339
|
+
styles2.base,
|
|
340
|
+
containerVariantStyle,
|
|
341
|
+
{ width: containerSize, height: containerSize },
|
|
342
|
+
isDisabled && styles2.disabled,
|
|
343
|
+
style
|
|
344
|
+
],
|
|
345
|
+
disabled: isDisabled,
|
|
346
|
+
activeOpacity: 1,
|
|
347
|
+
touchSoundDisabled: true,
|
|
348
|
+
onPress: handlePress,
|
|
349
|
+
onPressIn: handlePressIn,
|
|
350
|
+
onPressOut: handlePressOut,
|
|
351
|
+
...props
|
|
352
|
+
},
|
|
353
|
+
loading ? /* @__PURE__ */ React25__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : resolvedIcon
|
|
354
|
+
));
|
|
355
|
+
}
|
|
356
|
+
var styles2 = reactNative.StyleSheet.create({
|
|
357
|
+
base: {
|
|
358
|
+
borderRadius: 999,
|
|
359
|
+
alignItems: "center",
|
|
360
|
+
justifyContent: "center"
|
|
361
|
+
},
|
|
362
|
+
disabled: {
|
|
363
|
+
opacity: 0.5
|
|
364
|
+
}
|
|
365
|
+
});
|
|
273
366
|
var variantStyles = {
|
|
274
367
|
h1: { fontSize: ms(40), fontWeight: "700", lineHeight: mvs(52) },
|
|
275
368
|
h2: { fontSize: ms(28), fontWeight: "700", lineHeight: mvs(36) },
|
|
@@ -281,7 +374,7 @@ var variantStyles = {
|
|
|
281
374
|
function Text2({ variant = "body", color, style, children, ...props }) {
|
|
282
375
|
const { colors } = useTheme();
|
|
283
376
|
const defaultColor = variant === "caption" ? colors.mutedForeground : colors.foreground;
|
|
284
|
-
return /* @__PURE__ */
|
|
377
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
285
378
|
reactNative.Text,
|
|
286
379
|
{
|
|
287
380
|
style: [variantStyles[variant], { color: color ?? defaultColor }, style],
|
|
@@ -294,29 +387,29 @@ function Text2({ variant = "body", color, style, children, ...props }) {
|
|
|
294
387
|
var webInputResetStyle = reactNative.Platform.OS === "web" ? { outlineStyle: "none", outlineWidth: 0, outlineColor: "transparent", boxShadow: "none" } : {};
|
|
295
388
|
function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, prefixIcon, suffixIcon, prefixIconColor, suffixIconColor, type = "text", containerStyle, style, onFocus, onBlur, secureTextEntry, ...props }) {
|
|
296
389
|
const { colors } = useTheme();
|
|
297
|
-
const [focused, setFocused] =
|
|
298
|
-
const [showPassword, setShowPassword] =
|
|
390
|
+
const [focused, setFocused] = React25.useState(false);
|
|
391
|
+
const [showPassword, setShowPassword] = React25.useState(false);
|
|
299
392
|
const isPassword = type === "password";
|
|
300
393
|
const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
|
|
301
394
|
const effectivePrefix = prefixIcon ? renderIcon(prefixIcon, 20, prefixIconColor ?? colors.mutedForeground) : prefix;
|
|
302
|
-
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */
|
|
303
|
-
return /* @__PURE__ */
|
|
395
|
+
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */ React25__default.default.createElement(reactNative.TouchableOpacity, { onPress: () => setShowPassword(!showPassword), style: styles3.passwordToggle, activeOpacity: 0.6 }, /* @__PURE__ */ React25__default.default.createElement(vectorIcons.AntDesign, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.mutedForeground })) : suffixIcon ? renderIcon(suffixIcon, 20, suffixIconColor ?? colors.mutedForeground) : suffix;
|
|
396
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles3.container, containerStyle] }, label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles3.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React25__default.default.createElement(
|
|
304
397
|
reactNative.View,
|
|
305
398
|
{
|
|
306
399
|
style: [
|
|
307
|
-
|
|
400
|
+
styles3.inputWrapper,
|
|
308
401
|
{
|
|
309
402
|
borderColor: error ? colors.destructive : focused ? colors.ring ?? colors.primary : colors.border,
|
|
310
403
|
backgroundColor: colors.background
|
|
311
404
|
}
|
|
312
405
|
]
|
|
313
406
|
},
|
|
314
|
-
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */
|
|
315
|
-
/* @__PURE__ */
|
|
407
|
+
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles3.prefixText, { color: colors.mutedForeground }, prefixStyle], allowFontScaling: true }, effectivePrefix) : /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles3.prefixContainer }, effectivePrefix) : null,
|
|
408
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
316
409
|
reactNative.TextInput,
|
|
317
410
|
{
|
|
318
411
|
style: [
|
|
319
|
-
|
|
412
|
+
styles3.input,
|
|
320
413
|
{
|
|
321
414
|
color: colors.foreground
|
|
322
415
|
},
|
|
@@ -337,10 +430,10 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, p
|
|
|
337
430
|
...props
|
|
338
431
|
}
|
|
339
432
|
),
|
|
340
|
-
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */
|
|
341
|
-
), error ? /* @__PURE__ */
|
|
433
|
+
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles3.suffixText, { color: colors.mutedForeground }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles3.suffixContainer }, effectiveSuffix) : null
|
|
434
|
+
), error ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles3.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles3.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
342
435
|
}
|
|
343
|
-
var
|
|
436
|
+
var styles3 = reactNative.StyleSheet.create({
|
|
344
437
|
container: {
|
|
345
438
|
gap: vs(8)
|
|
346
439
|
},
|
|
@@ -414,9 +507,9 @@ function Badge({ label, children, variant = "default", size = "md", icon, iconNa
|
|
|
414
507
|
}[variant];
|
|
415
508
|
const effectiveIcon = iconName ? renderIcon(iconName, sizeIconSize[size], iconColor ?? textColor) : icon;
|
|
416
509
|
const content = children ?? label;
|
|
417
|
-
return /* @__PURE__ */
|
|
510
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles4.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style] }, effectiveIcon ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles4.iconContainer }, effectiveIcon) : null, typeof content === "string" ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles4.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content);
|
|
418
511
|
}
|
|
419
|
-
var
|
|
512
|
+
var styles4 = reactNative.StyleSheet.create({
|
|
420
513
|
container: {
|
|
421
514
|
borderRadius: ms(6),
|
|
422
515
|
alignSelf: "flex-start",
|
|
@@ -431,15 +524,15 @@ var styles3 = reactNative.StyleSheet.create({
|
|
|
431
524
|
fontWeight: "500"
|
|
432
525
|
}
|
|
433
526
|
});
|
|
434
|
-
var
|
|
527
|
+
var nativeDriver3 = reactNative.Platform.OS !== "web";
|
|
435
528
|
function Card({ children, variant = "elevated", onPress, style }) {
|
|
436
529
|
const { colors } = useTheme();
|
|
437
|
-
const scale2 =
|
|
530
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
438
531
|
const handlePressIn = () => {
|
|
439
532
|
if (!onPress) return;
|
|
440
533
|
reactNative.Animated.spring(scale2, {
|
|
441
534
|
toValue: 0.98,
|
|
442
|
-
useNativeDriver:
|
|
535
|
+
useNativeDriver: nativeDriver3,
|
|
443
536
|
speed: 40,
|
|
444
537
|
bounciness: 0
|
|
445
538
|
}).start();
|
|
@@ -448,7 +541,7 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
448
541
|
if (!onPress) return;
|
|
449
542
|
reactNative.Animated.spring(scale2, {
|
|
450
543
|
toValue: 1,
|
|
451
|
-
useNativeDriver:
|
|
544
|
+
useNativeDriver: nativeDriver3,
|
|
452
545
|
speed: 40,
|
|
453
546
|
bounciness: 4
|
|
454
547
|
}).start();
|
|
@@ -481,9 +574,9 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
481
574
|
elevation: 0
|
|
482
575
|
}
|
|
483
576
|
}[variant];
|
|
484
|
-
const cardContent = /* @__PURE__ */
|
|
577
|
+
const cardContent = /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles5.card, variantStyle, style] }, children);
|
|
485
578
|
if (onPress) {
|
|
486
|
-
return /* @__PURE__ */
|
|
579
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React25__default.default.createElement(
|
|
487
580
|
reactNative.TouchableOpacity,
|
|
488
581
|
{
|
|
489
582
|
onPress: handlePress,
|
|
@@ -498,23 +591,23 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
498
591
|
return cardContent;
|
|
499
592
|
}
|
|
500
593
|
function CardHeader({ children, style }) {
|
|
501
|
-
return /* @__PURE__ */
|
|
594
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles5.header, style] }, children);
|
|
502
595
|
}
|
|
503
596
|
function CardTitle({ children, style }) {
|
|
504
597
|
const { colors } = useTheme();
|
|
505
|
-
return /* @__PURE__ */
|
|
598
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles5.title, { color: colors.cardForeground }, style], allowFontScaling: true }, children);
|
|
506
599
|
}
|
|
507
600
|
function CardDescription({ children, style }) {
|
|
508
601
|
const { colors } = useTheme();
|
|
509
|
-
return /* @__PURE__ */
|
|
602
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles5.description, { color: colors.mutedForeground }, style], allowFontScaling: true }, children);
|
|
510
603
|
}
|
|
511
604
|
function CardContent({ children, style }) {
|
|
512
|
-
return /* @__PURE__ */
|
|
605
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles5.content, style] }, children);
|
|
513
606
|
}
|
|
514
607
|
function CardFooter({ children, style }) {
|
|
515
|
-
return /* @__PURE__ */
|
|
608
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles5.footer, style] }, children);
|
|
516
609
|
}
|
|
517
|
-
var
|
|
610
|
+
var styles5 = reactNative.StyleSheet.create({
|
|
518
611
|
card: {
|
|
519
612
|
borderRadius: ms(12),
|
|
520
613
|
borderWidth: 1
|
|
@@ -545,18 +638,18 @@ var styles4 = reactNative.StyleSheet.create({
|
|
|
545
638
|
});
|
|
546
639
|
function Separator({ orientation = "horizontal", style }) {
|
|
547
640
|
const { colors } = useTheme();
|
|
548
|
-
return /* @__PURE__ */
|
|
641
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
549
642
|
reactNative.View,
|
|
550
643
|
{
|
|
551
644
|
style: [
|
|
552
|
-
orientation === "horizontal" ?
|
|
645
|
+
orientation === "horizontal" ? styles6.horizontal : styles6.vertical,
|
|
553
646
|
{ backgroundColor: colors.border },
|
|
554
647
|
style
|
|
555
648
|
]
|
|
556
649
|
}
|
|
557
650
|
);
|
|
558
651
|
}
|
|
559
|
-
var
|
|
652
|
+
var styles6 = reactNative.StyleSheet.create({
|
|
560
653
|
horizontal: {
|
|
561
654
|
height: 1,
|
|
562
655
|
width: "100%"
|
|
@@ -566,21 +659,21 @@ var styles5 = reactNative.StyleSheet.create({
|
|
|
566
659
|
height: "100%"
|
|
567
660
|
}
|
|
568
661
|
});
|
|
569
|
-
var
|
|
662
|
+
var sizeMap2 = {
|
|
570
663
|
sm: "small",
|
|
571
664
|
md: "small",
|
|
572
665
|
lg: "large"
|
|
573
666
|
};
|
|
574
667
|
function Spinner({ size = "md", color, ...props }) {
|
|
575
668
|
const { colors } = useTheme();
|
|
576
|
-
return /* @__PURE__ */
|
|
669
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap2[size], color: color ?? colors.primary, ...props });
|
|
577
670
|
}
|
|
578
671
|
function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
579
672
|
const { colors, colorScheme } = useTheme();
|
|
580
|
-
const shimmerAnim =
|
|
581
|
-
const [containerWidth, setContainerWidth] =
|
|
673
|
+
const shimmerAnim = React25.useRef(new reactNative.Animated.Value(0)).current;
|
|
674
|
+
const [containerWidth, setContainerWidth] = React25.useState(300);
|
|
582
675
|
const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
|
|
583
|
-
|
|
676
|
+
React25.useEffect(() => {
|
|
584
677
|
const animation = reactNative.Animated.loop(
|
|
585
678
|
reactNative.Animated.timing(shimmerAnim, {
|
|
586
679
|
toValue: 1,
|
|
@@ -595,17 +688,17 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
595
688
|
inputRange: [0, 1],
|
|
596
689
|
outputRange: [-containerWidth, containerWidth]
|
|
597
690
|
});
|
|
598
|
-
return /* @__PURE__ */
|
|
691
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
599
692
|
reactNative.View,
|
|
600
693
|
{
|
|
601
694
|
style: [
|
|
602
|
-
|
|
695
|
+
styles7.base,
|
|
603
696
|
{ width, height, borderRadius, backgroundColor: colors.muted },
|
|
604
697
|
style
|
|
605
698
|
],
|
|
606
699
|
onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width)
|
|
607
700
|
},
|
|
608
|
-
/* @__PURE__ */
|
|
701
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [reactNative.StyleSheet.absoluteFill, { transform: [{ translateX }] }] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
609
702
|
expoLinearGradient.LinearGradient,
|
|
610
703
|
{
|
|
611
704
|
colors: ["transparent", shimmerHighlight, "transparent"],
|
|
@@ -616,12 +709,12 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
616
709
|
))
|
|
617
710
|
);
|
|
618
711
|
}
|
|
619
|
-
var
|
|
712
|
+
var styles7 = reactNative.StyleSheet.create({
|
|
620
713
|
base: {
|
|
621
714
|
overflow: "hidden"
|
|
622
715
|
}
|
|
623
716
|
});
|
|
624
|
-
var
|
|
717
|
+
var sizeMap3 = {
|
|
625
718
|
sm: s(28),
|
|
626
719
|
md: s(40),
|
|
627
720
|
lg: s(56),
|
|
@@ -635,8 +728,8 @@ var fontSizeMap = {
|
|
|
635
728
|
};
|
|
636
729
|
function Avatar({ src, fallback, size = "md", style }) {
|
|
637
730
|
const { colors } = useTheme();
|
|
638
|
-
const [imageError, setImageError] =
|
|
639
|
-
const dimension =
|
|
731
|
+
const [imageError, setImageError] = React25.useState(false);
|
|
732
|
+
const dimension = sizeMap3[size];
|
|
640
733
|
const showFallback = !src || imageError;
|
|
641
734
|
const containerStyle = {
|
|
642
735
|
width: dimension,
|
|
@@ -645,23 +738,23 @@ function Avatar({ src, fallback, size = "md", style }) {
|
|
|
645
738
|
backgroundColor: colors.muted,
|
|
646
739
|
overflow: "hidden"
|
|
647
740
|
};
|
|
648
|
-
return /* @__PURE__ */
|
|
741
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles8.base, containerStyle, style] }, !showFallback ? /* @__PURE__ */ React25__default.default.createElement(
|
|
649
742
|
reactNative.Image,
|
|
650
743
|
{
|
|
651
744
|
source: { uri: src },
|
|
652
745
|
style: { width: dimension, height: dimension },
|
|
653
746
|
onError: () => setImageError(true)
|
|
654
747
|
}
|
|
655
|
-
) : /* @__PURE__ */
|
|
748
|
+
) : /* @__PURE__ */ React25__default.default.createElement(
|
|
656
749
|
reactNative.Text,
|
|
657
750
|
{
|
|
658
|
-
style: [
|
|
751
|
+
style: [styles8.fallback, { color: colors.mutedForeground, fontSize: fontSizeMap[size] }],
|
|
659
752
|
allowFontScaling: true
|
|
660
753
|
},
|
|
661
754
|
fallback?.slice(0, 2).toUpperCase() ?? "?"
|
|
662
755
|
));
|
|
663
756
|
}
|
|
664
|
-
var
|
|
757
|
+
var styles8 = reactNative.StyleSheet.create({
|
|
665
758
|
base: {
|
|
666
759
|
alignItems: "center",
|
|
667
760
|
justifyContent: "center"
|
|
@@ -675,11 +768,11 @@ function AlertBanner({ title, description, variant = "default", icon, iconName,
|
|
|
675
768
|
const borderColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.border;
|
|
676
769
|
const titleColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.foreground;
|
|
677
770
|
const descColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.mutedForeground;
|
|
678
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
771
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React25__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 18, color: titleColor }) : variant === "destructive" ? /* @__PURE__ */ React25__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 20, color: titleColor }) : /* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 18, color: titleColor });
|
|
679
772
|
const effectiveIcon = iconName ? renderIcon(iconName, 18, iconColor ?? titleColor) : icon ?? defaultIcon;
|
|
680
|
-
return /* @__PURE__ */
|
|
773
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles9.container, { backgroundColor: colors.card, borderColor }, style] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles9.icon }, effectiveIcon), /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles9.content }, title ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles9.title, { color: titleColor }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles9.description, { color: descColor }], allowFontScaling: true }, description) : null));
|
|
681
774
|
}
|
|
682
|
-
var
|
|
775
|
+
var styles9 = reactNative.StyleSheet.create({
|
|
683
776
|
container: {
|
|
684
777
|
flexDirection: "row",
|
|
685
778
|
borderWidth: 1,
|
|
@@ -712,9 +805,9 @@ var styles8 = reactNative.StyleSheet.create({
|
|
|
712
805
|
function Progress({ value = 0, max = 100, style }) {
|
|
713
806
|
const { colors } = useTheme();
|
|
714
807
|
const percent = Math.min(Math.max(value / max * 100, 0), 100);
|
|
715
|
-
const [trackWidth, setTrackWidth] =
|
|
716
|
-
const animatedWidth =
|
|
717
|
-
|
|
808
|
+
const [trackWidth, setTrackWidth] = React25.useState(0);
|
|
809
|
+
const animatedWidth = React25.useRef(new reactNative.Animated.Value(0)).current;
|
|
810
|
+
React25.useEffect(() => {
|
|
718
811
|
if (trackWidth === 0) return;
|
|
719
812
|
reactNative.Animated.spring(animatedWidth, {
|
|
720
813
|
toValue: percent / 100 * trackWidth,
|
|
@@ -723,21 +816,21 @@ function Progress({ value = 0, max = 100, style }) {
|
|
|
723
816
|
bounciness: 0
|
|
724
817
|
}).start();
|
|
725
818
|
}, [percent, trackWidth]);
|
|
726
|
-
return /* @__PURE__ */
|
|
819
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
727
820
|
reactNative.View,
|
|
728
821
|
{
|
|
729
|
-
style: [
|
|
822
|
+
style: [styles10.track, { backgroundColor: colors.muted }, style],
|
|
730
823
|
onLayout: (e) => setTrackWidth(e.nativeEvent.layout.width)
|
|
731
824
|
},
|
|
732
|
-
/* @__PURE__ */
|
|
825
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
733
826
|
reactNative.Animated.View,
|
|
734
827
|
{
|
|
735
|
-
style: [
|
|
828
|
+
style: [styles10.indicator, { width: animatedWidth, backgroundColor: colors.primary }]
|
|
736
829
|
}
|
|
737
830
|
)
|
|
738
831
|
);
|
|
739
832
|
}
|
|
740
|
-
var
|
|
833
|
+
var styles10 = reactNative.StyleSheet.create({
|
|
741
834
|
track: {
|
|
742
835
|
height: vs(8),
|
|
743
836
|
borderRadius: 999,
|
|
@@ -753,39 +846,39 @@ function EmptyState({ icon, iconName, iconColor, title, description, action, siz
|
|
|
753
846
|
const { colors } = useTheme();
|
|
754
847
|
const isCompact = size === "compact";
|
|
755
848
|
const effectiveIcon = iconName ? renderIcon(iconName, isCompact ? 32 : 48, iconColor ?? colors.mutedForeground) : icon;
|
|
756
|
-
return /* @__PURE__ */
|
|
849
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
757
850
|
reactNative.View,
|
|
758
851
|
{
|
|
759
852
|
style: [
|
|
760
|
-
|
|
761
|
-
isCompact &&
|
|
853
|
+
styles11.container,
|
|
854
|
+
isCompact && styles11.containerCompact,
|
|
762
855
|
{ borderColor: colors.border },
|
|
763
856
|
style
|
|
764
857
|
]
|
|
765
858
|
},
|
|
766
|
-
effectiveIcon ? /* @__PURE__ */
|
|
859
|
+
effectiveIcon ? /* @__PURE__ */ React25__default.default.createElement(
|
|
767
860
|
reactNative.View,
|
|
768
861
|
{
|
|
769
862
|
style: [
|
|
770
|
-
|
|
771
|
-
isCompact &&
|
|
863
|
+
styles11.iconWrapper,
|
|
864
|
+
isCompact && styles11.iconWrapperCompact,
|
|
772
865
|
{ backgroundColor: colors.muted }
|
|
773
866
|
]
|
|
774
867
|
},
|
|
775
868
|
effectiveIcon
|
|
776
869
|
) : null,
|
|
777
|
-
/* @__PURE__ */
|
|
870
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles11.textWrapper }, /* @__PURE__ */ React25__default.default.createElement(
|
|
778
871
|
reactNative.Text,
|
|
779
872
|
{
|
|
780
|
-
style: [
|
|
873
|
+
style: [styles11.title, isCompact && styles11.titleCompact, { color: colors.foreground }],
|
|
781
874
|
allowFontScaling: true
|
|
782
875
|
},
|
|
783
876
|
title
|
|
784
|
-
), description && !isCompact ? /* @__PURE__ */
|
|
785
|
-
action && !isCompact ? /* @__PURE__ */
|
|
877
|
+
), description && !isCompact ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles11.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null),
|
|
878
|
+
action && !isCompact ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles11.action }, action) : null
|
|
786
879
|
);
|
|
787
880
|
}
|
|
788
|
-
var
|
|
881
|
+
var styles11 = reactNative.StyleSheet.create({
|
|
789
882
|
container: {
|
|
790
883
|
alignItems: "center",
|
|
791
884
|
justifyContent: "center",
|
|
@@ -846,15 +939,15 @@ function Textarea({
|
|
|
846
939
|
...props
|
|
847
940
|
}) {
|
|
848
941
|
const { colors } = useTheme();
|
|
849
|
-
const [focused, setFocused] =
|
|
850
|
-
return /* @__PURE__ */
|
|
942
|
+
const [focused, setFocused] = React25.useState(false);
|
|
943
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles12.container, containerStyle] }, label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles12.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React25__default.default.createElement(
|
|
851
944
|
reactNative.TextInput,
|
|
852
945
|
{
|
|
853
946
|
multiline: true,
|
|
854
947
|
numberOfLines: rows,
|
|
855
948
|
textAlignVertical: "top",
|
|
856
949
|
style: [
|
|
857
|
-
|
|
950
|
+
styles12.input,
|
|
858
951
|
{
|
|
859
952
|
borderColor: error ? colors.destructive : focused ? colors.ring ?? colors.primary : colors.border,
|
|
860
953
|
color: colors.foreground,
|
|
@@ -876,9 +969,9 @@ function Textarea({
|
|
|
876
969
|
allowFontScaling: true,
|
|
877
970
|
...props
|
|
878
971
|
}
|
|
879
|
-
), error ? /* @__PURE__ */
|
|
972
|
+
), error ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles12.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles12.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
880
973
|
}
|
|
881
|
-
var
|
|
974
|
+
var styles12 = reactNative.StyleSheet.create({
|
|
882
975
|
container: {
|
|
883
976
|
gap: vs(8)
|
|
884
977
|
},
|
|
@@ -897,7 +990,7 @@ var styles11 = reactNative.StyleSheet.create({
|
|
|
897
990
|
fontSize: ms(13)
|
|
898
991
|
}
|
|
899
992
|
});
|
|
900
|
-
var
|
|
993
|
+
var nativeDriver4 = reactNative.Platform.OS !== "web";
|
|
901
994
|
function Checkbox({
|
|
902
995
|
checked = false,
|
|
903
996
|
onCheckedChange,
|
|
@@ -906,18 +999,18 @@ function Checkbox({
|
|
|
906
999
|
style
|
|
907
1000
|
}) {
|
|
908
1001
|
const { colors } = useTheme();
|
|
909
|
-
const scale2 =
|
|
1002
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
910
1003
|
const handlePressIn = () => {
|
|
911
1004
|
if (disabled) return;
|
|
912
|
-
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver:
|
|
1005
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver4, speed: 40, bounciness: 0 }).start();
|
|
913
1006
|
};
|
|
914
1007
|
const handlePressOut = () => {
|
|
915
|
-
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver:
|
|
1008
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver4, speed: 40, bounciness: 4 }).start();
|
|
916
1009
|
};
|
|
917
|
-
return /* @__PURE__ */
|
|
1010
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React25__default.default.createElement(
|
|
918
1011
|
reactNative.TouchableOpacity,
|
|
919
1012
|
{
|
|
920
|
-
style: [
|
|
1013
|
+
style: [styles13.row, style],
|
|
921
1014
|
onPress: () => {
|
|
922
1015
|
selectionAsync();
|
|
923
1016
|
onCheckedChange?.(!checked);
|
|
@@ -928,11 +1021,11 @@ function Checkbox({
|
|
|
928
1021
|
activeOpacity: 1,
|
|
929
1022
|
touchSoundDisabled: true
|
|
930
1023
|
},
|
|
931
|
-
/* @__PURE__ */
|
|
1024
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
932
1025
|
reactNative.View,
|
|
933
1026
|
{
|
|
934
1027
|
style: [
|
|
935
|
-
|
|
1028
|
+
styles13.box,
|
|
936
1029
|
{
|
|
937
1030
|
borderColor: checked ? colors.primary : colors.border,
|
|
938
1031
|
backgroundColor: checked ? colors.primary : "transparent",
|
|
@@ -940,18 +1033,19 @@ function Checkbox({
|
|
|
940
1033
|
}
|
|
941
1034
|
]
|
|
942
1035
|
},
|
|
943
|
-
checked ? /* @__PURE__ */
|
|
1036
|
+
checked ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles13.checkmark, { borderColor: colors.primaryForeground }] }) : null
|
|
944
1037
|
),
|
|
945
|
-
label ? /* @__PURE__ */
|
|
1038
|
+
label ? /* @__PURE__ */ React25__default.default.createElement(
|
|
946
1039
|
reactNative.Text,
|
|
947
1040
|
{
|
|
948
|
-
style: [
|
|
1041
|
+
style: [styles13.label, { color: disabled ? colors.mutedForeground : colors.foreground }],
|
|
1042
|
+
allowFontScaling: true
|
|
949
1043
|
},
|
|
950
1044
|
label
|
|
951
1045
|
) : null
|
|
952
1046
|
));
|
|
953
1047
|
}
|
|
954
|
-
var
|
|
1048
|
+
var styles13 = reactNative.StyleSheet.create({
|
|
955
1049
|
row: {
|
|
956
1050
|
flexDirection: "row",
|
|
957
1051
|
alignItems: "center",
|
|
@@ -977,7 +1071,7 @@ var styles12 = reactNative.StyleSheet.create({
|
|
|
977
1071
|
lineHeight: mvs(22)
|
|
978
1072
|
}
|
|
979
1073
|
});
|
|
980
|
-
var
|
|
1074
|
+
var nativeDriver5 = reactNative.Platform.OS !== "web";
|
|
981
1075
|
var TRACK_WIDTH = s(60);
|
|
982
1076
|
var TRACK_HEIGHT = vs(36);
|
|
983
1077
|
var THUMB_SIZE = s(28);
|
|
@@ -985,13 +1079,13 @@ var THUMB_OFFSET = s(4);
|
|
|
985
1079
|
var THUMB_TRAVEL = TRACK_WIDTH - THUMB_SIZE - THUMB_OFFSET * 2;
|
|
986
1080
|
function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
987
1081
|
const { colors } = useTheme();
|
|
988
|
-
const translateX =
|
|
989
|
-
const trackOpacity =
|
|
990
|
-
|
|
1082
|
+
const translateX = React25.useRef(new reactNative.Animated.Value(checked ? THUMB_TRAVEL : 0)).current;
|
|
1083
|
+
const trackOpacity = React25.useRef(new reactNative.Animated.Value(checked ? 1 : 0)).current;
|
|
1084
|
+
React25.useEffect(() => {
|
|
991
1085
|
reactNative.Animated.parallel([
|
|
992
1086
|
reactNative.Animated.spring(translateX, {
|
|
993
1087
|
toValue: checked ? THUMB_TRAVEL : 0,
|
|
994
|
-
useNativeDriver:
|
|
1088
|
+
useNativeDriver: nativeDriver5,
|
|
995
1089
|
bounciness: 4
|
|
996
1090
|
}),
|
|
997
1091
|
reactNative.Animated.timing(trackOpacity, {
|
|
@@ -1005,7 +1099,7 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
1005
1099
|
inputRange: [0, 1],
|
|
1006
1100
|
outputRange: [colors.muted, colors.primary]
|
|
1007
1101
|
});
|
|
1008
|
-
return /* @__PURE__ */
|
|
1102
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [{ opacity: disabled ? 0.45 : 1 }, style] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1009
1103
|
reactNative.TouchableOpacity,
|
|
1010
1104
|
{
|
|
1011
1105
|
onPress: () => {
|
|
@@ -1015,20 +1109,20 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
1015
1109
|
disabled,
|
|
1016
1110
|
activeOpacity: 0.8,
|
|
1017
1111
|
touchSoundDisabled: true,
|
|
1018
|
-
style:
|
|
1112
|
+
style: styles14.wrapper
|
|
1019
1113
|
},
|
|
1020
|
-
/* @__PURE__ */
|
|
1114
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [styles14.track, { backgroundColor: trackColor }] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1021
1115
|
reactNative.Animated.View,
|
|
1022
1116
|
{
|
|
1023
1117
|
style: [
|
|
1024
|
-
|
|
1118
|
+
styles14.thumb,
|
|
1025
1119
|
{ backgroundColor: colors.primaryForeground, transform: [{ translateX }] }
|
|
1026
1120
|
]
|
|
1027
1121
|
}
|
|
1028
1122
|
))
|
|
1029
1123
|
));
|
|
1030
1124
|
}
|
|
1031
|
-
var
|
|
1125
|
+
var styles14 = reactNative.StyleSheet.create({
|
|
1032
1126
|
wrapper: {},
|
|
1033
1127
|
track: {
|
|
1034
1128
|
width: TRACK_WIDTH,
|
|
@@ -1074,9 +1168,9 @@ function Toggle({
|
|
|
1074
1168
|
...props
|
|
1075
1169
|
}) {
|
|
1076
1170
|
const { colors } = useTheme();
|
|
1077
|
-
const scale2 =
|
|
1078
|
-
const pressAnim =
|
|
1079
|
-
|
|
1171
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
1172
|
+
const pressAnim = React25.useRef(new reactNative.Animated.Value(pressed ? 1 : 0)).current;
|
|
1173
|
+
React25.useEffect(() => {
|
|
1080
1174
|
reactNative.Animated.timing(pressAnim, {
|
|
1081
1175
|
toValue: pressed ? 1 : 0,
|
|
1082
1176
|
duration: 150,
|
|
@@ -1111,17 +1205,17 @@ function Toggle({
|
|
|
1111
1205
|
return prop;
|
|
1112
1206
|
};
|
|
1113
1207
|
if (pressed) {
|
|
1114
|
-
if (activeIconName) return /* @__PURE__ */
|
|
1208
|
+
if (activeIconName) return /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, renderIcon(activeIconName, iconSize, activeIconColor ?? colors.primary));
|
|
1115
1209
|
const active = renderProp(activeIcon);
|
|
1116
|
-
if (active) return /* @__PURE__ */
|
|
1117
|
-
return /* @__PURE__ */
|
|
1210
|
+
if (active) return /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, active);
|
|
1211
|
+
return /* @__PURE__ */ React25__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: iconSize, color: colors.primary });
|
|
1118
1212
|
}
|
|
1119
|
-
if (iconName) return /* @__PURE__ */
|
|
1213
|
+
if (iconName) return /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, renderIcon(iconName, iconSize, iconColor ?? colors.mutedForeground));
|
|
1120
1214
|
const custom = renderProp(icon);
|
|
1121
|
-
if (custom) return /* @__PURE__ */
|
|
1122
|
-
return /* @__PURE__ */
|
|
1215
|
+
if (custom) return /* @__PURE__ */ React25__default.default.createElement(React25__default.default.Fragment, null, custom);
|
|
1216
|
+
return /* @__PURE__ */ React25__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: iconSize, color: colors.mutedForeground });
|
|
1123
1217
|
};
|
|
1124
|
-
return /* @__PURE__ */
|
|
1218
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles15.disabled, style] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1125
1219
|
reactNative.TouchableOpacity,
|
|
1126
1220
|
{
|
|
1127
1221
|
onPress: () => {
|
|
@@ -1135,20 +1229,20 @@ function Toggle({
|
|
|
1135
1229
|
touchSoundDisabled: true,
|
|
1136
1230
|
...props
|
|
1137
1231
|
},
|
|
1138
|
-
/* @__PURE__ */
|
|
1232
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
1139
1233
|
reactNative.Animated.View,
|
|
1140
1234
|
{
|
|
1141
1235
|
style: [
|
|
1142
|
-
|
|
1236
|
+
styles15.base,
|
|
1143
1237
|
sizeStyles[size],
|
|
1144
1238
|
{ borderColor, backgroundColor, borderWidth: 2 }
|
|
1145
1239
|
]
|
|
1146
1240
|
},
|
|
1147
|
-
/* @__PURE__ */
|
|
1241
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles15.inner }, /* @__PURE__ */ React25__default.default.createElement(LeftIcon, null), label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.Text, { style: [styles15.label, { color: textColor }], allowFontScaling: true }, label) : null)
|
|
1148
1242
|
)
|
|
1149
1243
|
));
|
|
1150
1244
|
}
|
|
1151
|
-
var
|
|
1245
|
+
var styles15 = reactNative.StyleSheet.create({
|
|
1152
1246
|
base: {
|
|
1153
1247
|
borderRadius: ms(8)
|
|
1154
1248
|
},
|
|
@@ -1166,25 +1260,25 @@ var styles14 = reactNative.StyleSheet.create({
|
|
|
1166
1260
|
fontWeight: "500"
|
|
1167
1261
|
}
|
|
1168
1262
|
});
|
|
1169
|
-
var
|
|
1263
|
+
var nativeDriver6 = reactNative.Platform.OS !== "web";
|
|
1170
1264
|
function RadioItem({
|
|
1171
1265
|
option,
|
|
1172
1266
|
selected,
|
|
1173
1267
|
onSelect
|
|
1174
1268
|
}) {
|
|
1175
1269
|
const { colors } = useTheme();
|
|
1176
|
-
const scale2 =
|
|
1270
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
1177
1271
|
const handlePressIn = () => {
|
|
1178
1272
|
if (option.disabled) return;
|
|
1179
|
-
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver:
|
|
1273
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver6, speed: 40, bounciness: 0 }).start();
|
|
1180
1274
|
};
|
|
1181
1275
|
const handlePressOut = () => {
|
|
1182
|
-
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver:
|
|
1276
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver6, speed: 40, bounciness: 4 }).start();
|
|
1183
1277
|
};
|
|
1184
|
-
return /* @__PURE__ */
|
|
1278
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1185
1279
|
reactNative.TouchableOpacity,
|
|
1186
1280
|
{
|
|
1187
|
-
style:
|
|
1281
|
+
style: styles16.row,
|
|
1188
1282
|
onPress: () => {
|
|
1189
1283
|
if (!option.disabled) {
|
|
1190
1284
|
selectionAsync();
|
|
@@ -1197,26 +1291,27 @@ function RadioItem({
|
|
|
1197
1291
|
touchSoundDisabled: true,
|
|
1198
1292
|
disabled: option.disabled
|
|
1199
1293
|
},
|
|
1200
|
-
/* @__PURE__ */
|
|
1294
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
1201
1295
|
reactNative.View,
|
|
1202
1296
|
{
|
|
1203
1297
|
style: [
|
|
1204
|
-
|
|
1298
|
+
styles16.radio,
|
|
1205
1299
|
{
|
|
1206
1300
|
borderColor: selected ? colors.primary : colors.border,
|
|
1207
1301
|
opacity: option.disabled ? 0.45 : 1
|
|
1208
1302
|
}
|
|
1209
1303
|
]
|
|
1210
1304
|
},
|
|
1211
|
-
selected ? /* @__PURE__ */
|
|
1305
|
+
selected ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles16.dot, { backgroundColor: colors.primary }] }) : null
|
|
1212
1306
|
),
|
|
1213
|
-
/* @__PURE__ */
|
|
1307
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
1214
1308
|
reactNative.Text,
|
|
1215
1309
|
{
|
|
1216
1310
|
style: [
|
|
1217
|
-
|
|
1311
|
+
styles16.label,
|
|
1218
1312
|
{ color: option.disabled ? colors.mutedForeground : colors.foreground }
|
|
1219
|
-
]
|
|
1313
|
+
],
|
|
1314
|
+
allowFontScaling: true
|
|
1220
1315
|
},
|
|
1221
1316
|
option.label
|
|
1222
1317
|
)
|
|
@@ -1229,7 +1324,7 @@ function RadioGroup({
|
|
|
1229
1324
|
orientation = "vertical",
|
|
1230
1325
|
style
|
|
1231
1326
|
}) {
|
|
1232
|
-
return /* @__PURE__ */
|
|
1327
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles16.container, orientation === "horizontal" && styles16.horizontal, style] }, options.map((option) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1233
1328
|
RadioItem,
|
|
1234
1329
|
{
|
|
1235
1330
|
key: option.value,
|
|
@@ -1239,7 +1334,7 @@ function RadioGroup({
|
|
|
1239
1334
|
}
|
|
1240
1335
|
)));
|
|
1241
1336
|
}
|
|
1242
|
-
var
|
|
1337
|
+
var styles16 = reactNative.StyleSheet.create({
|
|
1243
1338
|
container: {
|
|
1244
1339
|
gap: vs(12)
|
|
1245
1340
|
},
|
|
@@ -1270,7 +1365,7 @@ var styles15 = reactNative.StyleSheet.create({
|
|
|
1270
1365
|
lineHeight: mvs(20)
|
|
1271
1366
|
}
|
|
1272
1367
|
});
|
|
1273
|
-
var
|
|
1368
|
+
var nativeDriver7 = reactNative.Platform.OS !== "web";
|
|
1274
1369
|
function TabTrigger({
|
|
1275
1370
|
tab,
|
|
1276
1371
|
isActive,
|
|
@@ -1278,17 +1373,17 @@ function TabTrigger({
|
|
|
1278
1373
|
onLayout
|
|
1279
1374
|
}) {
|
|
1280
1375
|
const { colors } = useTheme();
|
|
1281
|
-
const scale2 =
|
|
1376
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
1282
1377
|
const handlePressIn = () => {
|
|
1283
|
-
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver:
|
|
1378
|
+
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver7, speed: 40, bounciness: 0 }).start();
|
|
1284
1379
|
};
|
|
1285
1380
|
const handlePressOut = () => {
|
|
1286
|
-
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver:
|
|
1381
|
+
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver7, speed: 40, bounciness: 4 }).start();
|
|
1287
1382
|
};
|
|
1288
|
-
return /* @__PURE__ */
|
|
1383
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
1289
1384
|
reactNative.TouchableOpacity,
|
|
1290
1385
|
{
|
|
1291
|
-
style:
|
|
1386
|
+
style: styles17.trigger,
|
|
1292
1387
|
onPress,
|
|
1293
1388
|
onPressIn: handlePressIn,
|
|
1294
1389
|
onPressOut: handlePressOut,
|
|
@@ -1296,27 +1391,28 @@ function TabTrigger({
|
|
|
1296
1391
|
activeOpacity: 1,
|
|
1297
1392
|
touchSoundDisabled: true
|
|
1298
1393
|
},
|
|
1299
|
-
/* @__PURE__ */
|
|
1394
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles17.triggerInner }, tab.icon ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles17.triggerIcon }, typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon) : null, /* @__PURE__ */ React25__default.default.createElement(
|
|
1300
1395
|
reactNative.Text,
|
|
1301
1396
|
{
|
|
1302
1397
|
style: [
|
|
1303
|
-
|
|
1398
|
+
styles17.triggerLabel,
|
|
1304
1399
|
{ color: isActive ? colors.foreground : colors.mutedForeground },
|
|
1305
|
-
isActive &&
|
|
1306
|
-
]
|
|
1400
|
+
isActive && styles17.activeTriggerLabel
|
|
1401
|
+
],
|
|
1402
|
+
allowFontScaling: true
|
|
1307
1403
|
},
|
|
1308
1404
|
tab.label
|
|
1309
1405
|
)))
|
|
1310
1406
|
);
|
|
1311
1407
|
}
|
|
1312
1408
|
function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
1313
|
-
const [internal, setInternal] =
|
|
1409
|
+
const [internal, setInternal] = React25.useState(tabs[0]?.value ?? "");
|
|
1314
1410
|
const { colors } = useTheme();
|
|
1315
1411
|
const active = value ?? internal;
|
|
1316
|
-
const tabLayouts =
|
|
1317
|
-
const pillX =
|
|
1318
|
-
const pillWidth =
|
|
1319
|
-
const initialised =
|
|
1412
|
+
const tabLayouts = React25.useRef({});
|
|
1413
|
+
const pillX = React25.useRef(new reactNative.Animated.Value(0)).current;
|
|
1414
|
+
const pillWidth = React25.useRef(new reactNative.Animated.Value(0)).current;
|
|
1415
|
+
const initialised = React25.useRef(false);
|
|
1320
1416
|
const animatePill = (tabValue, animate) => {
|
|
1321
1417
|
const layout = tabLayouts.current[tabValue];
|
|
1322
1418
|
if (!layout) return;
|
|
@@ -1340,7 +1436,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1340
1436
|
pillWidth.setValue(layout.width);
|
|
1341
1437
|
}
|
|
1342
1438
|
};
|
|
1343
|
-
|
|
1439
|
+
React25.useEffect(() => {
|
|
1344
1440
|
if (initialised.current) {
|
|
1345
1441
|
animatePill(active, true);
|
|
1346
1442
|
}
|
|
@@ -1350,11 +1446,11 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1350
1446
|
if (!value) setInternal(v);
|
|
1351
1447
|
onValueChange?.(v);
|
|
1352
1448
|
};
|
|
1353
|
-
return /* @__PURE__ */
|
|
1449
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles17.list, { backgroundColor: colors.muted }] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1354
1450
|
reactNative.Animated.View,
|
|
1355
1451
|
{
|
|
1356
1452
|
style: [
|
|
1357
|
-
|
|
1453
|
+
styles17.pill,
|
|
1358
1454
|
{
|
|
1359
1455
|
backgroundColor: colors.background,
|
|
1360
1456
|
position: "absolute",
|
|
@@ -1371,7 +1467,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1371
1467
|
}
|
|
1372
1468
|
]
|
|
1373
1469
|
}
|
|
1374
|
-
), tabs.map((tab) => /* @__PURE__ */
|
|
1470
|
+
), tabs.map((tab) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1375
1471
|
TabTrigger,
|
|
1376
1472
|
{
|
|
1377
1473
|
key: tab.value,
|
|
@@ -1391,9 +1487,9 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1391
1487
|
}
|
|
1392
1488
|
function TabsContent({ value, activeValue, children, style }) {
|
|
1393
1489
|
if (value !== activeValue) return null;
|
|
1394
|
-
return /* @__PURE__ */
|
|
1490
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style }, children);
|
|
1395
1491
|
}
|
|
1396
|
-
var
|
|
1492
|
+
var styles17 = reactNative.StyleSheet.create({
|
|
1397
1493
|
list: {
|
|
1398
1494
|
flexDirection: "row",
|
|
1399
1495
|
borderRadius: ms(12),
|
|
@@ -1435,45 +1531,45 @@ function AccordionItemComponent({
|
|
|
1435
1531
|
onToggle
|
|
1436
1532
|
}) {
|
|
1437
1533
|
const { colors } = useTheme();
|
|
1438
|
-
const isExpanded =
|
|
1439
|
-
const height =
|
|
1440
|
-
|
|
1534
|
+
const isExpanded = Animated11.useSharedValue(isOpen);
|
|
1535
|
+
const height = Animated11.useSharedValue(0);
|
|
1536
|
+
React25__default.default.useEffect(() => {
|
|
1441
1537
|
isExpanded.value = isOpen;
|
|
1442
1538
|
}, [isOpen]);
|
|
1443
|
-
const derivedHeight =
|
|
1444
|
-
() =>
|
|
1539
|
+
const derivedHeight = Animated11.useDerivedValue(
|
|
1540
|
+
() => Animated11.withTiming(height.value * Number(isExpanded.value), {
|
|
1445
1541
|
duration: 220,
|
|
1446
|
-
easing: isExpanded.value ?
|
|
1542
|
+
easing: isExpanded.value ? Animated11.Easing.out(Animated11.Easing.ease) : Animated11.Easing.in(Animated11.Easing.ease)
|
|
1447
1543
|
})
|
|
1448
1544
|
);
|
|
1449
|
-
const derivedRotation =
|
|
1450
|
-
() =>
|
|
1545
|
+
const derivedRotation = Animated11.useDerivedValue(
|
|
1546
|
+
() => Animated11.withTiming(isExpanded.value ? 1 : 0, {
|
|
1451
1547
|
duration: 220,
|
|
1452
|
-
easing: isExpanded.value ?
|
|
1548
|
+
easing: isExpanded.value ? Animated11.Easing.out(Animated11.Easing.ease) : Animated11.Easing.in(Animated11.Easing.ease)
|
|
1453
1549
|
})
|
|
1454
1550
|
);
|
|
1455
|
-
const bodyStyle =
|
|
1551
|
+
const bodyStyle = Animated11.useAnimatedStyle(() => ({
|
|
1456
1552
|
height: derivedHeight.value,
|
|
1457
1553
|
overflow: "hidden"
|
|
1458
1554
|
}));
|
|
1459
|
-
const rotationStyle =
|
|
1555
|
+
const rotationStyle = Animated11.useAnimatedStyle(() => ({
|
|
1460
1556
|
transform: [{ rotate: `${derivedRotation.value * 180}deg` }]
|
|
1461
1557
|
}));
|
|
1462
|
-
return /* @__PURE__ */
|
|
1558
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles18.item, { borderBottomColor: colors.border }] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1463
1559
|
reactNative.Pressable,
|
|
1464
1560
|
{
|
|
1465
|
-
style: ({ pressed }) => [
|
|
1561
|
+
style: ({ pressed }) => [styles18.trigger, { opacity: pressed ? 0.6 : 1 }],
|
|
1466
1562
|
onPress: () => {
|
|
1467
1563
|
selectionAsync();
|
|
1468
1564
|
onToggle();
|
|
1469
1565
|
}
|
|
1470
1566
|
},
|
|
1471
|
-
/* @__PURE__ */
|
|
1472
|
-
/* @__PURE__ */
|
|
1473
|
-
), /* @__PURE__ */
|
|
1567
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles18.triggerText, { color: colors.foreground }] }, item.trigger),
|
|
1568
|
+
/* @__PURE__ */ React25__default.default.createElement(Animated11__default.default.View, { style: [styles18.chevron, rotationStyle] }, /* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foreground }))
|
|
1569
|
+
), /* @__PURE__ */ React25__default.default.createElement(Animated11__default.default.View, { style: bodyStyle }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1474
1570
|
reactNative.View,
|
|
1475
1571
|
{
|
|
1476
|
-
style:
|
|
1572
|
+
style: styles18.content,
|
|
1477
1573
|
onLayout: (e) => {
|
|
1478
1574
|
height.value = e.nativeEvent.layout.height;
|
|
1479
1575
|
}
|
|
@@ -1482,7 +1578,7 @@ function AccordionItemComponent({
|
|
|
1482
1578
|
)));
|
|
1483
1579
|
}
|
|
1484
1580
|
function Accordion({ items, type = "single", defaultValue, style }) {
|
|
1485
|
-
const [openValues, setOpenValues] =
|
|
1581
|
+
const [openValues, setOpenValues] = React25.useState(() => {
|
|
1486
1582
|
if (!defaultValue) return [];
|
|
1487
1583
|
return Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
1488
1584
|
});
|
|
@@ -1495,7 +1591,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
1495
1591
|
);
|
|
1496
1592
|
}
|
|
1497
1593
|
};
|
|
1498
|
-
return /* @__PURE__ */
|
|
1594
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style }, items.map((item) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1499
1595
|
AccordionItemComponent,
|
|
1500
1596
|
{
|
|
1501
1597
|
key: item.value,
|
|
@@ -1505,7 +1601,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
1505
1601
|
}
|
|
1506
1602
|
)));
|
|
1507
1603
|
}
|
|
1508
|
-
var
|
|
1604
|
+
var styles18 = reactNative.StyleSheet.create({
|
|
1509
1605
|
item: {
|
|
1510
1606
|
borderBottomWidth: 1
|
|
1511
1607
|
},
|
|
@@ -1546,7 +1642,7 @@ function Slider({
|
|
|
1546
1642
|
style
|
|
1547
1643
|
}) {
|
|
1548
1644
|
const { colors } = useTheme();
|
|
1549
|
-
const lastSteppedValue =
|
|
1645
|
+
const lastSteppedValue = React25.useRef(value);
|
|
1550
1646
|
const handleValueChange = (v) => {
|
|
1551
1647
|
if (step && v !== lastSteppedValue.current) {
|
|
1552
1648
|
lastSteppedValue.current = v;
|
|
@@ -1554,7 +1650,7 @@ function Slider({
|
|
|
1554
1650
|
}
|
|
1555
1651
|
onValueChange?.(v);
|
|
1556
1652
|
};
|
|
1557
|
-
return /* @__PURE__ */
|
|
1653
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles19.wrapper, style], accessibilityLabel }, label || showValue ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles19.header }, label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles19.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles19.valueText, { color: colors.mutedForeground }], allowFontScaling: true }, formatValue2(value)) : null) : null, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: disabled ? styles19.disabled : void 0 }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1558
1654
|
RNSlider__default.default,
|
|
1559
1655
|
{
|
|
1560
1656
|
value,
|
|
@@ -1567,12 +1663,12 @@ function Slider({
|
|
|
1567
1663
|
minimumTrackTintColor: colors.primary,
|
|
1568
1664
|
maximumTrackTintColor: colors.muted,
|
|
1569
1665
|
thumbTintColor: colors.primary,
|
|
1570
|
-
style:
|
|
1666
|
+
style: styles19.slider,
|
|
1571
1667
|
accessibilityLabel
|
|
1572
1668
|
}
|
|
1573
1669
|
)));
|
|
1574
1670
|
}
|
|
1575
|
-
var
|
|
1671
|
+
var styles19 = reactNative.StyleSheet.create({
|
|
1576
1672
|
wrapper: {
|
|
1577
1673
|
gap: vs(8)
|
|
1578
1674
|
},
|
|
@@ -1607,8 +1703,8 @@ function Sheet({
|
|
|
1607
1703
|
style
|
|
1608
1704
|
}) {
|
|
1609
1705
|
const { colors } = useTheme();
|
|
1610
|
-
const ref =
|
|
1611
|
-
|
|
1706
|
+
const ref = React25.useRef(null);
|
|
1707
|
+
React25.useEffect(() => {
|
|
1612
1708
|
if (open) {
|
|
1613
1709
|
impactLight();
|
|
1614
1710
|
ref.current?.present();
|
|
@@ -1616,7 +1712,7 @@ function Sheet({
|
|
|
1616
1712
|
ref.current?.dismiss();
|
|
1617
1713
|
}
|
|
1618
1714
|
}, [open]);
|
|
1619
|
-
const renderBackdrop = (props) => /* @__PURE__ */
|
|
1715
|
+
const renderBackdrop = (props) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1620
1716
|
bottomSheet.BottomSheetBackdrop,
|
|
1621
1717
|
{
|
|
1622
1718
|
...props,
|
|
@@ -1625,21 +1721,21 @@ function Sheet({
|
|
|
1625
1721
|
pressBehavior: "close"
|
|
1626
1722
|
}
|
|
1627
1723
|
);
|
|
1628
|
-
return /* @__PURE__ */
|
|
1724
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
1629
1725
|
bottomSheet.BottomSheetModal,
|
|
1630
1726
|
{
|
|
1631
1727
|
ref,
|
|
1632
1728
|
snapPoints,
|
|
1633
1729
|
onDismiss: onClose,
|
|
1634
1730
|
backdropComponent: renderBackdrop,
|
|
1635
|
-
backgroundStyle: [
|
|
1636
|
-
handleIndicatorStyle: [
|
|
1731
|
+
backgroundStyle: [styles20.background, { backgroundColor: colors.card }],
|
|
1732
|
+
handleIndicatorStyle: [styles20.handle, { backgroundColor: colors.border }],
|
|
1637
1733
|
enablePanDownToClose: true
|
|
1638
1734
|
},
|
|
1639
|
-
/* @__PURE__ */
|
|
1735
|
+
/* @__PURE__ */ React25__default.default.createElement(bottomSheet.BottomSheetView, { style: [styles20.content, style] }, title || description ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles20.header }, title ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles20.title, { color: colors.cardForeground }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles20.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null) : null, children)
|
|
1640
1736
|
);
|
|
1641
1737
|
}
|
|
1642
|
-
var
|
|
1738
|
+
var styles20 = reactNative.StyleSheet.create({
|
|
1643
1739
|
background: {
|
|
1644
1740
|
borderTopLeftRadius: ms(16),
|
|
1645
1741
|
borderTopRightRadius: ms(16)
|
|
@@ -1680,10 +1776,10 @@ function Select({
|
|
|
1680
1776
|
style
|
|
1681
1777
|
}) {
|
|
1682
1778
|
const { colors } = useTheme();
|
|
1683
|
-
const scale2 =
|
|
1684
|
-
const [pickerVisible, setPickerVisible] =
|
|
1685
|
-
const [pendingValue, setPendingValue] =
|
|
1686
|
-
const pickerRef =
|
|
1779
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
1780
|
+
const [pickerVisible, setPickerVisible] = React25.useState(false);
|
|
1781
|
+
const [pendingValue, setPendingValue] = React25.useState(value);
|
|
1782
|
+
const pickerRef = React25.useRef(null);
|
|
1687
1783
|
const selected = options.find((o) => o.value === value);
|
|
1688
1784
|
const handlePressIn = () => {
|
|
1689
1785
|
if (disabled) return;
|
|
@@ -1712,11 +1808,11 @@ function Select({
|
|
|
1712
1808
|
}
|
|
1713
1809
|
setPickerVisible(false);
|
|
1714
1810
|
};
|
|
1715
|
-
return /* @__PURE__ */
|
|
1811
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles21.container, style] }, label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles21.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, !isWeb2 ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }], opacity: disabled ? 0.45 : 1 } }, /* @__PURE__ */ React25__default.default.createElement(
|
|
1716
1812
|
reactNative.TouchableOpacity,
|
|
1717
1813
|
{
|
|
1718
1814
|
style: [
|
|
1719
|
-
|
|
1815
|
+
styles21.trigger,
|
|
1720
1816
|
{
|
|
1721
1817
|
borderColor: error ? colors.destructive : colors.border,
|
|
1722
1818
|
backgroundColor: colors.background
|
|
@@ -1728,11 +1824,11 @@ function Select({
|
|
|
1728
1824
|
activeOpacity: 1,
|
|
1729
1825
|
touchSoundDisabled: true
|
|
1730
1826
|
},
|
|
1731
|
-
/* @__PURE__ */
|
|
1827
|
+
/* @__PURE__ */ React25__default.default.createElement(
|
|
1732
1828
|
reactNative.Text,
|
|
1733
1829
|
{
|
|
1734
1830
|
style: [
|
|
1735
|
-
|
|
1831
|
+
styles21.triggerText,
|
|
1736
1832
|
{ color: selected ? colors.foreground : colors.mutedForeground }
|
|
1737
1833
|
],
|
|
1738
1834
|
numberOfLines: 1,
|
|
@@ -1740,8 +1836,8 @@ function Select({
|
|
|
1740
1836
|
},
|
|
1741
1837
|
selected?.label ?? placeholder
|
|
1742
1838
|
),
|
|
1743
|
-
/* @__PURE__ */
|
|
1744
|
-
)) : null, isIOS ? /* @__PURE__ */
|
|
1839
|
+
/* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-down", size: 20, color: colors.mutedForeground })
|
|
1840
|
+
)) : null, isIOS ? /* @__PURE__ */ React25__default.default.createElement(
|
|
1745
1841
|
reactNative.Modal,
|
|
1746
1842
|
{
|
|
1747
1843
|
visible: pickerVisible,
|
|
@@ -1749,16 +1845,16 @@ function Select({
|
|
|
1749
1845
|
animationType: "slide",
|
|
1750
1846
|
onRequestClose: handleDismiss
|
|
1751
1847
|
},
|
|
1752
|
-
/* @__PURE__ */
|
|
1753
|
-
/* @__PURE__ */
|
|
1848
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.TouchableOpacity, { style: styles21.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
|
|
1849
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles21.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles21.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles21.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React25__default.default.createElement(reactNative.View, null), /* @__PURE__ */ React25__default.default.createElement(reactNative.TouchableOpacity, { onPress: handleConfirm, style: styles21.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles21.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React25__default.default.createElement(
|
|
1754
1850
|
picker.Picker,
|
|
1755
1851
|
{
|
|
1756
1852
|
selectedValue: pendingValue ?? "",
|
|
1757
1853
|
onValueChange: (val) => setPendingValue(val),
|
|
1758
1854
|
itemStyle: { color: colors.foreground }
|
|
1759
1855
|
},
|
|
1760
|
-
!value ? /* @__PURE__ */
|
|
1761
|
-
options.map((o) => /* @__PURE__ */
|
|
1856
|
+
!value ? /* @__PURE__ */ React25__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", color: colors.mutedForeground, enabled: false }) : null,
|
|
1857
|
+
options.map((o) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1762
1858
|
picker.Picker.Item,
|
|
1763
1859
|
{
|
|
1764
1860
|
key: o.value,
|
|
@@ -1769,7 +1865,7 @@ function Select({
|
|
|
1769
1865
|
}
|
|
1770
1866
|
))
|
|
1771
1867
|
))
|
|
1772
|
-
) : null, isAndroid ? /* @__PURE__ */
|
|
1868
|
+
) : null, isAndroid ? /* @__PURE__ */ React25__default.default.createElement(
|
|
1773
1869
|
picker.Picker,
|
|
1774
1870
|
{
|
|
1775
1871
|
ref: pickerRef,
|
|
@@ -1783,10 +1879,10 @@ function Select({
|
|
|
1783
1879
|
mode: "dialog",
|
|
1784
1880
|
enabled: !disabled,
|
|
1785
1881
|
prompt: label,
|
|
1786
|
-
style:
|
|
1882
|
+
style: styles21.androidHiddenPicker
|
|
1787
1883
|
},
|
|
1788
|
-
!value ? /* @__PURE__ */
|
|
1789
|
-
options.map((o) => /* @__PURE__ */
|
|
1884
|
+
!value ? /* @__PURE__ */ React25__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
|
|
1885
|
+
options.map((o) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1790
1886
|
picker.Picker.Item,
|
|
1791
1887
|
{
|
|
1792
1888
|
key: o.value,
|
|
@@ -1795,7 +1891,7 @@ function Select({
|
|
|
1795
1891
|
enabled: !o.disabled
|
|
1796
1892
|
}
|
|
1797
1893
|
))
|
|
1798
|
-
) : null, isWeb2 ? /* @__PURE__ */
|
|
1894
|
+
) : null, isWeb2 ? /* @__PURE__ */ React25__default.default.createElement(
|
|
1799
1895
|
picker.Picker,
|
|
1800
1896
|
{
|
|
1801
1897
|
selectedValue: value ?? "",
|
|
@@ -1806,7 +1902,7 @@ function Select({
|
|
|
1806
1902
|
},
|
|
1807
1903
|
enabled: !disabled,
|
|
1808
1904
|
style: [
|
|
1809
|
-
|
|
1905
|
+
styles21.webPicker,
|
|
1810
1906
|
{
|
|
1811
1907
|
borderColor: error ? colors.destructive : colors.border,
|
|
1812
1908
|
color: selected ? colors.foreground : colors.mutedForeground,
|
|
@@ -1815,8 +1911,8 @@ function Select({
|
|
|
1815
1911
|
}
|
|
1816
1912
|
]
|
|
1817
1913
|
},
|
|
1818
|
-
/* @__PURE__ */
|
|
1819
|
-
options.map((o) => /* @__PURE__ */
|
|
1914
|
+
/* @__PURE__ */ React25__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }),
|
|
1915
|
+
options.map((o) => /* @__PURE__ */ React25__default.default.createElement(
|
|
1820
1916
|
picker.Picker.Item,
|
|
1821
1917
|
{
|
|
1822
1918
|
key: o.value,
|
|
@@ -1825,9 +1921,9 @@ function Select({
|
|
|
1825
1921
|
enabled: !o.disabled
|
|
1826
1922
|
}
|
|
1827
1923
|
))
|
|
1828
|
-
) : null, error ? /* @__PURE__ */
|
|
1924
|
+
) : null, error ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles21.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null);
|
|
1829
1925
|
}
|
|
1830
|
-
var
|
|
1926
|
+
var styles21 = reactNative.StyleSheet.create({
|
|
1831
1927
|
container: {
|
|
1832
1928
|
gap: vs(8)
|
|
1833
1929
|
},
|
|
@@ -1900,28 +1996,28 @@ var styles20 = reactNative.StyleSheet.create({
|
|
|
1900
1996
|
fontSize: ms(17)
|
|
1901
1997
|
}
|
|
1902
1998
|
});
|
|
1903
|
-
var ToastContext =
|
|
1999
|
+
var ToastContext = React25.createContext({
|
|
1904
2000
|
toast: () => {
|
|
1905
2001
|
},
|
|
1906
2002
|
dismiss: () => {
|
|
1907
2003
|
}
|
|
1908
2004
|
});
|
|
1909
2005
|
function useToast() {
|
|
1910
|
-
return
|
|
2006
|
+
return React25.useContext(ToastContext);
|
|
1911
2007
|
}
|
|
1912
2008
|
var SWIPE_THRESHOLD = 80;
|
|
1913
2009
|
var VELOCITY_THRESHOLD = 800;
|
|
1914
2010
|
function ToastNotification({ item, onDismiss }) {
|
|
1915
2011
|
const { colors } = useTheme();
|
|
1916
|
-
const translateY =
|
|
1917
|
-
const translateX =
|
|
1918
|
-
const opacity =
|
|
1919
|
-
|
|
1920
|
-
translateY.value =
|
|
1921
|
-
opacity.value =
|
|
2012
|
+
const translateY = Animated11.useSharedValue(-80);
|
|
2013
|
+
const translateX = Animated11.useSharedValue(0);
|
|
2014
|
+
const opacity = Animated11.useSharedValue(0);
|
|
2015
|
+
React25.useEffect(() => {
|
|
2016
|
+
translateY.value = Animated11.withTiming(0, { duration: 120, easing: Animated11.Easing.out(Animated11.Easing.exp) });
|
|
2017
|
+
opacity.value = Animated11.withTiming(1, { duration: 100 });
|
|
1922
2018
|
const timer = setTimeout(() => {
|
|
1923
|
-
translateY.value =
|
|
1924
|
-
opacity.value =
|
|
2019
|
+
translateY.value = Animated11.withTiming(-80, { duration: 200 });
|
|
2020
|
+
opacity.value = Animated11.withTiming(0, { duration: 200 }, (done) => {
|
|
1925
2021
|
if (done) reactNativeWorklets.scheduleOnRN(onDismiss);
|
|
1926
2022
|
});
|
|
1927
2023
|
}, item.duration ?? 3e3);
|
|
@@ -1933,15 +2029,15 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1933
2029
|
const shouldDismiss = Math.abs(translateX.value) > SWIPE_THRESHOLD || Math.abs(e.velocityX) > VELOCITY_THRESHOLD;
|
|
1934
2030
|
if (shouldDismiss) {
|
|
1935
2031
|
const direction = translateX.value > 0 ? 1 : -1;
|
|
1936
|
-
translateX.value =
|
|
2032
|
+
translateX.value = Animated11.withTiming(direction * 500, { duration: 200 }, (done) => {
|
|
1937
2033
|
if (done) reactNativeWorklets.scheduleOnRN(onDismiss);
|
|
1938
2034
|
});
|
|
1939
|
-
opacity.value =
|
|
2035
|
+
opacity.value = Animated11.withTiming(0, { duration: 150 });
|
|
1940
2036
|
} else {
|
|
1941
|
-
translateX.value =
|
|
2037
|
+
translateX.value = Animated11.withSpring(0, { damping: 20, stiffness: 300 });
|
|
1942
2038
|
}
|
|
1943
2039
|
});
|
|
1944
|
-
const animatedStyle =
|
|
2040
|
+
const animatedStyle = Animated11.useAnimatedStyle(() => ({
|
|
1945
2041
|
opacity: opacity.value,
|
|
1946
2042
|
transform: [{ translateY: translateY.value }, { translateX: translateX.value }]
|
|
1947
2043
|
}));
|
|
@@ -1955,14 +2051,14 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1955
2051
|
destructive: colors.destructiveForeground,
|
|
1956
2052
|
success: colors.successForeground
|
|
1957
2053
|
}[item.variant ?? "default"];
|
|
1958
|
-
const defaultIcon = item.variant === "success" ? /* @__PURE__ */
|
|
2054
|
+
const defaultIcon = item.variant === "success" ? /* @__PURE__ */ React25__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 22, color: textColor }) : item.variant === "destructive" ? /* @__PURE__ */ React25__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 24, color: textColor }) : /* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 22, color: textColor });
|
|
1959
2055
|
const leftIcon = item.iconName ? renderIcon(item.iconName, 22, item.iconColor ?? textColor) : item.icon ?? defaultIcon;
|
|
1960
|
-
return /* @__PURE__ */
|
|
2056
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React25__default.default.createElement(Animated11__default.default.View, { style: [styles22.toast, { backgroundColor: bgColor }, animatedStyle] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles22.leftIconContainer }, leftIcon), /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles22.toastContent }, item.title ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles22.toastTitle, { color: textColor }], allowFontScaling: true }, item.title) : null, item.description ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles22.toastDescription, { color: textColor, opacity: 0.85 }], allowFontScaling: true }, item.description) : null), /* @__PURE__ */ React25__default.default.createElement(reactNative.TouchableOpacity, { onPress: onDismiss, style: styles22.dismissButton, touchSoundDisabled: true }, /* @__PURE__ */ React25__default.default.createElement(vectorIcons.AntDesign, { name: "close-circle", size: 18, color: textColor }))));
|
|
1961
2057
|
}
|
|
1962
2058
|
function ToastProvider({ children }) {
|
|
1963
|
-
const [toasts, setToasts] =
|
|
2059
|
+
const [toasts, setToasts] = React25.useState([]);
|
|
1964
2060
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
1965
|
-
const toast =
|
|
2061
|
+
const toast = React25.useCallback((item) => {
|
|
1966
2062
|
const id = Math.random().toString(36).slice(2);
|
|
1967
2063
|
if (item.variant === "success") {
|
|
1968
2064
|
notificationSuccess();
|
|
@@ -1973,12 +2069,12 @@ function ToastProvider({ children }) {
|
|
|
1973
2069
|
}
|
|
1974
2070
|
setToasts((prev) => [{ ...item, id }, ...prev].slice(0, 3));
|
|
1975
2071
|
}, []);
|
|
1976
|
-
const dismiss =
|
|
2072
|
+
const dismiss = React25.useCallback((id) => {
|
|
1977
2073
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
1978
2074
|
}, []);
|
|
1979
|
-
return /* @__PURE__ */
|
|
2075
|
+
return /* @__PURE__ */ React25__default.default.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles22.container, reactNative.Platform.OS === "web" && styles22.containerWeb, { top: insets.top + 8 }], pointerEvents: "box-none" }, toasts.map((item) => /* @__PURE__ */ React25__default.default.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
|
|
1980
2076
|
}
|
|
1981
|
-
var
|
|
2077
|
+
var styles22 = reactNative.StyleSheet.create({
|
|
1982
2078
|
container: {
|
|
1983
2079
|
position: "absolute",
|
|
1984
2080
|
left: s(16),
|
|
@@ -2056,7 +2152,7 @@ function CurrencyInput({
|
|
|
2056
2152
|
onChangeValue?.(isNaN(raw) ? 0 : raw);
|
|
2057
2153
|
};
|
|
2058
2154
|
const inputStyle = size === "large" ? { fontSize: ms(36) } : {};
|
|
2059
|
-
return /* @__PURE__ */
|
|
2155
|
+
return /* @__PURE__ */ React25__default.default.createElement(
|
|
2060
2156
|
Input,
|
|
2061
2157
|
{
|
|
2062
2158
|
value,
|
|
@@ -2087,16 +2183,16 @@ function formatValue(value, prefix, showDecimals) {
|
|
|
2087
2183
|
function CurrencyDisplay({ value, prefix = "$", showDecimals = false, textColor, style }) {
|
|
2088
2184
|
const { colors } = useTheme();
|
|
2089
2185
|
const formatted = formatValue(value, prefix, showDecimals);
|
|
2090
|
-
return /* @__PURE__ */
|
|
2186
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles23.container, style] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles23.amount, { color: textColor ?? colors.foreground }], allowFontScaling: true }, formatted));
|
|
2091
2187
|
}
|
|
2092
|
-
var
|
|
2188
|
+
var styles23 = reactNative.StyleSheet.create({
|
|
2093
2189
|
container: {},
|
|
2094
2190
|
amount: {
|
|
2095
2191
|
fontSize: ms(56),
|
|
2096
2192
|
fontWeight: "700"
|
|
2097
2193
|
}
|
|
2098
2194
|
});
|
|
2099
|
-
var
|
|
2195
|
+
var nativeDriver8 = reactNative.Platform.OS !== "web";
|
|
2100
2196
|
function ListItem({
|
|
2101
2197
|
leftRender,
|
|
2102
2198
|
rightRender,
|
|
@@ -2120,12 +2216,12 @@ function ListItem({
|
|
|
2120
2216
|
captionStyle
|
|
2121
2217
|
}) {
|
|
2122
2218
|
const { colors } = useTheme();
|
|
2123
|
-
const scale2 =
|
|
2219
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
2124
2220
|
const handlePressIn = () => {
|
|
2125
2221
|
if (!onPress || disabled) return;
|
|
2126
2222
|
reactNative.Animated.spring(scale2, {
|
|
2127
2223
|
toValue: 0.97,
|
|
2128
|
-
useNativeDriver:
|
|
2224
|
+
useNativeDriver: nativeDriver8,
|
|
2129
2225
|
speed: 40,
|
|
2130
2226
|
bounciness: 0
|
|
2131
2227
|
}).start();
|
|
@@ -2133,7 +2229,7 @@ function ListItem({
|
|
|
2133
2229
|
const handlePressOut = () => {
|
|
2134
2230
|
reactNative.Animated.spring(scale2, {
|
|
2135
2231
|
toValue: 1,
|
|
2136
|
-
useNativeDriver:
|
|
2232
|
+
useNativeDriver: nativeDriver8,
|
|
2137
2233
|
speed: 40,
|
|
2138
2234
|
bounciness: 4
|
|
2139
2235
|
}).start();
|
|
@@ -2155,10 +2251,10 @@ function ListItem({
|
|
|
2155
2251
|
shadowRadius: 6,
|
|
2156
2252
|
elevation: 2
|
|
2157
2253
|
} : {};
|
|
2158
|
-
return /* @__PURE__ */
|
|
2254
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles24.disabled] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
2159
2255
|
reactNative.TouchableOpacity,
|
|
2160
2256
|
{
|
|
2161
|
-
style: [
|
|
2257
|
+
style: [styles24.container, cardStyle, style],
|
|
2162
2258
|
onPress: onPress ? handlePress : void 0,
|
|
2163
2259
|
onPressIn: handlePressIn,
|
|
2164
2260
|
onPressOut: handlePressOut,
|
|
@@ -2166,51 +2262,51 @@ function ListItem({
|
|
|
2166
2262
|
activeOpacity: 1,
|
|
2167
2263
|
touchSoundDisabled: true
|
|
2168
2264
|
},
|
|
2169
|
-
effectiveLeft ? /* @__PURE__ */
|
|
2170
|
-
/* @__PURE__ */
|
|
2265
|
+
effectiveLeft ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles24.leftContainer }, effectiveLeft) : null,
|
|
2266
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles24.content }, /* @__PURE__ */ React25__default.default.createElement(
|
|
2171
2267
|
reactNative.Text,
|
|
2172
2268
|
{
|
|
2173
|
-
style: [
|
|
2269
|
+
style: [styles24.title, { color: colors.foreground }, titleStyle],
|
|
2174
2270
|
numberOfLines: 2,
|
|
2175
2271
|
allowFontScaling: true
|
|
2176
2272
|
},
|
|
2177
2273
|
title
|
|
2178
|
-
), subtitle ? /* @__PURE__ */
|
|
2274
|
+
), subtitle ? /* @__PURE__ */ React25__default.default.createElement(
|
|
2179
2275
|
reactNative.Text,
|
|
2180
2276
|
{
|
|
2181
|
-
style: [
|
|
2277
|
+
style: [styles24.subtitle, { color: colors.mutedForeground }, subtitleStyle],
|
|
2182
2278
|
numberOfLines: 2,
|
|
2183
2279
|
allowFontScaling: true
|
|
2184
2280
|
},
|
|
2185
2281
|
subtitle
|
|
2186
|
-
) : null, caption ? /* @__PURE__ */
|
|
2282
|
+
) : null, caption ? /* @__PURE__ */ React25__default.default.createElement(
|
|
2187
2283
|
reactNative.Text,
|
|
2188
2284
|
{
|
|
2189
|
-
style: [
|
|
2285
|
+
style: [styles24.caption, { color: colors.mutedForeground }, captionStyle],
|
|
2190
2286
|
numberOfLines: 1,
|
|
2191
2287
|
allowFontScaling: true
|
|
2192
2288
|
},
|
|
2193
2289
|
caption
|
|
2194
2290
|
) : null),
|
|
2195
|
-
effectiveRight !== void 0 ? /* @__PURE__ */
|
|
2291
|
+
effectiveRight !== void 0 ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles24.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React25__default.default.createElement(
|
|
2196
2292
|
reactNative.Text,
|
|
2197
2293
|
{
|
|
2198
|
-
style: [
|
|
2294
|
+
style: [styles24.rightText, { color: colors.mutedForeground }],
|
|
2199
2295
|
allowFontScaling: true
|
|
2200
2296
|
},
|
|
2201
2297
|
effectiveRight
|
|
2202
|
-
) : effectiveRight) : showChevron ? /* @__PURE__ */
|
|
2203
|
-
), showSeparator ? /* @__PURE__ */
|
|
2298
|
+
) : effectiveRight) : showChevron ? /* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.mutedForeground }) : null
|
|
2299
|
+
), showSeparator ? /* @__PURE__ */ React25__default.default.createElement(
|
|
2204
2300
|
reactNative.View,
|
|
2205
2301
|
{
|
|
2206
2302
|
style: [
|
|
2207
|
-
|
|
2303
|
+
styles24.separator,
|
|
2208
2304
|
{ backgroundColor: colors.border, marginLeft: effectiveLeft ? s(16) + s(44) + s(12) : s(16) }
|
|
2209
2305
|
]
|
|
2210
2306
|
}
|
|
2211
2307
|
) : null);
|
|
2212
2308
|
}
|
|
2213
|
-
var
|
|
2309
|
+
var styles24 = reactNative.StyleSheet.create({
|
|
2214
2310
|
container: {
|
|
2215
2311
|
flexDirection: "row",
|
|
2216
2312
|
alignItems: "center",
|
|
@@ -2265,12 +2361,12 @@ var styles23 = reactNative.StyleSheet.create({
|
|
|
2265
2361
|
opacity: 0.45
|
|
2266
2362
|
}
|
|
2267
2363
|
});
|
|
2268
|
-
var
|
|
2364
|
+
var nativeDriver9 = reactNative.Platform.OS !== "web";
|
|
2269
2365
|
function Chip({ label, selected = false, onPress, style }) {
|
|
2270
2366
|
const { colors } = useTheme();
|
|
2271
|
-
const scale2 =
|
|
2272
|
-
const pressAnim =
|
|
2273
|
-
|
|
2367
|
+
const scale2 = React25.useRef(new reactNative.Animated.Value(1)).current;
|
|
2368
|
+
const pressAnim = React25.useRef(new reactNative.Animated.Value(selected ? 1 : 0)).current;
|
|
2369
|
+
React25.useEffect(() => {
|
|
2274
2370
|
reactNative.Animated.timing(pressAnim, {
|
|
2275
2371
|
toValue: selected ? 1 : 0,
|
|
2276
2372
|
duration: 150,
|
|
@@ -2281,7 +2377,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2281
2377
|
const handlePressIn = () => {
|
|
2282
2378
|
reactNative.Animated.spring(scale2, {
|
|
2283
2379
|
toValue: 0.95,
|
|
2284
|
-
useNativeDriver:
|
|
2380
|
+
useNativeDriver: nativeDriver9,
|
|
2285
2381
|
speed: 40,
|
|
2286
2382
|
bounciness: 0
|
|
2287
2383
|
}).start();
|
|
@@ -2289,7 +2385,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2289
2385
|
const handlePressOut = () => {
|
|
2290
2386
|
reactNative.Animated.spring(scale2, {
|
|
2291
2387
|
toValue: 1,
|
|
2292
|
-
useNativeDriver:
|
|
2388
|
+
useNativeDriver: nativeDriver9,
|
|
2293
2389
|
speed: 40,
|
|
2294
2390
|
bounciness: 4
|
|
2295
2391
|
}).start();
|
|
@@ -2310,7 +2406,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2310
2406
|
inputRange: [0, 1],
|
|
2311
2407
|
outputRange: [colors.border, colors.primary]
|
|
2312
2408
|
});
|
|
2313
|
-
return /* @__PURE__ */
|
|
2409
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [styles25.wrapper, { transform: [{ scale: scale2 }] }, style] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
2314
2410
|
reactNative.TouchableOpacity,
|
|
2315
2411
|
{
|
|
2316
2412
|
onPress: handlePress,
|
|
@@ -2319,7 +2415,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2319
2415
|
activeOpacity: 1,
|
|
2320
2416
|
touchSoundDisabled: true
|
|
2321
2417
|
},
|
|
2322
|
-
/* @__PURE__ */
|
|
2418
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.View, { style: [styles25.chip, { backgroundColor, borderColor }] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.Animated.Text, { style: [styles25.label, { color: textColor }], allowFontScaling: true }, label))
|
|
2323
2419
|
));
|
|
2324
2420
|
}
|
|
2325
2421
|
function ChipGroup({ options, value, onValueChange, multiSelect = false, style }) {
|
|
@@ -2344,7 +2440,7 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
2344
2440
|
}
|
|
2345
2441
|
return optionValue === value;
|
|
2346
2442
|
};
|
|
2347
|
-
return /* @__PURE__ */
|
|
2443
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles25.group, style] }, options.map((opt) => /* @__PURE__ */ React25__default.default.createElement(
|
|
2348
2444
|
Chip,
|
|
2349
2445
|
{
|
|
2350
2446
|
key: opt.value,
|
|
@@ -2354,7 +2450,7 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
2354
2450
|
}
|
|
2355
2451
|
)));
|
|
2356
2452
|
}
|
|
2357
|
-
var
|
|
2453
|
+
var styles25 = reactNative.StyleSheet.create({
|
|
2358
2454
|
wrapper: {},
|
|
2359
2455
|
chip: {
|
|
2360
2456
|
borderRadius: 999,
|
|
@@ -2386,18 +2482,18 @@ function ConfirmDialog({
|
|
|
2386
2482
|
onCancel
|
|
2387
2483
|
}) {
|
|
2388
2484
|
const { colors } = useTheme();
|
|
2389
|
-
return /* @__PURE__ */
|
|
2485
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.Modal, { visible, transparent: true, animationType: "fade", onRequestClose: onCancel }, /* @__PURE__ */ React25__default.default.createElement(reactNative.TouchableOpacity, { style: styles26.overlay, activeOpacity: 1, onPress: onCancel }, /* @__PURE__ */ React25__default.default.createElement(
|
|
2390
2486
|
reactNative.View,
|
|
2391
2487
|
{
|
|
2392
|
-
style: [
|
|
2488
|
+
style: [styles26.dialog, { backgroundColor: colors.card }],
|
|
2393
2489
|
onStartShouldSetResponder: () => true
|
|
2394
2490
|
},
|
|
2395
|
-
/* @__PURE__ */
|
|
2396
|
-
description ? /* @__PURE__ */
|
|
2397
|
-
/* @__PURE__ */
|
|
2491
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles26.title, { color: colors.cardForeground }], allowFontScaling: true }, title),
|
|
2492
|
+
description ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles26.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null,
|
|
2493
|
+
/* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles26.actions }, /* @__PURE__ */ React25__default.default.createElement(Button, { label: cancelLabel, variant: "outline", fullWidth: true, onPress: onCancel }), /* @__PURE__ */ React25__default.default.createElement(Button, { label: confirmLabel, variant: confirmVariant, fullWidth: true, onPress: onConfirm }))
|
|
2398
2494
|
)));
|
|
2399
2495
|
}
|
|
2400
|
-
var
|
|
2496
|
+
var styles26 = reactNative.StyleSheet.create({
|
|
2401
2497
|
overlay: {
|
|
2402
2498
|
flex: 1,
|
|
2403
2499
|
backgroundColor: "rgba(0,0,0,0.5)",
|
|
@@ -2433,9 +2529,9 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
2433
2529
|
});
|
|
2434
2530
|
function LabelValue({ label, value, style }) {
|
|
2435
2531
|
const { colors } = useTheme();
|
|
2436
|
-
return /* @__PURE__ */
|
|
2532
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles27.container, style] }, /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles27.label, { color: colors.mutedForeground }], allowFontScaling: true }, label), typeof value === "string" ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles27.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
|
|
2437
2533
|
}
|
|
2438
|
-
var
|
|
2534
|
+
var styles27 = reactNative.StyleSheet.create({
|
|
2439
2535
|
container: {
|
|
2440
2536
|
flexDirection: "row",
|
|
2441
2537
|
justifyContent: "space-between",
|
|
@@ -2485,27 +2581,27 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2485
2581
|
onChange({ month: value.month + 1, year: value.year });
|
|
2486
2582
|
}
|
|
2487
2583
|
};
|
|
2488
|
-
return /* @__PURE__ */
|
|
2584
|
+
return /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles28.container, style] }, /* @__PURE__ */ React25__default.default.createElement(
|
|
2489
2585
|
reactNative.TouchableOpacity,
|
|
2490
2586
|
{
|
|
2491
|
-
style:
|
|
2587
|
+
style: styles28.arrow,
|
|
2492
2588
|
onPress: handlePrev,
|
|
2493
2589
|
activeOpacity: 0.6,
|
|
2494
2590
|
touchSoundDisabled: true
|
|
2495
2591
|
},
|
|
2496
|
-
/* @__PURE__ */
|
|
2497
|
-
), /* @__PURE__ */
|
|
2592
|
+
/* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
|
|
2593
|
+
), /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles28.label, { color: colors.foreground }], allowFontScaling: true }, MONTH_NAMES[value.month - 1], " ", value.year), /* @__PURE__ */ React25__default.default.createElement(
|
|
2498
2594
|
reactNative.TouchableOpacity,
|
|
2499
2595
|
{
|
|
2500
|
-
style:
|
|
2596
|
+
style: styles28.arrow,
|
|
2501
2597
|
onPress: handleNext,
|
|
2502
2598
|
activeOpacity: 0.6,
|
|
2503
2599
|
touchSoundDisabled: true
|
|
2504
2600
|
},
|
|
2505
|
-
/* @__PURE__ */
|
|
2601
|
+
/* @__PURE__ */ React25__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
|
|
2506
2602
|
));
|
|
2507
2603
|
}
|
|
2508
|
-
var
|
|
2604
|
+
var styles28 = reactNative.StyleSheet.create({
|
|
2509
2605
|
container: {
|
|
2510
2606
|
flexDirection: "row",
|
|
2511
2607
|
alignItems: "center",
|
|
@@ -2526,6 +2622,64 @@ var styles27 = reactNative.StyleSheet.create({
|
|
|
2526
2622
|
}
|
|
2527
2623
|
});
|
|
2528
2624
|
|
|
2625
|
+
// src/tokens.ts
|
|
2626
|
+
var SPACING = {
|
|
2627
|
+
xs: 4,
|
|
2628
|
+
sm: 8,
|
|
2629
|
+
md: 12,
|
|
2630
|
+
lg: 16,
|
|
2631
|
+
xl: 24,
|
|
2632
|
+
"2xl": 32,
|
|
2633
|
+
"3xl": 48
|
|
2634
|
+
};
|
|
2635
|
+
var ICON_SIZES = {
|
|
2636
|
+
sm: 14,
|
|
2637
|
+
md: 18,
|
|
2638
|
+
lg: 22,
|
|
2639
|
+
xl: 28,
|
|
2640
|
+
"2xl": 32
|
|
2641
|
+
};
|
|
2642
|
+
var RADIUS = {
|
|
2643
|
+
sm: 4,
|
|
2644
|
+
md: 8,
|
|
2645
|
+
lg: 12,
|
|
2646
|
+
xl: 16,
|
|
2647
|
+
full: 9999
|
|
2648
|
+
};
|
|
2649
|
+
var SHADOWS = {
|
|
2650
|
+
sm: {
|
|
2651
|
+
shadowColor: "#000",
|
|
2652
|
+
shadowOffset: { width: 0, height: 1 },
|
|
2653
|
+
shadowOpacity: 0.08,
|
|
2654
|
+
shadowRadius: 4,
|
|
2655
|
+
elevation: 2
|
|
2656
|
+
},
|
|
2657
|
+
md: {
|
|
2658
|
+
shadowColor: "#000",
|
|
2659
|
+
shadowOffset: { width: 0, height: 3 },
|
|
2660
|
+
shadowOpacity: 0.12,
|
|
2661
|
+
shadowRadius: 8,
|
|
2662
|
+
elevation: 5
|
|
2663
|
+
},
|
|
2664
|
+
lg: {
|
|
2665
|
+
shadowColor: "#000",
|
|
2666
|
+
shadowOffset: { width: 0, height: 6 },
|
|
2667
|
+
shadowOpacity: 0.2,
|
|
2668
|
+
shadowRadius: 16,
|
|
2669
|
+
elevation: 10
|
|
2670
|
+
},
|
|
2671
|
+
xl: {
|
|
2672
|
+
shadowColor: "#000",
|
|
2673
|
+
shadowOffset: { width: 0, height: 12 },
|
|
2674
|
+
shadowOpacity: 0.28,
|
|
2675
|
+
shadowRadius: 24,
|
|
2676
|
+
elevation: 18
|
|
2677
|
+
}
|
|
2678
|
+
};
|
|
2679
|
+
var BREAKPOINTS = {
|
|
2680
|
+
wide: 700
|
|
2681
|
+
};
|
|
2682
|
+
|
|
2529
2683
|
Object.defineProperty(exports, "BottomSheetModalProvider", {
|
|
2530
2684
|
enumerable: true,
|
|
2531
2685
|
get: function () { return bottomSheet.BottomSheetModalProvider; }
|
|
@@ -2533,6 +2687,7 @@ Object.defineProperty(exports, "BottomSheetModalProvider", {
|
|
|
2533
2687
|
exports.Accordion = Accordion;
|
|
2534
2688
|
exports.AlertBanner = AlertBanner;
|
|
2535
2689
|
exports.Avatar = Avatar;
|
|
2690
|
+
exports.BREAKPOINTS = BREAKPOINTS;
|
|
2536
2691
|
exports.Badge = Badge;
|
|
2537
2692
|
exports.Button = Button;
|
|
2538
2693
|
exports.Card = Card;
|
|
@@ -2549,13 +2704,18 @@ exports.CurrencyDisplay = CurrencyDisplay;
|
|
|
2549
2704
|
exports.CurrencyInput = CurrencyInput;
|
|
2550
2705
|
exports.CurrencyInputLarge = CurrencyInput;
|
|
2551
2706
|
exports.EmptyState = EmptyState;
|
|
2707
|
+
exports.ICON_SIZES = ICON_SIZES;
|
|
2552
2708
|
exports.Icon = Icon;
|
|
2709
|
+
exports.IconButton = IconButton;
|
|
2553
2710
|
exports.Input = Input;
|
|
2554
2711
|
exports.LabelValue = LabelValue;
|
|
2555
2712
|
exports.ListItem = ListItem;
|
|
2556
2713
|
exports.MonthPicker = MonthPicker;
|
|
2557
2714
|
exports.Progress = Progress;
|
|
2715
|
+
exports.RADIUS = RADIUS;
|
|
2558
2716
|
exports.RadioGroup = RadioGroup;
|
|
2717
|
+
exports.SHADOWS = SHADOWS;
|
|
2718
|
+
exports.SPACING = SPACING;
|
|
2559
2719
|
exports.Select = Select;
|
|
2560
2720
|
exports.Separator = Separator;
|
|
2561
2721
|
exports.Sheet = Sheet;
|