@retray-dev/ui-kit 6.2.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/COMPONENTS.md +997 -20
  2. package/EXAMPLES.md +250 -2
  3. package/README.md +21 -14
  4. package/dist/Accordion.d.mts +28 -0
  5. package/dist/Accordion.d.ts +28 -0
  6. package/dist/Accordion.js +392 -0
  7. package/dist/Accordion.mjs +7 -0
  8. package/dist/AlertBanner.d.mts +16 -0
  9. package/dist/AlertBanner.d.ts +16 -0
  10. package/dist/AlertBanner.js +250 -0
  11. package/dist/AlertBanner.mjs +6 -0
  12. package/dist/AppHeader.d.mts +40 -0
  13. package/dist/AppHeader.d.ts +40 -0
  14. package/dist/AppHeader.js +515 -0
  15. package/dist/AppHeader.mjs +10 -0
  16. package/dist/Avatar.d.mts +20 -0
  17. package/dist/Avatar.d.ts +20 -0
  18. package/dist/Avatar.js +244 -0
  19. package/dist/Avatar.mjs +4 -0
  20. package/dist/Badge.d.mts +26 -0
  21. package/dist/Badge.d.ts +26 -0
  22. package/dist/Badge.js +257 -0
  23. package/dist/Badge.mjs +5 -0
  24. package/dist/Button.d.mts +30 -0
  25. package/dist/Button.d.ts +30 -0
  26. package/dist/Button.js +432 -0
  27. package/dist/Button.mjs +9 -0
  28. package/dist/ButtonGroup.d.mts +26 -0
  29. package/dist/ButtonGroup.d.ts +26 -0
  30. package/dist/ButtonGroup.js +52 -0
  31. package/dist/ButtonGroup.mjs +3 -0
  32. package/dist/Card.d.mts +39 -0
  33. package/dist/Card.d.ts +39 -0
  34. package/dist/Card.js +349 -0
  35. package/dist/Card.mjs +8 -0
  36. package/dist/CategoryStrip.d.mts +26 -0
  37. package/dist/CategoryStrip.d.ts +26 -0
  38. package/dist/CategoryStrip.js +453 -0
  39. package/dist/CategoryStrip.mjs +9 -0
  40. package/dist/Checkbox.d.mts +14 -0
  41. package/dist/Checkbox.d.ts +14 -0
  42. package/dist/Checkbox.js +336 -0
  43. package/dist/Checkbox.mjs +7 -0
  44. package/dist/Chip.d.mts +31 -0
  45. package/dist/Chip.d.ts +31 -0
  46. package/dist/Chip.js +403 -0
  47. package/dist/Chip.mjs +8 -0
  48. package/dist/ConfirmDialog.d.mts +15 -0
  49. package/dist/ConfirmDialog.d.ts +15 -0
  50. package/dist/ConfirmDialog.js +560 -0
  51. package/dist/ConfirmDialog.mjs +10 -0
  52. package/dist/CurrencyDisplay.d.mts +24 -0
  53. package/dist/CurrencyDisplay.d.ts +24 -0
  54. package/dist/CurrencyDisplay.js +189 -0
  55. package/dist/CurrencyDisplay.mjs +4 -0
  56. package/dist/CurrencyInput.d.mts +26 -0
  57. package/dist/CurrencyInput.d.ts +26 -0
  58. package/dist/CurrencyInput.js +408 -0
  59. package/dist/CurrencyInput.mjs +8 -0
  60. package/dist/DetailRow.d.mts +32 -0
  61. package/dist/DetailRow.d.ts +32 -0
  62. package/dist/DetailRow.js +275 -0
  63. package/dist/DetailRow.mjs +5 -0
  64. package/dist/EmptyState.d.mts +27 -0
  65. package/dist/EmptyState.d.ts +27 -0
  66. package/dist/EmptyState.js +523 -0
  67. package/dist/EmptyState.mjs +10 -0
  68. package/dist/ErrorBoundary.d.mts +42 -0
  69. package/dist/ErrorBoundary.d.ts +42 -0
  70. package/dist/ErrorBoundary.js +351 -0
  71. package/dist/ErrorBoundary.mjs +7 -0
  72. package/dist/Form.d.mts +52 -0
  73. package/dist/Form.d.ts +52 -0
  74. package/dist/Form.js +204 -0
  75. package/dist/Form.mjs +4 -0
  76. package/dist/HolographicCard.d.mts +55 -0
  77. package/dist/HolographicCard.d.ts +55 -0
  78. package/dist/HolographicCard.js +316 -0
  79. package/dist/HolographicCard.mjs +191 -0
  80. package/dist/IconButton.d.mts +27 -0
  81. package/dist/IconButton.d.ts +27 -0
  82. package/dist/IconButton.js +400 -0
  83. package/dist/IconButton.mjs +8 -0
  84. package/dist/ImageViewer.d.mts +23 -0
  85. package/dist/ImageViewer.d.ts +23 -0
  86. package/dist/ImageViewer.js +582 -0
  87. package/dist/ImageViewer.mjs +8 -0
  88. package/dist/Input.d.mts +23 -0
  89. package/dist/Input.d.ts +23 -0
  90. package/dist/Input.js +351 -0
  91. package/dist/Input.mjs +7 -0
  92. package/dist/LabelValue.d.mts +16 -0
  93. package/dist/LabelValue.d.ts +16 -0
  94. package/dist/LabelValue.js +225 -0
  95. package/dist/LabelValue.mjs +5 -0
  96. package/dist/ListGroup.d.mts +34 -0
  97. package/dist/ListGroup.d.ts +34 -0
  98. package/dist/ListGroup.js +217 -0
  99. package/dist/ListGroup.mjs +5 -0
  100. package/dist/ListItem.d.mts +64 -0
  101. package/dist/ListItem.d.ts +64 -0
  102. package/dist/ListItem.js +444 -0
  103. package/dist/ListItem.mjs +9 -0
  104. package/dist/MediaCard.d.mts +39 -0
  105. package/dist/MediaCard.d.ts +39 -0
  106. package/dist/MediaCard.js +475 -0
  107. package/dist/MediaCard.mjs +9 -0
  108. package/dist/MenuGroup.d.mts +34 -0
  109. package/dist/MenuGroup.d.ts +34 -0
  110. package/dist/MenuGroup.js +217 -0
  111. package/dist/MenuGroup.mjs +5 -0
  112. package/dist/MenuItem.d.mts +48 -0
  113. package/dist/MenuItem.d.ts +48 -0
  114. package/dist/MenuItem.js +415 -0
  115. package/dist/MenuItem.mjs +9 -0
  116. package/dist/MonthPicker.d.mts +28 -0
  117. package/dist/MonthPicker.d.ts +28 -0
  118. package/dist/MonthPicker.js +297 -0
  119. package/dist/MonthPicker.mjs +5 -0
  120. package/dist/PagerDots.d.mts +35 -0
  121. package/dist/PagerDots.d.ts +35 -0
  122. package/dist/PagerDots.js +392 -0
  123. package/dist/PagerDots.mjs +7 -0
  124. package/dist/Pressable.d.mts +34 -0
  125. package/dist/Pressable.d.ts +34 -0
  126. package/dist/Pressable.js +143 -0
  127. package/dist/Pressable.mjs +5 -0
  128. package/dist/PricingCard.d.mts +50 -0
  129. package/dist/PricingCard.d.ts +50 -0
  130. package/dist/PricingCard.js +636 -0
  131. package/dist/PricingCard.mjs +11 -0
  132. package/dist/Progress.d.mts +14 -0
  133. package/dist/Progress.d.ts +14 -0
  134. package/dist/Progress.js +191 -0
  135. package/dist/Progress.mjs +5 -0
  136. package/dist/RadioGroup.d.mts +19 -0
  137. package/dist/RadioGroup.d.ts +19 -0
  138. package/dist/RadioGroup.js +392 -0
  139. package/dist/RadioGroup.mjs +7 -0
  140. package/dist/RetrayProvider.d.mts +2 -0
  141. package/dist/RetrayProvider.d.ts +2 -0
  142. package/dist/RetrayProvider.js +214 -0
  143. package/dist/RetrayProvider.mjs +5 -0
  144. package/dist/Select.d.mts +22 -0
  145. package/dist/Select.d.ts +22 -0
  146. package/dist/Select.js +488 -0
  147. package/dist/Select.mjs +7 -0
  148. package/dist/SelectableGrid.d.mts +44 -0
  149. package/dist/SelectableGrid.d.ts +44 -0
  150. package/dist/SelectableGrid.js +448 -0
  151. package/dist/SelectableGrid.mjs +9 -0
  152. package/dist/Separator.d.mts +10 -0
  153. package/dist/Separator.d.ts +10 -0
  154. package/dist/Separator.js +156 -0
  155. package/dist/Separator.mjs +3 -0
  156. package/dist/Sheet.d.mts +93 -0
  157. package/dist/Sheet.d.ts +93 -0
  158. package/dist/Sheet.js +450 -0
  159. package/dist/Sheet.mjs +6 -0
  160. package/dist/Skeleton.d.mts +67 -0
  161. package/dist/Skeleton.d.ts +67 -0
  162. package/dist/Skeleton.js +266 -0
  163. package/dist/Skeleton.mjs +6 -0
  164. package/dist/Slider.d.mts +20 -0
  165. package/dist/Slider.d.ts +20 -0
  166. package/dist/Slider.js +279 -0
  167. package/dist/Slider.mjs +5 -0
  168. package/dist/Spinner.d.mts +12 -0
  169. package/dist/Spinner.d.ts +12 -0
  170. package/dist/Spinner.js +193 -0
  171. package/dist/Spinner.mjs +4 -0
  172. package/dist/Switch.d.mts +13 -0
  173. package/dist/Switch.d.ts +13 -0
  174. package/dist/Switch.js +311 -0
  175. package/dist/Switch.mjs +6 -0
  176. package/dist/TabBar.d.mts +42 -0
  177. package/dist/TabBar.d.ts +42 -0
  178. package/dist/TabBar.js +361 -0
  179. package/dist/TabBar.mjs +6 -0
  180. package/dist/Tabs.d.mts +27 -0
  181. package/dist/Tabs.d.ts +27 -0
  182. package/dist/Tabs.js +419 -0
  183. package/dist/Tabs.mjs +7 -0
  184. package/dist/Text.d.mts +12 -0
  185. package/dist/Text.d.ts +12 -0
  186. package/dist/Text.js +327 -0
  187. package/dist/Text.mjs +5 -0
  188. package/dist/Textarea.d.mts +16 -0
  189. package/dist/Textarea.d.ts +16 -0
  190. package/dist/Textarea.js +333 -0
  191. package/dist/Textarea.mjs +7 -0
  192. package/dist/Toast.d.mts +47 -0
  193. package/dist/Toast.d.ts +47 -0
  194. package/dist/Toast.js +185 -0
  195. package/dist/Toast.mjs +4 -0
  196. package/dist/Toggle.d.mts +36 -0
  197. package/dist/Toggle.d.ts +36 -0
  198. package/dist/Toggle.js +412 -0
  199. package/dist/Toggle.mjs +8 -0
  200. package/dist/VirtualList.d.mts +19 -0
  201. package/dist/VirtualList.d.ts +19 -0
  202. package/dist/VirtualList.js +38 -0
  203. package/dist/VirtualList.mjs +2 -0
  204. package/dist/chunk-26BCI223.mjs +14 -0
  205. package/dist/chunk-2CE3TQVY.mjs +11 -0
  206. package/dist/chunk-2TFTAWVJ.mjs +131 -0
  207. package/dist/chunk-2UYENBLV.mjs +49 -0
  208. package/dist/chunk-3BBOZ3OQ.mjs +41 -0
  209. package/dist/chunk-3DKJ2GIC.mjs +30 -0
  210. package/dist/chunk-3U4SSNWP.mjs +120 -0
  211. package/dist/chunk-4I7D47FH.mjs +139 -0
  212. package/dist/chunk-4K625MVM.mjs +142 -0
  213. package/dist/chunk-6OAZJ577.mjs +98 -0
  214. package/dist/chunk-6Q64UFIA.mjs +71 -0
  215. package/dist/chunk-756RAKE4.mjs +145 -0
  216. package/dist/chunk-7QHVVCB3.mjs +115 -0
  217. package/dist/chunk-A3A6KNQN.mjs +245 -0
  218. package/dist/chunk-A4MDAP7G.mjs +42 -0
  219. package/dist/chunk-AJ7ZDNBT.mjs +120 -0
  220. package/dist/chunk-AV4EMIRH.mjs +94 -0
  221. package/dist/chunk-AZJF2BLK.mjs +115 -0
  222. package/dist/chunk-BNP626TY.mjs +159 -0
  223. package/dist/chunk-BRKYVJVV.mjs +60 -0
  224. package/dist/chunk-DVK4G2GT.mjs +59 -0
  225. package/dist/chunk-EH745HE5.mjs +127 -0
  226. package/dist/chunk-EJ7ZPXOH.mjs +163 -0
  227. package/dist/chunk-GD6KXMG5.mjs +106 -0
  228. package/dist/chunk-GQYFLP3D.mjs +187 -0
  229. package/dist/chunk-ID72TK46.mjs +111 -0
  230. package/dist/chunk-IRRY3CRZ.mjs +82 -0
  231. package/dist/chunk-JB67UOB5.mjs +92 -0
  232. package/dist/chunk-JMOZEC77.mjs +90 -0
  233. package/dist/chunk-JT7HKXRB.mjs +114 -0
  234. package/dist/chunk-KIHCWCWL.mjs +124 -0
  235. package/dist/chunk-LXJIIOYQ.mjs +104 -0
  236. package/dist/chunk-M6ZXVBTK.mjs +64 -0
  237. package/dist/chunk-MAC465BB.mjs +61 -0
  238. package/dist/chunk-MBMXYJJV.mjs +36 -0
  239. package/dist/chunk-MLF3EZFW.mjs +119 -0
  240. package/dist/chunk-MX6HRKMI.mjs +29 -0
  241. package/dist/chunk-NA7PARID.mjs +147 -0
  242. package/dist/chunk-NC5ZTR2Y.mjs +32 -0
  243. package/dist/chunk-O3HA6TYM.mjs +139 -0
  244. package/dist/chunk-OB4JUQ3O.mjs +51 -0
  245. package/dist/chunk-PFZTM6D5.mjs +238 -0
  246. package/dist/chunk-QKH5ZOD5.mjs +97 -0
  247. package/dist/chunk-QY3X2UYR.mjs +191 -0
  248. package/dist/chunk-SOA2Z4RB.mjs +82 -0
  249. package/dist/chunk-SOYNZDVY.mjs +151 -0
  250. package/dist/chunk-T7XZ7H7Y.mjs +57 -0
  251. package/dist/chunk-TERDKCLE.mjs +74 -0
  252. package/dist/chunk-UREA2GYY.mjs +113 -0
  253. package/dist/chunk-VGTDN7SW.mjs +164 -0
  254. package/dist/chunk-VQ57HWPL.mjs +144 -0
  255. package/dist/chunk-WBOOUHSS.mjs +62 -0
  256. package/dist/chunk-WJLKJMKR.mjs +78 -0
  257. package/dist/chunk-X4G6APW6.mjs +134 -0
  258. package/dist/chunk-Y6FXYEAI.mjs +8 -0
  259. package/dist/chunk-YFZ3ELX5.mjs +16 -0
  260. package/dist/chunk-YNROWHQJ.mjs +46 -0
  261. package/dist/chunk-Z4BVUWW6.mjs +196 -0
  262. package/dist/chunk-ZJKGQMYH.mjs +131 -0
  263. package/dist/index-wt-orHUi.d.mts +85 -0
  264. package/dist/index-wt-orHUi.d.ts +85 -0
  265. package/dist/index.d.mts +149 -920
  266. package/dist/index.d.ts +149 -920
  267. package/dist/index.js +2560 -970
  268. package/dist/index.mjs +60 -3895
  269. package/package.json +55 -16
  270. package/src/assets/fonts/Sohne-Bold.otf +0 -0
  271. package/src/assets/fonts/Sohne-BoldItalic.otf +0 -0
  272. package/src/assets/fonts/Sohne-ExtraBold.otf +0 -0
  273. package/src/assets/fonts/Sohne-ExtraBoldItalic.otf +0 -0
  274. package/src/assets/fonts/Sohne-ExtraLight.otf +0 -0
  275. package/src/assets/fonts/Sohne-ExtraLightItalic.otf +0 -0
  276. package/src/assets/fonts/Sohne-Italic.otf +0 -0
  277. package/src/assets/fonts/Sohne-Light.otf +0 -0
  278. package/src/assets/fonts/Sohne-LightItalic.otf +0 -0
  279. package/src/assets/fonts/Sohne-Medium.otf +0 -0
  280. package/src/assets/fonts/Sohne-MediumItalic.otf +0 -0
  281. package/src/assets/fonts/Sohne-Regular.otf +0 -0
  282. package/src/assets/fonts/Sohne-SemiBold.otf +0 -0
  283. package/src/assets/fonts/Sohne-SemiBoldItalic.otf +0 -0
  284. package/src/assets/fonts/SohneMono-Bold.otf +0 -0
  285. package/src/assets/fonts/SohneMono-BoldItalic.otf +0 -0
  286. package/src/assets/fonts/SohneMono-ExtraBold.otf +0 -0
  287. package/src/assets/fonts/SohneMono-ExtraBoldItalic.otf +0 -0
  288. package/src/assets/fonts/SohneMono-ExtraLight.otf +0 -0
  289. package/src/assets/fonts/SohneMono-ExtraLightItalic.otf +0 -0
  290. package/src/assets/fonts/SohneMono-Italic.otf +0 -0
  291. package/src/assets/fonts/SohneMono-Light.otf +0 -0
  292. package/src/assets/fonts/SohneMono-LightItalic.otf +0 -0
  293. package/src/assets/fonts/SohneMono-Medium.otf +0 -0
  294. package/src/assets/fonts/SohneMono-MediumItalic.otf +0 -0
  295. package/src/assets/fonts/SohneMono-Regular.otf +0 -0
  296. package/src/assets/fonts/SohneMono-SemiBold.otf +0 -0
  297. package/src/assets/fonts/SohneMono-SemiBoldItalic.otf +0 -0
  298. package/src/components/Accordion/Accordion.tsx +15 -4
  299. package/src/components/AlertBanner/AlertBanner.tsx +38 -12
  300. package/src/components/AppHeader/AppHeader.tsx +172 -0
  301. package/src/components/AppHeader/index.ts +1 -0
  302. package/src/components/Avatar/Avatar.tsx +14 -4
  303. package/src/components/Badge/Badge.tsx +12 -3
  304. package/src/components/Button/Button.tsx +30 -38
  305. package/src/components/ButtonGroup/ButtonGroup.tsx +13 -10
  306. package/src/components/Card/Card.tsx +29 -57
  307. package/src/components/CategoryStrip/CategoryStrip.tsx +41 -42
  308. package/src/components/Checkbox/Checkbox.tsx +36 -45
  309. package/src/components/Chip/Chip.tsx +41 -48
  310. package/src/components/ConfirmDialog/ConfirmDialog.tsx +2 -2
  311. package/src/components/CurrencyDisplay/CurrencyDisplay.tsx +4 -2
  312. package/src/components/CurrencyInput/CurrencyInput.tsx +12 -10
  313. package/src/components/DetailRow/DetailRow.tsx +9 -7
  314. package/src/components/EmptyState/EmptyState.tsx +4 -3
  315. package/src/components/ErrorBoundary/ErrorBoundary.tsx +153 -0
  316. package/src/components/ErrorBoundary/index.ts +1 -0
  317. package/src/components/Form/Form.tsx +149 -0
  318. package/src/components/Form/index.ts +1 -0
  319. package/src/components/HolographicCard/HolographicCard.tsx +315 -0
  320. package/src/components/HolographicCard/index.ts +1 -0
  321. package/src/components/IconButton/IconButton.tsx +23 -29
  322. package/src/components/ImageViewer/ImageViewer.tsx +290 -0
  323. package/src/components/ImageViewer/index.ts +1 -0
  324. package/src/components/Input/Input.tsx +27 -31
  325. package/src/components/LabelValue/LabelValue.tsx +6 -4
  326. package/src/components/ListGroup/ListGroup.tsx +145 -0
  327. package/src/components/ListGroup/index.ts +1 -0
  328. package/src/components/ListItem/ListItem.tsx +78 -76
  329. package/src/components/MediaCard/MediaCard.tsx +15 -7
  330. package/src/components/MenuGroup/MenuGroup.tsx +145 -0
  331. package/src/components/MenuGroup/index.ts +1 -0
  332. package/src/components/MenuItem/MenuItem.tsx +16 -33
  333. package/src/components/MonthPicker/MonthPicker.tsx +41 -15
  334. package/src/components/MonthPicker/index.ts +1 -1
  335. package/src/components/PagerDots/PagerDots.tsx +200 -0
  336. package/src/components/PagerDots/index.ts +1 -0
  337. package/src/components/Pressable/Pressable.tsx +19 -35
  338. package/src/components/PricingCard/PricingCard.tsx +220 -0
  339. package/src/components/PricingCard/index.ts +1 -0
  340. package/src/components/RadioGroup/RadioGroup.tsx +23 -39
  341. package/src/components/RetrayProvider/RetrayProvider.tsx +59 -0
  342. package/src/components/RetrayProvider/index.ts +1 -0
  343. package/src/components/Select/Select.tsx +6 -6
  344. package/src/components/SelectableGrid/SelectableGrid.tsx +205 -0
  345. package/src/components/SelectableGrid/index.ts +1 -0
  346. package/src/components/Separator/Separator.tsx +1 -3
  347. package/src/components/Sheet/Sheet.tsx +146 -18
  348. package/src/components/Skeleton/Skeleton.tsx +143 -2
  349. package/src/components/Slider/Slider.tsx +2 -2
  350. package/src/components/Spinner/Spinner.tsx +18 -3
  351. package/src/components/Switch/Switch.tsx +44 -49
  352. package/src/components/TabBar/TabBar.tsx +169 -0
  353. package/src/components/TabBar/index.ts +1 -0
  354. package/src/components/Tabs/Tabs.tsx +45 -44
  355. package/src/components/Text/Text.tsx +5 -1
  356. package/src/components/Textarea/Textarea.tsx +18 -14
  357. package/src/components/Toast/Toast.tsx +6 -6
  358. package/src/components/Toggle/Toggle.tsx +80 -72
  359. package/src/components/VirtualList/VirtualList.tsx +60 -0
  360. package/src/components/VirtualList/index.ts +1 -0
  361. package/src/fonts.ts +41 -20
  362. package/src/index.ts +28 -3
  363. package/src/theme/colors.ts +53 -39
  364. package/src/theme/types.ts +3 -0
  365. package/src/tokens.ts +49 -39
  366. package/src/utils/animations.ts +29 -1
  367. package/src/utils/fontGuard.ts +34 -0
  368. package/src/utils/haptics.ts +211 -9
  369. package/src/utils/icons.ts +47 -20
  370. package/src/utils/pressable.ts +66 -0
  371. package/src/utils/usePressScale.ts +2 -0
  372. package/src/assets/fonts/Poppins-Black.ttf +0 -0
  373. package/src/assets/fonts/Poppins-BlackItalic.ttf +0 -0
  374. package/src/assets/fonts/Poppins-Bold.ttf +0 -0
  375. package/src/assets/fonts/Poppins-BoldItalic.ttf +0 -0
  376. package/src/assets/fonts/Poppins-ExtraBold.ttf +0 -0
  377. package/src/assets/fonts/Poppins-ExtraBoldItalic.ttf +0 -0
  378. package/src/assets/fonts/Poppins-ExtraLight.ttf +0 -0
  379. package/src/assets/fonts/Poppins-ExtraLightItalic.ttf +0 -0
  380. package/src/assets/fonts/Poppins-Italic.ttf +0 -0
  381. package/src/assets/fonts/Poppins-Light.ttf +0 -0
  382. package/src/assets/fonts/Poppins-LightItalic.ttf +0 -0
  383. package/src/assets/fonts/Poppins-Medium.ttf +0 -0
  384. package/src/assets/fonts/Poppins-MediumItalic.ttf +0 -0
  385. package/src/assets/fonts/Poppins-Regular.ttf +0 -0
  386. package/src/assets/fonts/Poppins-SemiBold.ttf +0 -0
  387. package/src/assets/fonts/Poppins-SemiBoldItalic.ttf +0 -0
  388. package/src/assets/fonts/Poppins-Thin.ttf +0 -0
  389. package/src/assets/fonts/Poppins-ThinItalic.ttf +0 -0
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ type SkeletonPreset = 'base' | 'circle' | 'text';
5
+ interface SkeletonProps {
6
+ width?: number | string;
7
+ height?: number;
8
+ borderRadius?: number;
9
+ /** Preset shape. `'circle'` forces width=height square with full radius. `'text'` renders a short line. */
10
+ preset?: SkeletonPreset;
11
+ /** Only used with `preset='circle'` — overrides the diameter. Defaults to 40. */
12
+ diameter?: number;
13
+ style?: ViewStyle;
14
+ }
15
+ declare function Skeleton({ width, height, borderRadius, preset, diameter, style, }: SkeletonProps): React.JSX.Element;
16
+ declare namespace Skeleton {
17
+ var MediaCard: typeof MediaCardSkeleton;
18
+ var ListItem: typeof ListItemSkeleton;
19
+ var List: typeof ListSkeleton;
20
+ }
21
+ declare const aspectRatioMap: {
22
+ readonly '1:1': 1;
23
+ readonly '4:3': number;
24
+ readonly '16:9': number;
25
+ readonly '4:5': number;
26
+ readonly '3:2': number;
27
+ };
28
+ type MediaCardSkeletonAspectRatio = keyof typeof aspectRatioMap;
29
+ interface MediaCardSkeletonProps {
30
+ /** Image aspect ratio — match your `MediaCard`. Defaults to `'4:3'`. */
31
+ aspectRatio?: MediaCardSkeletonAspectRatio;
32
+ /** Show the subtitle/caption line below the title. Defaults to true. */
33
+ showSubtitle?: boolean;
34
+ style?: ViewStyle;
35
+ }
36
+ /** Loading placeholder matching `<MediaCard>` — image block + title/subtitle lines. */
37
+ declare function MediaCardSkeleton({ aspectRatio, showSubtitle, style }: MediaCardSkeletonProps): React.JSX.Element;
38
+ interface ListItemSkeletonProps {
39
+ /** Render a circular leading avatar placeholder. Defaults to true. */
40
+ showAvatar?: boolean;
41
+ /** Render a secondary subtitle line. Defaults to true. */
42
+ showSubtitle?: boolean;
43
+ style?: ViewStyle;
44
+ }
45
+ /** Loading placeholder matching `<ListItem>` — leading circle + title/subtitle lines. */
46
+ declare function ListItemSkeleton({ showAvatar, showSubtitle, style }: ListItemSkeletonProps): React.JSX.Element;
47
+ interface ListSkeletonProps {
48
+ /** Number of placeholder rows/cells. Defaults to 6. */
49
+ count?: number;
50
+ /** 1 = stacked list of `ListItemSkeleton`; >1 = grid of `MediaCardSkeleton`. Defaults to 1. */
51
+ columns?: number;
52
+ /** Gap between items (dp). Defaults to 12. */
53
+ gap?: number;
54
+ /** Grid only — aspect ratio of each `MediaCardSkeleton`. Defaults to `'4:3'`. */
55
+ aspectRatio?: MediaCardSkeletonAspectRatio;
56
+ /** List only — show the leading avatar circle. Defaults to true. */
57
+ showAvatar?: boolean;
58
+ style?: ViewStyle;
59
+ }
60
+ /**
61
+ * Repeated loading placeholder for a `VirtualList` / list / grid. `columns={1}`
62
+ * renders stacked `ListItemSkeleton`s; `columns>1` renders a wrapping grid of
63
+ * `MediaCardSkeleton`s. Render this as the list's content while `data` is empty.
64
+ */
65
+ declare function ListSkeleton({ count, columns, gap, aspectRatio, showAvatar, style, }: ListSkeletonProps): React.JSX.Element;
66
+
67
+ export { Skeleton, type SkeletonProps };
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ type SkeletonPreset = 'base' | 'circle' | 'text';
5
+ interface SkeletonProps {
6
+ width?: number | string;
7
+ height?: number;
8
+ borderRadius?: number;
9
+ /** Preset shape. `'circle'` forces width=height square with full radius. `'text'` renders a short line. */
10
+ preset?: SkeletonPreset;
11
+ /** Only used with `preset='circle'` — overrides the diameter. Defaults to 40. */
12
+ diameter?: number;
13
+ style?: ViewStyle;
14
+ }
15
+ declare function Skeleton({ width, height, borderRadius, preset, diameter, style, }: SkeletonProps): React.JSX.Element;
16
+ declare namespace Skeleton {
17
+ var MediaCard: typeof MediaCardSkeleton;
18
+ var ListItem: typeof ListItemSkeleton;
19
+ var List: typeof ListSkeleton;
20
+ }
21
+ declare const aspectRatioMap: {
22
+ readonly '1:1': 1;
23
+ readonly '4:3': number;
24
+ readonly '16:9': number;
25
+ readonly '4:5': number;
26
+ readonly '3:2': number;
27
+ };
28
+ type MediaCardSkeletonAspectRatio = keyof typeof aspectRatioMap;
29
+ interface MediaCardSkeletonProps {
30
+ /** Image aspect ratio — match your `MediaCard`. Defaults to `'4:3'`. */
31
+ aspectRatio?: MediaCardSkeletonAspectRatio;
32
+ /** Show the subtitle/caption line below the title. Defaults to true. */
33
+ showSubtitle?: boolean;
34
+ style?: ViewStyle;
35
+ }
36
+ /** Loading placeholder matching `<MediaCard>` — image block + title/subtitle lines. */
37
+ declare function MediaCardSkeleton({ aspectRatio, showSubtitle, style }: MediaCardSkeletonProps): React.JSX.Element;
38
+ interface ListItemSkeletonProps {
39
+ /** Render a circular leading avatar placeholder. Defaults to true. */
40
+ showAvatar?: boolean;
41
+ /** Render a secondary subtitle line. Defaults to true. */
42
+ showSubtitle?: boolean;
43
+ style?: ViewStyle;
44
+ }
45
+ /** Loading placeholder matching `<ListItem>` — leading circle + title/subtitle lines. */
46
+ declare function ListItemSkeleton({ showAvatar, showSubtitle, style }: ListItemSkeletonProps): React.JSX.Element;
47
+ interface ListSkeletonProps {
48
+ /** Number of placeholder rows/cells. Defaults to 6. */
49
+ count?: number;
50
+ /** 1 = stacked list of `ListItemSkeleton`; >1 = grid of `MediaCardSkeleton`. Defaults to 1. */
51
+ columns?: number;
52
+ /** Gap between items (dp). Defaults to 12. */
53
+ gap?: number;
54
+ /** Grid only — aspect ratio of each `MediaCardSkeleton`. Defaults to `'4:3'`. */
55
+ aspectRatio?: MediaCardSkeletonAspectRatio;
56
+ /** List only — show the leading avatar circle. Defaults to true. */
57
+ showAvatar?: boolean;
58
+ style?: ViewStyle;
59
+ }
60
+ /**
61
+ * Repeated loading placeholder for a `VirtualList` / list / grid. `columns={1}`
62
+ * renders stacked `ListItemSkeleton`s; `columns>1` renders a wrapping grid of
63
+ * `MediaCardSkeleton`s. Render this as the list's content while `data` is empty.
64
+ */
65
+ declare function ListSkeleton({ count, columns, gap, aspectRatio, showAvatar, style, }: ListSkeletonProps): React.JSX.Element;
66
+
67
+ export { Skeleton, type SkeletonProps };
@@ -0,0 +1,266 @@
1
+ 'use strict';
2
+
3
+ var React2 = require('react');
4
+ var reactNative = require('react-native');
5
+ var Animated = require('react-native-reanimated');
6
+ var expoLinearGradient = require('expo-linear-gradient');
7
+ var reactNativeSizeMatters = require('react-native-size-matters');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var React2__default = /*#__PURE__*/_interopDefault(React2);
12
+ var Animated__default = /*#__PURE__*/_interopDefault(Animated);
13
+
14
+ // src/components/Skeleton/Skeleton.tsx
15
+
16
+ // src/theme/colorUtils.ts
17
+ function hexToRgb(hex) {
18
+ const clean = hex.replace("#", "");
19
+ const full = clean.length === 3 ? clean.split("").map((c) => c + c).join("") : clean;
20
+ if (full.length !== 6) return null;
21
+ return {
22
+ r: parseInt(full.slice(0, 2), 16),
23
+ g: parseInt(full.slice(2, 4), 16),
24
+ b: parseInt(full.slice(4, 6), 16)
25
+ };
26
+ }
27
+ function componentToHex(c) {
28
+ return Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, "0");
29
+ }
30
+ function rgbToHex(r, g, b) {
31
+ return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;
32
+ }
33
+ function withAlphaOnWhite(hex, alpha) {
34
+ const rgb = hexToRgb(hex);
35
+ if (!rgb) return hex;
36
+ const r = rgb.r * alpha + 255 * (1 - alpha);
37
+ const g = rgb.g * alpha + 255 * (1 - alpha);
38
+ const b = rgb.b * alpha + 255 * (1 - alpha);
39
+ return rgbToHex(r, g, b);
40
+ }
41
+ function withAlphaOnDark(hex, alpha, bgHex = "#0f0f0f") {
42
+ const rgb = hexToRgb(hex);
43
+ const bg = hexToRgb(bgHex);
44
+ if (!rgb || !bg) return hex;
45
+ const r = rgb.r * alpha + bg.r * (1 - alpha);
46
+ const g = rgb.g * alpha + bg.g * (1 - alpha);
47
+ const b = rgb.b * alpha + bg.b * (1 - alpha);
48
+ return rgbToHex(r, g, b);
49
+ }
50
+ function mixWithBackground(fgHex, bgHex, opacity) {
51
+ const fg = hexToRgb(fgHex);
52
+ const bg = hexToRgb(bgHex);
53
+ if (!fg || !bg) return fgHex;
54
+ const r = fg.r * opacity + bg.r * (1 - opacity);
55
+ const g = fg.g * opacity + bg.g * (1 - opacity);
56
+ const b = fg.b * opacity + bg.b * (1 - opacity);
57
+ return rgbToHex(r, g, b);
58
+ }
59
+ function lighten(hex, amount) {
60
+ return withAlphaOnWhite(hex, 1 - amount);
61
+ }
62
+ function darken(hex, amount) {
63
+ const rgb = hexToRgb(hex);
64
+ if (!rgb) return hex;
65
+ return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
66
+ }
67
+
68
+ // src/theme/colors.ts
69
+ var defaultLight = {
70
+ background: "#ffffff",
71
+ foreground: "#1a1a1a",
72
+ card: "#ffffff",
73
+ primary: "#1a1a1a",
74
+ primaryForeground: "#ffffff",
75
+ // AUDIT FIX: brand accent — was undefined; falls back to primary when omitted
76
+ accent: "#d4561d",
77
+ accentForeground: "#ffffff",
78
+ border: "#dddddd",
79
+ // AUDIT FIX: was #e53935 (4.22:1 on white — fails AA); #c72828 = 5.59:1 ✓
80
+ destructive: "#c72828",
81
+ destructiveForeground: "#ffffff",
82
+ success: "#1a7a45",
83
+ successForeground: "#ffffff",
84
+ // AUDIT FIX: was #e67e00 (2.86:1 — severe fail); #9a5200 = 5.86:1 ✓ AAA-near
85
+ warning: "#9a5200",
86
+ warningForeground: "#ffffff"
87
+ };
88
+ function deriveColors(t, scheme) {
89
+ const dark = scheme === "dark";
90
+ const bg = t.background;
91
+ const foregroundSubtle = mixWithBackground(t.foreground, bg, 0.7);
92
+ const foregroundMuted = mixWithBackground(t.foreground, bg, 0.62);
93
+ const surface = dark ? lighten(bg, -0.06) : darken(bg, 0.04);
94
+ const surfaceStrong = dark ? lighten(bg, -0.12) : darken(bg, 0.08);
95
+ const destructiveTint = dark ? withAlphaOnDark(t.destructive, 0.15, bg) : withAlphaOnWhite(t.destructive, 0.08);
96
+ const destructiveBorder = dark ? withAlphaOnDark(t.destructive, 0.45, bg) : withAlphaOnWhite(t.destructive, 0.3);
97
+ const successTint = dark ? withAlphaOnDark(t.success, 0.15, bg) : withAlphaOnWhite(t.success, 0.08);
98
+ const successBorder = dark ? withAlphaOnDark(t.success, 0.45, bg) : withAlphaOnWhite(t.success, 0.3);
99
+ const warningTint = dark ? withAlphaOnDark(t.warning, 0.15, bg) : withAlphaOnWhite(t.warning, 0.08);
100
+ const warningBorder = dark ? withAlphaOnDark(t.warning, 0.45, bg) : withAlphaOnWhite(t.warning, 0.3);
101
+ return {
102
+ ...t,
103
+ foregroundSubtle,
104
+ foregroundMuted,
105
+ surface,
106
+ surfaceStrong,
107
+ destructiveTint,
108
+ destructiveBorder,
109
+ successTint,
110
+ successBorder,
111
+ warningTint,
112
+ warningBorder,
113
+ overlay: t.overlay ?? "rgba(0,0,0,0.45)",
114
+ accentResolved: t.accent ?? t.primary,
115
+ accentForegroundResolved: t.accentForeground ?? t.primaryForeground,
116
+ ring: t.accent ?? t.primary,
117
+ input: t.border,
118
+ separator: dark ? lighten(t.border, 0.22) : darken(t.border, 0.16)
119
+ };
120
+ }
121
+
122
+ // src/theme/ThemeProvider.tsx
123
+ var ThemeContext = React2.createContext({
124
+ colors: deriveColors(defaultLight, "light"),
125
+ colorScheme: "light"
126
+ });
127
+ function useTheme() {
128
+ const context = React2.useContext(ThemeContext);
129
+ if (!context) {
130
+ throw new Error("useTheme must be used within a ThemeProvider");
131
+ }
132
+ return context;
133
+ }
134
+ var isWeb = reactNative.Platform.OS === "web";
135
+ var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
136
+ var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
137
+ var TIMINGS = {
138
+ /** Skeleton shimmer cycle (full pass). */
139
+ shimmer: { duration: 1400 }
140
+ };
141
+ ({
142
+ /** Material-style ease-out — natural deceleration for state changes. */
143
+ standard: Animated.Easing.bezier(0.2, 0, 0, 1),
144
+ /** Strong ease-out for expanding surfaces (Accordion open). */
145
+ expand: Animated.Easing.bezier(0.23, 1, 0.32, 1),
146
+ /** Quick ease-in for collapsing. */
147
+ collapse: Animated.Easing.in(Animated.Easing.ease)
148
+ });
149
+
150
+ // src/tokens.ts
151
+ var RADIUS = {
152
+ xs: 4,
153
+ md: 14};
154
+
155
+ // src/components/Skeleton/Skeleton.tsx
156
+ function Skeleton({
157
+ width = "100%",
158
+ height = 16,
159
+ borderRadius = 6,
160
+ preset = "base",
161
+ diameter = 40,
162
+ style
163
+ }) {
164
+ const { colors, colorScheme } = useTheme();
165
+ const shimmer = Animated.useSharedValue(0);
166
+ const [containerWidth, setContainerWidth] = React2.useState(300);
167
+ const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
168
+ React2.useEffect(() => {
169
+ shimmer.value = Animated.withRepeat(
170
+ Animated.withTiming(1, { duration: TIMINGS.shimmer.duration, easing: Animated.Easing.linear }),
171
+ -1,
172
+ false
173
+ );
174
+ }, [shimmer]);
175
+ const shimmerStyle = Animated.useAnimatedStyle(() => ({
176
+ transform: [{ translateX: -containerWidth + shimmer.value * (containerWidth * 2) }]
177
+ }));
178
+ const resolvedWidth = preset === "circle" ? s(diameter) : preset === "text" ? "60%" : width;
179
+ const resolvedHeight = preset === "circle" ? s(diameter) : preset === "text" ? 14 : height;
180
+ const resolvedRadius = preset === "circle" ? 9999 : preset === "text" ? 4 : borderRadius;
181
+ return /* @__PURE__ */ React2__default.default.createElement(
182
+ reactNative.View,
183
+ {
184
+ style: [
185
+ styles.base,
186
+ { width: resolvedWidth, height: resolvedHeight, borderRadius: resolvedRadius, backgroundColor: colors.surface },
187
+ style
188
+ ],
189
+ onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width),
190
+ accessibilityRole: "progressbar",
191
+ accessibilityLabel: "Loading",
192
+ accessibilityState: { busy: true }
193
+ },
194
+ /* @__PURE__ */ React2__default.default.createElement(Animated__default.default.View, { style: [reactNative.StyleSheet.absoluteFill, shimmerStyle] }, /* @__PURE__ */ React2__default.default.createElement(
195
+ expoLinearGradient.LinearGradient,
196
+ {
197
+ colors: ["transparent", shimmerHighlight, "transparent"],
198
+ start: { x: 0, y: 0 },
199
+ end: { x: 1, y: 0 },
200
+ style: reactNative.StyleSheet.absoluteFill
201
+ }
202
+ ))
203
+ );
204
+ }
205
+ var aspectRatioMap = {
206
+ "1:1": 1,
207
+ "4:3": 3 / 4,
208
+ "16:9": 9 / 16,
209
+ "4:5": 5 / 4,
210
+ "3:2": 2 / 3
211
+ };
212
+ function MediaCardSkeleton({ aspectRatio = "4:3", showSubtitle = true, style }) {
213
+ const ratio = aspectRatioMap[aspectRatio];
214
+ return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: { paddingTop: `${ratio * 100}%` } }, /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: reactNative.StyleSheet.absoluteFill }, /* @__PURE__ */ React2__default.default.createElement(Skeleton, { width: "100%", height: void 0, style: skeletonStyles.fill, borderRadius: RADIUS.md }))), /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: skeletonStyles.meta }, /* @__PURE__ */ React2__default.default.createElement(Skeleton, { width: "70%", height: vs(14), borderRadius: RADIUS.xs }), showSubtitle ? /* @__PURE__ */ React2__default.default.createElement(Skeleton, { width: "45%", height: vs(12), borderRadius: RADIUS.xs }) : null));
215
+ }
216
+ function ListItemSkeleton({ showAvatar = true, showSubtitle = true, style }) {
217
+ return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [skeletonStyles.row, style] }, showAvatar ? /* @__PURE__ */ React2__default.default.createElement(Skeleton, { preset: "circle", diameter: 40 }) : null, /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: skeletonStyles.rowText }, /* @__PURE__ */ React2__default.default.createElement(Skeleton, { width: "60%", height: vs(14), borderRadius: RADIUS.xs }), showSubtitle ? /* @__PURE__ */ React2__default.default.createElement(Skeleton, { width: "40%", height: vs(12), borderRadius: RADIUS.xs }) : null));
218
+ }
219
+ function ListSkeleton({
220
+ count = 6,
221
+ columns = 1,
222
+ gap = 12,
223
+ aspectRatio = "4:3",
224
+ showAvatar = true,
225
+ style
226
+ }) {
227
+ if (columns <= 1) {
228
+ return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [{ gap: vs(gap) }, style] }, Array.from({ length: count }).map((_, i) => /* @__PURE__ */ React2__default.default.createElement(ListItemSkeleton, { key: i, showAvatar })));
229
+ }
230
+ const widthPct = `${100 / columns}%`;
231
+ return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [skeletonStyles.grid, { marginHorizontal: -s(gap) / 2 }, style] }, Array.from({ length: count }).map((_, i) => /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { key: i, style: { width: widthPct, paddingHorizontal: s(gap) / 2, marginBottom: vs(gap) } }, /* @__PURE__ */ React2__default.default.createElement(MediaCardSkeleton, { aspectRatio }))));
232
+ }
233
+ Skeleton.MediaCard = MediaCardSkeleton;
234
+ Skeleton.ListItem = ListItemSkeleton;
235
+ Skeleton.List = ListSkeleton;
236
+ var styles = reactNative.StyleSheet.create({
237
+ base: {
238
+ overflow: "hidden"
239
+ }
240
+ });
241
+ var skeletonStyles = reactNative.StyleSheet.create({
242
+ grid: {
243
+ flexDirection: "row",
244
+ flexWrap: "wrap"
245
+ },
246
+ fill: {
247
+ width: "100%",
248
+ height: "100%"
249
+ },
250
+ meta: {
251
+ paddingTop: vs(8),
252
+ gap: vs(6)
253
+ },
254
+ row: {
255
+ flexDirection: "row",
256
+ alignItems: "center",
257
+ gap: s(12),
258
+ paddingVertical: vs(8)
259
+ },
260
+ rowText: {
261
+ flex: 1,
262
+ gap: vs(6)
263
+ }
264
+ });
265
+
266
+ exports.Skeleton = Skeleton;
@@ -0,0 +1,6 @@
1
+ export { Skeleton } from './chunk-AJ7ZDNBT.mjs';
2
+ import './chunk-DVK4G2GT.mjs';
3
+ import './chunk-QY3X2UYR.mjs';
4
+ import './chunk-SOYNZDVY.mjs';
5
+ import './chunk-2CE3TQVY.mjs';
6
+ import './chunk-Y6FXYEAI.mjs';
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ interface SliderProps {
5
+ value?: number;
6
+ minimumValue?: number;
7
+ maximumValue?: number;
8
+ step?: number;
9
+ onValueChange?: (value: number) => void;
10
+ onSlidingComplete?: (value: number) => void;
11
+ label?: string;
12
+ showValue?: boolean;
13
+ formatValue?: (value: number) => string;
14
+ accessibilityLabel?: string;
15
+ disabled?: boolean;
16
+ style?: ViewStyle;
17
+ }
18
+ declare function Slider({ value, minimumValue, maximumValue, step, onValueChange, onSlidingComplete, label, showValue, formatValue, accessibilityLabel, disabled, style, }: SliderProps): React.JSX.Element;
19
+
20
+ export { Slider, type SliderProps };
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ interface SliderProps {
5
+ value?: number;
6
+ minimumValue?: number;
7
+ maximumValue?: number;
8
+ step?: number;
9
+ onValueChange?: (value: number) => void;
10
+ onSlidingComplete?: (value: number) => void;
11
+ label?: string;
12
+ showValue?: boolean;
13
+ formatValue?: (value: number) => string;
14
+ accessibilityLabel?: string;
15
+ disabled?: boolean;
16
+ style?: ViewStyle;
17
+ }
18
+ declare function Slider({ value, minimumValue, maximumValue, step, onValueChange, onSlidingComplete, label, showValue, formatValue, accessibilityLabel, disabled, style, }: SliderProps): React.JSX.Element;
19
+
20
+ export { Slider, type SliderProps };