@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/dist/index.js CHANGED
@@ -1,8 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var React23 = require('react');
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 React23__default = /*#__PURE__*/_interopDefault(React23);
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 = React23.createContext({
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 = React23.useMemo(() => {
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__ */ React23__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
98
+ return /* @__PURE__ */ React24__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
87
99
  }
88
100
  function useTheme() {
89
- const context = React23.useContext(ThemeContext);
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [fullWidth && styles.fullWidth, { transform: [{ scale: scale2 }] }] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : /* @__PURE__ */ React23__default.default.createElement(React23__default.default.Fragment, null, icon && iconPosition === "left" && /* @__PURE__ */ React23__default.default.createElement(React23__default.default.Fragment, null, typeof icon === "function" ? icon({ label, size, variant }) : icon), /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles.label, labelVariantStyle, labelSizeStyles[size], icon ? styles.labelWithIcon : void 0] }, label), icon && iconPosition === "right" && /* @__PURE__ */ React23__default.default.createElement(React23__default.default.Fragment, null, typeof icon === "function" ? icon({ label, size, variant }) : icon))
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__ */ React23__default.default.createElement(
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] = React23.useState(false);
243
- const [showPassword, setShowPassword] = React23.useState(false);
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 effectiveSuffix = isPassword && !suffix ? /* @__PURE__ */ React23__default.default.createElement(reactNative.TouchableOpacity, { onPress: () => setShowPassword(!showPassword), style: styles2.passwordToggle, activeOpacity: 0.6 }, /* @__PURE__ */ React23__default.default.createElement(vectorIcons.AntDesign, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.mutedForeground })) : suffix;
247
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles2.container, containerStyle] }, label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles2.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React23__default.default.createElement(
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
- prefix ? typeof prefix === "string" ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles2.prefixText, { color: colors.mutedForeground }, prefixStyle], allowFontScaling: true }, prefix) : /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles2.prefixContainer }, prefix) : null,
259
- /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles2.suffixText, { color: colors.mutedForeground }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles2.suffixContainer }, effectiveSuffix) : null
285
- ), error ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles2.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
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
- function Badge({ label, children, variant = "default", size = "md", icon, style }) {
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles3.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style] }, icon ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles3.iconContainer }, icon) : null, typeof content === "string" ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles3.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content);
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles4.card, variantStyle, style] }, children);
484
+ const cardContent = /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles4.card, variantStyle, style] }, children);
427
485
  if (onPress) {
428
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles4.header, style] }, children);
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles4.title, { color: colors.cardForeground }, style], allowFontScaling: true }, children);
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles4.description, { color: colors.mutedForeground }, style], allowFontScaling: true }, children);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles4.content, style] }, children);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles4.footer, style] }, children);
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap[size], color: color ?? colors.primary, ...props });
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 = React23.useRef(new reactNative.Animated.Value(0)).current;
523
- const [containerWidth, setContainerWidth] = React23.useState(300);
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
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [reactNative.StyleSheet.absoluteFill, { transform: [{ translateX }] }] }, /* @__PURE__ */ React23__default.default.createElement(
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] = React23.useState(false);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles7.base, containerStyle, style] }, !showFallback ? /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 18, color: titleColor }) : variant === "destructive" ? /* @__PURE__ */ React23__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 20, color: titleColor }) : /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 18, color: titleColor });
621
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles8.container, { backgroundColor: colors.card, borderColor }, style] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles8.icon }, icon ?? defaultIcon), /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles8.content }, title ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles8.title, { color: titleColor }], allowFontScaling: true }, title) : null, description ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles8.description, { color: descColor }], allowFontScaling: true }, description) : null));
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] = React23.useState(0);
657
- const animatedWidth = React23.useRef(new reactNative.Animated.Value(0)).current;
658
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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
- return /* @__PURE__ */ React23__default.default.createElement(
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
- icon ? /* @__PURE__ */ React23__default.default.createElement(
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
- icon
775
+ effectiveIcon
716
776
  ) : null,
717
- /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles10.textWrapper }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles10.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null),
725
- action && !isCompact ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles10.action }, action) : null
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] = React23.useState(false);
790
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles11.container, containerStyle] }, label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles11.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null, !error && hint ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles11.helperText, { color: colors.mutedForeground }], allowFontScaling: true }, hint) : null);
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles12.checkmark, { borderColor: colors.primaryForeground }] }) : null
943
+ checked ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles12.checkmark, { borderColor: colors.primaryForeground }] }) : null
884
944
  ),
885
- label ? /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(new reactNative.Animated.Value(checked ? THUMB_TRAVEL : 0)).current;
929
- const trackOpacity = React23.useRef(new reactNative.Animated.Value(checked ? 1 : 0)).current;
930
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(reactNative.View, { style: [{ opacity: disabled ? 0.45 : 1 }, style] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [styles13.track, { backgroundColor: trackColor }] }, /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
1013
- const pressAnim = React23.useRef(new reactNative.Animated.Value(pressed ? 1 : 0)).current;
1014
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(React23__default.default.Fragment, null, active);
1050
- return /* @__PURE__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 20, color: colors.primary });
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__ */ React23__default.default.createElement(React23__default.default.Fragment, null, custom);
1054
- return /* @__PURE__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: 20, color: colors.mutedForeground });
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles14.disabled, style] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: styles14.inner }, /* @__PURE__ */ React23__default.default.createElement(LeftIcon, null), label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.Text, { style: [styles14.label, { color: textColor }] }, label) : null)
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles15.dot, { backgroundColor: colors.primary }] }) : null
1211
+ selected ? /* @__PURE__ */ React24__default.default.createElement(reactNative.View, { style: [styles15.dot, { backgroundColor: colors.primary }] }) : null
1144
1212
  ),
1145
- /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles15.container, orientation === "horizontal" && styles15.horizontal, style] }, options.map((option) => /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }] } }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles16.triggerInner }, tab.icon ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles16.triggerIcon }, typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon) : null, /* @__PURE__ */ React23__default.default.createElement(
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] = React23.useState(tabs[0]?.value ?? "");
1313
+ const [internal, setInternal] = React24.useState(tabs[0]?.value ?? "");
1246
1314
  const { colors } = useTheme();
1247
1315
  const active = value ?? internal;
1248
- const tabLayouts = React23.useRef({});
1249
- const pillX = React23.useRef(new reactNative.Animated.Value(0)).current;
1250
- const pillWidth = React23.useRef(new reactNative.Animated.Value(0)).current;
1251
- const initialised = React23.useRef(false);
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
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles16.list, { backgroundColor: colors.muted }] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style }, children);
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
- React23__default.default.useEffect(() => {
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles17.item, { borderBottomColor: colors.border }] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles17.triggerText, { color: colors.foreground }] }, item.trigger),
1404
- /* @__PURE__ */ React23__default.default.createElement(Animated10__default.default.View, { style: [styles17.chevron, rotationStyle] }, /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foreground }))
1405
- ), /* @__PURE__ */ React23__default.default.createElement(Animated10__default.default.View, { style: bodyStyle }, /* @__PURE__ */ React23__default.default.createElement(
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] = React23.useState(() => {
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__ */ React23__default.default.createElement(reactNative.View, { style }, items.map((item) => /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(value);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles18.wrapper, style], accessibilityLabel }, label || showValue ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles18.header }, label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles18.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles18.valueText, { color: colors.mutedForeground }], allowFontScaling: true }, formatValue2(value)) : null) : null, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: disabled ? styles18.disabled : void 0 }, /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(null);
1543
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(bottomSheet.BottomSheetView, { style: [styles19.content, style] }, title || description ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles19.header }, title ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles19.title, { color: colors.cardForeground }] }, title) : null, description ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles19.description, { color: colors.mutedForeground }] }, description) : null) : null, children)
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
1616
- const [pickerVisible, setPickerVisible] = React23.useState(false);
1617
- const [pendingValue, setPendingValue] = React23.useState(value);
1618
- const pickerRef = React23.useRef(null);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles20.container, style] }, label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles20.label, { color: colors.foreground }] }, label) : null, !isWeb2 ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale: scale2 }], opacity: disabled ? 0.45 : 1 } }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-down", size: 20, color: colors.mutedForeground })
1676
- )) : null, isIOS ? /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.TouchableOpacity, { style: styles20.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
1685
- /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles20.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles20.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles20.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React23__default.default.createElement(reactNative.View, null), /* @__PURE__ */ React23__default.default.createElement(reactNative.TouchableOpacity, { onPress: handleConfirm, style: styles20.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles20.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", color: colors.mutedForeground, enabled: false }) : null,
1693
- options.map((o) => /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
1721
- options.map((o) => /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }),
1751
- options.map((o) => /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles20.helperText, { color: colors.destructive }] }, error) : null);
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 = React23.createContext({
1903
+ var ToastContext = React24.createContext({
1836
1904
  toast: () => {
1837
1905
  },
1838
1906
  dismiss: () => {
1839
1907
  }
1840
1908
  });
1841
1909
  function useToast() {
1842
- return React23.useContext(ToastContext);
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
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 22, color: textColor }) : item.variant === "destructive" ? /* @__PURE__ */ React23__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: 24, color: textColor }) : /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: 22, color: textColor });
1891
- const leftIcon = item.icon ?? defaultIcon;
1892
- return /* @__PURE__ */ React23__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React23__default.default.createElement(Animated10__default.default.View, { style: [styles21.toast, { backgroundColor: bgColor }, animatedStyle] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles21.leftIconContainer }, leftIcon), /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles21.toastContent }, item.title ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles21.toastTitle, { color: textColor }] }, item.title) : null, item.description ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles21.toastDescription, { color: textColor, opacity: 0.85 }] }, item.description) : null), /* @__PURE__ */ React23__default.default.createElement(reactNative.TouchableOpacity, { onPress: onDismiss, style: styles21.dismissButton, touchSoundDisabled: true }, /* @__PURE__ */ React23__default.default.createElement(vectorIcons.AntDesign, { name: "close-circle", size: 18, color: textColor }))));
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] = React23.useState([]);
1963
+ const [toasts, setToasts] = React24.useState([]);
1896
1964
  const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
1897
- const toast = React23.useCallback((item) => {
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 = React23.useCallback((id) => {
1976
+ const dismiss = React24.useCallback((id) => {
1909
1977
  setToasts((prev) => prev.filter((t) => t.id !== id));
1910
1978
  }, []);
1911
- return /* @__PURE__ */ React23__default.default.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React23__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__ */ React23__default.default.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles22.container, style] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles22.amount, { color: textColor ?? colors.foreground }], allowFontScaling: true }, formatted));
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale: scale2 }] }, disabled && styles23.disabled] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: styles23.leftContainer }, effectiveLeft) : null,
2098
- /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.content }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.View, { style: styles23.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.mutedForeground }) : null
2131
- ), showSeparator ? /* @__PURE__ */ React23__default.default.createElement(
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 = React23.useRef(new reactNative.Animated.Value(1)).current;
2200
- const pressAnim = React23.useRef(new reactNative.Animated.Value(selected ? 1 : 0)).current;
2201
- React23.useEffect(() => {
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [styles24.wrapper, { transform: [{ scale: scale2 }] }, style] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [styles24.chip, { backgroundColor, borderColor }] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.Text, { style: [styles24.label, { color: textColor }], allowFontScaling: true }, label))
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles24.group, style] }, options.map((opt) => /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Modal, { visible, transparent: true, animationType: "fade", onRequestClose: onCancel }, /* @__PURE__ */ React23__default.default.createElement(reactNative.TouchableOpacity, { style: styles25.overlay, activeOpacity: 1, onPress: onCancel }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(reactNative.Text, { style: [styles25.title, { color: colors.cardForeground }], allowFontScaling: true }, title),
2324
- description ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles25.description, { color: colors.mutedForeground }], allowFontScaling: true }, description) : null,
2325
- /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles25.actions }, /* @__PURE__ */ React23__default.default.createElement(Button, { label: cancelLabel, variant: "outline", fullWidth: true, onPress: onCancel }), /* @__PURE__ */ React23__default.default.createElement(Button, { label: confirmLabel, variant: confirmVariant, fullWidth: true, onPress: onConfirm }))
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles26.container, style] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles26.label, { color: colors.mutedForeground }], allowFontScaling: true }, label), typeof value === "string" ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles26.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
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__ */ React23__default.default.createElement(reactNative.View, { style: [styles27.container, style] }, /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
2425
- ), /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles27.label, { color: colors.foreground }], allowFontScaling: true }, MONTH_NAMES[value.month - 1], " ", value.year), /* @__PURE__ */ React23__default.default.createElement(
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__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
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;