@retray-dev/ui-kit 2.3.0 → 2.5.1

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
@@ -3,6 +3,7 @@
3
3
  var React23 = require('react');
4
4
  var reactNative = require('react-native');
5
5
  var Haptics12 = require('expo-haptics');
6
+ var vectorIcons = require('@expo/vector-icons');
6
7
  var expoLinearGradient = require('expo-linear-gradient');
7
8
  var ReanimatedAnimated = require('react-native-reanimated');
8
9
  var RNSlider = require('@react-native-community/slider');
@@ -107,9 +108,9 @@ function useTheme() {
107
108
  }
108
109
  var nativeDriver = reactNative.Platform.OS !== "web";
109
110
  var containerSizeStyles = {
110
- sm: { paddingHorizontal: 20, paddingVertical: 12 },
111
- md: { paddingHorizontal: 24, paddingVertical: 16 },
112
- lg: { paddingHorizontal: 32, paddingVertical: 20 }
111
+ sm: { paddingHorizontal: 20, paddingVertical: 10 },
112
+ md: { paddingHorizontal: 24, paddingVertical: 14 },
113
+ lg: { paddingHorizontal: 32, paddingVertical: 18 }
113
114
  };
114
115
  var labelSizeStyles = {
115
116
  sm: { fontSize: 15 },
@@ -202,7 +203,7 @@ var styles = reactNative.StyleSheet.create({
202
203
  fontWeight: "600"
203
204
  },
204
205
  labelWithIcon: {
205
- marginHorizontal: 6
206
+ marginHorizontal: 8
206
207
  }
207
208
  });
208
209
  var variantStyles = {
@@ -233,7 +234,7 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
233
234
  const [showPassword, setShowPassword] = React23.useState(false);
234
235
  const isPassword = type === "password";
235
236
  const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
236
- 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(reactNative.Text, { style: [styles2.suffixText, { color: colors.mutedForeground }] }, showPassword ? "\u{1F441}" : "\u{1F441}\u200D\u{1F5E8}")) : suffix;
237
+ 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;
237
238
  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(
238
239
  reactNative.View,
239
240
  {
@@ -276,20 +277,19 @@ function Input({ label, error, hint, prefix, suffix, prefixStyle, suffixStyle, t
276
277
  }
277
278
  var styles2 = reactNative.StyleSheet.create({
278
279
  container: {
279
- gap: 6
280
+ gap: 8
280
281
  },
281
282
  label: {
282
283
  fontSize: 15,
283
- fontWeight: "500",
284
- marginBottom: 6
284
+ fontWeight: "500"
285
285
  },
286
286
  inputWrapper: {
287
287
  flexDirection: "row",
288
288
  alignItems: "center",
289
289
  borderWidth: 1.5,
290
- borderRadius: 14,
291
- paddingHorizontal: 20,
292
- paddingVertical: 16
290
+ borderRadius: 8,
291
+ paddingHorizontal: 16,
292
+ paddingVertical: 14
293
293
  },
294
294
  input: {
295
295
  flex: 1,
@@ -351,7 +351,7 @@ function Badge({ label, children, variant = "default", size = "md", icon, style
351
351
  }
352
352
  var styles3 = reactNative.StyleSheet.create({
353
353
  container: {
354
- borderRadius: 8,
354
+ borderRadius: 6,
355
355
  alignSelf: "flex-start",
356
356
  flexDirection: "row",
357
357
  alignItems: "center"
@@ -396,10 +396,10 @@ function Card({ children, variant = "elevated", onPress, style }) {
396
396
  backgroundColor: colors.card,
397
397
  borderColor: colors.border,
398
398
  shadowColor: "#000",
399
- shadowOffset: { width: 0, height: 1 },
400
- shadowOpacity: 0.05,
401
- shadowRadius: 2,
402
- elevation: 1
399
+ shadowOffset: { width: 0, height: 4 },
400
+ shadowOpacity: 0.06,
401
+ shadowRadius: 12,
402
+ elevation: 3
403
403
  },
404
404
  outlined: {
405
405
  backgroundColor: colors.card,
@@ -449,16 +449,11 @@ function CardFooter({ children, style }) {
449
449
  }
450
450
  var styles4 = reactNative.StyleSheet.create({
451
451
  card: {
452
- borderRadius: 20,
453
- borderWidth: 1,
454
- shadowColor: "#000",
455
- shadowOffset: { width: 0, height: 1 },
456
- shadowOpacity: 0.05,
457
- shadowRadius: 2,
458
- elevation: 1
452
+ borderRadius: 12,
453
+ borderWidth: 1
459
454
  },
460
455
  header: {
461
- padding: 28,
456
+ padding: 24,
462
457
  paddingBottom: 0,
463
458
  gap: 8
464
459
  },
@@ -472,10 +467,10 @@ var styles4 = reactNative.StyleSheet.create({
472
467
  lineHeight: 22
473
468
  },
474
469
  content: {
475
- padding: 28
470
+ padding: 24
476
471
  },
477
472
  footer: {
478
- padding: 28,
473
+ padding: 24,
479
474
  paddingTop: 0,
480
475
  flexDirection: "row",
481
476
  alignItems: "center"
@@ -613,19 +608,24 @@ function AlertBanner({ title, description, variant = "default", icon, style }) {
613
608
  const borderColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.border;
614
609
  const titleColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.foreground;
615
610
  const descColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : colors.mutedForeground;
616
- const defaultIcon = variant === "destructive" ? "\u26A0" : variant === "success" ? "\u2713" : "\u2139";
617
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles8.container, { backgroundColor: colors.card, borderColor }, style] }, icon ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles8.icon }, icon) : /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles8.icon }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles8.defaultIcon, { color: titleColor }], allowFontScaling: true }, 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));
611
+ 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 });
612
+ 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));
618
613
  }
619
614
  var styles8 = reactNative.StyleSheet.create({
620
615
  container: {
621
616
  flexDirection: "row",
622
617
  borderWidth: 1,
623
- borderRadius: 8,
618
+ borderRadius: 12,
624
619
  padding: 16,
625
- gap: 12
620
+ gap: 12,
621
+ shadowColor: "#000",
622
+ shadowOffset: { width: 0, height: 4 },
623
+ shadowOpacity: 0.06,
624
+ shadowRadius: 12,
625
+ elevation: 3
626
626
  },
627
627
  icon: {
628
- marginTop: 2
628
+ marginTop: 0
629
629
  },
630
630
  content: {
631
631
  flex: 1,
@@ -639,10 +639,6 @@ var styles8 = reactNative.StyleSheet.create({
639
639
  description: {
640
640
  fontSize: 14,
641
641
  lineHeight: 20
642
- },
643
- defaultIcon: {
644
- fontSize: 18,
645
- fontWeight: "700"
646
642
  }
647
643
  });
648
644
  function Progress({ value = 0, max = 100, style }) {
@@ -815,18 +811,17 @@ function Textarea({
815
811
  }
816
812
  var styles11 = reactNative.StyleSheet.create({
817
813
  container: {
818
- gap: 6
814
+ gap: 8
819
815
  },
820
816
  label: {
821
817
  fontSize: 15,
822
- fontWeight: "500",
823
- marginBottom: 6
818
+ fontWeight: "500"
824
819
  },
825
820
  input: {
826
821
  borderWidth: 1.5,
827
- borderRadius: 14,
828
- paddingHorizontal: 20,
829
- paddingVertical: 16,
822
+ borderRadius: 8,
823
+ paddingHorizontal: 16,
824
+ paddingVertical: 14,
830
825
  fontSize: 17
831
826
  },
832
827
  helperText: {
@@ -893,16 +888,16 @@ var styles12 = reactNative.StyleSheet.create({
893
888
  gap: 12
894
889
  },
895
890
  box: {
896
- width: 28,
897
- height: 28,
891
+ width: 24,
892
+ height: 24,
898
893
  borderRadius: 8,
899
894
  borderWidth: 1.5,
900
895
  alignItems: "center",
901
896
  justifyContent: "center"
902
897
  },
903
898
  checkmark: {
904
- width: 15,
905
- height: 9,
899
+ width: 12,
900
+ height: 7,
906
901
  borderLeftWidth: 2,
907
902
  borderBottomWidth: 2,
908
903
  transform: [{ rotate: "-45deg" }, { translateY: -1 }]
@@ -1042,54 +1037,48 @@ function Toggle({
1042
1037
  if (pressed) {
1043
1038
  const active = renderProp(activeIcon);
1044
1039
  if (active) return /* @__PURE__ */ React23__default.default.createElement(React23__default.default.Fragment, null, active);
1045
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles14.checkContainer, { borderColor: colors.primary, backgroundColor: colors.primary }] }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles14.checkMark, { color: colors.primaryForeground }] }, "\u2713"));
1040
+ return /* @__PURE__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: 20, color: colors.primary });
1046
1041
  }
1047
1042
  const custom = renderProp(icon);
1048
1043
  if (custom) return /* @__PURE__ */ React23__default.default.createElement(React23__default.default.Fragment, null, custom);
1049
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles14.checkContainer, { borderColor: colors.mutedForeground }] });
1044
+ return /* @__PURE__ */ React23__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: 20, color: colors.mutedForeground });
1050
1045
  };
1051
- return /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: { transform: [{ scale }] } }, /* @__PURE__ */ React23__default.default.createElement(
1052
- reactNative.Animated.View,
1046
+ return /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale }] }, disabled && styles14.disabled, style] }, /* @__PURE__ */ React23__default.default.createElement(
1047
+ reactNative.TouchableOpacity,
1053
1048
  {
1054
- style: [
1055
- styles14.base,
1056
- sizeStyles[size],
1057
- { borderColor, backgroundColor, borderWidth: 2 },
1058
- disabled && styles14.disabled,
1059
- style
1060
- ]
1049
+ onPress: () => {
1050
+ Haptics12__namespace.selectionAsync();
1051
+ onPressedChange?.(!pressed);
1052
+ },
1053
+ onPressIn: handlePressIn,
1054
+ onPressOut: handlePressOut,
1055
+ disabled,
1056
+ activeOpacity: 1,
1057
+ touchSoundDisabled: true,
1058
+ ...props
1061
1059
  },
1062
1060
  /* @__PURE__ */ React23__default.default.createElement(
1063
- reactNative.TouchableOpacity,
1061
+ reactNative.Animated.View,
1064
1062
  {
1065
- style: styles14.touchable,
1066
- onPress: () => {
1067
- Haptics12__namespace.selectionAsync();
1068
- onPressedChange?.(!pressed);
1069
- },
1070
- onPressIn: handlePressIn,
1071
- onPressOut: handlePressOut,
1072
- disabled,
1073
- activeOpacity: 1,
1074
- touchSoundDisabled: true,
1075
- ...props
1063
+ style: [
1064
+ styles14.base,
1065
+ sizeStyles[size],
1066
+ { borderColor, backgroundColor, borderWidth: 2 }
1067
+ ]
1076
1068
  },
1077
- /* @__PURE__ */ React23__default.default.createElement(LeftIcon, null),
1078
- label ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.Text, { style: [styles14.label, { color: textColor }] }, label) : null
1069
+ /* @__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)
1079
1070
  )
1080
1071
  ));
1081
1072
  }
1082
1073
  var styles14 = reactNative.StyleSheet.create({
1083
1074
  base: {
1084
- borderRadius: 8,
1085
- overflow: "hidden"
1075
+ borderRadius: 8
1086
1076
  },
1087
- touchable: {
1077
+ inner: {
1088
1078
  flexDirection: "row",
1089
1079
  alignItems: "center",
1090
1080
  justifyContent: "center",
1091
- gap: 8,
1092
- flex: 1
1081
+ gap: 8
1093
1082
  },
1094
1083
  disabled: {
1095
1084
  opacity: 0.45
@@ -1097,18 +1086,6 @@ var styles14 = reactNative.StyleSheet.create({
1097
1086
  label: {
1098
1087
  fontSize: 14,
1099
1088
  fontWeight: "500"
1100
- },
1101
- checkContainer: {
1102
- width: 24,
1103
- height: 24,
1104
- borderRadius: 12,
1105
- borderWidth: 2,
1106
- alignItems: "center",
1107
- justifyContent: "center"
1108
- },
1109
- checkMark: {
1110
- fontSize: 14,
1111
- fontWeight: "700"
1112
1089
  }
1113
1090
  });
1114
1091
  function RadioItem({
@@ -1185,7 +1162,7 @@ function RadioGroup({
1185
1162
  }
1186
1163
  var styles15 = reactNative.StyleSheet.create({
1187
1164
  container: {
1188
- gap: 10
1165
+ gap: 12
1189
1166
  },
1190
1167
  horizontal: {
1191
1168
  flexDirection: "row",
@@ -1194,7 +1171,7 @@ var styles15 = reactNative.StyleSheet.create({
1194
1171
  row: {
1195
1172
  flexDirection: "row",
1196
1173
  alignItems: "center",
1197
- gap: 10
1174
+ gap: 12
1198
1175
  },
1199
1176
  radio: {
1200
1177
  width: 24,
@@ -1423,13 +1400,7 @@ function AccordionItemComponent({
1423
1400
  touchSoundDisabled: true
1424
1401
  },
1425
1402
  /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles17.triggerText, { color: colors.foreground }] }, item.trigger),
1426
- /* @__PURE__ */ React23__default.default.createElement(
1427
- ReanimatedAnimated__default.default.Text,
1428
- {
1429
- style: [styles17.chevron, { color: colors.foreground }, rotationStyle]
1430
- },
1431
- "\u25BE"
1432
- )
1403
+ /* @__PURE__ */ React23__default.default.createElement(ReanimatedAnimated__default.default.View, { style: [styles17.chevron, rotationStyle] }, /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foreground }))
1433
1404
  )), /* @__PURE__ */ React23__default.default.createElement(ReanimatedAnimated__default.default.View, { style: heightStyle }, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles17.content, onLayout }, item.content)));
1434
1405
  }
1435
1406
  function Accordion({ items, type = "single", defaultValue, style }) {
@@ -1472,7 +1443,6 @@ var styles17 = reactNative.StyleSheet.create({
1472
1443
  flex: 1
1473
1444
  },
1474
1445
  chevron: {
1475
- fontSize: 18,
1476
1446
  marginLeft: 8
1477
1447
  },
1478
1448
  content: {
@@ -1690,7 +1660,7 @@ function Select({
1690
1660
  },
1691
1661
  selected?.label ?? placeholder
1692
1662
  ),
1693
- /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles20.chevron, { color: colors.mutedForeground }] }, "\u25BE")
1663
+ /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-down", size: 20, color: colors.mutedForeground })
1694
1664
  )) : null, isIOS ? /* @__PURE__ */ React23__default.default.createElement(
1695
1665
  reactNative.Modal,
1696
1666
  {
@@ -1779,28 +1749,31 @@ function Select({
1779
1749
  }
1780
1750
  var styles20 = reactNative.StyleSheet.create({
1781
1751
  container: {
1782
- gap: 6
1752
+ gap: 8
1783
1753
  },
1784
1754
  label: {
1785
1755
  fontSize: 15,
1786
- fontWeight: "500",
1787
- marginBottom: 2
1756
+ fontWeight: "500"
1788
1757
  },
1789
1758
  trigger: {
1790
1759
  flexDirection: "row",
1791
1760
  alignItems: "center",
1792
1761
  justifyContent: "space-between",
1793
1762
  borderWidth: 1.5,
1794
- borderRadius: 14,
1795
- paddingHorizontal: 20,
1796
- paddingVertical: 16
1763
+ borderRadius: 8,
1764
+ paddingHorizontal: 16,
1765
+ paddingVertical: 14,
1766
+ shadowColor: "#000",
1767
+ shadowOffset: { width: 0, height: 1 },
1768
+ shadowOpacity: 0.04,
1769
+ shadowRadius: 2,
1770
+ elevation: 1
1797
1771
  },
1798
1772
  triggerText: {
1799
1773
  fontSize: 17,
1800
1774
  flex: 1
1801
1775
  },
1802
1776
  chevron: {
1803
- fontSize: 16,
1804
1777
  marginLeft: 8
1805
1778
  },
1806
1779
  helperText: {
@@ -1811,15 +1784,15 @@ var styles20 = reactNative.StyleSheet.create({
1811
1784
  backgroundColor: "rgba(0,0,0,0.4)"
1812
1785
  },
1813
1786
  iosSheet: {
1814
- borderTopLeftRadius: 24,
1815
- borderTopRightRadius: 24,
1787
+ borderTopLeftRadius: 16,
1788
+ borderTopRightRadius: 16,
1816
1789
  paddingBottom: 32
1817
1790
  },
1818
1791
  iosToolbar: {
1819
1792
  flexDirection: "row",
1820
1793
  alignItems: "center",
1821
1794
  justifyContent: "space-between",
1822
- paddingHorizontal: 20,
1795
+ paddingHorizontal: 16,
1823
1796
  paddingVertical: 12,
1824
1797
  borderBottomWidth: 1
1825
1798
  },
@@ -1841,9 +1814,9 @@ var styles20 = reactNative.StyleSheet.create({
1841
1814
  },
1842
1815
  webPicker: {
1843
1816
  borderWidth: 1.5,
1844
- borderRadius: 14,
1845
- paddingHorizontal: 20,
1846
- paddingVertical: 16,
1817
+ borderRadius: 8,
1818
+ paddingHorizontal: 16,
1819
+ paddingVertical: 14,
1847
1820
  fontSize: 17
1848
1821
  }
1849
1822
  });
@@ -1902,8 +1875,9 @@ function ToastNotification({ item, onDismiss }) {
1902
1875
  destructive: colors.destructiveForeground,
1903
1876
  success: colors.successForeground
1904
1877
  }[item.variant ?? "default"];
1905
- const leftIcon = item.icon ?? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles21.defaultIcon, { color: textColor }] }, item.variant === "success" ? "\u2713" : item.variant === "destructive" ? "\u2716" : "\u2139");
1906
- return /* @__PURE__ */ React23__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React23__default.default.createElement(ReanimatedAnimated__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(reactNative.Text, { style: [styles21.dismissIcon, { color: textColor }] }, "\u2715"))));
1878
+ 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 });
1879
+ const leftIcon = item.icon ?? defaultIcon;
1880
+ return /* @__PURE__ */ React23__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: panGesture }, /* @__PURE__ */ React23__default.default.createElement(ReanimatedAnimated__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 }))));
1907
1881
  }
1908
1882
  function ToastProvider({ children }) {
1909
1883
  const [toasts, setToasts] = React23.useState([]);
@@ -1922,7 +1896,7 @@ function ToastProvider({ children }) {
1922
1896
  const dismiss = React23.useCallback((id) => {
1923
1897
  setToasts((prev) => prev.filter((t) => t.id !== id));
1924
1898
  }, []);
1925
- return /* @__PURE__ */ React23__default.default.createElement(ToastContext.Provider, { value: { toast, dismiss } }, children, /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: [styles21.container, { top: insets.top + 8 }], pointerEvents: "box-none" }, toasts.map((item) => /* @__PURE__ */ React23__default.default.createElement(ToastNotification, { key: item.id, item, onDismiss: () => dismiss(item.id) }))));
1899
+ 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) }))));
1926
1900
  }
1927
1901
  var styles21 = reactNative.StyleSheet.create({
1928
1902
  container: {
@@ -1932,6 +1906,12 @@ var styles21 = reactNative.StyleSheet.create({
1932
1906
  gap: 8,
1933
1907
  zIndex: 9999
1934
1908
  },
1909
+ containerWeb: {
1910
+ left: void 0,
1911
+ right: void 0,
1912
+ alignSelf: "center",
1913
+ width: 400
1914
+ },
1935
1915
  toast: {
1936
1916
  flexDirection: "row",
1937
1917
  alignItems: "center",
@@ -1949,15 +1929,11 @@ var styles21 = reactNative.StyleSheet.create({
1949
1929
  gap: 4
1950
1930
  },
1951
1931
  leftIconContainer: {
1952
- width: 36,
1932
+ width: 40,
1953
1933
  alignItems: "center",
1954
1934
  justifyContent: "center",
1955
1935
  marginRight: 8
1956
1936
  },
1957
- defaultIcon: {
1958
- fontSize: 22,
1959
- fontWeight: "700"
1960
- },
1961
1937
  toastTitle: {
1962
1938
  fontSize: 15,
1963
1939
  fontWeight: "600"
@@ -1966,11 +1942,8 @@ var styles21 = reactNative.StyleSheet.create({
1966
1942
  fontSize: 14
1967
1943
  },
1968
1944
  dismissButton: {
1969
- padding: 12,
1945
+ padding: 8,
1970
1946
  marginLeft: 4
1971
- },
1972
- dismissIcon: {
1973
- fontSize: 14
1974
1947
  }
1975
1948
  });
1976
1949
  function formatCurrency(raw, separator) {
@@ -2044,7 +2017,24 @@ var styles22 = reactNative.StyleSheet.create({
2044
2017
  }
2045
2018
  });
2046
2019
  var nativeDriver4 = reactNative.Platform.OS !== "web";
2047
- function ListItem({ icon, title, subtitle, trailing, onPress, disabled, style }) {
2020
+ function ListItem({
2021
+ leftRender,
2022
+ rightRender,
2023
+ trailing,
2024
+ icon,
2025
+ title,
2026
+ subtitle,
2027
+ caption,
2028
+ variant = "plain",
2029
+ showChevron = false,
2030
+ showSeparator = false,
2031
+ onPress,
2032
+ disabled,
2033
+ style,
2034
+ titleStyle,
2035
+ subtitleStyle,
2036
+ captionStyle
2037
+ }) {
2048
2038
  const { colors } = useTheme();
2049
2039
  const scale = React23.useRef(new reactNative.Animated.Value(1)).current;
2050
2040
  const handlePressIn = () => {
@@ -2068,10 +2058,23 @@ function ListItem({ icon, title, subtitle, trailing, onPress, disabled, style })
2068
2058
  Haptics12__namespace.selectionAsync();
2069
2059
  onPress?.();
2070
2060
  };
2061
+ const effectiveLeft = leftRender ?? icon;
2062
+ const effectiveRight = rightRender ?? trailing;
2063
+ const cardStyle = variant === "card" ? {
2064
+ backgroundColor: colors.card,
2065
+ borderRadius: 12,
2066
+ borderWidth: 1,
2067
+ borderColor: colors.border,
2068
+ shadowColor: "#000",
2069
+ shadowOffset: { width: 0, height: 2 },
2070
+ shadowOpacity: 0.06,
2071
+ shadowRadius: 6,
2072
+ elevation: 2
2073
+ } : {};
2071
2074
  return /* @__PURE__ */ React23__default.default.createElement(reactNative.Animated.View, { style: [{ transform: [{ scale }] }, disabled && styles23.disabled] }, /* @__PURE__ */ React23__default.default.createElement(
2072
2075
  reactNative.TouchableOpacity,
2073
2076
  {
2074
- style: [styles23.container, style],
2077
+ style: [styles23.container, cardStyle, style],
2075
2078
  onPress: onPress ? handlePress : void 0,
2076
2079
  onPressIn: handlePressIn,
2077
2080
  onPressOut: handlePressOut,
@@ -2079,10 +2082,49 @@ function ListItem({ icon, title, subtitle, trailing, onPress, disabled, style })
2079
2082
  activeOpacity: 1,
2080
2083
  touchSoundDisabled: true
2081
2084
  },
2082
- icon ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.iconWrapper }, icon) : null,
2083
- /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.content }, /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles23.title, { color: colors.foreground }], allowFontScaling: true }, title), subtitle ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles23.subtitle, { color: colors.mutedForeground }], allowFontScaling: true }, subtitle) : null),
2084
- trailing !== void 0 ? typeof trailing === "string" ? /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles23.trailing, { color: colors.mutedForeground }], allowFontScaling: true }, trailing) : trailing : null
2085
- ));
2085
+ effectiveLeft ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.leftContainer }, effectiveLeft) : null,
2086
+ /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.content }, /* @__PURE__ */ React23__default.default.createElement(
2087
+ reactNative.Text,
2088
+ {
2089
+ style: [styles23.title, { color: colors.foreground }, titleStyle],
2090
+ numberOfLines: 2,
2091
+ allowFontScaling: true
2092
+ },
2093
+ title
2094
+ ), subtitle ? /* @__PURE__ */ React23__default.default.createElement(
2095
+ reactNative.Text,
2096
+ {
2097
+ style: [styles23.subtitle, { color: colors.mutedForeground }, subtitleStyle],
2098
+ numberOfLines: 2,
2099
+ allowFontScaling: true
2100
+ },
2101
+ subtitle
2102
+ ) : null, caption ? /* @__PURE__ */ React23__default.default.createElement(
2103
+ reactNative.Text,
2104
+ {
2105
+ style: [styles23.caption, { color: colors.mutedForeground }, captionStyle],
2106
+ numberOfLines: 1,
2107
+ allowFontScaling: true
2108
+ },
2109
+ caption
2110
+ ) : null),
2111
+ effectiveRight !== void 0 ? /* @__PURE__ */ React23__default.default.createElement(reactNative.View, { style: styles23.rightContainer }, typeof effectiveRight === "string" ? /* @__PURE__ */ React23__default.default.createElement(
2112
+ reactNative.Text,
2113
+ {
2114
+ style: [styles23.rightText, { color: colors.mutedForeground }],
2115
+ allowFontScaling: true
2116
+ },
2117
+ effectiveRight
2118
+ ) : effectiveRight) : showChevron ? /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.mutedForeground }) : null
2119
+ ), showSeparator ? /* @__PURE__ */ React23__default.default.createElement(
2120
+ reactNative.View,
2121
+ {
2122
+ style: [
2123
+ styles23.separator,
2124
+ { backgroundColor: colors.border, marginLeft: effectiveLeft ? 16 + 44 + 12 : 16 }
2125
+ ]
2126
+ }
2127
+ ) : null);
2086
2128
  }
2087
2129
  var styles23 = reactNative.StyleSheet.create({
2088
2130
  container: {
@@ -2092,26 +2134,49 @@ var styles23 = reactNative.StyleSheet.create({
2092
2134
  paddingVertical: 14,
2093
2135
  gap: 12
2094
2136
  },
2095
- iconWrapper: {
2137
+ leftContainer: {
2138
+ width: 44,
2139
+ height: 44,
2096
2140
  alignItems: "center",
2097
- justifyContent: "center"
2141
+ justifyContent: "center",
2142
+ flexShrink: 0
2098
2143
  },
2099
2144
  content: {
2100
2145
  flex: 1,
2101
- gap: 3
2146
+ gap: 4
2102
2147
  },
2103
2148
  title: {
2104
- fontSize: 16,
2149
+ fontSize: 17,
2105
2150
  fontWeight: "500",
2106
- lineHeight: 22
2151
+ lineHeight: 24
2107
2152
  },
2108
2153
  subtitle: {
2109
- fontSize: 13,
2110
- lineHeight: 18
2154
+ fontSize: 14,
2155
+ fontWeight: "400",
2156
+ lineHeight: 20
2157
+ },
2158
+ caption: {
2159
+ fontSize: 12,
2160
+ fontWeight: "400",
2161
+ lineHeight: 16,
2162
+ opacity: 0.7
2163
+ },
2164
+ rightContainer: {
2165
+ alignItems: "flex-end",
2166
+ justifyContent: "center",
2167
+ flexShrink: 0,
2168
+ maxWidth: 160
2111
2169
  },
2112
- trailing: {
2170
+ rightText: {
2113
2171
  fontSize: 15
2114
2172
  },
2173
+ chevron: {
2174
+ marginLeft: 4
2175
+ },
2176
+ separator: {
2177
+ height: reactNative.StyleSheet.hairlineWidth,
2178
+ marginRight: 16
2179
+ },
2115
2180
  disabled: {
2116
2181
  opacity: 0.45
2117
2182
  }
@@ -2344,7 +2409,7 @@ function MonthPicker({ value, onChange, style }) {
2344
2409
  activeOpacity: 0.6,
2345
2410
  touchSoundDisabled: true
2346
2411
  },
2347
- /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles27.arrowText, { color: colors.foreground }], allowFontScaling: true }, "\u2039")
2412
+ /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
2348
2413
  ), /* @__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(
2349
2414
  reactNative.TouchableOpacity,
2350
2415
  {
@@ -2353,7 +2418,7 @@ function MonthPicker({ value, onChange, style }) {
2353
2418
  activeOpacity: 0.6,
2354
2419
  touchSoundDisabled: true
2355
2420
  },
2356
- /* @__PURE__ */ React23__default.default.createElement(reactNative.Text, { style: [styles27.arrowText, { color: colors.foreground }], allowFontScaling: true }, "\u203A")
2421
+ /* @__PURE__ */ React23__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
2357
2422
  ));
2358
2423
  }
2359
2424
  var styles27 = reactNative.StyleSheet.create({
@@ -2368,10 +2433,6 @@ var styles27 = reactNative.StyleSheet.create({
2368
2433
  alignItems: "center",
2369
2434
  justifyContent: "center"
2370
2435
  },
2371
- arrowText: {
2372
- fontSize: 24,
2373
- lineHeight: 30
2374
- },
2375
2436
  label: {
2376
2437
  fontSize: 17,
2377
2438
  fontWeight: "500",