@sudobility/components-rn 1.0.42 → 1.0.44

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.
Files changed (115) hide show
  1. package/dist/index.cjs.js +895 -299
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.esm.js +896 -300
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/ui/Avatar/Avatar.d.ts.map +1 -1
  6. package/dist/ui/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  7. package/dist/ui/BreadcrumbNav/BreadcrumbNav.d.ts.map +1 -1
  8. package/dist/ui/CTASection/CTASection.d.ts.map +1 -1
  9. package/dist/ui/Calendar/Calendar.d.ts.map +1 -1
  10. package/dist/ui/ChainBadge/ChainBadge.d.ts.map +1 -1
  11. package/dist/ui/Checkbox/Checkbox.d.ts +0 -22
  12. package/dist/ui/Checkbox/Checkbox.d.ts.map +1 -1
  13. package/dist/ui/Code/Code.d.ts +0 -17
  14. package/dist/ui/Code/Code.d.ts.map +1 -1
  15. package/dist/ui/CodeDisplay/CodeDisplay.d.ts +0 -21
  16. package/dist/ui/CodeDisplay/CodeDisplay.d.ts.map +1 -1
  17. package/dist/ui/CollapsibleSection/CollapsibleSection.d.ts.map +1 -1
  18. package/dist/ui/Combobox/Combobox.d.ts.map +1 -1
  19. package/dist/ui/Command/Command.d.ts.map +1 -1
  20. package/dist/ui/DashboardStatCard/DashboardStatCard.d.ts +0 -17
  21. package/dist/ui/DashboardStatCard/DashboardStatCard.d.ts.map +1 -1
  22. package/dist/ui/DataList/DataList.d.ts.map +1 -1
  23. package/dist/ui/Dropdown/Dropdown.d.ts.map +1 -1
  24. package/dist/ui/ExternalLink/ExternalLink.d.ts.map +1 -1
  25. package/dist/ui/FeatureCard/FeatureCard.d.ts.map +1 -1
  26. package/dist/ui/FeatureGrid/FeatureGrid.d.ts.map +1 -1
  27. package/dist/ui/GradientIconContainer/GradientIconContainer.d.ts +0 -13
  28. package/dist/ui/GradientIconContainer/GradientIconContainer.d.ts.map +1 -1
  29. package/dist/ui/HelperText/HelperText.d.ts.map +1 -1
  30. package/dist/ui/IconContainer/IconContainer.d.ts +0 -13
  31. package/dist/ui/IconContainer/IconContainer.d.ts.map +1 -1
  32. package/dist/ui/IconText/IconText.d.ts.map +1 -1
  33. package/dist/ui/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
  34. package/dist/ui/KeyValuePair/KeyValuePair.d.ts.map +1 -1
  35. package/dist/ui/Link/Link.d.ts.map +1 -1
  36. package/dist/ui/ListItemWithAction/ListItemWithAction.d.ts.map +1 -1
  37. package/dist/ui/Modal/Modal.d.ts.map +1 -1
  38. package/dist/ui/MultiSelect/MultiSelect.d.ts.map +1 -1
  39. package/dist/ui/NavigationList/NavigationList.d.ts.map +1 -1
  40. package/dist/ui/PageSectionHeader/PageSectionHeader.d.ts.map +1 -1
  41. package/dist/ui/Pagination/Pagination.d.ts.map +1 -1
  42. package/dist/ui/PhoneInput/PhoneInput.d.ts.map +1 -1
  43. package/dist/ui/PopupSelect/PopupSelect.d.ts.map +1 -1
  44. package/dist/ui/Progress/Progress.d.ts +0 -15
  45. package/dist/ui/Progress/Progress.d.ts.map +1 -1
  46. package/dist/ui/PromotionalBanner/PromotionalBanner.d.ts.map +1 -1
  47. package/dist/ui/SearchInput/SearchInput.d.ts.map +1 -1
  48. package/dist/ui/SectionHeader/SectionHeader.d.ts.map +1 -1
  49. package/dist/ui/Select/Select.d.ts.map +1 -1
  50. package/dist/ui/SettingsList/SettingsList.d.ts.map +1 -1
  51. package/dist/ui/Sheet/Sheet.d.ts.map +1 -1
  52. package/dist/ui/SideNav/SideNav.d.ts.map +1 -1
  53. package/dist/ui/SmartLink/SmartLink.d.ts.map +1 -1
  54. package/dist/ui/StatDisplay/StatDisplay.d.ts +0 -12
  55. package/dist/ui/StatDisplay/StatDisplay.d.ts.map +1 -1
  56. package/dist/ui/StepList/StepList.d.ts.map +1 -1
  57. package/dist/ui/Table/Table.d.ts.map +1 -1
  58. package/dist/ui/Tabs/Tabs.d.ts.map +1 -1
  59. package/dist/ui/TextArea/TextArea.d.ts.map +1 -1
  60. package/dist/ui/TextInputModal/TextInputModal.d.ts.map +1 -1
  61. package/dist/ui/Tooltip/Tooltip.d.ts +0 -20
  62. package/dist/ui/Tooltip/Tooltip.d.ts.map +1 -1
  63. package/dist/ui/TransferList/TransferList.d.ts.map +1 -1
  64. package/package.json +3 -3
  65. package/src/ui/Avatar/Avatar.tsx +6 -5
  66. package/src/ui/Breadcrumb/Breadcrumb.tsx +8 -5
  67. package/src/ui/BreadcrumbNav/BreadcrumbNav.tsx +22 -3
  68. package/src/ui/CTASection/CTASection.tsx +8 -6
  69. package/src/ui/Calendar/Calendar.tsx +35 -6
  70. package/src/ui/ChainBadge/ChainBadge.tsx +67 -42
  71. package/src/ui/Checkbox/Checkbox.tsx +47 -20
  72. package/src/ui/Code/Code.tsx +51 -21
  73. package/src/ui/CodeDisplay/CodeDisplay.tsx +46 -20
  74. package/src/ui/CollapsibleSection/CollapsibleSection.tsx +7 -3
  75. package/src/ui/Combobox/Combobox.tsx +2 -1
  76. package/src/ui/Command/Command.tsx +2 -1
  77. package/src/ui/DashboardStatCard/DashboardStatCard.tsx +29 -11
  78. package/src/ui/DataList/DataList.tsx +23 -5
  79. package/src/ui/Dropdown/Dropdown.tsx +4 -1
  80. package/src/ui/ExternalLink/ExternalLink.tsx +5 -4
  81. package/src/ui/FeatureCard/FeatureCard.tsx +60 -29
  82. package/src/ui/FeatureGrid/FeatureGrid.tsx +7 -7
  83. package/src/ui/GradientIconContainer/GradientIconContainer.tsx +33 -8
  84. package/src/ui/HelperText/HelperText.tsx +9 -8
  85. package/src/ui/IconContainer/IconContainer.tsx +26 -9
  86. package/src/ui/IconText/IconText.tsx +6 -5
  87. package/src/ui/InfiniteScroll/InfiniteScroll.tsx +2 -1
  88. package/src/ui/KeyValuePair/KeyValuePair.tsx +12 -5
  89. package/src/ui/Link/Link.tsx +6 -5
  90. package/src/ui/ListItemWithAction/ListItemWithAction.tsx +2 -1
  91. package/src/ui/Modal/Modal.tsx +16 -2
  92. package/src/ui/MultiSelect/MultiSelect.tsx +2 -1
  93. package/src/ui/NavigationList/NavigationList.tsx +17 -3
  94. package/src/ui/PageSectionHeader/PageSectionHeader.tsx +2 -1
  95. package/src/ui/Pagination/Pagination.tsx +9 -6
  96. package/src/ui/PhoneInput/PhoneInput.tsx +3 -2
  97. package/src/ui/PopupSelect/PopupSelect.tsx +15 -14
  98. package/src/ui/Progress/Progress.tsx +63 -14
  99. package/src/ui/PromotionalBanner/PromotionalBanner.tsx +7 -4
  100. package/src/ui/SearchInput/SearchInput.tsx +3 -2
  101. package/src/ui/SectionHeader/SectionHeader.tsx +4 -1
  102. package/src/ui/Select/Select.tsx +20 -5
  103. package/src/ui/SettingsList/SettingsList.tsx +4 -1
  104. package/src/ui/Sheet/Sheet.tsx +20 -3
  105. package/src/ui/SideNav/SideNav.tsx +11 -2
  106. package/src/ui/SmartLink/SmartLink.tsx +6 -3
  107. package/src/ui/Spinner/Spinner.tsx +1 -1
  108. package/src/ui/StatDisplay/StatDisplay.tsx +59 -23
  109. package/src/ui/StepList/StepList.tsx +25 -3
  110. package/src/ui/Table/Table.tsx +22 -9
  111. package/src/ui/Tabs/Tabs.tsx +7 -2
  112. package/src/ui/TextArea/TextArea.tsx +2 -1
  113. package/src/ui/TextInputModal/TextInputModal.tsx +2 -1
  114. package/src/ui/Tooltip/Tooltip.tsx +47 -9
  115. package/src/ui/TransferList/TransferList.tsx +2 -1
package/dist/index.cjs.js CHANGED
@@ -1779,7 +1779,7 @@ const sizeMap = {
1779
1779
  };
1780
1780
  const colorMap = {
1781
1781
  default: design.colors.raw.blue[600],
1782
- white: "#ffffff",
1782
+ white: design.colors.raw.neutral[0],
1783
1783
  success: design.colors.raw.green[600],
1784
1784
  warning: design.colors.raw.orange[600],
1785
1785
  error: design.colors.raw.red[600]
@@ -2477,7 +2477,7 @@ const TextArea = ({
2477
2477
  readOnly && "bg-gray-50 dark:bg-gray-900",
2478
2478
  inputClassName
2479
2479
  ),
2480
- placeholderTextColor: "#9CA3AF",
2480
+ placeholderTextColor: design.colors.raw.neutral[400],
2481
2481
  accessibilityRole: "text",
2482
2482
  accessibilityState: { disabled },
2483
2483
  ...textInputProps
@@ -2499,6 +2499,28 @@ const TextArea = ({
2499
2499
  ) })
2500
2500
  ] });
2501
2501
  };
2502
+ let _checkboxColors = null;
2503
+ function getCheckboxColors() {
2504
+ if (!_checkboxColors) _checkboxColors = buildCheckboxColors();
2505
+ return _checkboxColors;
2506
+ }
2507
+ function buildCheckboxColors() {
2508
+ function extractCheckedColor(base) {
2509
+ const parts = base.split(" ");
2510
+ const bg = parts.find(
2511
+ (c) => c.startsWith("bg-") && !c.includes("hover:") && !c.includes("active:")
2512
+ ) || "";
2513
+ return `${bg} ${bg.replace("bg-", "border-")}`;
2514
+ }
2515
+ const btn = design.colors.component.button;
2516
+ return {
2517
+ primary: extractCheckedColor(btn.primary.base),
2518
+ success: extractCheckedColor(btn.success.base),
2519
+ warning: "bg-yellow-600 border-yellow-600",
2520
+ // DS has no yellow button; local fallback
2521
+ error: extractCheckedColor(btn.destructive.base)
2522
+ };
2523
+ }
2502
2524
  const Checkbox = ({
2503
2525
  checked: controlledChecked,
2504
2526
  defaultChecked = false,
@@ -2522,31 +2544,33 @@ const Checkbox = ({
2522
2544
  sm: {
2523
2545
  box: "w-4 h-4",
2524
2546
  check: "w-2 h-2",
2525
- text: "text-sm",
2526
- desc: "text-xs"
2547
+ text: design.designTokens.typography.size.sm,
2548
+ desc: design.designTokens.typography.size.xs
2527
2549
  },
2528
2550
  md: {
2529
2551
  box: "w-5 h-5",
2530
2552
  check: "w-3 h-3",
2531
- text: "text-base",
2532
- desc: "text-sm"
2553
+ text: design.designTokens.typography.size.base,
2554
+ desc: design.designTokens.typography.size.sm
2533
2555
  },
2534
2556
  lg: {
2535
2557
  box: "w-6 h-6",
2536
2558
  check: "w-4 h-4",
2537
- text: "text-lg",
2538
- desc: "text-base"
2559
+ text: design.designTokens.typography.size.lg,
2560
+ desc: design.designTokens.typography.size.base
2539
2561
  }
2540
2562
  };
2541
2563
  const getVariantClasses = () => {
2564
+ const checkedColors = getCheckboxColors();
2542
2565
  if (error) {
2543
- return checked ? "bg-red-600 border-red-600" : "border-red-600 dark:border-red-500";
2566
+ return checked ? checkedColors.error : "border-red-600 dark:border-red-500";
2544
2567
  }
2568
+ const unchecked = "border-gray-300 dark:border-gray-600";
2545
2569
  const variantClasses = {
2546
- primary: checked ? "bg-blue-600 border-blue-600" : "border-gray-300 dark:border-gray-600",
2547
- success: checked ? "bg-green-600 border-green-600" : "border-gray-300 dark:border-gray-600",
2548
- warning: checked ? "bg-yellow-600 border-yellow-600" : "border-gray-300 dark:border-gray-600",
2549
- error: checked ? "bg-red-600 border-red-600" : "border-gray-300 dark:border-gray-600"
2570
+ primary: checked ? checkedColors.primary : unchecked,
2571
+ success: checked ? checkedColors.success : unchecked,
2572
+ warning: checked ? checkedColors.warning : unchecked,
2573
+ error: checked ? checkedColors.error : unchecked
2550
2574
  };
2551
2575
  return variantClasses[variant];
2552
2576
  };
@@ -2615,7 +2639,13 @@ const Checkbox = ({
2615
2639
  ]
2616
2640
  }
2617
2641
  ),
2618
- errorMessage && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "mt-1 text-sm text-red-600 dark:text-red-400", children: errorMessage })
2642
+ errorMessage && /* @__PURE__ */ jsxRuntimeExports.jsx(
2643
+ reactNative.Text,
2644
+ {
2645
+ className: `mt-1 ${design.designTokens.typography.size.sm} text-red-600 dark:text-red-400`,
2646
+ children: errorMessage
2647
+ }
2648
+ )
2619
2649
  ] });
2620
2650
  };
2621
2651
  const Switch = React__namespace.forwardRef(
@@ -2711,8 +2741,8 @@ const HelperText = ({
2711
2741
  ...textProps
2712
2742
  }) => {
2713
2743
  const sizeClasses = {
2714
- sm: "text-sm",
2715
- base: "text-base"
2744
+ sm: design.designTokens.typography.size.sm,
2745
+ base: design.designTokens.typography.size.base
2716
2746
  };
2717
2747
  const iconSize = {
2718
2748
  sm: "w-4 h-4",
@@ -2720,19 +2750,19 @@ const HelperText = ({
2720
2750
  };
2721
2751
  const variantConfig2 = {
2722
2752
  default: {
2723
- text: "text-gray-600 dark:text-gray-400",
2753
+ text: design.colors.component.alert.info.icon,
2724
2754
  icon: "ℹ"
2725
2755
  },
2726
2756
  error: {
2727
- text: "text-red-600 dark:text-red-400",
2757
+ text: design.colors.component.alert.error.icon,
2728
2758
  icon: "⚠"
2729
2759
  },
2730
2760
  success: {
2731
- text: "text-green-600 dark:text-green-400",
2761
+ text: design.colors.component.alert.success.icon,
2732
2762
  icon: "✓"
2733
2763
  },
2734
2764
  warning: {
2735
- text: "text-yellow-600 dark:text-yellow-400",
2765
+ text: design.colors.component.alert.warning.icon,
2736
2766
  icon: "⚠"
2737
2767
  }
2738
2768
  };
@@ -2742,6 +2772,7 @@ const HelperText = ({
2742
2772
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(sizeClasses[size], config.text), ...textProps, children })
2743
2773
  ] });
2744
2774
  };
2775
+ const { typography: typography$h } = design.designTokens;
2745
2776
  const Select = ({
2746
2777
  value,
2747
2778
  onValueChange,
@@ -2780,8 +2811,8 @@ const Select = ({
2780
2811
  reactNative.Text,
2781
2812
  {
2782
2813
  className: cn(
2783
- "text-base",
2784
- item.value === value ? "text-blue-600 dark:text-blue-400 font-medium" : "text-gray-900 dark:text-gray-100"
2814
+ typography$h.size.base,
2815
+ item.value === value ? `text-blue-600 dark:text-blue-400 ${typography$h.weight.medium}` : "text-gray-900 dark:text-gray-100"
2785
2816
  ),
2786
2817
  children: item.label
2787
2818
  }
@@ -2810,7 +2841,8 @@ const Select = ({
2810
2841
  reactNative.Text,
2811
2842
  {
2812
2843
  className: cn(
2813
- "text-base flex-1",
2844
+ typography$h.size.base,
2845
+ "flex-1",
2814
2846
  selectedOption ? "text-gray-900 dark:text-gray-100" : "text-gray-400 dark:text-gray-500"
2815
2847
  ),
2816
2848
  numberOfLines: 1,
@@ -2830,8 +2862,27 @@ const Select = ({
2830
2862
  onRequestClose: () => setIsOpen(false),
2831
2863
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-1 justify-end bg-black/50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.SafeAreaView, { className: "bg-white dark:bg-gray-800 rounded-t-xl", children: [
2832
2864
  /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: [
2833
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Pressable, { onPress: () => setIsOpen(false), children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-blue-600 dark:text-blue-400 text-base", children: "Cancel" }) }),
2834
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-base font-semibold text-gray-900 dark:text-white", children: title }),
2865
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Pressable, { onPress: () => setIsOpen(false), children: /* @__PURE__ */ jsxRuntimeExports.jsx(
2866
+ reactNative.Text,
2867
+ {
2868
+ className: cn(
2869
+ "text-blue-600 dark:text-blue-400",
2870
+ typography$h.size.base
2871
+ ),
2872
+ children: "Cancel"
2873
+ }
2874
+ ) }),
2875
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
2876
+ reactNative.Text,
2877
+ {
2878
+ className: cn(
2879
+ typography$h.size.base,
2880
+ typography$h.weight.semibold,
2881
+ "text-gray-900 dark:text-white"
2882
+ ),
2883
+ children: title
2884
+ }
2885
+ ),
2835
2886
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { style: { width: 60 } })
2836
2887
  ] }),
2837
2888
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -2967,11 +3018,11 @@ const styles$4 = reactNative.StyleSheet.create({
2967
3018
  alignItems: "center",
2968
3019
  justifyContent: "space-between",
2969
3020
  borderWidth: 1,
2970
- borderColor: "#d1d5db",
3021
+ borderColor: design.colors.raw.neutral[300],
2971
3022
  borderRadius: 8,
2972
3023
  paddingHorizontal: 12,
2973
3024
  paddingVertical: 12,
2974
- backgroundColor: "#ffffff"
3025
+ backgroundColor: design.colors.raw.neutral[0]
2975
3026
  },
2976
3027
  triggerDisabled: {
2977
3028
  opacity: 0.5
@@ -2979,19 +3030,19 @@ const styles$4 = reactNative.StyleSheet.create({
2979
3030
  triggerText: {
2980
3031
  flex: 1,
2981
3032
  fontSize: 16,
2982
- color: "#1a1a1a"
3033
+ color: design.colors.raw.neutral[900]
2983
3034
  },
2984
3035
  triggerPlaceholder: {
2985
- color: "#9ca3af"
3036
+ color: design.colors.raw.neutral[400]
2986
3037
  },
2987
3038
  triggerArrow: {
2988
3039
  fontSize: 10,
2989
- color: "#9ca3af",
3040
+ color: design.colors.raw.neutral[400],
2990
3041
  marginLeft: 8
2991
3042
  },
2992
3043
  modalContainer: {
2993
3044
  flex: 1,
2994
- backgroundColor: "#ffffff"
3045
+ backgroundColor: design.colors.raw.neutral[0]
2995
3046
  },
2996
3047
  modalHeader: {
2997
3048
  flexDirection: "row",
@@ -3000,12 +3051,12 @@ const styles$4 = reactNative.StyleSheet.create({
3000
3051
  paddingHorizontal: 16,
3001
3052
  paddingVertical: 12,
3002
3053
  borderBottomWidth: 1,
3003
- borderBottomColor: "#e9ecef"
3054
+ borderBottomColor: design.colors.raw.neutral[200]
3004
3055
  },
3005
3056
  modalTitle: {
3006
3057
  fontSize: 18,
3007
3058
  fontWeight: "600",
3008
- color: "#1a1a1a"
3059
+ color: design.colors.raw.neutral[900]
3009
3060
  },
3010
3061
  closeButton: {
3011
3062
  padding: 8
@@ -3013,7 +3064,7 @@ const styles$4 = reactNative.StyleSheet.create({
3013
3064
  closeButtonText: {
3014
3065
  fontSize: 16,
3015
3066
  fontWeight: "600",
3016
- color: "#3b82f6"
3067
+ color: design.colors.raw.blue[500]
3017
3068
  },
3018
3069
  listContent: {
3019
3070
  padding: 16
@@ -3022,27 +3073,27 @@ const styles$4 = reactNative.StyleSheet.create({
3022
3073
  flexDirection: "row",
3023
3074
  alignItems: "center",
3024
3075
  padding: 16,
3025
- backgroundColor: "#f8f9fa",
3076
+ backgroundColor: design.colors.raw.neutral[50],
3026
3077
  borderRadius: 12
3027
3078
  },
3028
3079
  optionItemSelected: {
3029
- backgroundColor: "#e0f2fe"
3080
+ backgroundColor: design.colors.raw.blue[100]
3030
3081
  },
3031
3082
  optionLabel: {
3032
3083
  flex: 1,
3033
3084
  fontSize: 16,
3034
- color: "#1a1a1a"
3085
+ color: design.colors.raw.neutral[900]
3035
3086
  },
3036
3087
  optionLabelSelected: {
3037
3088
  fontWeight: "600",
3038
- color: "#3b82f6"
3089
+ color: design.colors.raw.blue[500]
3039
3090
  },
3040
3091
  optionDisabled: {
3041
3092
  opacity: 0.5
3042
3093
  },
3043
3094
  checkmark: {
3044
3095
  fontSize: 18,
3045
- color: "#3b82f6",
3096
+ color: design.colors.raw.blue[500],
3046
3097
  fontWeight: "bold"
3047
3098
  },
3048
3099
  separator: {
@@ -3128,7 +3179,7 @@ const SearchInput = ({
3128
3179
  disabled && "opacity-50",
3129
3180
  loading && "opacity-60"
3130
3181
  ),
3131
- placeholderTextColor: "#9CA3AF",
3182
+ placeholderTextColor: design.colors.raw.neutral[400],
3132
3183
  accessibilityRole: "search",
3133
3184
  accessibilityState: { disabled },
3134
3185
  ...textInputProps
@@ -3145,7 +3196,7 @@ const SearchInput = ({
3145
3196
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(sizeConfig2.icon, "text-gray-400"), children: "✕" })
3146
3197
  }
3147
3198
  ),
3148
- loading && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "absolute inset-y-0 right-0 flex items-center justify-center pr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: "#9CA3AF" }) })
3199
+ loading && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "absolute inset-y-0 right-0 flex items-center justify-center pr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: design.colors.raw.neutral[400] }) })
3149
3200
  ] });
3150
3201
  };
3151
3202
  const NumberInput = ({
@@ -3349,7 +3400,7 @@ const NumberInput = ({
3349
3400
  }
3350
3401
  );
3351
3402
  };
3352
- const { typography: typography$2 } = design.designTokens;
3403
+ const { typography: typography$g } = design.designTokens;
3353
3404
  const colorClasses$1 = {
3354
3405
  default: "text-gray-900 dark:text-gray-100",
3355
3406
  muted: "text-gray-600 dark:text-gray-400",
@@ -3372,11 +3423,11 @@ const Text = ({
3372
3423
  reactNative.Text,
3373
3424
  {
3374
3425
  className: cn(
3375
- typography$2.size[size],
3376
- typography$2.weight[weight],
3426
+ typography$g.size[size],
3427
+ typography$g.weight[weight],
3377
3428
  colorClasses$1[color],
3378
- align ? typography$2.align[align] : "",
3379
- transform !== "none" ? typography$2.transform[transform] : "",
3429
+ align ? typography$g.align[align] : "",
3430
+ transform !== "none" ? typography$g.transform[transform] : "",
3380
3431
  className
3381
3432
  ),
3382
3433
  numberOfLines,
@@ -3384,7 +3435,7 @@ const Text = ({
3384
3435
  }
3385
3436
  );
3386
3437
  };
3387
- const { typography: typography$1 } = design.designTokens;
3438
+ const { typography: typography$f } = design.designTokens;
3388
3439
  const colorClasses = {
3389
3440
  default: "text-gray-900 dark:text-gray-100",
3390
3441
  muted: "text-gray-700 dark:text-gray-300",
@@ -3412,12 +3463,12 @@ const Heading = ({
3412
3463
  reactNative.Text,
3413
3464
  {
3414
3465
  className: cn(
3415
- typography$1.size[actualSize],
3416
- typography$1.weight[weight],
3417
- typography$1.leading.heading,
3418
- typography$1.tracking.heading,
3466
+ typography$f.size[actualSize],
3467
+ typography$f.weight[weight],
3468
+ typography$f.leading.heading,
3469
+ typography$f.tracking.heading,
3419
3470
  colorClasses[color],
3420
- align ? typography$1.align[align] : "",
3471
+ align ? typography$f.align[align] : "",
3421
3472
  className
3422
3473
  ),
3423
3474
  accessibilityRole: "header",
@@ -3425,6 +3476,41 @@ const Heading = ({
3425
3476
  }
3426
3477
  );
3427
3478
  };
3479
+ let _codeColors = null;
3480
+ function getCodeColors() {
3481
+ if (!_codeColors) _codeColors = buildCodeColors();
3482
+ return _codeColors;
3483
+ }
3484
+ function buildCodeColors() {
3485
+ const alert2 = design.colors.component.alert;
3486
+ function splitClasses(base, dark) {
3487
+ const all = `${base} ${dark}`.split(" ");
3488
+ return {
3489
+ bg: all.filter((c) => c.includes("bg-")).join(" "),
3490
+ text: all.filter((c) => c.includes("text-")).join(" ")
3491
+ };
3492
+ }
3493
+ const info = splitClasses(alert2.info.base, alert2.info.dark);
3494
+ const success = splitClasses(alert2.success.base, alert2.success.dark);
3495
+ const warning = splitClasses(alert2.warning.base, alert2.warning.dark);
3496
+ const error = splitClasses(alert2.error.base, alert2.error.dark);
3497
+ return {
3498
+ bg: {
3499
+ default: "bg-gray-100 dark:bg-gray-800",
3500
+ primary: info.bg,
3501
+ success: success.bg,
3502
+ warning: warning.bg,
3503
+ danger: error.bg
3504
+ },
3505
+ text: {
3506
+ default: "text-gray-900 dark:text-gray-100",
3507
+ primary: info.text,
3508
+ success: success.text,
3509
+ warning: warning.text,
3510
+ danger: error.text
3511
+ }
3512
+ };
3513
+ }
3428
3514
  const Code = ({
3429
3515
  children,
3430
3516
  size = "md",
@@ -3432,24 +3518,13 @@ const Code = ({
3432
3518
  className
3433
3519
  }) => {
3434
3520
  const sizeClasses = {
3435
- sm: "text-xs px-1 py-0.5",
3436
- md: "text-sm px-1.5 py-0.5",
3437
- lg: "text-base px-2 py-1"
3438
- };
3439
- const variantBgClasses = {
3440
- default: "bg-gray-100 dark:bg-gray-800",
3441
- primary: "bg-blue-50 dark:bg-blue-900/30",
3442
- success: "bg-green-50 dark:bg-green-900/30",
3443
- warning: "bg-yellow-50 dark:bg-yellow-900/30",
3444
- danger: "bg-red-50 dark:bg-red-900/30"
3445
- };
3446
- const variantTextClasses = {
3447
- default: "text-gray-900 dark:text-gray-100",
3448
- primary: "text-blue-700 dark:text-blue-300",
3449
- success: "text-green-700 dark:text-green-300",
3450
- warning: "text-yellow-700 dark:text-yellow-300",
3451
- danger: "text-red-700 dark:text-red-300"
3521
+ sm: `${design.designTokens.typography.size.xs} px-1 py-0.5`,
3522
+ md: `${design.designTokens.typography.size.sm} px-1.5 py-0.5`,
3523
+ lg: `${design.designTokens.typography.size.base} px-2 py-1`
3452
3524
  };
3525
+ const codeColors = getCodeColors();
3526
+ const variantBgClasses = codeColors.bg;
3527
+ const variantTextClasses = codeColors.text;
3453
3528
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
3454
3529
  reactNative.View,
3455
3530
  {
@@ -3462,7 +3537,11 @@ const Code = ({
3462
3537
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(
3463
3538
  reactNative.Text,
3464
3539
  {
3465
- className: cn("font-mono font-medium", variantTextClasses[variant]),
3540
+ className: cn(
3541
+ design.designTokens.typography.family.mono,
3542
+ design.designTokens.typography.weight.medium,
3543
+ variantTextClasses[variant]
3544
+ ),
3466
3545
  style: { fontFamily: "monospace" },
3467
3546
  children
3468
3547
  }
@@ -3521,7 +3600,7 @@ const AppVersion = ({
3521
3600
  }
3522
3601
  );
3523
3602
  };
3524
- function splitBadgeClasses(base, dark) {
3603
+ function splitBadgeClasses$1(base, dark) {
3525
3604
  const all = `${base} ${dark}`.split(" ");
3526
3605
  return {
3527
3606
  bg: all.filter((c) => c.includes("bg-")).join(" "),
@@ -3536,11 +3615,11 @@ function getBadgeColors() {
3536
3615
  function buildBadgeColors() {
3537
3616
  const badge = design.colors.component.badge;
3538
3617
  return {
3539
- default: splitBadgeClasses(badge.default.base, badge.default.dark),
3540
- primary: splitBadgeClasses(badge.primary.base, badge.primary.dark),
3541
- success: splitBadgeClasses(badge.success.base, badge.success.dark),
3542
- warning: splitBadgeClasses(badge.warning.base, badge.warning.dark),
3543
- error: splitBadgeClasses(badge.error.base, badge.error.dark)
3618
+ default: splitBadgeClasses$1(badge.default.base, badge.default.dark),
3619
+ primary: splitBadgeClasses$1(badge.primary.base, badge.primary.dark),
3620
+ success: splitBadgeClasses$1(badge.success.base, badge.success.dark),
3621
+ warning: splitBadgeClasses$1(badge.warning.base, badge.warning.dark),
3622
+ error: splitBadgeClasses$1(badge.error.base, badge.error.dark)
3544
3623
  };
3545
3624
  }
3546
3625
  const Badge = ({
@@ -3698,10 +3777,14 @@ const Avatar = ({
3698
3777
  xl: "w-4 h-4"
3699
3778
  };
3700
3779
  const statusClasses = {
3701
- online: "bg-green-500",
3702
- offline: "bg-gray-400",
3780
+ online: design.statusIndicatorColors.success,
3781
+ // bg-green-500
3782
+ offline: design.statusIndicatorColors.neutral,
3783
+ // bg-gray-500
3703
3784
  away: "bg-yellow-500",
3704
- busy: "bg-red-500"
3785
+ // local fallback, no DS yellow status
3786
+ busy: design.statusIndicatorColors.error
3787
+ // bg-red-500
3705
3788
  };
3706
3789
  const generateInitials = (name2) => {
3707
3790
  const parts = name2.trim().split(/\s+/);
@@ -4034,10 +4117,10 @@ const IconText = ({
4034
4117
  };
4035
4118
  const variantClasses = {
4036
4119
  default: "text-gray-700 dark:text-gray-300",
4037
- primary: "text-blue-600 dark:text-blue-400",
4038
- success: "text-green-600 dark:text-green-400",
4039
- warning: "text-yellow-600 dark:text-yellow-400",
4040
- danger: "text-red-600 dark:text-red-400",
4120
+ primary: design.colors.component.alert.info.icon,
4121
+ success: design.colors.component.alert.success.icon,
4122
+ warning: design.colors.component.alert.warning.icon,
4123
+ danger: design.colors.component.alert.error.icon,
4041
4124
  muted: "text-gray-500 dark:text-gray-400"
4042
4125
  };
4043
4126
  const layoutClasses = {
@@ -4181,6 +4264,35 @@ const InfoBox = ({
4181
4264
  }
4182
4265
  );
4183
4266
  };
4267
+ let _progressColors = null;
4268
+ function getProgressColors() {
4269
+ if (!_progressColors) _progressColors = buildProgressColors();
4270
+ return _progressColors;
4271
+ }
4272
+ function buildProgressColors() {
4273
+ function extractBg(base, darkStr) {
4274
+ const bg = base.split(" ").find(
4275
+ (c) => c.startsWith("bg-") && !c.includes("hover:") && !c.includes("active:")
4276
+ ) || "";
4277
+ const darkBg = darkStr.split(" ").find(
4278
+ (c) => c.startsWith("dark:bg-") && !c.includes("hover:") && !c.includes("active:")
4279
+ ) || "";
4280
+ return `${bg} ${darkBg}`;
4281
+ }
4282
+ const btn = design.colors.component.button;
4283
+ return {
4284
+ default: extractBg(btn.primary.base, btn.primary.dark),
4285
+ primary: extractBg(btn.primary.base, btn.primary.dark),
4286
+ success: extractBg(btn.success.base, btn.success.dark),
4287
+ warning: "bg-yellow-600 dark:bg-yellow-500",
4288
+ // DS has no yellow button; local fallback
4289
+ danger: extractBg(btn.destructive.base, btn.destructive.dark),
4290
+ purple: "bg-purple-600 dark:bg-purple-500",
4291
+ // DS has no purple button; local fallback
4292
+ gray: "bg-gray-600 dark:bg-gray-500"
4293
+ // local fallback
4294
+ };
4295
+ }
4184
4296
  const Progress = ({
4185
4297
  value = 0,
4186
4298
  max = 100,
@@ -4211,11 +4323,12 @@ const Progress = ({
4211
4323
  }
4212
4324
  }, [indeterminate, animatedValue]);
4213
4325
  const percentage = Math.min(Math.max(value / max * 100, 0), 100);
4326
+ const allColors = getProgressColors();
4214
4327
  const colorClasses2 = {
4215
- default: "bg-blue-600 dark:bg-blue-500",
4216
- success: "bg-green-600 dark:bg-green-500",
4217
- warning: "bg-yellow-600 dark:bg-yellow-500",
4218
- danger: "bg-red-600 dark:bg-red-500"
4328
+ default: allColors.default,
4329
+ success: allColors.success,
4330
+ warning: allColors.warning,
4331
+ danger: allColors.danger
4219
4332
  };
4220
4333
  const sizeClasses = {
4221
4334
  sm: "h-1",
@@ -4255,7 +4368,13 @@ const Progress = ({
4255
4368
  )
4256
4369
  }
4257
4370
  ),
4258
- (showLabel || label) && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-600 dark:text-gray-400 text-right", children: label || `${Math.round(percentage)}%` }) })
4371
+ (showLabel || label) && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4372
+ reactNative.Text,
4373
+ {
4374
+ className: `${design.designTokens.typography.size.xs} text-gray-600 dark:text-gray-400 text-right`,
4375
+ children: label || `${Math.round(percentage)}%`
4376
+ }
4377
+ ) })
4259
4378
  ] });
4260
4379
  };
4261
4380
  const ProgressBar = ({
@@ -4271,13 +4390,14 @@ const ProgressBar = ({
4271
4390
  }) => {
4272
4391
  const percentage = Math.min(Math.max(value / max * 100, 0), 100);
4273
4392
  const displayLabel = label || `${Math.round(percentage)}%`;
4393
+ const progressColors = getProgressColors();
4274
4394
  const variantClasses = {
4275
- primary: "bg-blue-600 dark:bg-blue-500",
4276
- success: "bg-green-600 dark:bg-green-500",
4277
- warning: "bg-yellow-600 dark:bg-yellow-500",
4278
- danger: "bg-red-600 dark:bg-red-500",
4279
- purple: "bg-purple-600 dark:bg-purple-500",
4280
- gray: "bg-gray-600 dark:bg-gray-500"
4395
+ primary: progressColors.primary,
4396
+ success: progressColors.success,
4397
+ warning: progressColors.warning,
4398
+ danger: progressColors.danger,
4399
+ purple: progressColors.purple,
4400
+ gray: progressColors.gray
4281
4401
  };
4282
4402
  const sizeClasses = {
4283
4403
  sm: "h-1",
@@ -4307,9 +4427,16 @@ const ProgressBar = ({
4307
4427
  )
4308
4428
  }
4309
4429
  ),
4310
- showLabel && labelPosition === "outside" && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm font-medium text-gray-600 dark:text-gray-400", children: displayLabel })
4430
+ showLabel && labelPosition === "outside" && /* @__PURE__ */ jsxRuntimeExports.jsx(
4431
+ reactNative.Text,
4432
+ {
4433
+ className: `${design.designTokens.typography.size.sm} ${design.designTokens.typography.weight.medium} text-gray-600 dark:text-gray-400`,
4434
+ children: displayLabel
4435
+ }
4436
+ )
4311
4437
  ] }) });
4312
4438
  };
4439
+ const { typography: typography$e } = design.designTokens;
4313
4440
  const Modal = ({
4314
4441
  isOpen,
4315
4442
  onClose,
@@ -4360,7 +4487,17 @@ const Modal = ({
4360
4487
  ),
4361
4488
  children: [
4362
4489
  (title || showCloseButton) && /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: [
4363
- title && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-lg font-semibold text-gray-900 dark:text-white flex-1", children: title }),
4490
+ title && /* @__PURE__ */ jsxRuntimeExports.jsx(
4491
+ reactNative.Text,
4492
+ {
4493
+ className: cn(
4494
+ typography$e.size.lg,
4495
+ typography$e.weight.semibold,
4496
+ "text-gray-900 dark:text-white flex-1"
4497
+ ),
4498
+ children: title
4499
+ }
4500
+ ),
4364
4501
  showCloseButton && /* @__PURE__ */ jsxRuntimeExports.jsx(
4365
4502
  reactNative.Pressable,
4366
4503
  {
@@ -4368,7 +4505,16 @@ const Modal = ({
4368
4505
  className: "p-1 -mr-1 rounded-full",
4369
4506
  accessibilityRole: "button",
4370
4507
  accessibilityLabel: "Close modal",
4371
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xl text-gray-500 dark:text-gray-400", children: "✕" })
4508
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
4509
+ reactNative.Text,
4510
+ {
4511
+ className: cn(
4512
+ typography$e.size.xl,
4513
+ "text-gray-500 dark:text-gray-400"
4514
+ ),
4515
+ children: "✕"
4516
+ }
4517
+ )
4372
4518
  }
4373
4519
  )
4374
4520
  ] }),
@@ -4713,6 +4859,7 @@ const Backdrop = ({
4713
4859
  }
4714
4860
  );
4715
4861
  };
4862
+ const { typography: typography$d } = design.designTokens;
4716
4863
  const { height: SCREEN_HEIGHT, width: SCREEN_WIDTH$1 } = reactNative.Dimensions.get("window");
4717
4864
  const Sheet = ({
4718
4865
  isOpen,
@@ -4903,8 +5050,28 @@ const Sheet = ({
4903
5050
  ),
4904
5051
  (title || description || showCloseButton) && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "px-4 py-4 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex flex-row items-start justify-between", children: [
4905
5052
  /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-1", children: [
4906
- title && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-lg font-semibold text-gray-900 dark:text-white", children: title }),
4907
- description && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "mt-1 text-sm text-gray-600 dark:text-gray-400", children: description })
5053
+ title && /* @__PURE__ */ jsxRuntimeExports.jsx(
5054
+ reactNative.Text,
5055
+ {
5056
+ className: cn(
5057
+ typography$d.size.lg,
5058
+ typography$d.weight.semibold,
5059
+ "text-gray-900 dark:text-white"
5060
+ ),
5061
+ children: title
5062
+ }
5063
+ ),
5064
+ description && /* @__PURE__ */ jsxRuntimeExports.jsx(
5065
+ reactNative.Text,
5066
+ {
5067
+ className: cn(
5068
+ "mt-1",
5069
+ typography$d.size.sm,
5070
+ "text-gray-600 dark:text-gray-400"
5071
+ ),
5072
+ children: description
5073
+ }
5074
+ )
4908
5075
  ] }),
4909
5076
  showCloseButton && /* @__PURE__ */ jsxRuntimeExports.jsx(
4910
5077
  reactNative.Pressable,
@@ -4913,7 +5080,7 @@ const Sheet = ({
4913
5080
  className: "ml-4 p-1",
4914
5081
  accessibilityRole: "button",
4915
5082
  accessibilityLabel: "Close sheet",
4916
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xl text-gray-400", children: "✕" })
5083
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(typography$d.size.xl, "text-gray-400"), children: "✕" })
4917
5084
  }
4918
5085
  )
4919
5086
  ] }) }),
@@ -4928,6 +5095,30 @@ const Sheet = ({
4928
5095
  }
4929
5096
  );
4930
5097
  };
5098
+ let _tooltipColors = null;
5099
+ function getTooltipColors() {
5100
+ if (!_tooltipColors) {
5101
+ let extractBg = function(base, darkStr) {
5102
+ const bg = base.split(" ").find(
5103
+ (c) => c.startsWith("bg-") && !c.includes("hover:") && !c.includes("active:")
5104
+ ) || "";
5105
+ const darkBg = darkStr.split(" ").find(
5106
+ (c) => c.startsWith("dark:bg-") && !c.includes("hover:") && !c.includes("active:")
5107
+ ) || "";
5108
+ return `${bg} ${darkBg}`;
5109
+ };
5110
+ const btn = design.colors.component.button;
5111
+ _tooltipColors = {
5112
+ default: "bg-gray-900 dark:bg-gray-700",
5113
+ info: extractBg(btn.primary.base, btn.primary.dark),
5114
+ success: extractBg(btn.success.base, btn.success.dark),
5115
+ warning: "bg-yellow-600 dark:bg-yellow-500",
5116
+ // DS has no yellow button; local fallback
5117
+ error: extractBg(btn.destructive.base, btn.destructive.dark)
5118
+ };
5119
+ }
5120
+ return _tooltipColors;
5121
+ }
4931
5122
  const Tooltip = ({
4932
5123
  content,
4933
5124
  children,
@@ -4980,13 +5171,7 @@ const Tooltip = ({
4980
5171
  }
4981
5172
  setIsVisible(false);
4982
5173
  };
4983
- const variantClasses = {
4984
- default: "bg-gray-900 dark:bg-gray-700",
4985
- info: "bg-blue-600 dark:bg-blue-500",
4986
- success: "bg-green-600 dark:bg-green-500",
4987
- warning: "bg-yellow-600 dark:bg-yellow-500",
4988
- error: "bg-red-600 dark:bg-red-500"
4989
- };
5174
+ const variantClasses = getTooltipColors();
4990
5175
  const getTooltipPosition = () => {
4991
5176
  const TOOLTIP_OFFSET = 8;
4992
5177
  const TOOLTIP_HEIGHT = 32;
@@ -5052,7 +5237,13 @@ const Tooltip = ({
5052
5237
  variantClasses[variant],
5053
5238
  className
5054
5239
  ),
5055
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs font-medium text-white", children: content })
5240
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
5241
+ reactNative.Text,
5242
+ {
5243
+ className: `${design.designTokens.typography.size.xs} ${design.designTokens.typography.weight.medium} text-white`,
5244
+ children: content
5245
+ }
5246
+ )
5056
5247
  }
5057
5248
  )
5058
5249
  }
@@ -5304,7 +5495,9 @@ const TabsList = ({
5304
5495
  horizontal: true,
5305
5496
  showsHorizontalScrollIndicator: false,
5306
5497
  className: cn(
5307
- "flex-row bg-gray-100 dark:bg-gray-800 rounded-lg p-1",
5498
+ "flex-row bg-gray-100 dark:bg-gray-800",
5499
+ design.designTokens.radius.lg,
5500
+ "p-1",
5308
5501
  className
5309
5502
  ),
5310
5503
  contentContainerStyle: { flexGrow: 1 },
@@ -5337,7 +5530,9 @@ const TabsTrigger = ({
5337
5530
  reactNative.Text,
5338
5531
  {
5339
5532
  className: cn(
5340
- "text-sm font-medium text-center",
5533
+ design.designTokens.typography.size.sm,
5534
+ design.designTokens.typography.weight.medium,
5535
+ "text-center",
5341
5536
  isSelected ? "text-gray-900 dark:text-white" : "text-gray-600 dark:text-gray-400"
5342
5537
  ),
5343
5538
  children
@@ -5369,11 +5564,11 @@ const Link = ({
5369
5564
  }) => {
5370
5565
  const isExternal = href.startsWith("http://") || href.startsWith("https://");
5371
5566
  const variantClasses = {
5372
- default: "text-blue-600 dark:text-blue-400",
5373
- primary: "text-blue-600 dark:text-blue-400 font-medium",
5374
- secondary: "text-gray-600 dark:text-gray-400",
5567
+ default: design.textVariants.link.subtle(),
5568
+ primary: `${design.textVariants.link.default()} font-medium`,
5569
+ secondary: design.textVariants.link.muted(),
5375
5570
  muted: "text-gray-500 dark:text-gray-500",
5376
- underline: "text-blue-600 dark:text-blue-400 underline"
5571
+ underline: design.textVariants.link.default()
5377
5572
  };
5378
5573
  const handlePress = async () => {
5379
5574
  if (disabled) return;
@@ -5409,6 +5604,7 @@ const Link = ({
5409
5604
  }
5410
5605
  );
5411
5606
  };
5607
+ const { typography: typography$c } = design.designTokens;
5412
5608
  const Breadcrumb = ({
5413
5609
  items,
5414
5610
  separator = "/",
@@ -5418,9 +5614,9 @@ const Breadcrumb = ({
5418
5614
  }) => {
5419
5615
  const [isExpanded, setIsExpanded] = React.useState(false);
5420
5616
  const sizeClasses = {
5421
- sm: "text-sm",
5422
- md: "text-base",
5423
- lg: "text-lg"
5617
+ sm: typography$c.size.sm,
5618
+ md: typography$c.size.base,
5619
+ lg: typography$c.size.lg
5424
5620
  };
5425
5621
  const getDisplayItems = () => {
5426
5622
  if (!maxItems || items.length <= maxItems || isExpanded) {
@@ -5441,7 +5637,7 @@ const Breadcrumb = ({
5441
5637
  {
5442
5638
  className: cn(
5443
5639
  sizeClasses[size],
5444
- "text-gray-900 dark:text-white font-medium"
5640
+ `text-gray-900 dark:text-white ${typography$c.weight.medium}`
5445
5641
  ),
5446
5642
  accessibilityRole: "text",
5447
5643
  children: item.label
@@ -5479,7 +5675,7 @@ const Breadcrumb = ({
5479
5675
  {
5480
5676
  className: cn(
5481
5677
  sizeClasses[size],
5482
- isCurrent ? "text-gray-900 dark:text-white font-medium" : "text-gray-600 dark:text-gray-400"
5678
+ isCurrent ? `text-gray-900 dark:text-white ${typography$c.weight.medium}` : "text-gray-600 dark:text-gray-400"
5483
5679
  ),
5484
5680
  children: item.label
5485
5681
  }
@@ -5527,6 +5723,7 @@ const Breadcrumb = ({
5527
5723
  }
5528
5724
  );
5529
5725
  };
5726
+ const { typography: typography$b } = design.designTokens;
5530
5727
  const Pagination = ({
5531
5728
  currentPage,
5532
5729
  totalPages,
@@ -5541,18 +5738,18 @@ const Pagination = ({
5541
5738
  const sizeConfig2 = {
5542
5739
  sm: {
5543
5740
  button: "h-8 w-8",
5544
- text: "text-xs",
5545
- icon: "text-xs"
5741
+ text: typography$b.size.xs,
5742
+ icon: typography$b.size.xs
5546
5743
  },
5547
5744
  md: {
5548
5745
  button: "h-10 w-10",
5549
- text: "text-sm",
5550
- icon: "text-sm"
5746
+ text: typography$b.size.sm,
5747
+ icon: typography$b.size.sm
5551
5748
  },
5552
5749
  lg: {
5553
5750
  button: "h-12 w-12",
5554
- text: "text-base",
5555
- icon: "text-base"
5751
+ text: typography$b.size.base,
5752
+ icon: typography$b.size.base
5556
5753
  }
5557
5754
  };
5558
5755
  const config = sizeConfig2[size];
@@ -5702,6 +5899,7 @@ const Pagination = ({
5702
5899
  }
5703
5900
  );
5704
5901
  };
5902
+ const { typography: typography$a } = design.designTokens;
5705
5903
  const SettingsList = ({
5706
5904
  settings,
5707
5905
  selectedSetting,
@@ -5734,7 +5932,7 @@ const SettingsList = ({
5734
5932
  reactNative.Text,
5735
5933
  {
5736
5934
  className: cn(
5737
- "text-sm",
5935
+ typography$a.size.sm,
5738
5936
  isSelected ? "text-orange-700 dark:text-orange-300" : "text-gray-700 dark:text-gray-300"
5739
5937
  ),
5740
5938
  numberOfLines: 1,
@@ -5749,6 +5947,7 @@ const SettingsList = ({
5749
5947
  }
5750
5948
  );
5751
5949
  };
5950
+ const { typography: typography$9 } = design.designTokens;
5752
5951
  const NavigationList = ({
5753
5952
  items,
5754
5953
  selectedPath,
@@ -5790,15 +5989,34 @@ const NavigationList = ({
5790
5989
  reactNative.Text,
5791
5990
  {
5792
5991
  className: cn(
5793
- "font-medium",
5992
+ typography$9.weight.medium,
5794
5993
  isSelected ? "text-blue-600 dark:text-blue-400" : "text-gray-700 dark:text-gray-300"
5795
5994
  ),
5796
5995
  children: item.label
5797
5996
  }
5798
5997
  ),
5799
- item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "ml-2 px-2 py-0.5 bg-blue-100 dark:bg-blue-900 rounded-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs font-medium text-blue-800 dark:text-blue-200", children: item.badge }) })
5998
+ item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "ml-2 px-2 py-0.5 bg-blue-100 dark:bg-blue-900 rounded-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
5999
+ reactNative.Text,
6000
+ {
6001
+ className: cn(
6002
+ typography$9.size.xs,
6003
+ typography$9.weight.medium,
6004
+ "text-blue-800 dark:text-blue-200"
6005
+ ),
6006
+ children: item.badge
6007
+ }
6008
+ ) })
5800
6009
  ] }),
5801
- item.description && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-500 dark:text-gray-400 mt-0.5", children: item.description })
6010
+ item.description && /* @__PURE__ */ jsxRuntimeExports.jsx(
6011
+ reactNative.Text,
6012
+ {
6013
+ className: cn(
6014
+ typography$9.size.xs,
6015
+ "text-gray-500 dark:text-gray-400 mt-0.5"
6016
+ ),
6017
+ children: item.description
6018
+ }
6019
+ )
5802
6020
  ] })
5803
6021
  ]
5804
6022
  },
@@ -5806,6 +6024,7 @@ const NavigationList = ({
5806
6024
  );
5807
6025
  }) });
5808
6026
  };
6027
+ const { typography: typography$8 } = design.designTokens;
5809
6028
  const Dropdown = ({
5810
6029
  trigger,
5811
6030
  items,
@@ -5898,7 +6117,7 @@ const Dropdown = ({
5898
6117
  reactNative.Text,
5899
6118
  {
5900
6119
  className: cn(
5901
- "text-sm",
6120
+ typography$8.size.sm,
5902
6121
  item.disabled ? "text-gray-400 dark:text-gray-500" : "text-gray-700 dark:text-gray-200"
5903
6122
  ),
5904
6123
  children: item.label
@@ -5968,7 +6187,7 @@ const AspectFitView = ({
5968
6187
  }
5969
6188
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("flex-1", className), onLayout, children: size && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("items-center", innerClassName), children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ScrollView, { style: { width: innerWidth, height: innerHeight }, children }) }) });
5970
6189
  };
5971
- const { typography } = design.designTokens;
6190
+ const { typography: typography$7 } = design.designTokens;
5972
6191
  const QuickActions = ({
5973
6192
  actions,
5974
6193
  orientation = "horizontal",
@@ -6032,7 +6251,7 @@ const QuickActions = ({
6032
6251
  accessibilityState: { disabled: action.disabled },
6033
6252
  children: [
6034
6253
  action.icon && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "w-5 h-5", children: action.icon }),
6035
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(typography.weight.medium, styles2.text), children: action.label })
6254
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(typography$7.weight.medium, styles2.text), children: action.label })
6036
6255
  ]
6037
6256
  },
6038
6257
  action.id
@@ -6110,6 +6329,7 @@ const EmptyState = ({
6110
6329
  }
6111
6330
  );
6112
6331
  };
6332
+ const { typography: typography$6 } = design.designTokens;
6113
6333
  const Calendar = ({
6114
6334
  value,
6115
6335
  onChange,
@@ -6198,10 +6418,29 @@ const Calendar = ({
6198
6418
  className: "p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md",
6199
6419
  accessibilityRole: "button",
6200
6420
  accessibilityLabel: "Previous month",
6201
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-lg text-gray-700 dark:text-gray-300", children: "‹" })
6421
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
6422
+ reactNative.Text,
6423
+ {
6424
+ className: cn(
6425
+ typography$6.size.lg,
6426
+ "text-gray-700 dark:text-gray-300"
6427
+ ),
6428
+ children: "‹"
6429
+ }
6430
+ )
6431
+ }
6432
+ ),
6433
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
6434
+ reactNative.Text,
6435
+ {
6436
+ className: cn(
6437
+ typography$6.size.base,
6438
+ typography$6.weight.semibold,
6439
+ "text-gray-900 dark:text-white"
6440
+ ),
6441
+ children: monthYear
6202
6442
  }
6203
6443
  ),
6204
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-base font-semibold text-gray-900 dark:text-white", children: monthYear }),
6205
6444
  /* @__PURE__ */ jsxRuntimeExports.jsx(
6206
6445
  reactNative.Pressable,
6207
6446
  {
@@ -6209,11 +6448,30 @@ const Calendar = ({
6209
6448
  className: "p-2 active:bg-gray-100 dark:active:bg-gray-800 rounded-md",
6210
6449
  accessibilityRole: "button",
6211
6450
  accessibilityLabel: "Next month",
6212
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-lg text-gray-700 dark:text-gray-300", children: "›" })
6451
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
6452
+ reactNative.Text,
6453
+ {
6454
+ className: cn(
6455
+ typography$6.size.lg,
6456
+ "text-gray-700 dark:text-gray-300"
6457
+ ),
6458
+ children: "›"
6459
+ }
6460
+ )
6213
6461
  }
6214
6462
  )
6215
6463
  ] }),
6216
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row mb-2", children: weekDays.map((day) => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-1 items-center py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs font-medium text-gray-600 dark:text-gray-400", children: day }) }, day)) }),
6464
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row mb-2", children: weekDays.map((day) => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-1 items-center py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
6465
+ reactNative.Text,
6466
+ {
6467
+ className: cn(
6468
+ typography$6.size.xs,
6469
+ typography$6.weight.medium,
6470
+ "text-gray-600 dark:text-gray-400"
6471
+ ),
6472
+ children: day
6473
+ }
6474
+ ) }, day)) }),
6217
6475
  weeks.map((week, weekIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row", children: week.map((date, dayIndex) => {
6218
6476
  if (!date) {
6219
6477
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -6250,9 +6508,9 @@ const Calendar = ({
6250
6508
  reactNative.Text,
6251
6509
  {
6252
6510
  className: cn(
6253
- "text-sm",
6511
+ typography$6.size.sm,
6254
6512
  isCurrentMonth ? "text-gray-900 dark:text-white" : "text-gray-400 dark:text-gray-600",
6255
- isSelected && "text-white font-semibold"
6513
+ isSelected && `text-white ${typography$6.weight.semibold}`
6256
6514
  ),
6257
6515
  children: date.getDate()
6258
6516
  }
@@ -6280,18 +6538,40 @@ function DataList({
6280
6538
  };
6281
6539
  const renderHeader = () => {
6282
6540
  if (!showHeader) return null;
6283
- return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700", children: columns.map((column) => /* @__PURE__ */ jsxRuntimeExports.jsx(
6541
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
6284
6542
  reactNative.View,
6285
6543
  {
6286
6544
  className: cn(
6287
- compact ? "px-3 py-2" : "px-4 py-3",
6288
- alignClasses[column.align || "left"]
6545
+ "flex-row",
6546
+ design.ui.table.thead,
6547
+ "border-b border-gray-200 dark:border-gray-700"
6289
6548
  ),
6290
- style: { flex: column.flex || 1 },
6291
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider", children: column.label })
6292
- },
6293
- column.key
6294
- )) });
6549
+ children: columns.map((column) => /* @__PURE__ */ jsxRuntimeExports.jsx(
6550
+ reactNative.View,
6551
+ {
6552
+ className: cn(
6553
+ compact ? "px-3 py-2" : "px-4 py-3",
6554
+ alignClasses[column.align || "left"]
6555
+ ),
6556
+ style: { flex: column.flex || 1 },
6557
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
6558
+ reactNative.Text,
6559
+ {
6560
+ className: cn(
6561
+ design.designTokens.typography.size.xs,
6562
+ design.designTokens.typography.weight.medium,
6563
+ "text-gray-700 dark:text-gray-300",
6564
+ design.designTokens.typography.transform.uppercase,
6565
+ design.designTokens.typography.tracking.wider
6566
+ ),
6567
+ children: column.label
6568
+ }
6569
+ )
6570
+ },
6571
+ column.key
6572
+ ))
6573
+ }
6574
+ );
6295
6575
  };
6296
6576
  const renderRow = ({ item, index }) => {
6297
6577
  const isOdd = index % 2 === 1;
@@ -6301,7 +6581,7 @@ function DataList({
6301
6581
  onPress: () => onRowPress == null ? void 0 : onRowPress(item, index),
6302
6582
  className: cn(
6303
6583
  "flex-row border-b border-gray-200 dark:border-gray-700",
6304
- isOdd && "bg-gray-50 dark:bg-gray-800/50",
6584
+ isOdd && design.ui.table.trAlt,
6305
6585
  onRowPress && "active:bg-gray-100 dark:active:bg-gray-800"
6306
6586
  ),
6307
6587
  disabled: !onRowPress,
@@ -6318,7 +6598,10 @@ function DataList({
6318
6598
  children: column.render ? column.render(item, index) : /* @__PURE__ */ jsxRuntimeExports.jsx(
6319
6599
  reactNative.Text,
6320
6600
  {
6321
- className: "text-sm text-gray-900 dark:text-white",
6601
+ className: cn(
6602
+ design.designTokens.typography.size.sm,
6603
+ "text-gray-900 dark:text-white"
6604
+ ),
6322
6605
  numberOfLines: 1,
6323
6606
  children: String(item[column.key] ?? "")
6324
6607
  }
@@ -6330,7 +6613,7 @@ function DataList({
6330
6613
  );
6331
6614
  };
6332
6615
  const renderEmpty = () => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "py-8 items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm text-gray-500 dark:text-gray-400", children: emptyMessage }) });
6333
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: cn("bg-white dark:bg-gray-900", className), children: [
6616
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: cn(design.ui.table.tr, className), children: [
6334
6617
  renderHeader(),
6335
6618
  /* @__PURE__ */ jsxRuntimeExports.jsx(
6336
6619
  reactNative.FlatList,
@@ -6442,7 +6725,7 @@ const MultiSelect = ({
6442
6725
  value: searchQuery,
6443
6726
  onChangeText: setSearchQuery,
6444
6727
  placeholder: searchPlaceholder,
6445
- placeholderTextColor: "#9ca3af",
6728
+ placeholderTextColor: design.colors.raw.neutral[400],
6446
6729
  className: "px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md"
6447
6730
  }
6448
6731
  ) }),
@@ -6606,6 +6889,7 @@ const ProgressCircle = ({
6606
6889
  }
6607
6890
  );
6608
6891
  };
6892
+ const { typography: typography$5 } = design.designTokens;
6609
6893
  const SideNav = ({ items, className }) => {
6610
6894
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("gap-1", className), accessibilityRole: "list", children: items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
6611
6895
  reactNative.Pressable,
@@ -6624,13 +6908,23 @@ const SideNav = ({ items, className }) => {
6624
6908
  reactNative.Text,
6625
6909
  {
6626
6910
  className: cn(
6627
- "flex-1 font-medium",
6911
+ "flex-1",
6912
+ typography$5.weight.medium,
6628
6913
  item.active ? "text-blue-600 dark:text-blue-400" : "text-gray-700 dark:text-gray-300"
6629
6914
  ),
6630
6915
  children: item.label
6631
6916
  }
6632
6917
  ),
6633
- item.badge !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-700 dark:text-gray-300", children: item.badge }) })
6918
+ item.badge !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "px-2 py-0.5 bg-gray-200 dark:bg-gray-700 rounded", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
6919
+ reactNative.Text,
6920
+ {
6921
+ className: cn(
6922
+ typography$5.size.xs,
6923
+ "text-gray-700 dark:text-gray-300"
6924
+ ),
6925
+ children: item.badge
6926
+ }
6927
+ ) })
6634
6928
  ]
6635
6929
  },
6636
6930
  item.id
@@ -6654,7 +6948,7 @@ const SectionHeader = ({
6654
6948
  children: /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-center justify-between", children: [
6655
6949
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: title }),
6656
6950
  /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-center gap-2", children: [
6657
- loading && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: "#2563eb" }),
6951
+ loading && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: design.colors.raw.blue[600] }),
6658
6952
  actions,
6659
6953
  onAdd && /* @__PURE__ */ jsxRuntimeExports.jsx(
6660
6954
  reactNative.Pressable,
@@ -6874,7 +7168,7 @@ const PhoneInput = ({
6874
7168
  value,
6875
7169
  onChangeText: handleInputChange,
6876
7170
  placeholder,
6877
- placeholderTextColor: "#9ca3af",
7171
+ placeholderTextColor: design.colors.raw.neutral[400],
6878
7172
  keyboardType: "phone-pad",
6879
7173
  editable: !disabled,
6880
7174
  className: cn(
@@ -6907,7 +7201,7 @@ const PhoneInput = ({
6907
7201
  value: searchQuery,
6908
7202
  onChangeText: setSearchQuery,
6909
7203
  placeholder: "Search countries...",
6910
- placeholderTextColor: "#9ca3af",
7204
+ placeholderTextColor: design.colors.raw.neutral[400],
6911
7205
  className: "px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md"
6912
7206
  }
6913
7207
  ) }),
@@ -7252,7 +7546,7 @@ const Combobox = ({
7252
7546
  value: searchQuery,
7253
7547
  onChangeText: setSearchQuery,
7254
7548
  placeholder: searchPlaceholder,
7255
- placeholderTextColor: "#9ca3af",
7549
+ placeholderTextColor: design.colors.raw.neutral[400],
7256
7550
  autoFocus: true,
7257
7551
  className: "px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white rounded-md"
7258
7552
  }
@@ -7515,6 +7809,32 @@ const AddressLink = ({
7515
7809
  ] })
7516
7810
  ] });
7517
7811
  };
7812
+ let _displayColors = null;
7813
+ function getDisplayColors() {
7814
+ if (!_displayColors) _displayColors = buildDisplayColors();
7815
+ return _displayColors;
7816
+ }
7817
+ function buildDisplayColors() {
7818
+ const alert2 = design.colors.component.alert;
7819
+ function splitClasses(base, dark) {
7820
+ const all = `${base} ${dark}`.split(" ");
7821
+ return {
7822
+ text: all.filter((c) => c.includes("text-")).join(" "),
7823
+ bg: all.filter((c) => c.includes("bg-")).join(" ")
7824
+ };
7825
+ }
7826
+ const info = splitClasses(alert2.info.base, alert2.info.dark);
7827
+ const success = splitClasses(alert2.success.base, alert2.success.dark);
7828
+ const warning = splitClasses(alert2.warning.base, alert2.warning.dark);
7829
+ return {
7830
+ primary: `${info.text} ${info.bg}`,
7831
+ // secondary uses purple — no DS mapping, keep local
7832
+ secondary: "text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/30",
7833
+ success: `${success.text} ${success.bg}`,
7834
+ warning: `${warning.text} ${warning.bg}`,
7835
+ neutral: "text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-800"
7836
+ };
7837
+ }
7518
7838
  const CodeDisplay = ({
7519
7839
  children,
7520
7840
  variant = "primary",
@@ -7524,28 +7844,22 @@ const CodeDisplay = ({
7524
7844
  wrap = false,
7525
7845
  className
7526
7846
  }) => {
7527
- const variantClasses = {
7528
- primary: "text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/30",
7529
- secondary: "text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/30",
7530
- success: "text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30",
7531
- warning: "text-yellow-700 dark:text-yellow-400 bg-yellow-50 dark:bg-yellow-900/30",
7532
- neutral: "text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-800"
7533
- };
7847
+ const variantClasses = getDisplayColors();
7534
7848
  const sizeClasses = {
7535
7849
  xs: {
7536
- text: "text-xs",
7850
+ text: design.designTokens.typography.size.xs,
7537
7851
  padding: inline ? "px-1.5 py-0.5" : "px-2 py-1"
7538
7852
  },
7539
7853
  sm: {
7540
- text: "text-sm",
7854
+ text: design.designTokens.typography.size.sm,
7541
7855
  padding: inline ? "px-2 py-0.5" : "px-3 py-1.5"
7542
7856
  },
7543
7857
  md: {
7544
- text: "text-base",
7858
+ text: design.designTokens.typography.size.base,
7545
7859
  padding: inline ? "px-2.5 py-1" : "px-4 py-2"
7546
7860
  },
7547
7861
  lg: {
7548
- text: "text-lg",
7862
+ text: design.designTokens.typography.size.lg,
7549
7863
  padding: inline ? "px-3 py-1" : "px-4 py-2"
7550
7864
  }
7551
7865
  };
@@ -7555,13 +7869,15 @@ const CodeDisplay = ({
7555
7869
  right: "text-right"
7556
7870
  };
7557
7871
  const sizeConfig2 = sizeClasses[size];
7558
- const [textColorClass, bgClass] = variantClasses[variant].split(" ");
7872
+ const variantParts = variantClasses[variant].split(" ");
7873
+ const textColorClass = variantParts.filter((c) => c.includes("text-")).join(" ");
7874
+ const bgClass = variantParts.filter((c) => c.includes("bg-")).join(" ");
7559
7875
  if (inline) {
7560
7876
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
7561
7877
  reactNative.Text,
7562
7878
  {
7563
7879
  className: cn(
7564
- "font-mono rounded-lg",
7880
+ `${design.designTokens.typography.family.mono} rounded-lg`,
7565
7881
  textColorClass,
7566
7882
  bgClass,
7567
7883
  sizeConfig2.text,
@@ -7576,7 +7892,7 @@ const CodeDisplay = ({
7576
7892
  reactNative.Text,
7577
7893
  {
7578
7894
  className: cn(
7579
- "font-mono",
7895
+ design.designTokens.typography.family.mono,
7580
7896
  textColorClass,
7581
7897
  sizeConfig2.text,
7582
7898
  !inline && alignClasses[align],
@@ -7904,7 +8220,7 @@ function InfiniteScroll({
7904
8220
  const defaultEmptyComponent = /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-1 justify-center items-center py-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-500 dark:text-gray-400", children: "No items found" }) });
7905
8221
  const ListFooterComponent = React.useCallback(() => {
7906
8222
  const footerLoader = /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row justify-center items-center py-4", children: [
7907
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: "#3b82f6" }),
8223
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: design.colors.raw.blue[500] }),
7908
8224
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "ml-2 text-sm text-gray-600 dark:text-gray-400", children: "Loading..." })
7909
8225
  ] });
7910
8226
  const footerEndMessage = /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row justify-center items-center py-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm text-gray-600 dark:text-gray-400", children: "No more items to load" }) });
@@ -7972,9 +8288,9 @@ const ExternalLink = ({
7972
8288
  lg: "text-base"
7973
8289
  };
7974
8290
  const variantClasses = {
7975
- default: "text-blue-600 dark:text-blue-400",
7976
- primary: "text-blue-700 dark:text-blue-300 font-semibold",
7977
- muted: "text-gray-600 dark:text-gray-400"
8291
+ default: design.textVariants.link.external(),
8292
+ primary: `${design.textVariants.link.default()} font-semibold`,
8293
+ muted: design.textVariants.link.muted()
7978
8294
  };
7979
8295
  const handlePress = React.useCallback(async () => {
7980
8296
  onPress == null ? void 0 : onPress();
@@ -8078,7 +8394,7 @@ const TextInputModal = ({
8078
8394
  value,
8079
8395
  onChangeText: setValue,
8080
8396
  placeholder,
8081
- placeholderTextColor: "#9ca3af",
8397
+ placeholderTextColor: design.colors.raw.neutral[400],
8082
8398
  maxLength,
8083
8399
  editable: !isLoading,
8084
8400
  autoFocus: true,
@@ -8275,37 +8591,54 @@ const SectionBadge = ({
8275
8591
  }
8276
8592
  );
8277
8593
  };
8278
- const chainConfig = {
8279
- evm: {
8280
- label: "EVM",
8281
- emoji: "",
8282
- bgColor: "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800",
8283
- textColor: "text-blue-700 dark:text-blue-300"
8284
- },
8285
- solana: {
8286
- label: "SOL",
8287
- emoji: "◎",
8288
- bgColor: "bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800",
8289
- textColor: "text-purple-700 dark:text-purple-300"
8594
+ function splitBadgeClasses(base, dark) {
8595
+ const all = `${base} ${dark}`.split(" ");
8596
+ return {
8597
+ bg: all.filter((c) => c.includes("bg-")).join(" "),
8598
+ text: all.filter((c) => c.includes("text-")).join(" ")
8599
+ };
8600
+ }
8601
+ let _chainColors = null;
8602
+ function getChainColors() {
8603
+ if (!_chainColors) _chainColors = buildChainColors();
8604
+ return _chainColors;
8605
+ }
8606
+ function buildChainColors() {
8607
+ const badge = design.colors.component.badge;
8608
+ return {
8609
+ evm: splitBadgeClasses(badge.ethereum.base, badge.ethereum.dark),
8610
+ solana: splitBadgeClasses(badge.solana.base, badge.solana.dark),
8611
+ bitcoin: splitBadgeClasses(badge.bitcoin.base, badge.bitcoin.dark),
8612
+ // DS has no cosmos badge — use local fallback (indigo)
8613
+ cosmos: {
8614
+ bg: "bg-indigo-50 dark:bg-indigo-900/20",
8615
+ text: "text-indigo-700 dark:text-indigo-300"
8616
+ }
8617
+ };
8618
+ }
8619
+ const chainMeta = {
8620
+ evm: { label: "EVM", emoji: "⟠" },
8621
+ solana: { label: "SOL", emoji: "◎" },
8622
+ bitcoin: { label: "BTC", emoji: "₿" },
8623
+ cosmos: { label: "ATOM", emoji: "⚛" }
8624
+ };
8625
+ const sizeConfig = {
8626
+ sm: {
8627
+ padding: "px-1.5 py-0.5",
8628
+ text: design.designTokens.typography.size.xs,
8629
+ gap: "gap-0.5"
8290
8630
  },
8291
- bitcoin: {
8292
- label: "BTC",
8293
- emoji: "₿",
8294
- bgColor: "bg-orange-50 dark:bg-orange-900/20 border-orange-200 dark:border-orange-800",
8295
- textColor: "text-orange-700 dark:text-orange-300"
8631
+ md: {
8632
+ padding: "px-2 py-1",
8633
+ text: design.designTokens.typography.size.sm,
8634
+ gap: "gap-1"
8296
8635
  },
8297
- cosmos: {
8298
- label: "ATOM",
8299
- emoji: "⚛",
8300
- bgColor: "bg-indigo-50 dark:bg-indigo-900/20 border-indigo-200 dark:border-indigo-800",
8301
- textColor: "text-indigo-700 dark:text-indigo-300"
8636
+ lg: {
8637
+ padding: "px-2.5 py-1.5",
8638
+ text: design.designTokens.typography.size.base,
8639
+ gap: "gap-1.5"
8302
8640
  }
8303
8641
  };
8304
- const sizeConfig = {
8305
- sm: { padding: "px-1.5 py-0.5", text: "text-xs", gap: "gap-0.5" },
8306
- md: { padding: "px-2 py-1", text: "text-sm", gap: "gap-1" },
8307
- lg: { padding: "px-2.5 py-1.5", text: "text-base", gap: "gap-1.5" }
8308
- };
8309
8642
  const ChainBadge = ({
8310
8643
  chainType,
8311
8644
  size = "md",
@@ -8313,23 +8646,34 @@ const ChainBadge = ({
8313
8646
  className,
8314
8647
  ...props
8315
8648
  }) => {
8316
- const chain = chainConfig[chainType];
8649
+ const chainColors = getChainColors()[chainType];
8650
+ const meta = chainMeta[chainType];
8317
8651
  const sizeStyles = sizeConfig[size];
8318
8652
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
8319
8653
  reactNative.View,
8320
8654
  {
8321
8655
  className: cn(
8322
8656
  "flex-row items-center rounded-md border",
8323
- chain.bgColor,
8657
+ chainColors.bg,
8324
8658
  sizeStyles.padding,
8325
8659
  sizeStyles.gap,
8326
8660
  className
8327
8661
  ),
8328
- accessibilityLabel: `${chain.label} chain`,
8662
+ accessibilityLabel: `${meta.label} chain`,
8329
8663
  ...props,
8330
8664
  children: [
8331
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(sizeStyles.text, chain.textColor), children: chain.emoji }),
8332
- showLabel && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn("font-medium", sizeStyles.text, chain.textColor), children: chain.label })
8665
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(sizeStyles.text, chainColors.text), children: meta.emoji }),
8666
+ showLabel && /* @__PURE__ */ jsxRuntimeExports.jsx(
8667
+ reactNative.Text,
8668
+ {
8669
+ className: cn(
8670
+ design.designTokens.typography.weight.medium,
8671
+ sizeStyles.text,
8672
+ chainColors.text
8673
+ ),
8674
+ children: meta.label
8675
+ }
8676
+ )
8333
8677
  ]
8334
8678
  }
8335
8679
  );
@@ -8376,7 +8720,7 @@ const ListItemWithAction = ({
8376
8720
  reactNative.ActivityIndicator,
8377
8721
  {
8378
8722
  size: "small",
8379
- color: destructive ? "#dc2626" : "#6b7280"
8723
+ color: destructive ? design.colors.raw.red[600] : design.colors.raw.neutral[500]
8380
8724
  }
8381
8725
  ) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
8382
8726
  actionIcon && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "mr-1", children: actionIcon }),
@@ -8525,7 +8869,7 @@ const TransferList = ({
8525
8869
  value: searchValue,
8526
8870
  onChangeText: onSearchChange,
8527
8871
  placeholder: searchPlaceholder,
8528
- placeholderTextColor: "#9ca3af",
8872
+ placeholderTextColor: design.colors.raw.neutral[400],
8529
8873
  className: "px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white border border-gray-300 dark:border-gray-700 rounded-md"
8530
8874
  }
8531
8875
  ) }),
@@ -9030,6 +9374,26 @@ const Masonry = ({
9030
9374
  });
9031
9375
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("flex-row", className), style: { gap }, children: columnArrays.map((column, columnIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-1", style: { gap }, children: column.map((item, itemIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { children: item }, itemIndex)) }, columnIndex)) });
9032
9376
  };
9377
+ let _iconContainerColors = null;
9378
+ function getIconContainerColors() {
9379
+ if (!_iconContainerColors) {
9380
+ let extractBg = function(base, dark) {
9381
+ const all = `${base} ${dark}`.split(" ");
9382
+ return all.filter((c) => c.includes("bg-")).join(" ");
9383
+ };
9384
+ const badge = design.colors.component.badge;
9385
+ _iconContainerColors = {
9386
+ primary: extractBg(badge.primary.base, badge.primary.dark),
9387
+ secondary: "bg-purple-100 dark:bg-purple-900/30",
9388
+ // DS has no purple badge variant; local fallback
9389
+ success: extractBg(badge.success.base, badge.success.dark),
9390
+ warning: extractBg(badge.warning.base, badge.warning.dark),
9391
+ error: extractBg(badge.error.base, badge.error.dark),
9392
+ neutral: extractBg(badge.default.base, badge.default.dark)
9393
+ };
9394
+ }
9395
+ return _iconContainerColors;
9396
+ }
9033
9397
  const IconContainer = ({
9034
9398
  children,
9035
9399
  size = "md",
@@ -9043,14 +9407,7 @@ const IconContainer = ({
9043
9407
  lg: "w-16 h-16",
9044
9408
  xl: "w-20 h-20"
9045
9409
  };
9046
- const variantClasses = {
9047
- primary: "bg-blue-100 dark:bg-blue-900/30",
9048
- secondary: "bg-purple-100 dark:bg-purple-900/30",
9049
- success: "bg-green-100 dark:bg-green-900/30",
9050
- warning: "bg-yellow-100 dark:bg-yellow-900/30",
9051
- error: "bg-red-100 dark:bg-red-900/30",
9052
- neutral: "bg-gray-100 dark:bg-gray-800"
9053
- };
9410
+ const variantClasses = getIconContainerColors();
9054
9411
  const shapeClasses = {
9055
9412
  square: "rounded-lg",
9056
9413
  rounded: "rounded-2xl",
@@ -9070,6 +9427,27 @@ const IconContainer = ({
9070
9427
  }
9071
9428
  );
9072
9429
  };
9430
+ let _gradientIconColors = null;
9431
+ function getGradientIconColors() {
9432
+ if (!_gradientIconColors) {
9433
+ let extractBg = function(base) {
9434
+ return base.split(" ").find(
9435
+ (c) => c.startsWith("bg-") && !c.includes("hover:") && !c.includes("active:")
9436
+ ) || "";
9437
+ };
9438
+ const btn = design.colors.component.button;
9439
+ _gradientIconColors = {
9440
+ blue: extractBg(btn.primary.base),
9441
+ purple: "bg-purple-600",
9442
+ // DS has no purple button; local fallback
9443
+ green: extractBg(btn.success.base),
9444
+ orange: "bg-orange-600",
9445
+ // DS has no orange button; local fallback
9446
+ gray: "bg-gray-700 dark:bg-gray-600"
9447
+ };
9448
+ }
9449
+ return _gradientIconColors;
9450
+ }
9073
9451
  const GradientIconContainer = ({
9074
9452
  children,
9075
9453
  size = "md",
@@ -9088,13 +9466,7 @@ const GradientIconContainer = ({
9088
9466
  rounded: "rounded-xl",
9089
9467
  circle: "rounded-full"
9090
9468
  };
9091
- const variantClasses = {
9092
- blue: "bg-blue-600",
9093
- purple: "bg-purple-600",
9094
- green: "bg-green-600",
9095
- orange: "bg-orange-600",
9096
- gray: "bg-gray-700 dark:bg-gray-600"
9097
- };
9469
+ const variantClasses = getGradientIconColors();
9098
9470
  const config = sizeConfig2[size];
9099
9471
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
9100
9472
  reactNative.View,
@@ -9175,7 +9547,7 @@ const PageSectionHeader = ({
9175
9547
  }
9176
9548
  ),
9177
9549
  loading && /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-center gap-2", children: [
9178
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: "#3b82f6" }),
9550
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.ActivityIndicator, { size: "small", color: design.colors.raw.blue[500] }),
9179
9551
  /* @__PURE__ */ jsxRuntimeExports.jsx(
9180
9552
  reactNative.Text,
9181
9553
  {
@@ -9227,6 +9599,7 @@ const styles = reactNative.StyleSheet.create({
9227
9599
  // clipPath: 'inset(50%)', // Not supported in RN
9228
9600
  }
9229
9601
  });
9602
+ const { typography: typography$4 } = design.designTokens;
9230
9603
  const BreadcrumbNav = ({
9231
9604
  items,
9232
9605
  separator = "/",
@@ -9239,14 +9612,42 @@ const BreadcrumbNav = ({
9239
9612
  accessibilityRole: "none",
9240
9613
  accessibilityLabel: "Breadcrumb navigation",
9241
9614
  children: items.map((item, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(React__namespace.Fragment, { children: [
9242
- index > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-400 dark:text-gray-600 text-sm", children: typeof separator === "string" ? separator : separator }),
9243
- index === items.length - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-900 dark:text-white font-medium text-sm", children: item.label }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
9615
+ index > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
9616
+ reactNative.Text,
9617
+ {
9618
+ className: cn(
9619
+ "text-gray-400 dark:text-gray-600",
9620
+ typography$4.size.sm
9621
+ ),
9622
+ children: typeof separator === "string" ? separator : separator
9623
+ }
9624
+ ),
9625
+ index === items.length - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(
9626
+ reactNative.Text,
9627
+ {
9628
+ className: cn(
9629
+ "text-gray-900 dark:text-white",
9630
+ typography$4.weight.medium,
9631
+ typography$4.size.sm
9632
+ ),
9633
+ children: item.label
9634
+ }
9635
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx(
9244
9636
  reactNative.Pressable,
9245
9637
  {
9246
9638
  onPress: item.onPress,
9247
9639
  accessibilityRole: "link",
9248
9640
  accessibilityLabel: item.label,
9249
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-blue-600 dark:text-blue-400 text-sm", children: item.label })
9641
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(
9642
+ reactNative.Text,
9643
+ {
9644
+ className: cn(
9645
+ "text-blue-600 dark:text-blue-400",
9646
+ typography$4.size.sm
9647
+ ),
9648
+ children: item.label
9649
+ }
9650
+ )
9250
9651
  }
9251
9652
  )
9252
9653
  ] }, index))
@@ -9325,7 +9726,8 @@ function Table({
9325
9726
  reactNative.View,
9326
9727
  {
9327
9728
  className: cn(
9328
- "flex-row bg-gray-50 dark:bg-gray-800",
9729
+ "flex-row",
9730
+ design.ui.table.thead,
9329
9731
  "border-b border-gray-200 dark:border-gray-700"
9330
9732
  ),
9331
9733
  children: columns.map((column) => /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9348,7 +9750,19 @@ function Table({
9348
9750
  alignClasses[column.align || "left"]
9349
9751
  ),
9350
9752
  children: [
9351
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs font-medium text-gray-700 dark:text-gray-300 uppercase tracking-wider", children: column.label }),
9753
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
9754
+ reactNative.Text,
9755
+ {
9756
+ className: cn(
9757
+ design.designTokens.typography.size.xs,
9758
+ design.designTokens.typography.weight.medium,
9759
+ "text-gray-700 dark:text-gray-300",
9760
+ design.designTokens.typography.transform.uppercase,
9761
+ design.designTokens.typography.tracking.wider
9762
+ ),
9763
+ children: column.label
9764
+ }
9765
+ ),
9352
9766
  column.sortable && (sort == null ? void 0 : sort.column) === column.key && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-500", children: sort.direction === "asc" ? "↑" : "↓" })
9353
9767
  ]
9354
9768
  }
@@ -9358,7 +9772,7 @@ function Table({
9358
9772
  ))
9359
9773
  }
9360
9774
  ),
9361
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "bg-white dark:bg-gray-900", children: data.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "px-4 py-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: emptyMessage }) }) : data.map((row, rowIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
9775
+ /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: design.ui.table.tr, children: data.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "px-4 py-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: emptyMessage }) }) : data.map((row, rowIndex) => /* @__PURE__ */ jsxRuntimeExports.jsx(
9362
9776
  reactNative.Pressable,
9363
9777
  {
9364
9778
  onPress: () => onRowPress == null ? void 0 : onRowPress(row, rowIndex),
@@ -9366,7 +9780,7 @@ function Table({
9366
9780
  className: cn(
9367
9781
  "flex-row",
9368
9782
  "border-b border-gray-200 dark:border-gray-700",
9369
- striped && rowIndex % 2 === 1 && "bg-gray-50 dark:bg-gray-800/50"
9783
+ striped && rowIndex % 2 === 1 && design.ui.table.trAlt
9370
9784
  ),
9371
9785
  accessibilityRole: "button",
9372
9786
  children: columns.map((column) => /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9378,7 +9792,16 @@ function Table({
9378
9792
  bordered && "border-r border-gray-200 dark:border-gray-700 last:border-r-0"
9379
9793
  ),
9380
9794
  style: { width: column.width },
9381
- children: column.render ? column.render(row, rowIndex) : /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm text-gray-900 dark:text-white", children: String(row[column.key] ?? "") })
9795
+ children: column.render ? column.render(row, rowIndex) : /* @__PURE__ */ jsxRuntimeExports.jsx(
9796
+ reactNative.Text,
9797
+ {
9798
+ className: cn(
9799
+ design.designTokens.typography.size.sm,
9800
+ "text-gray-900 dark:text-white"
9801
+ ),
9802
+ children: String(row[column.key] ?? "")
9803
+ }
9804
+ )
9382
9805
  },
9383
9806
  column.key
9384
9807
  ))
@@ -9473,7 +9896,7 @@ const Command = ({
9473
9896
  value: searchQuery,
9474
9897
  onChangeText: setSearchQuery,
9475
9898
  placeholder,
9476
- placeholderTextColor: "#9ca3af",
9899
+ placeholderTextColor: design.colors.raw.neutral[400],
9477
9900
  className: "flex-1 text-gray-900 dark:text-white text-base",
9478
9901
  autoCapitalize: "none",
9479
9902
  autoCorrect: false,
@@ -9699,6 +10122,7 @@ const StandardPageLayout = ({
9699
10122
  }) => {
9700
10123
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("flex-1", backgroundClassName), children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("flex-1", contentClassName), children }) });
9701
10124
  };
10125
+ const { typography: typography$3 } = design.designTokens;
9702
10126
  const StepList = ({
9703
10127
  items,
9704
10128
  type = "ordered",
@@ -9709,10 +10133,30 @@ const StepList = ({
9709
10133
  const renderStepNumber = (index) => {
9710
10134
  if (type === "ordered") {
9711
10135
  if (variant === "enhanced") {
9712
- return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "w-6 h-6 bg-blue-600 rounded-full items-center justify-center mr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-white text-sm font-medium", children: index + 1 }) });
10136
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "w-6 h-6 bg-blue-600 rounded-full items-center justify-center mr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
10137
+ reactNative.Text,
10138
+ {
10139
+ className: cn(
10140
+ "text-white",
10141
+ typography$3.size.sm,
10142
+ typography$3.weight.medium
10143
+ ),
10144
+ children: index + 1
10145
+ }
10146
+ ) });
9713
10147
  }
9714
10148
  if (variant === "minimal") {
9715
- return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "w-6 h-6 bg-blue-100 dark:bg-blue-900/20 rounded-full items-center justify-center mr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-blue-600 dark:text-blue-400 text-sm font-medium", children: index + 1 }) });
10149
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "w-6 h-6 bg-blue-100 dark:bg-blue-900/20 rounded-full items-center justify-center mr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
10150
+ reactNative.Text,
10151
+ {
10152
+ className: cn(
10153
+ "text-blue-600 dark:text-blue-400",
10154
+ typography$3.size.sm,
10155
+ typography$3.weight.medium
10156
+ ),
10157
+ children: index + 1
10158
+ }
10159
+ ) });
9716
10160
  }
9717
10161
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.Text, { className: "text-gray-600 dark:text-gray-400 mr-2", children: [
9718
10162
  index + 1,
@@ -9743,7 +10187,16 @@ const StepList = ({
9743
10187
  typeof content === "string" ? /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-600 dark:text-gray-400", children: content }) : content,
9744
10188
  subItems && subItems.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "mt-2 ml-4 gap-1", children: subItems.map((subItem, subIndex) => /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row", children: [
9745
10189
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-500 dark:text-gray-500 mr-2", children: "•" }),
9746
- typeof subItem === "string" ? /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm text-gray-500 dark:text-gray-500 flex-1", children: subItem }) : subItem
10190
+ typeof subItem === "string" ? /* @__PURE__ */ jsxRuntimeExports.jsx(
10191
+ reactNative.Text,
10192
+ {
10193
+ className: cn(
10194
+ typography$3.size.sm,
10195
+ "text-gray-500 dark:text-gray-500 flex-1"
10196
+ ),
10197
+ children: subItem
10198
+ }
10199
+ ) : subItem
9747
10200
  ] }, subIndex)) })
9748
10201
  ] })
9749
10202
  ]
@@ -9779,51 +10232,74 @@ const FeatureCard = ({
9779
10232
  }) => {
9780
10233
  const colorClasses2 = {
9781
10234
  blue: "text-blue-600 dark:text-blue-400",
10235
+ // colors.raw.blue[600] / [400]
9782
10236
  green: "text-green-600 dark:text-green-400",
10237
+ // colors.raw.green[600] / [400]
9783
10238
  purple: "text-purple-600 dark:text-purple-400",
9784
10239
  orange: "text-orange-600 dark:text-orange-400",
10240
+ // colors.raw.orange[600] / [400]
9785
10241
  pink: "text-pink-600 dark:text-pink-400",
9786
10242
  gray: "text-gray-600 dark:text-gray-400",
10243
+ // colors.raw.neutral[600] / [400]
9787
10244
  red: "text-red-600 dark:text-red-400",
10245
+ // colors.raw.red[600] / [400]
9788
10246
  indigo: "text-indigo-600 dark:text-indigo-400",
9789
10247
  cyan: "text-cyan-600 dark:text-cyan-400",
9790
10248
  emerald: "text-emerald-600 dark:text-emerald-400"
9791
10249
  };
9792
10250
  const borderColorClasses = {
9793
10251
  green: "border-l-4 border-l-green-500",
10252
+ // colors.raw.green[500]
9794
10253
  blue: "border-l-4 border-l-blue-500",
10254
+ // colors.raw.blue[500]
9795
10255
  purple: "border-l-4 border-l-purple-500",
10256
+ // colors.raw.purple[500]
9796
10257
  orange: "border-l-4 border-l-orange-500",
10258
+ // colors.raw.orange[500]
9797
10259
  red: "border-l-4 border-l-red-500",
10260
+ // colors.raw.red[500]
9798
10261
  indigo: "border-l-4 border-l-indigo-500",
9799
10262
  cyan: "border-l-4 border-l-cyan-500",
9800
10263
  emerald: "border-l-4 border-l-emerald-500",
9801
10264
  pink: "border-l-4 border-l-pink-500",
9802
10265
  gray: "border-l-4 border-l-gray-500"
10266
+ // colors.raw.neutral[500]
9803
10267
  };
9804
10268
  const iconBackgroundClasses = {
9805
10269
  green: "bg-green-100 dark:bg-green-900/20",
10270
+ // colors.raw.green[100] / [900]
9806
10271
  blue: "bg-blue-100 dark:bg-blue-900/20",
10272
+ // colors.raw.blue[100] / [900]
9807
10273
  purple: "bg-purple-100 dark:bg-purple-900/20",
10274
+ // colors.raw.purple[100] / [900]
9808
10275
  orange: "bg-orange-100 dark:bg-orange-900/20",
10276
+ // colors.raw.orange[100] / [900]
9809
10277
  red: "bg-red-100 dark:bg-red-900/20",
10278
+ // colors.raw.red[100] / [900]
9810
10279
  indigo: "bg-indigo-100 dark:bg-indigo-900/20",
9811
10280
  cyan: "bg-cyan-100 dark:bg-cyan-900/20",
9812
10281
  emerald: "bg-emerald-100 dark:bg-emerald-900/20",
9813
10282
  pink: "bg-pink-100 dark:bg-pink-900/20",
9814
10283
  gray: "bg-gray-100 dark:bg-gray-900/20"
10284
+ // colors.raw.neutral[100] / [900]
9815
10285
  };
9816
10286
  const bulletColorClasses = {
9817
10287
  green: "bg-green-500",
10288
+ // colors.raw.green[500]
9818
10289
  blue: "bg-blue-500",
10290
+ // colors.raw.blue[500]
9819
10291
  purple: "bg-purple-500",
10292
+ // colors.raw.purple[500]
9820
10293
  orange: "bg-orange-500",
10294
+ // colors.raw.orange[500]
9821
10295
  red: "bg-red-500",
10296
+ // colors.raw.red[500]
9822
10297
  indigo: "bg-indigo-500",
9823
10298
  cyan: "bg-cyan-500",
9824
10299
  emerald: "bg-emerald-500",
9825
10300
  pink: "bg-pink-500",
9826
10301
  gray: "bg-gray-500"
10302
+ // colors.raw.neutral[500]
9827
10303
  };
9828
10304
  const CardContent2 = () => /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
9829
10305
  borderColor ? /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9836,8 +10312,28 @@ const FeatureCard = ({
9836
10312
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: colorClasses2[color], children: icon })
9837
10313
  }
9838
10314
  ) : /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("mb-4", colorClasses2[color]), children: icon }),
9839
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xl font-semibold text-gray-900 dark:text-white mb-3", children: title }),
9840
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-600 dark:text-gray-300 mb-4 leading-relaxed", children: description }),
10315
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10316
+ reactNative.Text,
10317
+ {
10318
+ className: cn(
10319
+ design.designTokens.typography.size.xl,
10320
+ design.designTokens.typography.weight.semibold,
10321
+ "text-gray-900 dark:text-white mb-3"
10322
+ ),
10323
+ children: title
10324
+ }
10325
+ ),
10326
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10327
+ reactNative.Text,
10328
+ {
10329
+ className: cn(
10330
+ design.designTokens.typography.size.base,
10331
+ design.designTokens.typography.leading.relaxed,
10332
+ "text-gray-600 dark:text-gray-300 mb-4"
10333
+ ),
10334
+ children: description
10335
+ }
10336
+ ),
9841
10337
  cta && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "mt-3 mb-4", children: cta }),
9842
10338
  benefits && benefits.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "gap-2 mb-4", children: benefits.map((benefit, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-start", children: [
9843
10339
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9849,15 +10345,44 @@ const FeatureCard = ({
9849
10345
  )
9850
10346
  }
9851
10347
  ),
9852
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "flex-1 text-sm text-gray-600 dark:text-gray-400", children: benefit })
10348
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10349
+ reactNative.Text,
10350
+ {
10351
+ className: cn(
10352
+ "flex-1",
10353
+ design.designTokens.typography.size.sm,
10354
+ "text-gray-600 dark:text-gray-400"
10355
+ ),
10356
+ children: benefit
10357
+ }
10358
+ )
9853
10359
  ] }, index)) }),
9854
10360
  metrics && Object.keys(metrics).length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "flex-row flex-wrap gap-4 mt-4", children: Object.entries(metrics).map(([key, value], index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
9855
10361
  reactNative.View,
9856
10362
  {
9857
10363
  className: "flex-1 min-w-[80px] items-center p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg",
9858
10364
  children: [
9859
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn("text-lg font-bold", colorClasses2[color]), children: value }),
9860
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: key })
10365
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10366
+ reactNative.Text,
10367
+ {
10368
+ className: cn(
10369
+ design.designTokens.typography.size.lg,
10370
+ design.designTokens.typography.weight.bold,
10371
+ colorClasses2[color]
10372
+ ),
10373
+ children: value
10374
+ }
10375
+ ),
10376
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10377
+ reactNative.Text,
10378
+ {
10379
+ className: cn(
10380
+ design.designTokens.typography.size.xs,
10381
+ "text-gray-500 dark:text-gray-400 mt-1"
10382
+ ),
10383
+ children: key
10384
+ }
10385
+ )
9861
10386
  ]
9862
10387
  },
9863
10388
  index
@@ -9903,10 +10428,10 @@ const FeatureGrid = ({
9903
10428
  lg: "w-20 h-20"
9904
10429
  };
9905
10430
  const badgeVariants = {
9906
- success: "bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300",
9907
- info: "bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300",
9908
- warning: "bg-amber-100 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300",
9909
- default: "bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-300"
10431
+ success: `${design.colors.component.badge.success.base} ${design.colors.component.badge.success.dark}`,
10432
+ info: `${design.colors.component.badge.primary.base} ${design.colors.component.badge.primary.dark}`,
10433
+ warning: `${design.colors.component.badge.attention.base} ${design.colors.component.badge.attention.dark}`,
10434
+ default: `${design.colors.component.badge.default.base} ${design.colors.component.badge.default.dark}`
9910
10435
  };
9911
10436
  const renderFeature = (feature, index) => {
9912
10437
  const content = /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -9914,7 +10439,7 @@ const FeatureGrid = ({
9914
10439
  {
9915
10440
  className: cn(
9916
10441
  "items-center",
9917
- cardVariant === "card" && "bg-white dark:bg-gray-800 rounded-2xl p-6 shadow-lg",
10442
+ cardVariant === "card" && `${design.getCardVariantColors("elevated")} rounded-2xl p-6`,
9918
10443
  cardVariant === "minimal" && "gap-4"
9919
10444
  ),
9920
10445
  children: [
@@ -9998,14 +10523,14 @@ const CTASection = ({
9998
10523
  lg: "py-16 px-8"
9999
10524
  };
10000
10525
  const titleSizeClasses = {
10001
- sm: "text-2xl",
10002
- md: "text-3xl",
10003
- lg: "text-4xl"
10526
+ sm: design.designTokens.typography.size["2xl"],
10527
+ md: design.designTokens.typography.size["3xl"],
10528
+ lg: design.designTokens.typography.size["4xl"]
10004
10529
  };
10005
10530
  const descriptionSizeClasses = {
10006
- sm: "text-base",
10007
- md: "text-lg",
10008
- lg: "text-xl"
10531
+ sm: design.designTokens.typography.size.base,
10532
+ md: design.designTokens.typography.size.lg,
10533
+ lg: design.designTokens.typography.size.xl
10009
10534
  };
10010
10535
  const textColorClass = textColor === "light" ? "text-white" : "text-gray-900";
10011
10536
  const renderButton = (button, isPrimary) => /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -10085,8 +10610,10 @@ const PromotionalBanner = ({
10085
10610
  reactNative.View,
10086
10611
  {
10087
10612
  className: cn(
10088
- "bg-green-50 dark:bg-green-900/20",
10089
- "border-b border-green-200 dark:border-green-700",
10613
+ // Derive green palette from DS alert.success colors
10614
+ design.colors.component.alert.success.base,
10615
+ design.colors.component.alert.success.dark,
10616
+ "border-b",
10090
10617
  isProminent && "border-b-2",
10091
10618
  className
10092
10619
  ),
@@ -10137,6 +10664,7 @@ const PromotionalBanner = ({
10137
10664
  }
10138
10665
  );
10139
10666
  };
10667
+ const { typography: typography$2 } = design.designTokens;
10140
10668
  if (reactNative.Platform.OS === "android" && reactNative.UIManager.setLayoutAnimationEnabledExperimental) {
10141
10669
  reactNative.UIManager.setLayoutAnimationEnabledExperimental(true);
10142
10670
  }
@@ -10186,7 +10714,8 @@ const CollapsibleSection = ({
10186
10714
  reactNative.Text,
10187
10715
  {
10188
10716
  className: cn(
10189
- "text-base font-medium",
10717
+ typography$2.size.base,
10718
+ typography$2.weight.medium,
10190
10719
  isSelected && !selectedSubsection ? "text-blue-700 dark:text-blue-300" : "text-gray-700 dark:text-gray-300"
10191
10720
  ),
10192
10721
  children: title
@@ -10201,7 +10730,7 @@ const CollapsibleSection = ({
10201
10730
  className: "p-2 rounded-md",
10202
10731
  accessibilityRole: "button",
10203
10732
  accessibilityLabel: isExpanded ? "Collapse" : "Expand",
10204
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Animated.View, { style: { transform: [{ rotate: rotation }] }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-gray-500 text-lg", children: "›" }) })
10733
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Animated.View, { style: { transform: [{ rotate: rotation }] }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn("text-gray-500", typography$2.size.lg), children: "›" }) })
10205
10734
  }
10206
10735
  )
10207
10736
  ] }),
@@ -10221,7 +10750,7 @@ const CollapsibleSection = ({
10221
10750
  reactNative.Text,
10222
10751
  {
10223
10752
  className: cn(
10224
- "text-sm",
10753
+ typography$2.size.sm,
10225
10754
  selectedSubsection === subsection.id ? "text-blue-700 dark:text-blue-300" : "text-gray-600 dark:text-gray-400"
10226
10755
  ),
10227
10756
  children: subsection.title
@@ -10232,6 +10761,19 @@ const CollapsibleSection = ({
10232
10761
  ] }, subsection.id)) })
10233
10762
  ] });
10234
10763
  };
10764
+ let _cardColors = null;
10765
+ function getDashboardCardColors() {
10766
+ if (!_cardColors) {
10767
+ _cardColors = {
10768
+ default: design.getCardVariantColors("default"),
10769
+ primary: design.getCardVariantColors("info"),
10770
+ success: design.getCardVariantColors("success"),
10771
+ warning: design.getCardVariantColors("warning"),
10772
+ danger: design.getCardVariantColors("error")
10773
+ };
10774
+ }
10775
+ return _cardColors;
10776
+ }
10235
10777
  const DashboardStatCard = ({
10236
10778
  title,
10237
10779
  value,
@@ -10241,13 +10783,7 @@ const DashboardStatCard = ({
10241
10783
  variant = "default",
10242
10784
  className
10243
10785
  }) => {
10244
- const variantClasses = {
10245
- default: "bg-white dark:bg-gray-900",
10246
- primary: "bg-blue-50 dark:bg-blue-900/20",
10247
- success: "bg-green-50 dark:bg-green-900/20",
10248
- warning: "bg-yellow-50 dark:bg-yellow-900/20",
10249
- danger: "bg-red-50 dark:bg-red-900/20"
10250
- };
10786
+ const variantClasses = getDashboardCardColors();
10251
10787
  const isPositive = change !== void 0 && change >= 0;
10252
10788
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
10253
10789
  reactNative.View,
@@ -10259,16 +10795,29 @@ const DashboardStatCard = ({
10259
10795
  ),
10260
10796
  children: [
10261
10797
  /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-start justify-between mb-2", children: [
10262
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-sm font-medium text-gray-600 dark:text-gray-400", children: title }),
10798
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10799
+ reactNative.Text,
10800
+ {
10801
+ className: `${design.designTokens.typography.size.sm} ${design.designTokens.typography.weight.medium} text-gray-600 dark:text-gray-400`,
10802
+ children: title
10803
+ }
10804
+ ),
10263
10805
  icon && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: "text-gray-400 dark:text-gray-600", children: icon })
10264
10806
  ] }),
10265
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-3xl font-bold text-gray-900 dark:text-white", children: value }),
10807
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10808
+ reactNative.Text,
10809
+ {
10810
+ className: `${design.designTokens.typography.size["3xl"]} ${design.designTokens.typography.weight.bold} text-gray-900 dark:text-white`,
10811
+ children: value
10812
+ }
10813
+ ),
10266
10814
  change !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: "flex-row items-center gap-1 mt-2", children: [
10267
10815
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
10268
10816
  reactNative.Text,
10269
10817
  {
10270
10818
  className: cn(
10271
- "text-sm font-medium",
10819
+ design.designTokens.typography.size.sm,
10820
+ design.designTokens.typography.weight.medium,
10272
10821
  isPositive ? "text-green-600 dark:text-green-400" : "text-red-600 dark:text-red-400"
10273
10822
  ),
10274
10823
  children: [
@@ -10279,37 +10828,40 @@ const DashboardStatCard = ({
10279
10828
  ]
10280
10829
  }
10281
10830
  ),
10282
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: "text-xs text-gray-500 dark:text-gray-400", children: changePeriod })
10831
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10832
+ reactNative.Text,
10833
+ {
10834
+ className: `${design.designTokens.typography.size.xs} text-gray-500 dark:text-gray-400`,
10835
+ children: changePeriod
10836
+ }
10837
+ )
10283
10838
  ] })
10284
10839
  ]
10285
10840
  }
10286
10841
  );
10287
10842
  };
10288
- const StatDisplay = ({
10289
- value,
10290
- label,
10291
- variant = "neutral",
10292
- size = "md",
10293
- align = "center",
10294
- icon,
10295
- iconPosition = "top",
10296
- className
10297
- }) => {
10298
- const variantClasses = {
10843
+ let _statColors = null;
10844
+ function getStatColors() {
10845
+ if (!_statColors) _statColors = buildStatColors();
10846
+ return _statColors;
10847
+ }
10848
+ function buildStatColors() {
10849
+ const alert2 = design.colors.component.alert;
10850
+ return {
10299
10851
  primary: {
10300
- value: "text-blue-600 dark:text-blue-400",
10852
+ value: `${alert2.info.icon}`,
10301
10853
  label: "text-blue-600/70 dark:text-blue-400/70"
10302
10854
  },
10303
10855
  success: {
10304
- value: "text-green-600 dark:text-green-400",
10856
+ value: `${alert2.success.icon}`,
10305
10857
  label: "text-green-600/70 dark:text-green-400/70"
10306
10858
  },
10307
10859
  warning: {
10308
- value: "text-yellow-600 dark:text-yellow-400",
10309
- label: "text-yellow-600/70 dark:text-yellow-400/70"
10860
+ value: `${alert2.warning.icon}`,
10861
+ label: "text-orange-600/70 dark:text-orange-400/70"
10310
10862
  },
10311
10863
  danger: {
10312
- value: "text-red-600 dark:text-red-400",
10864
+ value: `${alert2.error.icon}`,
10313
10865
  label: "text-red-600/70 dark:text-red-400/70"
10314
10866
  },
10315
10867
  neutral: {
@@ -10321,11 +10873,35 @@ const StatDisplay = ({
10321
10873
  label: "text-white/70"
10322
10874
  }
10323
10875
  };
10876
+ }
10877
+ const StatDisplay = ({
10878
+ value,
10879
+ label,
10880
+ variant = "neutral",
10881
+ size = "md",
10882
+ align = "center",
10883
+ icon,
10884
+ iconPosition = "top",
10885
+ className
10886
+ }) => {
10887
+ const variantClasses = getStatColors();
10324
10888
  const sizeClasses = {
10325
- sm: { value: "text-xl", label: "text-xs" },
10326
- md: { value: "text-2xl", label: "text-sm" },
10327
- lg: { value: "text-3xl", label: "text-base" },
10328
- xl: { value: "text-4xl", label: "text-lg" }
10889
+ sm: {
10890
+ value: design.designTokens.typography.size.xl,
10891
+ label: design.designTokens.typography.size.xs
10892
+ },
10893
+ md: {
10894
+ value: design.designTokens.typography.size["2xl"],
10895
+ label: design.designTokens.typography.size.sm
10896
+ },
10897
+ lg: {
10898
+ value: design.designTokens.typography.size["3xl"],
10899
+ label: design.designTokens.typography.size.base
10900
+ },
10901
+ xl: {
10902
+ value: design.designTokens.typography.size["4xl"],
10903
+ label: design.designTokens.typography.size.lg
10904
+ }
10329
10905
  };
10330
10906
  const alignClasses = {
10331
10907
  left: "items-start",
@@ -10349,7 +10925,11 @@ const StatDisplay = ({
10349
10925
  /* @__PURE__ */ jsxRuntimeExports.jsx(
10350
10926
  reactNative.Text,
10351
10927
  {
10352
- className: cn("font-bold", sizeConfig2.value, variantConfig2.value),
10928
+ className: cn(
10929
+ design.designTokens.typography.weight.bold,
10930
+ sizeConfig2.value,
10931
+ variantConfig2.value
10932
+ ),
10353
10933
  children: value
10354
10934
  }
10355
10935
  ),
@@ -10361,10 +10941,21 @@ const StatDisplay = ({
10361
10941
  }
10362
10942
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(reactNative.View, { className: cn(alignClasses[align], className), children: [
10363
10943
  icon && iconPosition === "top" && /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.View, { className: cn("mb-2", variantConfig2.value), children: icon }),
10364
- /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn("font-bold", sizeConfig2.value, variantConfig2.value), children: value }),
10944
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
10945
+ reactNative.Text,
10946
+ {
10947
+ className: cn(
10948
+ design.designTokens.typography.weight.bold,
10949
+ sizeConfig2.value,
10950
+ variantConfig2.value
10951
+ ),
10952
+ children: value
10953
+ }
10954
+ ),
10365
10955
  /* @__PURE__ */ jsxRuntimeExports.jsx(reactNative.Text, { className: cn(sizeConfig2.label, variantConfig2.label), children: label })
10366
10956
  ] });
10367
10957
  };
10958
+ const { typography: typography$1 } = design.designTokens;
10368
10959
  const KeyValuePair = ({
10369
10960
  label,
10370
10961
  value,
@@ -10378,9 +10969,13 @@ const KeyValuePair = ({
10378
10969
  className
10379
10970
  }) => {
10380
10971
  const sizeClasses = {
10381
- sm: { label: "text-sm", value: "text-sm", gap: "gap-1" },
10382
- md: { label: "text-base", value: "text-base", gap: "gap-2" },
10383
- lg: { label: "text-lg", value: "text-lg", gap: "gap-3" }
10972
+ sm: { label: typography$1.size.sm, value: typography$1.size.sm, gap: "gap-1" },
10973
+ md: {
10974
+ label: typography$1.size.base,
10975
+ value: typography$1.size.base,
10976
+ gap: "gap-2"
10977
+ },
10978
+ lg: { label: typography$1.size.lg, value: typography$1.size.lg, gap: "gap-3" }
10384
10979
  };
10385
10980
  const labelWidthStyles = {
10386
10981
  auto: void 0,
@@ -10396,12 +10991,12 @@ const KeyValuePair = ({
10396
10991
  const labelVariantClasses = {
10397
10992
  default: "text-gray-700 dark:text-gray-300",
10398
10993
  muted: "text-gray-600 dark:text-gray-400",
10399
- strong: "text-gray-900 dark:text-gray-100 font-semibold"
10994
+ strong: `text-gray-900 dark:text-gray-100 ${typography$1.weight.semibold}`
10400
10995
  };
10401
10996
  const valueVariantClasses = {
10402
10997
  default: "text-gray-900 dark:text-gray-100",
10403
10998
  muted: "text-gray-600 dark:text-gray-400",
10404
- strong: "text-gray-900 dark:text-gray-100 font-semibold",
10999
+ strong: `text-gray-900 dark:text-gray-100 ${typography$1.weight.semibold}`,
10405
11000
  primary: "text-blue-600 dark:text-blue-400"
10406
11001
  };
10407
11002
  const sizeConfig2 = sizeClasses[size];
@@ -10439,6 +11034,7 @@ const KeyValuePair = ({
10439
11034
  }
10440
11035
  );
10441
11036
  };
11037
+ const { typography } = design.designTokens;
10442
11038
  const SmartLink = ({
10443
11039
  to,
10444
11040
  href,
@@ -10459,9 +11055,9 @@ const SmartLink = ({
10459
11055
  inherit: "text-inherit"
10460
11056
  };
10461
11057
  const sizeClasses = {
10462
- sm: "text-sm",
10463
- default: "text-base",
10464
- lg: "text-lg"
11058
+ sm: typography.size.sm,
11059
+ default: typography.size.base,
11060
+ lg: typography.size.lg
10465
11061
  };
10466
11062
  const handlePress = async () => {
10467
11063
  if (disabled || !destination) return;