@retray-dev/ui-kit 2.5.2 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPONENTS.md +152 -5
- package/dist/index.d.mts +98 -8
- package/dist/index.d.ts +98 -8
- package/dist/index.js +240 -166
- package/dist/index.mjs +185 -119
- package/package.json +1 -1
- package/src/components/AlertBanner/AlertBanner.tsx +14 -2
- package/src/components/Badge/Badge.tsx +16 -2
- package/src/components/Button/Button.tsx +20 -3
- package/src/components/EmptyState/EmptyState.tsx +15 -3
- package/src/components/Input/Input.tsx +29 -8
- package/src/components/ListItem/ListItem.tsx +26 -3
- package/src/components/Toast/Toast.tsx +11 -1
- package/src/components/Toggle/Toggle.tsx +27 -2
- package/src/index.ts +4 -0
- package/src/utils/icons.ts +73 -0
package/dist/index.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React24 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
5
|
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
6
|
+
var AntDesign = require('@expo/vector-icons/AntDesign');
|
|
7
|
+
var Entypo = require('@expo/vector-icons/Entypo');
|
|
8
|
+
var Feather = require('@expo/vector-icons/Feather');
|
|
9
|
+
var FontAwesome5 = require('@expo/vector-icons/FontAwesome5');
|
|
10
|
+
var MaterialIcons = require('@expo/vector-icons/MaterialIcons');
|
|
11
|
+
var Ionicons = require('@expo/vector-icons/Ionicons');
|
|
6
12
|
var vectorIcons = require('@expo/vector-icons');
|
|
7
13
|
var expoLinearGradient = require('expo-linear-gradient');
|
|
8
14
|
var Animated10 = require('react-native-reanimated');
|
|
@@ -15,7 +21,13 @@ var reactNativeSafeAreaContext = require('react-native-safe-area-context');
|
|
|
15
21
|
|
|
16
22
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
23
|
|
|
18
|
-
var
|
|
24
|
+
var React24__default = /*#__PURE__*/_interopDefault(React24);
|
|
25
|
+
var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
|
|
26
|
+
var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
|
|
27
|
+
var Feather__default = /*#__PURE__*/_interopDefault(Feather);
|
|
28
|
+
var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
|
|
29
|
+
var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
|
|
30
|
+
var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
|
|
19
31
|
var Animated10__default = /*#__PURE__*/_interopDefault(Animated10);
|
|
20
32
|
var RNSlider__default = /*#__PURE__*/_interopDefault(RNSlider);
|
|
21
33
|
|
|
@@ -71,22 +83,22 @@ var defaultDark = {
|
|
|
71
83
|
};
|
|
72
84
|
|
|
73
85
|
// src/theme/ThemeProvider.tsx
|
|
74
|
-
var ThemeContext =
|
|
86
|
+
var ThemeContext = React24.createContext({
|
|
75
87
|
colors: defaultLight,
|
|
76
88
|
colorScheme: "light"
|
|
77
89
|
});
|
|
78
90
|
function ThemeProvider({ children, theme, colorScheme = "system" }) {
|
|
79
91
|
const systemScheme = reactNative.useColorScheme() ?? "light";
|
|
80
92
|
const resolvedScheme = colorScheme === "system" ? systemScheme : colorScheme;
|
|
81
|
-
const colors =
|
|
93
|
+
const colors = React24.useMemo(() => {
|
|
82
94
|
const base = resolvedScheme === "dark" ? defaultDark : defaultLight;
|
|
83
95
|
const override = resolvedScheme === "dark" ? theme?.dark : theme?.light;
|
|
84
96
|
return override ? { ...base, ...override } : base;
|
|
85
97
|
}, [resolvedScheme, theme]);
|
|
86
|
-
return /* @__PURE__ */
|
|
98
|
+
return /* @__PURE__ */ React24__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
|
|
87
99
|
}
|
|
88
100
|
function useTheme() {
|
|
89
|
-
const context =
|
|
101
|
+
const context = React24.useContext(ThemeContext);
|
|
90
102
|
if (!context) {
|
|
91
103
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
92
104
|
}
|
|
@@ -113,6 +125,45 @@ var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
|
|
|
113
125
|
var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
|
|
114
126
|
var ms = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateScale;
|
|
115
127
|
var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalScale;
|
|
128
|
+
var ICON_FAMILIES = [
|
|
129
|
+
{ name: "Ionicons", component: Ionicons__default.default, glyphMap: Ionicons__default.default.glyphMap },
|
|
130
|
+
{ name: "MaterialIcons", component: MaterialIcons__default.default, glyphMap: MaterialIcons__default.default.glyphMap },
|
|
131
|
+
{ name: "FontAwesome5", component: FontAwesome5__default.default, glyphMap: FontAwesome5__default.default.glyphMap },
|
|
132
|
+
{ name: "Entypo", component: Entypo__default.default, glyphMap: Entypo__default.default.glyphMap },
|
|
133
|
+
{ name: "AntDesign", component: AntDesign__default.default, glyphMap: AntDesign__default.default.glyphMap },
|
|
134
|
+
{ name: "Feather", component: Feather__default.default, glyphMap: Feather__default.default.glyphMap }
|
|
135
|
+
];
|
|
136
|
+
var resolvedCache = null;
|
|
137
|
+
function buildCache() {
|
|
138
|
+
const cache = /* @__PURE__ */ new Map();
|
|
139
|
+
for (const family of ICON_FAMILIES) {
|
|
140
|
+
if (!family.glyphMap) continue;
|
|
141
|
+
for (const iconName of Object.keys(family.glyphMap)) {
|
|
142
|
+
cache.set(iconName, family);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return cache;
|
|
146
|
+
}
|
|
147
|
+
function resolveFamily(name) {
|
|
148
|
+
if (!resolvedCache) {
|
|
149
|
+
resolvedCache = buildCache();
|
|
150
|
+
}
|
|
151
|
+
return resolvedCache.get(name) ?? null;
|
|
152
|
+
}
|
|
153
|
+
function Icon({ name, size, color, family }) {
|
|
154
|
+
let resolved = null;
|
|
155
|
+
if (family) {
|
|
156
|
+
resolved = ICON_FAMILIES.find((f) => f.name === family) ?? null;
|
|
157
|
+
} else {
|
|
158
|
+
resolved = resolveFamily(name);
|
|
159
|
+
}
|
|
160
|
+
if (!resolved) return null;
|
|
161
|
+
const Component = resolved.component;
|
|
162
|
+
return React24__default.default.createElement(Component, { name, size, color });
|
|
163
|
+
}
|
|
164
|
+
function renderIcon(name, size, color) {
|
|
165
|
+
return React24__default.default.createElement(Icon, { name, size, color });
|
|
166
|
+
}
|
|
116
167
|
|
|
117
168
|
// src/components/Button/Button.tsx
|
|
118
169
|
var nativeDriver = reactNative.Platform.OS !== "web";
|
|
@@ -126,6 +177,7 @@ var labelSizeStyles = {
|
|
|
126
177
|
md: { fontSize: ms(17) },
|
|
127
178
|
lg: { fontSize: ms(18) }
|
|
128
179
|
};
|
|
180
|
+
var iconSizeMap = { sm: 16, md: 18, lg: 20 };
|
|
129
181
|
function Button({
|
|
130
182
|
label,
|
|
131
183
|
variant = "primary",
|
|
@@ -133,6 +185,8 @@ function Button({
|
|
|
133
185
|
loading = false,
|
|
134
186
|
fullWidth = false,
|
|
135
187
|
icon,
|
|
188
|
+
iconName,
|
|
189
|
+
iconColor,
|
|
136
190
|
iconPosition = "left",
|
|
137
191
|
disabled,
|
|
138
192
|
style,
|
|
@@ -141,7 +195,7 @@ function Button({
|
|
|
141
195
|
}) {
|
|
142
196
|
const { colors } = useTheme();
|
|
143
197
|
const isDisabled = disabled || loading;
|
|
144
|
-
const scale2 =
|
|
198
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
145
199
|
const handlePressIn = () => {
|
|
146
200
|
if (isDisabled) return;
|
|
147
201
|
reactNative.Animated.spring(scale2, {
|
|
@@ -172,8 +226,9 @@ function Button({
|
|
|
172
226
|
ghost: { color: colors.foreground },
|
|
173
227
|
destructive: { color: colors.destructiveForeground }
|
|
174
228
|
}[variant];
|
|
229
|
+
const effectiveIcon = iconName ? renderIcon(iconName, iconSizeMap[size], iconColor ?? labelVariantStyle.color) : typeof icon === "function" ? icon({ label, size, variant }) : icon;
|
|
175
230
|
const spinnerColor = variant === "destructive" ? colors.destructiveForeground : variant === "primary" || variant === "secondary" ? colors.primaryForeground : colors.foreground;
|
|
176
|
-
return /* @__PURE__ */
|
|
231
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [fullWidth && styles.fullWidth, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
177
232
|
reactNative.TouchableOpacity,
|
|
178
233
|
{
|
|
179
234
|
style: [
|
|
@@ -192,7 +247,7 @@ function Button({
|
|
|
192
247
|
onPressOut: handlePressOut,
|
|
193
248
|
...props
|
|
194
249
|
},
|
|
195
|
-
loading ? /* @__PURE__ */
|
|
250
|
+
loading ? /* @__PURE__ */ React24__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0] }, label), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, effectiveIcon))
|
|
196
251
|
));
|
|
197
252
|
}
|
|
198
253
|
var styles = reactNative.StyleSheet.create({
|
|
@@ -226,7 +281,7 @@ var variantStyles = {
|
|
|
226
281
|
function Text2({ variant = "body", color, style, children, ...props }) {
|
|
227
282
|
const { colors } = useTheme();
|
|
228
283
|
const defaultColor = variant === "caption" ? colors.mutedForeground : colors.foreground;
|
|
229
|
-
return /* @__PURE__ */
|
|
284
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
230
285
|
reactNative.Text,
|
|
231
286
|
{
|
|
232
287
|
style: [variantStyles[variant], { color: color ?? defaultColor }, style],
|
|
@@ -237,14 +292,15 @@ function Text2({ variant = "body", color, style, children, ...props }) {
|
|
|
237
292
|
);
|
|
238
293
|
}
|
|
239
294
|
var webInputResetStyle = reactNative.Platform.OS === "web" ? { outlineStyle: "none", outlineWidth: 0, outlineColor: "transparent", boxShadow: "none" } : {};
|
|
240
|
-
function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, type = "text", containerStyle, style, onFocus, onBlur, secureTextEntry, ...props }) {
|
|
295
|
+
function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, prefixIcon, suffixIcon, prefixIconColor, suffixIconColor, type = "text", containerStyle, style, onFocus, onBlur, secureTextEntry, ...props }) {
|
|
241
296
|
const { colors } = useTheme();
|
|
242
|
-
const [focused, setFocused] =
|
|
243
|
-
const [showPassword, setShowPassword] =
|
|
297
|
+
const [focused, setFocused] = React24.useState(false);
|
|
298
|
+
const [showPassword, setShowPassword] = React24.useState(false);
|
|
244
299
|
const isPassword = type === "password";
|
|
245
300
|
const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
|
|
246
|
-
const
|
|
247
|
-
|
|
301
|
+
const effectivePrefix = prefixIcon ? renderIcon(prefixIcon, 20, prefixIconColor ?? colors.mutedForeground) : prefix;
|
|
302
|
+
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: () => setShowPassword(!showPassword), style: styles2.passwordToggle, activeOpacity: 0.6 }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.AntDesign, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.mutedForeground })) : suffixIcon ? renderIcon(suffixIcon, 20, suffixIconColor ?? colors.mutedForeground) : suffix;
|
|
303
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles2.container, containerStyle] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
248
304
|
reactNative.View,
|
|
249
305
|
{
|
|
250
306
|
style: [
|
|
@@ -255,8 +311,8 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
|
|
|
255
311
|
}
|
|
256
312
|
]
|
|
257
313
|
},
|
|
258
|
-
|
|
259
|
-
/* @__PURE__ */
|
|
314
|
+
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.prefixText, { color: colors.mutedForeground }, prefixStyle], allowFontScaling: true }, effectivePrefix) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles2.prefixContainer }, effectivePrefix) : null,
|
|
315
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
260
316
|
reactNative.TextInput,
|
|
261
317
|
{
|
|
262
318
|
style: [
|
|
@@ -281,8 +337,8 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
|
|
|
281
337
|
...props
|
|
282
338
|
}
|
|
283
339
|
),
|
|
284
|
-
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */
|
|
285
|
-
), error ? /* @__PURE__ */
|
|
340
|
+
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.suffixText, { color: colors.mutedForeground }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles2.suffixContainer }, effectiveSuffix) : null
|
|
341
|
+
), error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
286
342
|
}
|
|
287
343
|
var styles2 = reactNative.StyleSheet.create({
|
|
288
344
|
container: {
|
|
@@ -341,7 +397,8 @@ var sizeIconGap = {
|
|
|
341
397
|
md: s(6),
|
|
342
398
|
lg: s(6)
|
|
343
399
|
};
|
|
344
|
-
|
|
400
|
+
var sizeIconSize = { sm: 10, md: 12, lg: 14 };
|
|
401
|
+
function Badge({ label, children, variant = "default", size = "md", icon, iconName, iconColor, style }) {
|
|
345
402
|
const { colors } = useTheme();
|
|
346
403
|
const containerStyle = {
|
|
347
404
|
default: { backgroundColor: colors.primary },
|
|
@@ -355,8 +412,9 @@ function Badge({ label, children, variant = "default", size = "md", icon, style
|
|
|
355
412
|
destructive: colors.destructiveForeground,
|
|
356
413
|
outline: colors.foreground
|
|
357
414
|
}[variant];
|
|
415
|
+
const effectiveIcon = iconName ? renderIcon(iconName, sizeIconSize[size], iconColor ?? textColor) : icon;
|
|
358
416
|
const content = children ?? label;
|
|
359
|
-
return /* @__PURE__ */
|
|
417
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles3.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style] }, effectiveIcon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles3.iconContainer }, effectiveIcon) : null, typeof content === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles3.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content);
|
|
360
418
|
}
|
|
361
419
|
var styles3 = reactNative.StyleSheet.create({
|
|
362
420
|
container: {
|
|
@@ -376,7 +434,7 @@ var styles3 = reactNative.StyleSheet.create({
|
|
|
376
434
|
var nativeDriver2 = reactNative.Platform.OS !== "web";
|
|
377
435
|
function Card({ children, variant = "elevated", onPress, style }) {
|
|
378
436
|
const { colors } = useTheme();
|
|
379
|
-
const scale2 =
|
|
437
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
380
438
|
const handlePressIn = () => {
|
|
381
439
|
if (!onPress) return;
|
|
382
440
|
reactNative.Animated.spring(scale2, {
|
|
@@ -423,9 +481,9 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
423
481
|
elevation: 0
|
|
424
482
|
}
|
|
425
483
|
}[variant];
|
|
426
|
-
const cardContent = /* @__PURE__ */
|
|
484
|
+
const cardContent = /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.card, variantStyle, style] }, children);
|
|
427
485
|
if (onPress) {
|
|
428
|
-
return /* @__PURE__ */
|
|
486
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
429
487
|
reactNative.TouchableOpacity,
|
|
430
488
|
{
|
|
431
489
|
onPress: handlePress,
|
|
@@ -440,21 +498,21 @@ function Card({ children, variant = "elevated", onPress, style }) {
|
|
|
440
498
|
return cardContent;
|
|
441
499
|
}
|
|
442
500
|
function CardHeader({ children, style }) {
|
|
443
|
-
return /* @__PURE__ */
|
|
501
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.header, style] }, children);
|
|
444
502
|
}
|
|
445
503
|
function CardTitle({ children, style }) {
|
|
446
504
|
const { colors } = useTheme();
|
|
447
|
-
return /* @__PURE__ */
|
|
505
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles4.title, { color: colors.cardForeground }, style], allowFontScaling: true }, children);
|
|
448
506
|
}
|
|
449
507
|
function CardDescription({ children, style }) {
|
|
450
508
|
const { colors } = useTheme();
|
|
451
|
-
return /* @__PURE__ */
|
|
509
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles4.description, { color: colors.mutedForeground }, style], allowFontScaling: true }, children);
|
|
452
510
|
}
|
|
453
511
|
function CardContent({ children, style }) {
|
|
454
|
-
return /* @__PURE__ */
|
|
512
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.content, style] }, children);
|
|
455
513
|
}
|
|
456
514
|
function CardFooter({ children, style }) {
|
|
457
|
-
return /* @__PURE__ */
|
|
515
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.footer, style] }, children);
|
|
458
516
|
}
|
|
459
517
|
var styles4 = reactNative.StyleSheet.create({
|
|
460
518
|
card: {
|
|
@@ -487,7 +545,7 @@ var styles4 = reactNative.StyleSheet.create({
|
|
|
487
545
|
});
|
|
488
546
|
function Separator({ orientation = "horizontal", style }) {
|
|
489
547
|
const { colors } = useTheme();
|
|
490
|
-
return /* @__PURE__ */
|
|
548
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
491
549
|
reactNative.View,
|
|
492
550
|
{
|
|
493
551
|
style: [
|
|
@@ -515,14 +573,14 @@ var sizeMap = {
|
|
|
515
573
|
};
|
|
516
574
|
function Spinner({ size = "md", color, ...props }) {
|
|
517
575
|
const { colors } = useTheme();
|
|
518
|
-
return /* @__PURE__ */
|
|
576
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap[size], color: color ?? colors.primary, ...props });
|
|
519
577
|
}
|
|
520
578
|
function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
521
579
|
const { colors, colorScheme } = useTheme();
|
|
522
|
-
const shimmerAnim =
|
|
523
|
-
const [containerWidth, setContainerWidth] =
|
|
580
|
+
const shimmerAnim = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
581
|
+
const [containerWidth, setContainerWidth] = React24.useState(300);
|
|
524
582
|
const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
|
|
525
|
-
|
|
583
|
+
React24.useEffect(() => {
|
|
526
584
|
const animation = reactNative.Animated.loop(
|
|
527
585
|
reactNative.Animated.timing(shimmerAnim, {
|
|
528
586
|
toValue: 1,
|
|
@@ -537,7 +595,7 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
537
595
|
inputRange: [0, 1],
|
|
538
596
|
outputRange: [-containerWidth, containerWidth]
|
|
539
597
|
});
|
|
540
|
-
return /* @__PURE__ */
|
|
598
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
541
599
|
reactNative.View,
|
|
542
600
|
{
|
|
543
601
|
style: [
|
|
@@ -547,7 +605,7 @@ function Skeleton({ width = "100%", height = 16, borderRadius = 6, style }) {
|
|
|
547
605
|
],
|
|
548
606
|
onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width)
|
|
549
607
|
},
|
|
550
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [reactNative.StyleSheet.absoluteFill, { transform: [{ translateX }] }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
551
609
|
expoLinearGradient.LinearGradient,
|
|
552
610
|
{
|
|
553
611
|
colors: ["transparent", shimmerHighlight, "transparent"],
|
|
@@ -577,7 +635,7 @@ var fontSizeMap = {
|
|
|
577
635
|
};
|
|
578
636
|
function Avatar({ src, fallback, size = "md", style }) {
|
|
579
637
|
const { colors } = useTheme();
|
|
580
|
-
const [imageError, setImageError] =
|
|
638
|
+
const [imageError, setImageError] = React24.useState(false);
|
|
581
639
|
const dimension = sizeMap2[size];
|
|
582
640
|
const showFallback = !src || imageError;
|
|
583
641
|
const containerStyle = {
|
|
@@ -587,14 +645,14 @@ function Avatar({ src, fallback, size = "md", style }) {
|
|
|
587
645
|
backgroundColor: colors.muted,
|
|
588
646
|
overflow: "hidden"
|
|
589
647
|
};
|
|
590
|
-
return /* @__PURE__ */
|
|
648
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles7.base, containerStyle, style] }, !showFallback ? /* @__PURE__ */ React24__default.default.createElement(
|
|
591
649
|
reactNative.Image,
|
|
592
650
|
{
|
|
593
651
|
source: { uri: src },
|
|
594
652
|
style: { width: dimension, height: dimension },
|
|
595
653
|
onError: () => setImageError(true)
|
|
596
654
|
}
|
|
597
|
-
) : /* @__PURE__ */
|
|
655
|
+
) : /* @__PURE__ */ React24__default.default.createElement(
|
|
598
656
|
reactNative.Text,
|
|
599
657
|
{
|
|
600
658
|
style: [styles7.fallback, { color: colors.mutedForeground, fontSize: fontSizeMap[size] }],
|
|
@@ -612,13 +670,14 @@ var styles7 = reactNative.StyleSheet.create({
|
|
|
612
670
|
fontWeight: "500"
|
|
613
671
|
}
|
|
614
672
|
});
|
|
615
|
-
function AlertBanner({ title, description, variant = "default", icon, style }) {
|
|
673
|
+
function AlertBanner({ title, description, variant = "default", icon, iconName, iconColor, style }) {
|
|
616
674
|
const { colors } = useTheme();
|
|
617
675
|
const borderColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.border;
|
|
618
676
|
const titleColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.foreground;
|
|
619
677
|
const descColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.mutedForeground;
|
|
620
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
621
|
-
|
|
678
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 18, color: titleColor }) : variant === "destructive" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 20, color: titleColor }) : /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 18, color: titleColor });
|
|
679
|
+
const effectiveIcon = iconName ? renderIcon(iconName, 18, iconColor ?? titleColor) : icon ?? defaultIcon;
|
|
680
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles8.container, { backgroundColor: colors.card, borderColor }, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles8.icon }, effectiveIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles8.content }, title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles8.title, { color: titleColor }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles8.description, { color: descColor }], allowFontScaling: true }, description) : null));
|
|
622
681
|
}
|
|
623
682
|
var styles8 = reactNative.StyleSheet.create({
|
|
624
683
|
container: {
|
|
@@ -653,9 +712,9 @@ var styles8 = reactNative.StyleSheet.create({
|
|
|
653
712
|
function Progress({ value = 0, max = 100, style }) {
|
|
654
713
|
const { colors } = useTheme();
|
|
655
714
|
const percent = Math.min(Math.max(value / max * 100, 0), 100);
|
|
656
|
-
const [trackWidth, setTrackWidth] =
|
|
657
|
-
const animatedWidth =
|
|
658
|
-
|
|
715
|
+
const [trackWidth, setTrackWidth] = React24.useState(0);
|
|
716
|
+
const animatedWidth = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
717
|
+
React24.useEffect(() => {
|
|
659
718
|
if (trackWidth === 0) return;
|
|
660
719
|
reactNative.Animated.spring(animatedWidth, {
|
|
661
720
|
toValue: percent / 100 * trackWidth,
|
|
@@ -664,13 +723,13 @@ function Progress({ value = 0, max = 100, style }) {
|
|
|
664
723
|
bounciness: 0
|
|
665
724
|
}).start();
|
|
666
725
|
}, [percent, trackWidth]);
|
|
667
|
-
return /* @__PURE__ */
|
|
726
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
668
727
|
reactNative.View,
|
|
669
728
|
{
|
|
670
729
|
style: [styles9.track, { backgroundColor: colors.muted }, style],
|
|
671
730
|
onLayout: (e) => setTrackWidth(e.nativeEvent.layout.width)
|
|
672
731
|
},
|
|
673
|
-
/* @__PURE__ */
|
|
732
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
674
733
|
reactNative.Animated.View,
|
|
675
734
|
{
|
|
676
735
|
style: [styles9.indicator, { width: animatedWidth, backgroundColor: colors.primary }]
|
|
@@ -690,10 +749,11 @@ var styles9 = reactNative.StyleSheet.create({
|
|
|
690
749
|
borderRadius: 999
|
|
691
750
|
}
|
|
692
751
|
});
|
|
693
|
-
function EmptyState({ icon, title, description, action, size = "default", style }) {
|
|
752
|
+
function EmptyState({ icon, iconName, iconColor, title, description, action, size = "default", style }) {
|
|
694
753
|
const { colors } = useTheme();
|
|
695
754
|
const isCompact = size === "compact";
|
|
696
|
-
|
|
755
|
+
const effectiveIcon = iconName ? renderIcon(iconName, isCompact ? 32 : 48, iconColor ?? colors.mutedForeground) : icon;
|
|
756
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
697
757
|
reactNative.View,
|
|
698
758
|
{
|
|
699
759
|
style: [
|
|
@@ -703,7 +763,7 @@ function EmptyState({ icon, title, description, action, size = "default", style
|
|
|
703
763
|
style
|
|
704
764
|
]
|
|
705
765
|
},
|
|
706
|
-
|
|
766
|
+
effectiveIcon ? /* @__PURE__ */ React24__default.default.createElement(
|
|
707
767
|
reactNative.View,
|
|
708
768
|
{
|
|
709
769
|
style: [
|
|
@@ -712,17 +772,17 @@ function EmptyState({ icon, title, description, action, size = "default", style
|
|
|
712
772
|
{ backgroundColor: colors.muted }
|
|
713
773
|
]
|
|
714
774
|
},
|
|
715
|
-
|
|
775
|
+
effectiveIcon
|
|
716
776
|
) : null,
|
|
717
|
-
/* @__PURE__ */
|
|
777
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles10.textWrapper }, /* @__PURE__ */ React24__default.default.createElement(
|
|
718
778
|
reactNative.Text,
|
|
719
779
|
{
|
|
720
780
|
style: [styles10.title, isCompact && styles10.titleCompact, { color: colors.foreground }],
|
|
721
781
|
allowFontScaling: true
|
|
722
782
|
},
|
|
723
783
|
title
|
|
724
|
-
), description && !isCompact ? /* @__PURE__ */
|
|
725
|
-
action && !isCompact ? /* @__PURE__ */
|
|
784
|
+
), description && !isCompact ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles10.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null),
|
|
785
|
+
action && !isCompact ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles10.action }, action) : null
|
|
726
786
|
);
|
|
727
787
|
}
|
|
728
788
|
var styles10 = reactNative.StyleSheet.create({
|
|
@@ -786,8 +846,8 @@ function Textarea({
|
|
|
786
846
|
...props
|
|
787
847
|
}) {
|
|
788
848
|
const { colors } = useTheme();
|
|
789
|
-
const [focused, setFocused] =
|
|
790
|
-
return /* @__PURE__ */
|
|
849
|
+
const [focused, setFocused] = React24.useState(false);
|
|
850
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles11.container, containerStyle] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
791
851
|
reactNative.TextInput,
|
|
792
852
|
{
|
|
793
853
|
multiline: true,
|
|
@@ -816,7 +876,7 @@ function Textarea({
|
|
|
816
876
|
allowFontScaling: true,
|
|
817
877
|
...props
|
|
818
878
|
}
|
|
819
|
-
), error ? /* @__PURE__ */
|
|
879
|
+
), error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
|
|
820
880
|
}
|
|
821
881
|
var styles11 = reactNative.StyleSheet.create({
|
|
822
882
|
container: {
|
|
@@ -846,7 +906,7 @@ function Checkbox({
|
|
|
846
906
|
style
|
|
847
907
|
}) {
|
|
848
908
|
const { colors } = useTheme();
|
|
849
|
-
const scale2 =
|
|
909
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
850
910
|
const handlePressIn = () => {
|
|
851
911
|
if (disabled) return;
|
|
852
912
|
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver3, speed: 40, bounciness: 0 }).start();
|
|
@@ -854,7 +914,7 @@ function Checkbox({
|
|
|
854
914
|
const handlePressOut = () => {
|
|
855
915
|
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver3, speed: 40, bounciness: 4 }).start();
|
|
856
916
|
};
|
|
857
|
-
return /* @__PURE__ */
|
|
917
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
858
918
|
reactNative.TouchableOpacity,
|
|
859
919
|
{
|
|
860
920
|
style: [styles12.row, style],
|
|
@@ -868,7 +928,7 @@ function Checkbox({
|
|
|
868
928
|
activeOpacity: 1,
|
|
869
929
|
touchSoundDisabled: true
|
|
870
930
|
},
|
|
871
|
-
/* @__PURE__ */
|
|
931
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
872
932
|
reactNative.View,
|
|
873
933
|
{
|
|
874
934
|
style: [
|
|
@@ -880,9 +940,9 @@ function Checkbox({
|
|
|
880
940
|
}
|
|
881
941
|
]
|
|
882
942
|
},
|
|
883
|
-
checked ? /* @__PURE__ */
|
|
943
|
+
checked ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles12.checkmark, { borderColor: colors.primaryForeground }] }) : null
|
|
884
944
|
),
|
|
885
|
-
label ? /* @__PURE__ */
|
|
945
|
+
label ? /* @__PURE__ */ React24__default.default.createElement(
|
|
886
946
|
reactNative.Text,
|
|
887
947
|
{
|
|
888
948
|
style: [styles12.label, { color: disabled ? colors.mutedForeground : colors.foreground }]
|
|
@@ -925,9 +985,9 @@ var THUMB_OFFSET = s(4);
|
|
|
925
985
|
var THUMB_TRAVEL = TRACK_WIDTH - THUMB_SIZE - THUMB_OFFSET * 2;
|
|
926
986
|
function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
927
987
|
const { colors } = useTheme();
|
|
928
|
-
const translateX =
|
|
929
|
-
const trackOpacity =
|
|
930
|
-
|
|
988
|
+
const translateX = React24.useRef(new reactNative.Animated.Value(checked ? THUMB_TRAVEL : 0)).current;
|
|
989
|
+
const trackOpacity = React24.useRef(new reactNative.Animated.Value(checked ? 1 : 0)).current;
|
|
990
|
+
React24.useEffect(() => {
|
|
931
991
|
reactNative.Animated.parallel([
|
|
932
992
|
reactNative.Animated.spring(translateX, {
|
|
933
993
|
toValue: checked ? THUMB_TRAVEL : 0,
|
|
@@ -945,7 +1005,7 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
945
1005
|
inputRange: [0, 1],
|
|
946
1006
|
outputRange: [colors.muted, colors.primary]
|
|
947
1007
|
});
|
|
948
|
-
return /* @__PURE__ */
|
|
1008
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [{ opacity: disabled ? 0.45 : 1 }, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
949
1009
|
reactNative.TouchableOpacity,
|
|
950
1010
|
{
|
|
951
1011
|
onPress: () => {
|
|
@@ -957,7 +1017,7 @@ function Switch({ checked = false, onCheckedChange, disabled, style }) {
|
|
|
957
1017
|
touchSoundDisabled: true,
|
|
958
1018
|
style: styles13.wrapper
|
|
959
1019
|
},
|
|
960
|
-
/* @__PURE__ */
|
|
1020
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles13.track, { backgroundColor: trackColor }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
961
1021
|
reactNative.Animated.View,
|
|
962
1022
|
{
|
|
963
1023
|
style: [
|
|
@@ -996,6 +1056,7 @@ var sizeStyles = {
|
|
|
996
1056
|
md: { paddingHorizontal: s(16), paddingVertical: vs(12), minWidth: s(44), minHeight: vs(44) },
|
|
997
1057
|
lg: { paddingHorizontal: s(20), paddingVertical: vs(14), minWidth: s(48), minHeight: vs(48) }
|
|
998
1058
|
};
|
|
1059
|
+
var iconSizeMap2 = { sm: 16, md: 18, lg: 20 };
|
|
999
1060
|
function Toggle({
|
|
1000
1061
|
pressed = false,
|
|
1001
1062
|
onPressedChange,
|
|
@@ -1004,14 +1065,18 @@ function Toggle({
|
|
|
1004
1065
|
label,
|
|
1005
1066
|
icon,
|
|
1006
1067
|
activeIcon,
|
|
1068
|
+
iconName,
|
|
1069
|
+
activeIconName,
|
|
1070
|
+
iconColor,
|
|
1071
|
+
activeIconColor,
|
|
1007
1072
|
disabled,
|
|
1008
1073
|
style,
|
|
1009
1074
|
...props
|
|
1010
1075
|
}) {
|
|
1011
1076
|
const { colors } = useTheme();
|
|
1012
|
-
const scale2 =
|
|
1013
|
-
const pressAnim =
|
|
1014
|
-
|
|
1077
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1078
|
+
const pressAnim = React24.useRef(new reactNative.Animated.Value(pressed ? 1 : 0)).current;
|
|
1079
|
+
React24.useEffect(() => {
|
|
1015
1080
|
reactNative.Animated.timing(pressAnim, {
|
|
1016
1081
|
toValue: pressed ? 1 : 0,
|
|
1017
1082
|
duration: 150,
|
|
@@ -1038,6 +1103,7 @@ function Toggle({
|
|
|
1038
1103
|
inputRange: [0, 1],
|
|
1039
1104
|
outputRange: [colors.foreground, colors.primary]
|
|
1040
1105
|
});
|
|
1106
|
+
const iconSize = iconSizeMap2[size];
|
|
1041
1107
|
const LeftIcon = () => {
|
|
1042
1108
|
const renderProp = (prop) => {
|
|
1043
1109
|
if (!prop) return null;
|
|
@@ -1045,15 +1111,17 @@ function Toggle({
|
|
|
1045
1111
|
return prop;
|
|
1046
1112
|
};
|
|
1047
1113
|
if (pressed) {
|
|
1114
|
+
if (activeIconName) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, renderIcon(activeIconName, iconSize, activeIconColor ?? colors.primary));
|
|
1048
1115
|
const active = renderProp(activeIcon);
|
|
1049
|
-
if (active) return /* @__PURE__ */
|
|
1050
|
-
return /* @__PURE__ */
|
|
1116
|
+
if (active) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, active);
|
|
1117
|
+
return /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: iconSize, color: colors.primary });
|
|
1051
1118
|
}
|
|
1119
|
+
if (iconName) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, renderIcon(iconName, iconSize, iconColor ?? colors.mutedForeground));
|
|
1052
1120
|
const custom = renderProp(icon);
|
|
1053
|
-
if (custom) return /* @__PURE__ */
|
|
1054
|
-
return /* @__PURE__ */
|
|
1121
|
+
if (custom) return /* @__PURE__ */ React24__default.default.createElement(React24__default.default.Fragment, null, custom);
|
|
1122
|
+
return /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: iconSize, color: colors.mutedForeground });
|
|
1055
1123
|
};
|
|
1056
|
-
return /* @__PURE__ */
|
|
1124
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles14.disabled, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1057
1125
|
reactNative.TouchableOpacity,
|
|
1058
1126
|
{
|
|
1059
1127
|
onPress: () => {
|
|
@@ -1067,7 +1135,7 @@ function Toggle({
|
|
|
1067
1135
|
touchSoundDisabled: true,
|
|
1068
1136
|
...props
|
|
1069
1137
|
},
|
|
1070
|
-
/* @__PURE__ */
|
|
1138
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1071
1139
|
reactNative.Animated.View,
|
|
1072
1140
|
{
|
|
1073
1141
|
style: [
|
|
@@ -1076,7 +1144,7 @@ function Toggle({
|
|
|
1076
1144
|
{ borderColor, backgroundColor, borderWidth: 2 }
|
|
1077
1145
|
]
|
|
1078
1146
|
},
|
|
1079
|
-
/* @__PURE__ */
|
|
1147
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles14.inner }, /* @__PURE__ */ React24__default.default.createElement(LeftIcon, null), label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.Text, { style: [styles14.label, { color: textColor }] }, label) : null)
|
|
1080
1148
|
)
|
|
1081
1149
|
));
|
|
1082
1150
|
}
|
|
@@ -1105,7 +1173,7 @@ function RadioItem({
|
|
|
1105
1173
|
onSelect
|
|
1106
1174
|
}) {
|
|
1107
1175
|
const { colors } = useTheme();
|
|
1108
|
-
const scale2 =
|
|
1176
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1109
1177
|
const handlePressIn = () => {
|
|
1110
1178
|
if (option.disabled) return;
|
|
1111
1179
|
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver5, speed: 40, bounciness: 0 }).start();
|
|
@@ -1113,7 +1181,7 @@ function RadioItem({
|
|
|
1113
1181
|
const handlePressOut = () => {
|
|
1114
1182
|
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver5, speed: 40, bounciness: 4 }).start();
|
|
1115
1183
|
};
|
|
1116
|
-
return /* @__PURE__ */
|
|
1184
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1117
1185
|
reactNative.TouchableOpacity,
|
|
1118
1186
|
{
|
|
1119
1187
|
style: styles15.row,
|
|
@@ -1129,7 +1197,7 @@ function RadioItem({
|
|
|
1129
1197
|
touchSoundDisabled: true,
|
|
1130
1198
|
disabled: option.disabled
|
|
1131
1199
|
},
|
|
1132
|
-
/* @__PURE__ */
|
|
1200
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1133
1201
|
reactNative.View,
|
|
1134
1202
|
{
|
|
1135
1203
|
style: [
|
|
@@ -1140,9 +1208,9 @@ function RadioItem({
|
|
|
1140
1208
|
}
|
|
1141
1209
|
]
|
|
1142
1210
|
},
|
|
1143
|
-
selected ? /* @__PURE__ */
|
|
1211
|
+
selected ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles15.dot, { backgroundColor: colors.primary }] }) : null
|
|
1144
1212
|
),
|
|
1145
|
-
/* @__PURE__ */
|
|
1213
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1146
1214
|
reactNative.Text,
|
|
1147
1215
|
{
|
|
1148
1216
|
style: [
|
|
@@ -1161,7 +1229,7 @@ function RadioGroup({
|
|
|
1161
1229
|
orientation = "vertical",
|
|
1162
1230
|
style
|
|
1163
1231
|
}) {
|
|
1164
|
-
return /* @__PURE__ */
|
|
1232
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles15.container, orientation === "horizontal" && styles15.horizontal, style] }, options.map((option) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1165
1233
|
RadioItem,
|
|
1166
1234
|
{
|
|
1167
1235
|
key: option.value,
|
|
@@ -1210,14 +1278,14 @@ function TabTrigger({
|
|
|
1210
1278
|
onLayout
|
|
1211
1279
|
}) {
|
|
1212
1280
|
const { colors } = useTheme();
|
|
1213
|
-
const scale2 =
|
|
1281
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1214
1282
|
const handlePressIn = () => {
|
|
1215
1283
|
reactNative.Animated.spring(scale2, { toValue: 0.95, useNativeDriver: nativeDriver6, speed: 40, bounciness: 0 }).start();
|
|
1216
1284
|
};
|
|
1217
1285
|
const handlePressOut = () => {
|
|
1218
1286
|
reactNative.Animated.spring(scale2, { toValue: 1, useNativeDriver: nativeDriver6, speed: 40, bounciness: 4 }).start();
|
|
1219
1287
|
};
|
|
1220
|
-
return /* @__PURE__ */
|
|
1288
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1221
1289
|
reactNative.TouchableOpacity,
|
|
1222
1290
|
{
|
|
1223
1291
|
style: styles16.trigger,
|
|
@@ -1228,7 +1296,7 @@ function TabTrigger({
|
|
|
1228
1296
|
activeOpacity: 1,
|
|
1229
1297
|
touchSoundDisabled: true
|
|
1230
1298
|
},
|
|
1231
|
-
/* @__PURE__ */
|
|
1299
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles16.triggerInner }, tab.icon ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles16.triggerIcon }, typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon) : null, /* @__PURE__ */ React24__default.default.createElement(
|
|
1232
1300
|
reactNative.Text,
|
|
1233
1301
|
{
|
|
1234
1302
|
style: [
|
|
@@ -1242,13 +1310,13 @@ function TabTrigger({
|
|
|
1242
1310
|
);
|
|
1243
1311
|
}
|
|
1244
1312
|
function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
1245
|
-
const [internal, setInternal] =
|
|
1313
|
+
const [internal, setInternal] = React24.useState(tabs[0]?.value ?? "");
|
|
1246
1314
|
const { colors } = useTheme();
|
|
1247
1315
|
const active = value ?? internal;
|
|
1248
|
-
const tabLayouts =
|
|
1249
|
-
const pillX =
|
|
1250
|
-
const pillWidth =
|
|
1251
|
-
const initialised =
|
|
1316
|
+
const tabLayouts = React24.useRef({});
|
|
1317
|
+
const pillX = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
1318
|
+
const pillWidth = React24.useRef(new reactNative.Animated.Value(0)).current;
|
|
1319
|
+
const initialised = React24.useRef(false);
|
|
1252
1320
|
const animatePill = (tabValue, animate) => {
|
|
1253
1321
|
const layout = tabLayouts.current[tabValue];
|
|
1254
1322
|
if (!layout) return;
|
|
@@ -1272,7 +1340,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1272
1340
|
pillWidth.setValue(layout.width);
|
|
1273
1341
|
}
|
|
1274
1342
|
};
|
|
1275
|
-
|
|
1343
|
+
React24.useEffect(() => {
|
|
1276
1344
|
if (initialised.current) {
|
|
1277
1345
|
animatePill(active, true);
|
|
1278
1346
|
}
|
|
@@ -1282,7 +1350,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1282
1350
|
if (!value) setInternal(v);
|
|
1283
1351
|
onValueChange?.(v);
|
|
1284
1352
|
};
|
|
1285
|
-
return /* @__PURE__ */
|
|
1353
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles16.list, { backgroundColor: colors.muted }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1286
1354
|
reactNative.Animated.View,
|
|
1287
1355
|
{
|
|
1288
1356
|
style: [
|
|
@@ -1303,7 +1371,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1303
1371
|
}
|
|
1304
1372
|
]
|
|
1305
1373
|
}
|
|
1306
|
-
), tabs.map((tab) => /* @__PURE__ */
|
|
1374
|
+
), tabs.map((tab) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1307
1375
|
TabTrigger,
|
|
1308
1376
|
{
|
|
1309
1377
|
key: tab.value,
|
|
@@ -1323,7 +1391,7 @@ function Tabs({ tabs, value, onValueChange, children, style }) {
|
|
|
1323
1391
|
}
|
|
1324
1392
|
function TabsContent({ value, activeValue, children, style }) {
|
|
1325
1393
|
if (value !== activeValue) return null;
|
|
1326
|
-
return /* @__PURE__ */
|
|
1394
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, children);
|
|
1327
1395
|
}
|
|
1328
1396
|
var styles16 = reactNative.StyleSheet.create({
|
|
1329
1397
|
list: {
|
|
@@ -1369,7 +1437,7 @@ function AccordionItemComponent({
|
|
|
1369
1437
|
const { colors } = useTheme();
|
|
1370
1438
|
const isExpanded = Animated10.useSharedValue(isOpen);
|
|
1371
1439
|
const height = Animated10.useSharedValue(0);
|
|
1372
|
-
|
|
1440
|
+
React24__default.default.useEffect(() => {
|
|
1373
1441
|
isExpanded.value = isOpen;
|
|
1374
1442
|
}, [isOpen]);
|
|
1375
1443
|
const derivedHeight = Animated10.useDerivedValue(
|
|
@@ -1391,7 +1459,7 @@ function AccordionItemComponent({
|
|
|
1391
1459
|
const rotationStyle = Animated10.useAnimatedStyle(() => ({
|
|
1392
1460
|
transform: [{ rotate: `${derivedRotation.value * 180}deg` }]
|
|
1393
1461
|
}));
|
|
1394
|
-
return /* @__PURE__ */
|
|
1462
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles17.item, { borderBottomColor: colors.border }] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1395
1463
|
reactNative.Pressable,
|
|
1396
1464
|
{
|
|
1397
1465
|
style: ({ pressed }) => [styles17.trigger, { opacity: pressed ? 0.6 : 1 }],
|
|
@@ -1400,9 +1468,9 @@ function AccordionItemComponent({
|
|
|
1400
1468
|
onToggle();
|
|
1401
1469
|
}
|
|
1402
1470
|
},
|
|
1403
|
-
/* @__PURE__ */
|
|
1404
|
-
/* @__PURE__ */
|
|
1405
|
-
), /* @__PURE__ */
|
|
1471
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles17.triggerText, { color: colors.foreground }] }, item.trigger),
|
|
1472
|
+
/* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: [styles17.chevron, rotationStyle] }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foreground }))
|
|
1473
|
+
), /* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: bodyStyle }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1406
1474
|
reactNative.View,
|
|
1407
1475
|
{
|
|
1408
1476
|
style: styles17.content,
|
|
@@ -1414,7 +1482,7 @@ function AccordionItemComponent({
|
|
|
1414
1482
|
)));
|
|
1415
1483
|
}
|
|
1416
1484
|
function Accordion({ items, type = "single", defaultValue, style }) {
|
|
1417
|
-
const [openValues, setOpenValues] =
|
|
1485
|
+
const [openValues, setOpenValues] = React24.useState(() => {
|
|
1418
1486
|
if (!defaultValue) return [];
|
|
1419
1487
|
return Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
1420
1488
|
});
|
|
@@ -1427,7 +1495,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
1427
1495
|
);
|
|
1428
1496
|
}
|
|
1429
1497
|
};
|
|
1430
|
-
return /* @__PURE__ */
|
|
1498
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style }, items.map((item) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1431
1499
|
AccordionItemComponent,
|
|
1432
1500
|
{
|
|
1433
1501
|
key: item.value,
|
|
@@ -1478,7 +1546,7 @@ function Slider({
|
|
|
1478
1546
|
style
|
|
1479
1547
|
}) {
|
|
1480
1548
|
const { colors } = useTheme();
|
|
1481
|
-
const lastSteppedValue =
|
|
1549
|
+
const lastSteppedValue = React24.useRef(value);
|
|
1482
1550
|
const handleValueChange = (v) => {
|
|
1483
1551
|
if (step && v !== lastSteppedValue.current) {
|
|
1484
1552
|
lastSteppedValue.current = v;
|
|
@@ -1486,7 +1554,7 @@ function Slider({
|
|
|
1486
1554
|
}
|
|
1487
1555
|
onValueChange?.(v);
|
|
1488
1556
|
};
|
|
1489
|
-
return /* @__PURE__ */
|
|
1557
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles18.wrapper, style], accessibilityLabel }, label || showValue ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles18.header }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles18.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles18.valueText, { color: colors.mutedForeground }], allowFontScaling: true }, formatValue2(value)) : null) : null, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: disabled ? styles18.disabled : void 0 }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1490
1558
|
RNSlider__default.default,
|
|
1491
1559
|
{
|
|
1492
1560
|
value,
|
|
@@ -1539,8 +1607,8 @@ function Sheet({
|
|
|
1539
1607
|
style
|
|
1540
1608
|
}) {
|
|
1541
1609
|
const { colors } = useTheme();
|
|
1542
|
-
const ref =
|
|
1543
|
-
|
|
1610
|
+
const ref = React24.useRef(null);
|
|
1611
|
+
React24.useEffect(() => {
|
|
1544
1612
|
if (open) {
|
|
1545
1613
|
impactLight();
|
|
1546
1614
|
ref.current?.present();
|
|
@@ -1548,7 +1616,7 @@ function Sheet({
|
|
|
1548
1616
|
ref.current?.dismiss();
|
|
1549
1617
|
}
|
|
1550
1618
|
}, [open]);
|
|
1551
|
-
const renderBackdrop = (props) => /* @__PURE__ */
|
|
1619
|
+
const renderBackdrop = (props) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1552
1620
|
bottomSheet.BottomSheetBackdrop,
|
|
1553
1621
|
{
|
|
1554
1622
|
...props,
|
|
@@ -1557,7 +1625,7 @@ function Sheet({
|
|
|
1557
1625
|
pressBehavior: "close"
|
|
1558
1626
|
}
|
|
1559
1627
|
);
|
|
1560
|
-
return /* @__PURE__ */
|
|
1628
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1561
1629
|
bottomSheet.BottomSheetModal,
|
|
1562
1630
|
{
|
|
1563
1631
|
ref,
|
|
@@ -1568,7 +1636,7 @@ function Sheet({
|
|
|
1568
1636
|
handleIndicatorStyle: [styles19.handle, { backgroundColor: colors.border }],
|
|
1569
1637
|
enablePanDownToClose: true
|
|
1570
1638
|
},
|
|
1571
|
-
/* @__PURE__ */
|
|
1639
|
+
/* @__PURE__ */ React24__default.default.createElement(bottomSheet.BottomSheetView, { style: [styles19.content, style] }, title || description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles19.header }, title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles19.title, { color: colors.cardForeground }] }, title) : null, description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles19.description, { color: colors.mutedForeground }] }, description) : null) : null, children)
|
|
1572
1640
|
);
|
|
1573
1641
|
}
|
|
1574
1642
|
var styles19 = reactNative.StyleSheet.create({
|
|
@@ -1612,10 +1680,10 @@ function Select({
|
|
|
1612
1680
|
style
|
|
1613
1681
|
}) {
|
|
1614
1682
|
const { colors } = useTheme();
|
|
1615
|
-
const scale2 =
|
|
1616
|
-
const [pickerVisible, setPickerVisible] =
|
|
1617
|
-
const [pendingValue, setPendingValue] =
|
|
1618
|
-
const pickerRef =
|
|
1683
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
1684
|
+
const [pickerVisible, setPickerVisible] = React24.useState(false);
|
|
1685
|
+
const [pendingValue, setPendingValue] = React24.useState(value);
|
|
1686
|
+
const pickerRef = React24.useRef(null);
|
|
1619
1687
|
const selected = options.find((o) => o.value === value);
|
|
1620
1688
|
const handlePressIn = () => {
|
|
1621
1689
|
if (disabled) return;
|
|
@@ -1644,7 +1712,7 @@ function Select({
|
|
|
1644
1712
|
}
|
|
1645
1713
|
setPickerVisible(false);
|
|
1646
1714
|
};
|
|
1647
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.container, style] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.label, { color: colors.foreground }] }, label) : null, !isWeb2 ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }], opacity: disabled ? 0.45 : 1 } }, /* @__PURE__ */ React24__default.default.createElement(
|
|
1648
1716
|
reactNative.TouchableOpacity,
|
|
1649
1717
|
{
|
|
1650
1718
|
style: [
|
|
@@ -1660,7 +1728,7 @@ function Select({
|
|
|
1660
1728
|
activeOpacity: 1,
|
|
1661
1729
|
touchSoundDisabled: true
|
|
1662
1730
|
},
|
|
1663
|
-
/* @__PURE__ */
|
|
1731
|
+
/* @__PURE__ */ React24__default.default.createElement(
|
|
1664
1732
|
reactNative.Text,
|
|
1665
1733
|
{
|
|
1666
1734
|
style: [
|
|
@@ -1672,8 +1740,8 @@ function Select({
|
|
|
1672
1740
|
},
|
|
1673
1741
|
selected?.label ?? placeholder
|
|
1674
1742
|
),
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
)) : null, isIOS ? /* @__PURE__ */
|
|
1743
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-down", size: 20, color: colors.mutedForeground })
|
|
1744
|
+
)) : null, isIOS ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1677
1745
|
reactNative.Modal,
|
|
1678
1746
|
{
|
|
1679
1747
|
visible: pickerVisible,
|
|
@@ -1681,16 +1749,16 @@ function Select({
|
|
|
1681
1749
|
animationType: "slide",
|
|
1682
1750
|
onRequestClose: handleDismiss
|
|
1683
1751
|
},
|
|
1684
|
-
/* @__PURE__ */
|
|
1685
|
-
/* @__PURE__ */
|
|
1752
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { style: styles20.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
|
|
1753
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles20.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React24__default.default.createElement(reactNative.View, null), /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: handleConfirm, style: styles20.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React24__default.default.createElement(
|
|
1686
1754
|
picker.Picker,
|
|
1687
1755
|
{
|
|
1688
1756
|
selectedValue: pendingValue ?? "",
|
|
1689
1757
|
onValueChange: (val) => setPendingValue(val),
|
|
1690
1758
|
itemStyle: { color: colors.foreground }
|
|
1691
1759
|
},
|
|
1692
|
-
!value ? /* @__PURE__ */
|
|
1693
|
-
options.map((o) => /* @__PURE__ */
|
|
1760
|
+
!value ? /* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", color: colors.mutedForeground, enabled: false }) : null,
|
|
1761
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1694
1762
|
picker.Picker.Item,
|
|
1695
1763
|
{
|
|
1696
1764
|
key: o.value,
|
|
@@ -1701,7 +1769,7 @@ function Select({
|
|
|
1701
1769
|
}
|
|
1702
1770
|
))
|
|
1703
1771
|
))
|
|
1704
|
-
) : null, isAndroid ? /* @__PURE__ */
|
|
1772
|
+
) : null, isAndroid ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1705
1773
|
picker.Picker,
|
|
1706
1774
|
{
|
|
1707
1775
|
ref: pickerRef,
|
|
@@ -1717,8 +1785,8 @@ function Select({
|
|
|
1717
1785
|
prompt: label,
|
|
1718
1786
|
style: styles20.androidHiddenPicker
|
|
1719
1787
|
},
|
|
1720
|
-
!value ? /* @__PURE__ */
|
|
1721
|
-
options.map((o) => /* @__PURE__ */
|
|
1788
|
+
!value ? /* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
|
|
1789
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1722
1790
|
picker.Picker.Item,
|
|
1723
1791
|
{
|
|
1724
1792
|
key: o.value,
|
|
@@ -1727,7 +1795,7 @@ function Select({
|
|
|
1727
1795
|
enabled: !o.disabled
|
|
1728
1796
|
}
|
|
1729
1797
|
))
|
|
1730
|
-
) : null, isWeb2 ? /* @__PURE__ */
|
|
1798
|
+
) : null, isWeb2 ? /* @__PURE__ */ React24__default.default.createElement(
|
|
1731
1799
|
picker.Picker,
|
|
1732
1800
|
{
|
|
1733
1801
|
selectedValue: value ?? "",
|
|
@@ -1747,8 +1815,8 @@ function Select({
|
|
|
1747
1815
|
}
|
|
1748
1816
|
]
|
|
1749
1817
|
},
|
|
1750
|
-
/* @__PURE__ */
|
|
1751
|
-
options.map((o) => /* @__PURE__ */
|
|
1818
|
+
/* @__PURE__ */ React24__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }),
|
|
1819
|
+
options.map((o) => /* @__PURE__ */ React24__default.default.createElement(
|
|
1752
1820
|
picker.Picker.Item,
|
|
1753
1821
|
{
|
|
1754
1822
|
key: o.value,
|
|
@@ -1757,7 +1825,7 @@ function Select({
|
|
|
1757
1825
|
enabled: !o.disabled
|
|
1758
1826
|
}
|
|
1759
1827
|
))
|
|
1760
|
-
) : null, error ? /* @__PURE__ */
|
|
1828
|
+
) : null, error ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles20.helperText, { color: colors.destructive }] }, error) : null);
|
|
1761
1829
|
}
|
|
1762
1830
|
var styles20 = reactNative.StyleSheet.create({
|
|
1763
1831
|
container: {
|
|
@@ -1832,14 +1900,14 @@ var styles20 = reactNative.StyleSheet.create({
|
|
|
1832
1900
|
fontSize: ms(17)
|
|
1833
1901
|
}
|
|
1834
1902
|
});
|
|
1835
|
-
var ToastContext =
|
|
1903
|
+
var ToastContext = React24.createContext({
|
|
1836
1904
|
toast: () => {
|
|
1837
1905
|
},
|
|
1838
1906
|
dismiss: () => {
|
|
1839
1907
|
}
|
|
1840
1908
|
});
|
|
1841
1909
|
function useToast() {
|
|
1842
|
-
return
|
|
1910
|
+
return React24.useContext(ToastContext);
|
|
1843
1911
|
}
|
|
1844
1912
|
var SWIPE_THRESHOLD = 80;
|
|
1845
1913
|
var VELOCITY_THRESHOLD = 800;
|
|
@@ -1848,7 +1916,7 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1848
1916
|
const translateY = Animated10.useSharedValue(-80);
|
|
1849
1917
|
const translateX = Animated10.useSharedValue(0);
|
|
1850
1918
|
const opacity = Animated10.useSharedValue(0);
|
|
1851
|
-
|
|
1919
|
+
React24.useEffect(() => {
|
|
1852
1920
|
translateY.value = Animated10.withTiming(0, { duration: 120, easing: Animated10.Easing.out(Animated10.Easing.exp) });
|
|
1853
1921
|
opacity.value = Animated10.withTiming(1, { duration: 100 });
|
|
1854
1922
|
const timer = setTimeout(() => {
|
|
@@ -1887,14 +1955,14 @@ function ToastNotification({ item, onDismiss }) {
|
|
|
1887
1955
|
destructive: colors.destructiveForeground,
|
|
1888
1956
|
success: colors.successForeground
|
|
1889
1957
|
}[item.variant ?? "default"];
|
|
1890
|
-
const defaultIcon = item.variant === "success" ? /* @__PURE__ */
|
|
1891
|
-
const leftIcon = item.icon ?? defaultIcon;
|
|
1892
|
-
return /* @__PURE__ */
|
|
1958
|
+
const defaultIcon = item.variant === "success" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 22, color: textColor }) : item.variant === "destructive" ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 24, color: textColor }) : /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 22, color: textColor });
|
|
1959
|
+
const leftIcon = item.iconName ? renderIcon(item.iconName, 22, item.iconColor ?? textColor) : item.icon ?? defaultIcon;
|
|
1960
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React24__default.default.createElement(Animated10__default.default.View, { style: [styles21.toast, { backgroundColor: bgColor }, animatedStyle] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles21.leftIconContainer }, leftIcon), /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles21.toastContent }, item.title ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles21.toastTitle, { color: textColor }] }, item.title) : null, item.description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles21.toastDescription, { color: textColor, opacity: 0.85 }] }, item.description) : null), /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { onPress: onDismiss, style: styles21.dismissButton, touchSoundDisabled: true }, /* @__PURE__ */ React24__default.default.createElement(vectorIcons.AntDesign, { name: "close-circle", size: 18, color: textColor }))));
|
|
1893
1961
|
}
|
|
1894
1962
|
function ToastProvider({ children }) {
|
|
1895
|
-
const [toasts, setToasts] =
|
|
1963
|
+
const [toasts, setToasts] = React24.useState([]);
|
|
1896
1964
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
1897
|
-
const toast =
|
|
1965
|
+
const toast = React24.useCallback((item) => {
|
|
1898
1966
|
const id = Math.random().toString(36).slice(2);
|
|
1899
1967
|
if (item.variant === "success") {
|
|
1900
1968
|
notificationSuccess();
|
|
@@ -1905,10 +1973,10 @@ function ToastProvider({ children }) {
|
|
|
1905
1973
|
}
|
|
1906
1974
|
setToasts((prev) => [{ ...item, id }, ...prev].slice(0, 3));
|
|
1907
1975
|
}, []);
|
|
1908
|
-
const dismiss =
|
|
1976
|
+
const dismiss = React24.useCallback((id) => {
|
|
1909
1977
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
1910
1978
|
}, []);
|
|
1911
|
-
return /* @__PURE__ */
|
|
1979
|
+
return /* @__PURE__ */ React24__default.default.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles21.container, reactNative.Platform.OS === "web" && styles21.containerWeb, { top: insets.top + 8 }], pointerEvents: "box-none" }, toasts.map((item) => /* @__PURE__ */ React24__default.default.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
|
|
1912
1980
|
}
|
|
1913
1981
|
var styles21 = reactNative.StyleSheet.create({
|
|
1914
1982
|
container: {
|
|
@@ -1988,7 +2056,7 @@ function CurrencyInput({
|
|
|
1988
2056
|
onChangeValue?.(isNaN(raw) ? 0 : raw);
|
|
1989
2057
|
};
|
|
1990
2058
|
const inputStyle = size === "large" ? { fontSize: ms(36) } : {};
|
|
1991
|
-
return /* @__PURE__ */
|
|
2059
|
+
return /* @__PURE__ */ React24__default.default.createElement(
|
|
1992
2060
|
Input,
|
|
1993
2061
|
{
|
|
1994
2062
|
value,
|
|
@@ -2019,7 +2087,7 @@ function formatValue(value, prefix, showDecimals) {
|
|
|
2019
2087
|
function CurrencyDisplay({ value, prefix = "$", showDecimals = false, textColor, style }) {
|
|
2020
2088
|
const { colors } = useTheme();
|
|
2021
2089
|
const formatted = formatValue(value, prefix, showDecimals);
|
|
2022
|
-
return /* @__PURE__ */
|
|
2090
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles22.container, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles22.amount, { color: textColor ?? colors.foreground }], allowFontScaling: true }, formatted));
|
|
2023
2091
|
}
|
|
2024
2092
|
var styles22 = reactNative.StyleSheet.create({
|
|
2025
2093
|
container: {},
|
|
@@ -2034,6 +2102,10 @@ function ListItem({
|
|
|
2034
2102
|
rightRender,
|
|
2035
2103
|
trailing,
|
|
2036
2104
|
icon,
|
|
2105
|
+
leftIcon,
|
|
2106
|
+
rightIcon,
|
|
2107
|
+
leftIconColor,
|
|
2108
|
+
rightIconColor,
|
|
2037
2109
|
title,
|
|
2038
2110
|
subtitle,
|
|
2039
2111
|
caption,
|
|
@@ -2048,7 +2120,7 @@ function ListItem({
|
|
|
2048
2120
|
captionStyle
|
|
2049
2121
|
}) {
|
|
2050
2122
|
const { colors } = useTheme();
|
|
2051
|
-
const scale2 =
|
|
2123
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
2052
2124
|
const handlePressIn = () => {
|
|
2053
2125
|
if (!onPress || disabled) return;
|
|
2054
2126
|
reactNative.Animated.spring(scale2, {
|
|
@@ -2070,8 +2142,8 @@ function ListItem({
|
|
|
2070
2142
|
selectionAsync();
|
|
2071
2143
|
onPress?.();
|
|
2072
2144
|
};
|
|
2073
|
-
const effectiveLeft = leftRender ?? icon;
|
|
2074
|
-
const effectiveRight = rightRender ?? trailing;
|
|
2145
|
+
const effectiveLeft = leftIcon ? renderIcon(leftIcon, 24, leftIconColor ?? colors.foreground) : leftRender ?? icon;
|
|
2146
|
+
const effectiveRight = rightIcon ? renderIcon(rightIcon, 24, rightIconColor ?? colors.mutedForeground) : rightRender ?? trailing;
|
|
2075
2147
|
const cardStyle = variant === "card" ? {
|
|
2076
2148
|
backgroundColor: colors.card,
|
|
2077
2149
|
borderRadius: 12,
|
|
@@ -2083,7 +2155,7 @@ function ListItem({
|
|
|
2083
2155
|
shadowRadius: 6,
|
|
2084
2156
|
elevation: 2
|
|
2085
2157
|
} : {};
|
|
2086
|
-
return /* @__PURE__ */
|
|
2158
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles23.disabled] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2087
2159
|
reactNative.TouchableOpacity,
|
|
2088
2160
|
{
|
|
2089
2161
|
style: [styles23.container, cardStyle, style],
|
|
@@ -2094,8 +2166,8 @@ function ListItem({
|
|
|
2094
2166
|
activeOpacity: 1,
|
|
2095
2167
|
touchSoundDisabled: true
|
|
2096
2168
|
},
|
|
2097
|
-
effectiveLeft ? /* @__PURE__ */
|
|
2098
|
-
/* @__PURE__ */
|
|
2169
|
+
effectiveLeft ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.leftContainer }, effectiveLeft) : null,
|
|
2170
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.content }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2099
2171
|
reactNative.Text,
|
|
2100
2172
|
{
|
|
2101
2173
|
style: [styles23.title, { color: colors.foreground }, titleStyle],
|
|
@@ -2103,7 +2175,7 @@ function ListItem({
|
|
|
2103
2175
|
allowFontScaling: true
|
|
2104
2176
|
},
|
|
2105
2177
|
title
|
|
2106
|
-
), subtitle ? /* @__PURE__ */
|
|
2178
|
+
), subtitle ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2107
2179
|
reactNative.Text,
|
|
2108
2180
|
{
|
|
2109
2181
|
style: [styles23.subtitle, { color: colors.mutedForeground }, subtitleStyle],
|
|
@@ -2111,7 +2183,7 @@ function ListItem({
|
|
|
2111
2183
|
allowFontScaling: true
|
|
2112
2184
|
},
|
|
2113
2185
|
subtitle
|
|
2114
|
-
) : null, caption ? /* @__PURE__ */
|
|
2186
|
+
) : null, caption ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2115
2187
|
reactNative.Text,
|
|
2116
2188
|
{
|
|
2117
2189
|
style: [styles23.caption, { color: colors.mutedForeground }, captionStyle],
|
|
@@ -2120,15 +2192,15 @@ function ListItem({
|
|
|
2120
2192
|
},
|
|
2121
2193
|
caption
|
|
2122
2194
|
) : null),
|
|
2123
|
-
effectiveRight !== void 0 ? /* @__PURE__ */
|
|
2195
|
+
effectiveRight !== void 0 ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles23.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2124
2196
|
reactNative.Text,
|
|
2125
2197
|
{
|
|
2126
2198
|
style: [styles23.rightText, { color: colors.mutedForeground }],
|
|
2127
2199
|
allowFontScaling: true
|
|
2128
2200
|
},
|
|
2129
2201
|
effectiveRight
|
|
2130
|
-
) : effectiveRight) : showChevron ? /* @__PURE__ */
|
|
2131
|
-
), showSeparator ? /* @__PURE__ */
|
|
2202
|
+
) : effectiveRight) : showChevron ? /* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.mutedForeground }) : null
|
|
2203
|
+
), showSeparator ? /* @__PURE__ */ React24__default.default.createElement(
|
|
2132
2204
|
reactNative.View,
|
|
2133
2205
|
{
|
|
2134
2206
|
style: [
|
|
@@ -2196,9 +2268,9 @@ var styles23 = reactNative.StyleSheet.create({
|
|
|
2196
2268
|
var nativeDriver8 = reactNative.Platform.OS !== "web";
|
|
2197
2269
|
function Chip({ label, selected = false, onPress, style }) {
|
|
2198
2270
|
const { colors } = useTheme();
|
|
2199
|
-
const scale2 =
|
|
2200
|
-
const pressAnim =
|
|
2201
|
-
|
|
2271
|
+
const scale2 = React24.useRef(new reactNative.Animated.Value(1)).current;
|
|
2272
|
+
const pressAnim = React24.useRef(new reactNative.Animated.Value(selected ? 1 : 0)).current;
|
|
2273
|
+
React24.useEffect(() => {
|
|
2202
2274
|
reactNative.Animated.timing(pressAnim, {
|
|
2203
2275
|
toValue: selected ? 1 : 0,
|
|
2204
2276
|
duration: 150,
|
|
@@ -2238,7 +2310,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2238
2310
|
inputRange: [0, 1],
|
|
2239
2311
|
outputRange: [colors.border, colors.primary]
|
|
2240
2312
|
});
|
|
2241
|
-
return /* @__PURE__ */
|
|
2313
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles24.wrapper, { transform: [{ scale: scale2 }] }, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2242
2314
|
reactNative.TouchableOpacity,
|
|
2243
2315
|
{
|
|
2244
2316
|
onPress: handlePress,
|
|
@@ -2247,7 +2319,7 @@ function Chip({ label, selected = false, onPress, style }) {
|
|
|
2247
2319
|
activeOpacity: 1,
|
|
2248
2320
|
touchSoundDisabled: true
|
|
2249
2321
|
},
|
|
2250
|
-
/* @__PURE__ */
|
|
2322
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.View, { style: [styles24.chip, { backgroundColor, borderColor }] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Animated.Text, { style: [styles24.label, { color: textColor }], allowFontScaling: true }, label))
|
|
2251
2323
|
));
|
|
2252
2324
|
}
|
|
2253
2325
|
function ChipGroup({ options, value, onValueChange, multiSelect = false, style }) {
|
|
@@ -2272,7 +2344,7 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
2272
2344
|
}
|
|
2273
2345
|
return optionValue === value;
|
|
2274
2346
|
};
|
|
2275
|
-
return /* @__PURE__ */
|
|
2347
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles24.group, style] }, options.map((opt) => /* @__PURE__ */ React24__default.default.createElement(
|
|
2276
2348
|
Chip,
|
|
2277
2349
|
{
|
|
2278
2350
|
key: opt.value,
|
|
@@ -2314,15 +2386,15 @@ function ConfirmDialog({
|
|
|
2314
2386
|
onCancel
|
|
2315
2387
|
}) {
|
|
2316
2388
|
const { colors } = useTheme();
|
|
2317
|
-
return /* @__PURE__ */
|
|
2389
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.Modal, { visible, transparent: true, animationType: "fade", onRequestClose: onCancel }, /* @__PURE__ */ React24__default.default.createElement(reactNative.TouchableOpacity, { style: styles25.overlay, activeOpacity: 1, onPress: onCancel }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2318
2390
|
reactNative.View,
|
|
2319
2391
|
{
|
|
2320
2392
|
style: [styles25.dialog, { backgroundColor: colors.card }],
|
|
2321
2393
|
onStartShouldSetResponder: () => true
|
|
2322
2394
|
},
|
|
2323
|
-
/* @__PURE__ */
|
|
2324
|
-
description ? /* @__PURE__ */
|
|
2325
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles25.title, { color: colors.cardForeground }], allowFontScaling: true }, title),
|
|
2396
|
+
description ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles25.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null,
|
|
2397
|
+
/* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: styles25.actions }, /* @__PURE__ */ React24__default.default.createElement(Button, { label: cancelLabel, variant: "outline", fullWidth: true, onPress: onCancel }), /* @__PURE__ */ React24__default.default.createElement(Button, { label: confirmLabel, variant: confirmVariant, fullWidth: true, onPress: onConfirm }))
|
|
2326
2398
|
)));
|
|
2327
2399
|
}
|
|
2328
2400
|
var styles25 = reactNative.StyleSheet.create({
|
|
@@ -2361,7 +2433,7 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
2361
2433
|
});
|
|
2362
2434
|
function LabelValue({ label, value, style }) {
|
|
2363
2435
|
const { colors } = useTheme();
|
|
2364
|
-
return /* @__PURE__ */
|
|
2436
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles26.container, style] }, /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles26.label, { color: colors.mutedForeground }], allowFontScaling: true }, label), typeof value === "string" ? /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles26.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
|
|
2365
2437
|
}
|
|
2366
2438
|
var styles26 = reactNative.StyleSheet.create({
|
|
2367
2439
|
container: {
|
|
@@ -2413,7 +2485,7 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2413
2485
|
onChange({ month: value.month + 1, year: value.year });
|
|
2414
2486
|
}
|
|
2415
2487
|
};
|
|
2416
|
-
return /* @__PURE__ */
|
|
2488
|
+
return /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles27.container, style] }, /* @__PURE__ */ React24__default.default.createElement(
|
|
2417
2489
|
reactNative.TouchableOpacity,
|
|
2418
2490
|
{
|
|
2419
2491
|
style: styles27.arrow,
|
|
@@ -2421,8 +2493,8 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2421
2493
|
activeOpacity: 0.6,
|
|
2422
2494
|
touchSoundDisabled: true
|
|
2423
2495
|
},
|
|
2424
|
-
/* @__PURE__ */
|
|
2425
|
-
), /* @__PURE__ */
|
|
2496
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
|
|
2497
|
+
), /* @__PURE__ */ React24__default.default.createElement(reactNative.Text, { style: [styles27.label, { color: colors.foreground }], allowFontScaling: true }, MONTH_NAMES[value.month - 1], " ", value.year), /* @__PURE__ */ React24__default.default.createElement(
|
|
2426
2498
|
reactNative.TouchableOpacity,
|
|
2427
2499
|
{
|
|
2428
2500
|
style: styles27.arrow,
|
|
@@ -2430,7 +2502,7 @@ function MonthPicker({ value, onChange, style }) {
|
|
|
2430
2502
|
activeOpacity: 0.6,
|
|
2431
2503
|
touchSoundDisabled: true
|
|
2432
2504
|
},
|
|
2433
|
-
/* @__PURE__ */
|
|
2505
|
+
/* @__PURE__ */ React24__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
|
|
2434
2506
|
));
|
|
2435
2507
|
}
|
|
2436
2508
|
var styles27 = reactNative.StyleSheet.create({
|
|
@@ -2477,6 +2549,7 @@ exports.CurrencyDisplay = CurrencyDisplay;
|
|
|
2477
2549
|
exports.CurrencyInput = CurrencyInput;
|
|
2478
2550
|
exports.CurrencyInputLarge = CurrencyInput;
|
|
2479
2551
|
exports.EmptyState = EmptyState;
|
|
2552
|
+
exports.Icon = Icon;
|
|
2480
2553
|
exports.Input = Input;
|
|
2481
2554
|
exports.LabelValue = LabelValue;
|
|
2482
2555
|
exports.ListItem = ListItem;
|
|
@@ -2499,5 +2572,6 @@ exports.ToastProvider = ToastProvider;
|
|
|
2499
2572
|
exports.Toggle = Toggle;
|
|
2500
2573
|
exports.defaultDark = defaultDark;
|
|
2501
2574
|
exports.defaultLight = defaultLight;
|
|
2575
|
+
exports.renderIcon = renderIcon;
|
|
2502
2576
|
exports.useTheme = useTheme;
|
|
2503
2577
|
exports.useToast = useToast;
|