@retray-dev/ui-kit 6.1.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/COMPONENTS.md +447 -13
  2. package/EXAMPLES.md +248 -0
  3. package/README.md +11 -10
  4. package/dist/Accordion.d.mts +28 -0
  5. package/dist/Accordion.d.ts +28 -0
  6. package/dist/Accordion.js +340 -0
  7. package/dist/Accordion.mjs +6 -0
  8. package/dist/AlertBanner.d.mts +16 -0
  9. package/dist/AlertBanner.d.ts +16 -0
  10. package/dist/AlertBanner.js +247 -0
  11. package/dist/AlertBanner.mjs +5 -0
  12. package/dist/Avatar.d.mts +20 -0
  13. package/dist/Avatar.d.ts +20 -0
  14. package/dist/Avatar.js +234 -0
  15. package/dist/Avatar.mjs +3 -0
  16. package/dist/Badge.d.mts +26 -0
  17. package/dist/Badge.d.ts +26 -0
  18. package/dist/Badge.js +247 -0
  19. package/dist/Badge.mjs +4 -0
  20. package/dist/Button.d.mts +25 -0
  21. package/dist/Button.d.ts +25 -0
  22. package/dist/Button.js +414 -0
  23. package/dist/Button.mjs +8 -0
  24. package/dist/ButtonGroup.d.mts +26 -0
  25. package/dist/ButtonGroup.d.ts +26 -0
  26. package/dist/ButtonGroup.js +52 -0
  27. package/dist/ButtonGroup.mjs +2 -0
  28. package/dist/Card.d.mts +39 -0
  29. package/dist/Card.d.ts +39 -0
  30. package/dist/Card.js +329 -0
  31. package/dist/Card.mjs +7 -0
  32. package/dist/CategoryStrip.d.mts +26 -0
  33. package/dist/CategoryStrip.d.ts +26 -0
  34. package/dist/CategoryStrip.js +396 -0
  35. package/dist/CategoryStrip.mjs +9 -0
  36. package/dist/Checkbox.d.mts +14 -0
  37. package/dist/Checkbox.d.ts +14 -0
  38. package/dist/Checkbox.js +304 -0
  39. package/dist/Checkbox.mjs +7 -0
  40. package/dist/Chip.d.mts +31 -0
  41. package/dist/Chip.d.ts +31 -0
  42. package/dist/Chip.js +370 -0
  43. package/dist/Chip.mjs +8 -0
  44. package/dist/ConfirmDialog.d.mts +15 -0
  45. package/dist/ConfirmDialog.d.ts +15 -0
  46. package/dist/ConfirmDialog.js +530 -0
  47. package/dist/ConfirmDialog.mjs +9 -0
  48. package/dist/CurrencyDisplay.d.mts +24 -0
  49. package/dist/CurrencyDisplay.d.ts +24 -0
  50. package/dist/CurrencyDisplay.js +189 -0
  51. package/dist/CurrencyDisplay.mjs +3 -0
  52. package/dist/CurrencyInput.d.mts +26 -0
  53. package/dist/CurrencyInput.d.ts +26 -0
  54. package/dist/CurrencyInput.js +404 -0
  55. package/dist/CurrencyInput.mjs +7 -0
  56. package/dist/DetailRow.d.mts +32 -0
  57. package/dist/DetailRow.d.ts +32 -0
  58. package/dist/DetailRow.js +275 -0
  59. package/dist/DetailRow.mjs +4 -0
  60. package/dist/EmptyState.d.mts +27 -0
  61. package/dist/EmptyState.d.ts +27 -0
  62. package/dist/EmptyState.js +503 -0
  63. package/dist/EmptyState.mjs +9 -0
  64. package/dist/Form.d.mts +52 -0
  65. package/dist/Form.d.ts +52 -0
  66. package/dist/Form.js +204 -0
  67. package/dist/Form.mjs +3 -0
  68. package/dist/IconButton.d.mts +22 -0
  69. package/dist/IconButton.d.ts +22 -0
  70. package/dist/IconButton.js +383 -0
  71. package/dist/IconButton.mjs +7 -0
  72. package/dist/Input.d.mts +23 -0
  73. package/dist/Input.d.ts +23 -0
  74. package/dist/Input.js +351 -0
  75. package/dist/Input.mjs +6 -0
  76. package/dist/LabelValue.d.mts +16 -0
  77. package/dist/LabelValue.d.ts +16 -0
  78. package/dist/LabelValue.js +225 -0
  79. package/dist/LabelValue.mjs +4 -0
  80. package/dist/ListGroup.d.mts +34 -0
  81. package/dist/ListGroup.d.ts +34 -0
  82. package/dist/ListGroup.js +217 -0
  83. package/dist/ListGroup.mjs +4 -0
  84. package/dist/ListItem.d.mts +64 -0
  85. package/dist/ListItem.d.ts +64 -0
  86. package/dist/ListItem.js +430 -0
  87. package/dist/ListItem.mjs +8 -0
  88. package/dist/MediaCard.d.mts +39 -0
  89. package/dist/MediaCard.d.ts +39 -0
  90. package/dist/MediaCard.js +427 -0
  91. package/dist/MediaCard.mjs +8 -0
  92. package/dist/MenuGroup.d.mts +34 -0
  93. package/dist/MenuGroup.d.ts +34 -0
  94. package/dist/MenuGroup.js +217 -0
  95. package/dist/MenuGroup.mjs +4 -0
  96. package/dist/MenuItem.d.mts +48 -0
  97. package/dist/MenuItem.d.ts +48 -0
  98. package/dist/MenuItem.js +403 -0
  99. package/dist/MenuItem.mjs +8 -0
  100. package/dist/MonthPicker.d.mts +20 -0
  101. package/dist/MonthPicker.d.ts +20 -0
  102. package/dist/MonthPicker.js +234 -0
  103. package/dist/MonthPicker.mjs +4 -0
  104. package/dist/Pressable.d.mts +34 -0
  105. package/dist/Pressable.d.ts +34 -0
  106. package/dist/Pressable.js +132 -0
  107. package/dist/Pressable.mjs +4 -0
  108. package/dist/Progress.d.mts +14 -0
  109. package/dist/Progress.d.ts +14 -0
  110. package/dist/Progress.js +191 -0
  111. package/dist/Progress.mjs +4 -0
  112. package/dist/RadioGroup.d.mts +19 -0
  113. package/dist/RadioGroup.d.ts +19 -0
  114. package/dist/RadioGroup.js +341 -0
  115. package/dist/RadioGroup.mjs +7 -0
  116. package/dist/Select.d.mts +22 -0
  117. package/dist/Select.d.ts +22 -0
  118. package/dist/Select.js +441 -0
  119. package/dist/Select.mjs +6 -0
  120. package/dist/Separator.d.mts +10 -0
  121. package/dist/Separator.d.ts +10 -0
  122. package/dist/Separator.js +156 -0
  123. package/dist/Separator.mjs +2 -0
  124. package/dist/Sheet.d.mts +81 -0
  125. package/dist/Sheet.d.ts +81 -0
  126. package/dist/Sheet.js +340 -0
  127. package/dist/Sheet.mjs +4 -0
  128. package/dist/Skeleton.d.mts +17 -0
  129. package/dist/Skeleton.d.ts +17 -0
  130. package/dist/Skeleton.js +205 -0
  131. package/dist/Skeleton.mjs +4 -0
  132. package/dist/Slider.d.mts +20 -0
  133. package/dist/Slider.d.ts +20 -0
  134. package/dist/Slider.js +232 -0
  135. package/dist/Slider.mjs +4 -0
  136. package/dist/Spinner.d.mts +12 -0
  137. package/dist/Spinner.d.ts +12 -0
  138. package/dist/Spinner.js +172 -0
  139. package/dist/Spinner.mjs +3 -0
  140. package/dist/Switch.d.mts +13 -0
  141. package/dist/Switch.d.ts +13 -0
  142. package/dist/Switch.js +261 -0
  143. package/dist/Switch.mjs +5 -0
  144. package/dist/Tabs.d.mts +27 -0
  145. package/dist/Tabs.d.ts +27 -0
  146. package/dist/Tabs.js +389 -0
  147. package/dist/Tabs.mjs +6 -0
  148. package/dist/Text.d.mts +12 -0
  149. package/dist/Text.d.ts +12 -0
  150. package/dist/Text.js +311 -0
  151. package/dist/Text.mjs +4 -0
  152. package/dist/Textarea.d.mts +16 -0
  153. package/dist/Textarea.d.ts +16 -0
  154. package/dist/Textarea.js +333 -0
  155. package/dist/Textarea.mjs +6 -0
  156. package/dist/Toast.d.mts +47 -0
  157. package/dist/Toast.d.ts +47 -0
  158. package/dist/Toast.js +185 -0
  159. package/dist/Toast.mjs +3 -0
  160. package/dist/Toggle.d.mts +33 -0
  161. package/dist/Toggle.d.ts +33 -0
  162. package/dist/Toggle.js +397 -0
  163. package/dist/Toggle.mjs +8 -0
  164. package/dist/VirtualList.d.mts +19 -0
  165. package/dist/VirtualList.d.ts +19 -0
  166. package/dist/VirtualList.js +38 -0
  167. package/dist/VirtualList.mjs +1 -0
  168. package/dist/chunk-2CE3TQVY.mjs +11 -0
  169. package/dist/chunk-2UYENBLV.mjs +49 -0
  170. package/dist/chunk-3BBOZ3OQ.mjs +41 -0
  171. package/dist/chunk-5IKW3VNC.mjs +43 -0
  172. package/dist/chunk-63357L2X.mjs +51 -0
  173. package/dist/chunk-6LQYY7HC.mjs +127 -0
  174. package/dist/chunk-6Q64UFIA.mjs +71 -0
  175. package/dist/chunk-76PFOSM2.mjs +41 -0
  176. package/dist/chunk-7H2OR44A.mjs +14 -0
  177. package/dist/chunk-A4MDAP7G.mjs +42 -0
  178. package/dist/chunk-AU2VDY4P.mjs +190 -0
  179. package/dist/chunk-BRKYVJVV.mjs +60 -0
  180. package/dist/chunk-CRYBX2CM.mjs +146 -0
  181. package/dist/chunk-DITNP6PL.mjs +106 -0
  182. package/dist/chunk-FTLJOUOQ.mjs +97 -0
  183. package/dist/chunk-GCWOGZYL.mjs +104 -0
  184. package/dist/chunk-GNGLDL6Z.mjs +60 -0
  185. package/dist/chunk-GPOUINK5.mjs +148 -0
  186. package/dist/chunk-HSPSMN6U.mjs +115 -0
  187. package/dist/chunk-IRRY3CRZ.mjs +82 -0
  188. package/dist/chunk-JB67UOB5.mjs +92 -0
  189. package/dist/chunk-JBLL7U3U.mjs +64 -0
  190. package/dist/chunk-KWCPOM6W.mjs +136 -0
  191. package/dist/chunk-KZJRQOIU.mjs +64 -0
  192. package/dist/chunk-L7E7TVEZ.mjs +145 -0
  193. package/dist/chunk-LG4DO3DK.mjs +174 -0
  194. package/dist/chunk-LWG526VX.mjs +139 -0
  195. package/dist/chunk-MN7OG7IY.mjs +96 -0
  196. package/dist/chunk-MX6HRKMI.mjs +29 -0
  197. package/dist/chunk-NC5ZTR2Y.mjs +32 -0
  198. package/dist/chunk-NQGVLMWG.mjs +90 -0
  199. package/dist/chunk-QCNARS3X.mjs +46 -0
  200. package/dist/chunk-QXGYKWI7.mjs +134 -0
  201. package/dist/chunk-QY3X2UYR.mjs +191 -0
  202. package/dist/chunk-RKLHUDZS.mjs +92 -0
  203. package/dist/chunk-RMMK64W5.mjs +54 -0
  204. package/dist/chunk-RR2VQLKE.mjs +190 -0
  205. package/dist/chunk-RTC3CFXF.mjs +29 -0
  206. package/dist/chunk-SBZYEV4S.mjs +61 -0
  207. package/dist/chunk-SOA2Z4RB.mjs +82 -0
  208. package/dist/chunk-SOYNZDVY.mjs +151 -0
  209. package/dist/chunk-T7XZ7H7Y.mjs +57 -0
  210. package/dist/chunk-TAJ2PQ2O.mjs +163 -0
  211. package/dist/chunk-U4N7WF4Z.mjs +108 -0
  212. package/dist/chunk-URDE3EUU.mjs +132 -0
  213. package/dist/chunk-URLL5JBR.mjs +245 -0
  214. package/dist/chunk-XDMN67KV.mjs +59 -0
  215. package/dist/chunk-Y6MXOREN.mjs +120 -0
  216. package/dist/chunk-YZJAFS4P.mjs +131 -0
  217. package/dist/index.d.mts +94 -852
  218. package/dist/index.d.ts +94 -852
  219. package/dist/index.js +1387 -942
  220. package/dist/index.mjs +50 -3844
  221. package/package.json +23 -14
  222. package/src/assets/fonts/Sohne-Bold.otf +0 -0
  223. package/src/assets/fonts/Sohne-BoldItalic.otf +0 -0
  224. package/src/assets/fonts/Sohne-ExtraBold.otf +0 -0
  225. package/src/assets/fonts/Sohne-ExtraBoldItalic.otf +0 -0
  226. package/src/assets/fonts/Sohne-ExtraLight.otf +0 -0
  227. package/src/assets/fonts/Sohne-ExtraLightItalic.otf +0 -0
  228. package/src/assets/fonts/Sohne-Italic.otf +0 -0
  229. package/src/assets/fonts/Sohne-Light.otf +0 -0
  230. package/src/assets/fonts/Sohne-LightItalic.otf +0 -0
  231. package/src/assets/fonts/Sohne-Medium.otf +0 -0
  232. package/src/assets/fonts/Sohne-MediumItalic.otf +0 -0
  233. package/src/assets/fonts/Sohne-Regular.otf +0 -0
  234. package/src/assets/fonts/Sohne-SemiBold.otf +0 -0
  235. package/src/assets/fonts/Sohne-SemiBoldItalic.otf +0 -0
  236. package/src/assets/fonts/SohneMono-Bold.otf +0 -0
  237. package/src/assets/fonts/SohneMono-BoldItalic.otf +0 -0
  238. package/src/assets/fonts/SohneMono-ExtraBold.otf +0 -0
  239. package/src/assets/fonts/SohneMono-ExtraBoldItalic.otf +0 -0
  240. package/src/assets/fonts/SohneMono-ExtraLight.otf +0 -0
  241. package/src/assets/fonts/SohneMono-ExtraLightItalic.otf +0 -0
  242. package/src/assets/fonts/SohneMono-Italic.otf +0 -0
  243. package/src/assets/fonts/SohneMono-Light.otf +0 -0
  244. package/src/assets/fonts/SohneMono-LightItalic.otf +0 -0
  245. package/src/assets/fonts/SohneMono-Medium.otf +0 -0
  246. package/src/assets/fonts/SohneMono-MediumItalic.otf +0 -0
  247. package/src/assets/fonts/SohneMono-Regular.otf +0 -0
  248. package/src/assets/fonts/SohneMono-SemiBold.otf +0 -0
  249. package/src/assets/fonts/SohneMono-SemiBoldItalic.otf +0 -0
  250. package/src/components/Accordion/Accordion.tsx +13 -15
  251. package/src/components/AlertBanner/AlertBanner.tsx +33 -12
  252. package/src/components/Avatar/Avatar.tsx +4 -2
  253. package/src/components/Badge/Badge.tsx +4 -2
  254. package/src/components/Button/Button.tsx +30 -29
  255. package/src/components/ButtonGroup/ButtonGroup.tsx +13 -10
  256. package/src/components/Card/Card.tsx +36 -65
  257. package/src/components/CategoryStrip/CategoryStrip.tsx +68 -58
  258. package/src/components/Checkbox/Checkbox.tsx +41 -55
  259. package/src/components/Chip/Chip.tsx +49 -84
  260. package/src/components/ConfirmDialog/ConfirmDialog.tsx +2 -2
  261. package/src/components/CurrencyDisplay/CurrencyDisplay.tsx +4 -2
  262. package/src/components/CurrencyInput/CurrencyInput.tsx +2 -2
  263. package/src/components/DetailRow/DetailRow.tsx +9 -7
  264. package/src/components/EmptyState/EmptyState.tsx +2 -2
  265. package/src/components/Form/Form.tsx +149 -0
  266. package/src/components/Form/index.ts +1 -0
  267. package/src/components/IconButton/IconButton.tsx +24 -20
  268. package/src/components/Input/Input.tsx +63 -50
  269. package/src/components/LabelValue/LabelValue.tsx +6 -4
  270. package/src/components/ListGroup/ListGroup.tsx +145 -0
  271. package/src/components/ListGroup/index.ts +1 -0
  272. package/src/components/ListItem/ListItem.tsx +30 -43
  273. package/src/components/MediaCard/MediaCard.tsx +31 -29
  274. package/src/components/MenuGroup/MenuGroup.tsx +145 -0
  275. package/src/components/MenuGroup/index.ts +1 -0
  276. package/src/components/MenuItem/MenuItem.tsx +29 -40
  277. package/src/components/MonthPicker/MonthPicker.tsx +14 -4
  278. package/src/components/Pressable/Pressable.tsx +27 -46
  279. package/src/components/Progress/Progress.tsx +21 -12
  280. package/src/components/RadioGroup/RadioGroup.tsx +55 -32
  281. package/src/components/Select/Select.tsx +23 -21
  282. package/src/components/Separator/Separator.tsx +1 -3
  283. package/src/components/Sheet/Sheet.tsx +85 -18
  284. package/src/components/Skeleton/Skeleton.tsx +25 -14
  285. package/src/components/Slider/Slider.tsx +13 -3
  286. package/src/components/Spinner/Spinner.tsx +1 -1
  287. package/src/components/Switch/Switch.tsx +70 -52
  288. package/src/components/Tabs/Tabs.tsx +59 -47
  289. package/src/components/Text/Text.tsx +3 -1
  290. package/src/components/Textarea/Textarea.tsx +44 -23
  291. package/src/components/Toast/Toast.tsx +6 -6
  292. package/src/components/Toggle/Toggle.tsx +86 -68
  293. package/src/components/VirtualList/VirtualList.tsx +60 -0
  294. package/src/components/VirtualList/index.ts +1 -0
  295. package/src/fonts.ts +38 -20
  296. package/src/index.ts +5 -1
  297. package/src/theme/colors.ts +53 -39
  298. package/src/theme/types.ts +3 -0
  299. package/src/tokens.ts +49 -39
  300. package/src/utils/animations.ts +58 -0
  301. package/src/utils/icons.ts +47 -20
  302. package/src/utils/useColorTransition.ts +40 -0
  303. package/src/utils/usePressScale.ts +75 -0
  304. package/src/assets/fonts/Poppins-Black.ttf +0 -0
  305. package/src/assets/fonts/Poppins-BlackItalic.ttf +0 -0
  306. package/src/assets/fonts/Poppins-Bold.ttf +0 -0
  307. package/src/assets/fonts/Poppins-BoldItalic.ttf +0 -0
  308. package/src/assets/fonts/Poppins-ExtraBold.ttf +0 -0
  309. package/src/assets/fonts/Poppins-ExtraBoldItalic.ttf +0 -0
  310. package/src/assets/fonts/Poppins-ExtraLight.ttf +0 -0
  311. package/src/assets/fonts/Poppins-ExtraLightItalic.ttf +0 -0
  312. package/src/assets/fonts/Poppins-Italic.ttf +0 -0
  313. package/src/assets/fonts/Poppins-Light.ttf +0 -0
  314. package/src/assets/fonts/Poppins-LightItalic.ttf +0 -0
  315. package/src/assets/fonts/Poppins-Medium.ttf +0 -0
  316. package/src/assets/fonts/Poppins-MediumItalic.ttf +0 -0
  317. package/src/assets/fonts/Poppins-Regular.ttf +0 -0
  318. package/src/assets/fonts/Poppins-SemiBold.ttf +0 -0
  319. package/src/assets/fonts/Poppins-SemiBoldItalic.ttf +0 -0
  320. package/src/assets/fonts/Poppins-Thin.ttf +0 -0
  321. package/src/assets/fonts/Poppins-ThinItalic.ttf +0 -0
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { ViewStyle, TextStyle } from 'react-native';
3
+
4
+ type DetailRowSeparator = 'dotted' | 'solid' | 'dashed' | 'none';
5
+ type DetailRowLabelWeight = 'normal' | 'medium' | 'semibold' | 'bold';
6
+ interface DetailRowProps {
7
+ label: React.ReactNode;
8
+ value: string | React.ReactNode;
9
+ /** Dotted/dashed/solid line between label and value. Defaults to 'dotted'. */
10
+ separator?: DetailRowSeparator;
11
+ labelWeight?: DetailRowLabelWeight;
12
+ /** Semantic color key or hex string for value text. Only applies when value is a string. */
13
+ valueColor?: string;
14
+ /** Node rendered left of the label (e.g. Avatar, Icon). */
15
+ leftIcon?: React.ReactNode;
16
+ /** Icon name from @expo/vector-icons rendered left of label. Takes precedence over leftIcon. */
17
+ leftIconName?: string;
18
+ /** Override left icon color. Defaults to foregroundMuted. */
19
+ leftIconColor?: string;
20
+ /** Icon name from @expo/vector-icons rendered right of value. */
21
+ rightIconName?: string;
22
+ /** Override right icon color. Defaults to foregroundMuted. */
23
+ rightIconColor?: string;
24
+ style?: ViewStyle;
25
+ labelStyle?: TextStyle;
26
+ /** Only applies when value is a string. */
27
+ valueStyle?: TextStyle;
28
+ }
29
+ declare function DetailRowBase({ label, value, separator, labelWeight, valueColor, leftIcon, leftIconName, leftIconColor, rightIconName, rightIconColor, style, labelStyle, valueStyle, }: DetailRowProps): React.JSX.Element;
30
+ declare const DetailRow: React.MemoExoticComponent<typeof DetailRowBase>;
31
+
32
+ export { DetailRow, type DetailRowLabelWeight, type DetailRowProps, type DetailRowSeparator };
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { ViewStyle, TextStyle } from 'react-native';
3
+
4
+ type DetailRowSeparator = 'dotted' | 'solid' | 'dashed' | 'none';
5
+ type DetailRowLabelWeight = 'normal' | 'medium' | 'semibold' | 'bold';
6
+ interface DetailRowProps {
7
+ label: React.ReactNode;
8
+ value: string | React.ReactNode;
9
+ /** Dotted/dashed/solid line between label and value. Defaults to 'dotted'. */
10
+ separator?: DetailRowSeparator;
11
+ labelWeight?: DetailRowLabelWeight;
12
+ /** Semantic color key or hex string for value text. Only applies when value is a string. */
13
+ valueColor?: string;
14
+ /** Node rendered left of the label (e.g. Avatar, Icon). */
15
+ leftIcon?: React.ReactNode;
16
+ /** Icon name from @expo/vector-icons rendered left of label. Takes precedence over leftIcon. */
17
+ leftIconName?: string;
18
+ /** Override left icon color. Defaults to foregroundMuted. */
19
+ leftIconColor?: string;
20
+ /** Icon name from @expo/vector-icons rendered right of value. */
21
+ rightIconName?: string;
22
+ /** Override right icon color. Defaults to foregroundMuted. */
23
+ rightIconColor?: string;
24
+ style?: ViewStyle;
25
+ labelStyle?: TextStyle;
26
+ /** Only applies when value is a string. */
27
+ valueStyle?: TextStyle;
28
+ }
29
+ declare function DetailRowBase({ label, value, separator, labelWeight, valueColor, leftIcon, leftIconName, leftIconColor, rightIconName, rightIconColor, style, labelStyle, valueStyle, }: DetailRowProps): React.JSX.Element;
30
+ declare const DetailRow: React.MemoExoticComponent<typeof DetailRowBase>;
31
+
32
+ export { DetailRow, type DetailRowLabelWeight, type DetailRowProps, type DetailRowSeparator };
@@ -0,0 +1,275 @@
1
+ 'use strict';
2
+
3
+ var React3 = require('react');
4
+ var reactNative = require('react-native');
5
+ var reactNativeSizeMatters = require('react-native-size-matters');
6
+ var AntDesign = require('@expo/vector-icons/AntDesign');
7
+ var Entypo = require('@expo/vector-icons/Entypo');
8
+ var Feather = require('@expo/vector-icons/Feather');
9
+ var FontAwesome5 = require('@expo/vector-icons/FontAwesome5');
10
+ var MaterialIcons = require('@expo/vector-icons/MaterialIcons');
11
+ var Ionicons = require('@expo/vector-icons/Ionicons');
12
+
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var React3__default = /*#__PURE__*/_interopDefault(React3);
16
+ var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
17
+ var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
18
+ var Feather__default = /*#__PURE__*/_interopDefault(Feather);
19
+ var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
20
+ var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
21
+ var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
22
+
23
+ // src/components/DetailRow/DetailRow.tsx
24
+
25
+ // src/theme/colorUtils.ts
26
+ function hexToRgb(hex) {
27
+ const clean = hex.replace("#", "");
28
+ const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
29
+ if (full.length !== 6) return null;
30
+ return {
31
+ r: parseInt(full.slice(0, 2), 16),
32
+ g: parseInt(full.slice(2, 4), 16),
33
+ b: parseInt(full.slice(4, 6), 16)
34
+ };
35
+ }
36
+ function componentToHex(c) {
37
+ return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
38
+ }
39
+ function rgbToHex(r, g, b) {
40
+ return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
41
+ }
42
+ function withAlphaOnWhite(hex, alpha) {
43
+ const rgb = hexToRgb(hex);
44
+ if (!rgb) return hex;
45
+ const r = rgb.r * alpha + 255 * (1 - alpha);
46
+ const g = rgb.g * alpha + 255 * (1 - alpha);
47
+ const b = rgb.b * alpha + 255 * (1 - alpha);
48
+ return rgbToHex(r, g, b);
49
+ }
50
+ function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
51
+ const rgb = hexToRgb(hex);
52
+ const bg = hexToRgb(bgHex);
53
+ if (!rgb || !bg) return hex;
54
+ const r = rgb.r * alpha + bg.r * (1 - alpha);
55
+ const g = rgb.g * alpha + bg.g * (1 - alpha);
56
+ const b = rgb.b * alpha + bg.b * (1 - alpha);
57
+ return rgbToHex(r, g, b);
58
+ }
59
+ function mixWithBackground(fgHex, bgHex, opacity) {
60
+ const fg = hexToRgb(fgHex);
61
+ const bg = hexToRgb(bgHex);
62
+ if (!fg || !bg) return fgHex;
63
+ const r = fg.r * opacity + bg.r * (1 - opacity);
64
+ const g = fg.g * opacity + bg.g * (1 - opacity);
65
+ const b = fg.b * opacity + bg.b * (1 - opacity);
66
+ return rgbToHex(r, g, b);
67
+ }
68
+ function lighten(hex, amount) {
69
+ return withAlphaOnWhite(hex, 1 - amount);
70
+ }
71
+ function darken(hex, amount) {
72
+ const rgb = hexToRgb(hex);
73
+ if (!rgb) return hex;
74
+ return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
75
+ }
76
+
77
+ // src/theme/colors.ts
78
+ var defaultLight = {
79
+ background: "#ffffff",
80
+ foreground: "#1a1a1a",
81
+ card: "#ffffff",
82
+ primary: "#1a1a1a",
83
+ primaryForeground: "#ffffff",
84
+ // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
85
+ accent: "#d4561d",
86
+ accentForeground: "#ffffff",
87
+ border: "#dddddd",
88
+ // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
89
+ destructive: "#c72828",
90
+ destructiveForeground: "#ffffff",
91
+ success: "#1a7a45",
92
+ successForeground: "#ffffff",
93
+ // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
94
+ warning: "#9a5200",
95
+ warningForeground: "#ffffff"
96
+ };
97
+ function deriveColors(t, scheme) {
98
+ const dark = scheme === "dark";
99
+ const bg = t.background;
100
+ const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
101
+ const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
102
+ const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
103
+ const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
104
+ const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
105
+ const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
106
+ const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
107
+ const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
108
+ const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
109
+ const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
110
+ return {
111
+ ...t,
112
+ foregroundSubtle,
113
+ foregroundMuted,
114
+ surface,
115
+ surfaceStrong,
116
+ destructiveTint,
117
+ destructiveBorder,
118
+ successTint,
119
+ successBorder,
120
+ warningTint,
121
+ warningBorder,
122
+ overlay: t.overlay ?? "rgba(0,0,0,0.45)",
123
+ accentResolved: t.accent ?? t.primary,
124
+ accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
125
+ ring: t.accent ?? t.primary,
126
+ input: t.border,
127
+ separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
128
+ };
129
+ }
130
+
131
+ // src/theme/ThemeProvider.tsx
132
+ var ThemeContext = React3.createContext({
133
+ colors: deriveColors(defaultLight, "light"),
134
+ colorScheme: "light"
135
+ });
136
+ function useTheme() {
137
+ const context = React3.useContext(ThemeContext);
138
+ if (!context) {
139
+ throw new Error("useTheme must be used within a ThemeProvider");
140
+ }
141
+ return context;
142
+ }
143
+ var isWeb = reactNative.Platform.OS === "web";
144
+ var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
145
+ var ms = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateScale;
146
+ var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalScale;
147
+ var glyphMapOf = (mod) => mod.glyphMap ?? {};
148
+ var ALL_FAMILIES = [
149
+ { name: "Ionicons", component: Ionicons__default.default, getGlyphMap: () => glyphMapOf(Ionicons__default.default) },
150
+ { name: "MaterialIcons", component: MaterialIcons__default.default, getGlyphMap: () => glyphMapOf(MaterialIcons__default.default) },
151
+ { name: "FontAwesome5", component: FontAwesome5__default.default, getGlyphMap: () => glyphMapOf(FontAwesome5__default.default) },
152
+ { name: "Entypo", component: Entypo__default.default, getGlyphMap: () => glyphMapOf(Entypo__default.default) },
153
+ { name: "AntDesign", component: AntDesign__default.default, getGlyphMap: () => glyphMapOf(AntDesign__default.default) },
154
+ { name: "Feather", component: Feather__default.default, getGlyphMap: () => glyphMapOf(Feather__default.default) }
155
+ ];
156
+ var activeFamilies = ALL_FAMILIES;
157
+ var resolvedCache = null;
158
+ function buildCache() {
159
+ const cache = /* @__PURE__ */ new Map();
160
+ for (const family of activeFamilies) {
161
+ const glyphMap = family.getGlyphMap();
162
+ for (const iconName of Object.keys(glyphMap)) {
163
+ cache.set(iconName, family);
164
+ }
165
+ }
166
+ return cache;
167
+ }
168
+ function resolveFamily(name) {
169
+ if (!resolvedCache) {
170
+ resolvedCache = buildCache();
171
+ }
172
+ return resolvedCache.get(name) ?? null;
173
+ }
174
+ function Icon({ name, size, color, family }) {
175
+ let resolved = null;
176
+ if (family) {
177
+ resolved = ALL_FAMILIES.find((f) => f.name === family) ?? null;
178
+ } else {
179
+ resolved = resolveFamily(name);
180
+ }
181
+ if (!resolved) return null;
182
+ const Component = resolved.component;
183
+ return React3__default.default.createElement(Component, { name, size, color });
184
+ }
185
+ function renderIcon(name, size, color) {
186
+ return React3__default.default.createElement(Icon, { name, size, color });
187
+ }
188
+
189
+ // src/components/DetailRow/DetailRow.tsx
190
+ var weightMap = {
191
+ normal: "Sohne-Regular",
192
+ medium: "Sohne-Medium",
193
+ semibold: "Sohne-SemiBold",
194
+ bold: "Sohne-Bold"
195
+ };
196
+ function DetailRowBase({
197
+ label,
198
+ value,
199
+ separator = "dotted",
200
+ labelWeight = "normal",
201
+ valueColor,
202
+ leftIcon,
203
+ leftIconName,
204
+ leftIconColor,
205
+ rightIconName,
206
+ rightIconColor,
207
+ style,
208
+ labelStyle,
209
+ valueStyle
210
+ }) {
211
+ const { colors } = useTheme();
212
+ const resolvedLeftIcon = leftIconName ? renderIcon(leftIconName, ms(14), leftIconColor ?? colors.foregroundMuted) : leftIcon;
213
+ const resolvedRightIcon = rightIconName ? renderIcon(rightIconName, ms(14), rightIconColor ?? colors.foregroundMuted) : null;
214
+ const separatorStyle = separator === "none" ? null : {
215
+ flex: 1,
216
+ height: 1,
217
+ borderBottomWidth: 1,
218
+ borderStyle: separator,
219
+ borderColor: "rgba(128,128,128,0.3)",
220
+ marginHorizontal: s(4)
221
+ };
222
+ return /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles.row, style] }, /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.labelSide }, resolvedLeftIcon ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.icon }, resolvedLeftIcon) : null, typeof label === "string" ? /* @__PURE__ */ React3__default.default.createElement(
223
+ reactNative.Text,
224
+ {
225
+ style: [styles.labelText, { color: colors.foregroundMuted, fontFamily: weightMap[labelWeight] }, labelStyle],
226
+ allowFontScaling: true
227
+ },
228
+ label
229
+ ) : label), separatorStyle ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: separatorStyle }) : /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.spacer }), /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.valueSide }, typeof value === "string" ? /* @__PURE__ */ React3__default.default.createElement(
230
+ reactNative.Text,
231
+ {
232
+ style: [styles.valueText, { color: valueColor ?? colors.foreground }, valueStyle],
233
+ allowFontScaling: true
234
+ },
235
+ value
236
+ ) : value, resolvedRightIcon ? /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.icon }, resolvedRightIcon) : null));
237
+ }
238
+ var DetailRow = React3__default.default.memo(DetailRowBase);
239
+ var styles = reactNative.StyleSheet.create({
240
+ row: {
241
+ flexDirection: "row",
242
+ alignItems: "center",
243
+ gap: s(4)
244
+ },
245
+ labelSide: {
246
+ flexDirection: "row",
247
+ alignItems: "center",
248
+ gap: s(4),
249
+ flexShrink: 0
250
+ },
251
+ icon: {
252
+ alignItems: "center",
253
+ justifyContent: "center"
254
+ },
255
+ spacer: {
256
+ flex: 1
257
+ },
258
+ labelText: {
259
+ fontSize: ms(13),
260
+ lineHeight: mvs(18)
261
+ },
262
+ valueSide: {
263
+ flexDirection: "row",
264
+ alignItems: "center",
265
+ gap: s(4),
266
+ flexShrink: 0
267
+ },
268
+ valueText: {
269
+ fontFamily: "Sohne-SemiBold",
270
+ fontSize: ms(13),
271
+ lineHeight: mvs(18)
272
+ }
273
+ });
274
+
275
+ exports.DetailRow = DetailRow;
@@ -0,0 +1,4 @@
1
+ export { DetailRow } from './chunk-JB67UOB5.mjs';
2
+ import './chunk-T7XZ7H7Y.mjs';
3
+ import './chunk-SOYNZDVY.mjs';
4
+ import './chunk-2CE3TQVY.mjs';
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ interface EmptyStateProps {
5
+ icon?: React.ReactNode;
6
+ /**
7
+ * Icon name from `@expo/vector-icons`. See https://icons.expo.fyi.
8
+ * Takes precedence over `icon`. Sized automatically to fit the slot (48 default, 32 compact).
9
+ */
10
+ iconName?: string;
11
+ /** Override the resolved icon color. Defaults to `mutedForeground`. */
12
+ iconColor?: string;
13
+ title: string;
14
+ description?: string;
15
+ /** Custom action node. Use `actionLabel` + `onAction` for a pre-built primary Button. */
16
+ action?: React.ReactNode;
17
+ /** Label for a convenience primary Button rendered below description. Ignored in compact size. */
18
+ actionLabel?: string;
19
+ /** Called when the convenience action Button is pressed. Required when `actionLabel` is set. */
20
+ onAction?: () => void;
21
+ /** `compact` hides description/action and uses tighter spacing and a smaller icon. */
22
+ size?: 'default' | 'compact';
23
+ style?: ViewStyle;
24
+ }
25
+ declare function EmptyState({ icon, iconName, iconColor, title, description, action, actionLabel, onAction, size, style }: EmptyStateProps): React.JSX.Element;
26
+
27
+ export { EmptyState, type EmptyStateProps };
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ interface EmptyStateProps {
5
+ icon?: React.ReactNode;
6
+ /**
7
+ * Icon name from `@expo/vector-icons`. See https://icons.expo.fyi.
8
+ * Takes precedence over `icon`. Sized automatically to fit the slot (48 default, 32 compact).
9
+ */
10
+ iconName?: string;
11
+ /** Override the resolved icon color. Defaults to `mutedForeground`. */
12
+ iconColor?: string;
13
+ title: string;
14
+ description?: string;
15
+ /** Custom action node. Use `actionLabel` + `onAction` for a pre-built primary Button. */
16
+ action?: React.ReactNode;
17
+ /** Label for a convenience primary Button rendered below description. Ignored in compact size. */
18
+ actionLabel?: string;
19
+ /** Called when the convenience action Button is pressed. Required when `actionLabel` is set. */
20
+ onAction?: () => void;
21
+ /** `compact` hides description/action and uses tighter spacing and a smaller icon. */
22
+ size?: 'default' | 'compact';
23
+ style?: ViewStyle;
24
+ }
25
+ declare function EmptyState({ icon, iconName, iconColor, title, description, action, actionLabel, onAction, size, style }: EmptyStateProps): React.JSX.Element;
26
+
27
+ export { EmptyState, type EmptyStateProps };