@retray-dev/ui-kit 13.0.0 → 13.4.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 (344) hide show
  1. package/CHANGELOG.md +680 -0
  2. package/CONSUMER.md +26 -9
  3. package/README.md +11 -12
  4. package/{COMPONENTS.md → SKILL.md} +515 -815
  5. package/dist/Accordion.d.mts +8 -6
  6. package/dist/Accordion.d.ts +8 -6
  7. package/dist/Accordion.js +40 -40
  8. package/dist/Accordion.mjs +4 -5
  9. package/dist/AlertBanner.d.mts +3 -3
  10. package/dist/AlertBanner.d.ts +3 -3
  11. package/dist/AlertBanner.js +7 -13
  12. package/dist/AlertBanner.mjs +4 -5
  13. package/dist/AppHeader.d.mts +8 -5
  14. package/dist/AppHeader.d.ts +8 -5
  15. package/dist/AppHeader.js +44 -31
  16. package/dist/AppHeader.mjs +6 -7
  17. package/dist/Avatar.d.mts +4 -4
  18. package/dist/Avatar.d.ts +4 -4
  19. package/dist/Avatar.mjs +2 -3
  20. package/dist/Badge.d.mts +5 -5
  21. package/dist/Badge.d.ts +5 -5
  22. package/dist/Badge.js +7 -13
  23. package/dist/Badge.mjs +3 -4
  24. package/dist/Button.d.mts +5 -5
  25. package/dist/Button.d.ts +5 -5
  26. package/dist/Button.js +31 -29
  27. package/dist/Button.mjs +5 -6
  28. package/dist/ButtonGroup.d.mts +3 -3
  29. package/dist/ButtonGroup.d.ts +3 -3
  30. package/dist/ButtonGroup.mjs +0 -1
  31. package/dist/Card.d.mts +13 -13
  32. package/dist/Card.d.ts +13 -13
  33. package/dist/Card.js +23 -14
  34. package/dist/Card.mjs +4 -5
  35. package/dist/CategoryStrip.d.mts +3 -3
  36. package/dist/CategoryStrip.d.ts +3 -3
  37. package/dist/CategoryStrip.js +30 -27
  38. package/dist/CategoryStrip.mjs +5 -6
  39. package/dist/Checkbox.d.mts +3 -2
  40. package/dist/Checkbox.d.ts +3 -2
  41. package/dist/Checkbox.js +26 -15
  42. package/dist/Checkbox.mjs +3 -4
  43. package/dist/Chip.d.mts +5 -5
  44. package/dist/Chip.d.ts +5 -5
  45. package/dist/Chip.js +30 -27
  46. package/dist/Chip.mjs +5 -6
  47. package/dist/ConfirmDialog.d.mts +3 -2
  48. package/dist/ConfirmDialog.d.ts +3 -2
  49. package/dist/ConfirmDialog.js +67 -49
  50. package/dist/ConfirmDialog.mjs +7 -7
  51. package/dist/CurrencyDisplay.d.mts +3 -3
  52. package/dist/CurrencyDisplay.d.ts +3 -3
  53. package/dist/CurrencyDisplay.mjs +2 -3
  54. package/dist/CurrencyInput.d.mts +2 -2
  55. package/dist/CurrencyInput.d.ts +2 -2
  56. package/dist/CurrencyInput.js +7 -13
  57. package/dist/CurrencyInput.mjs +4 -5
  58. package/dist/DetailRow.d.mts +6 -6
  59. package/dist/DetailRow.d.ts +6 -6
  60. package/dist/DetailRow.js +7 -13
  61. package/dist/DetailRow.mjs +3 -4
  62. package/dist/EmptyState.d.mts +4 -4
  63. package/dist/EmptyState.d.ts +4 -4
  64. package/dist/EmptyState.js +31 -29
  65. package/dist/EmptyState.mjs +6 -7
  66. package/dist/ErrorBoundary.d.mts +9 -7
  67. package/dist/ErrorBoundary.d.ts +9 -7
  68. package/dist/ErrorBoundary.js +33 -29
  69. package/dist/ErrorBoundary.mjs +5 -6
  70. package/dist/Form.d.mts +9 -9
  71. package/dist/Form.d.ts +9 -9
  72. package/dist/Form.mjs +2 -3
  73. package/dist/HolographicCard.d.mts +2 -2
  74. package/dist/HolographicCard.d.ts +2 -2
  75. package/dist/HolographicCard.js +23 -14
  76. package/dist/HolographicCard.mjs +2 -3
  77. package/dist/IconButton.d.mts +4 -4
  78. package/dist/IconButton.d.ts +4 -4
  79. package/dist/IconButton.js +30 -27
  80. package/dist/IconButton.mjs +4 -5
  81. package/dist/IconPicker.d.mts +2 -2
  82. package/dist/IconPicker.d.ts +2 -2
  83. package/dist/IconPicker.js +40 -45
  84. package/dist/IconPicker.mjs +6 -7
  85. package/dist/Image.d.mts +18 -0
  86. package/dist/Image.d.ts +18 -0
  87. package/dist/Image.js +53 -0
  88. package/dist/Image.mjs +2 -0
  89. package/dist/ImageUpload.d.mts +2 -4
  90. package/dist/ImageUpload.d.ts +2 -4
  91. package/dist/ImageUpload.js +50 -40
  92. package/dist/ImageUpload.mjs +5 -6
  93. package/dist/ImageViewer.d.mts +2 -2
  94. package/dist/ImageViewer.d.ts +2 -2
  95. package/dist/ImageViewer.js +31 -28
  96. package/dist/ImageViewer.mjs +6 -7
  97. package/dist/Input.d.mts +4 -4
  98. package/dist/Input.d.ts +4 -4
  99. package/dist/Input.js +7 -13
  100. package/dist/Input.mjs +3 -4
  101. package/dist/ItemGroup.d.mts +23 -0
  102. package/dist/ItemGroup.d.ts +23 -0
  103. package/dist/{ListGroup.js → ItemGroup.js} +11 -13
  104. package/dist/ItemGroup.mjs +4 -0
  105. package/dist/LabelValue.d.mts +4 -4
  106. package/dist/LabelValue.d.ts +4 -4
  107. package/dist/LabelValue.js +7 -13
  108. package/dist/LabelValue.mjs +3 -4
  109. package/dist/ListItem.d.mts +7 -6
  110. package/dist/ListItem.d.ts +7 -6
  111. package/dist/ListItem.js +33 -28
  112. package/dist/ListItem.mjs +5 -6
  113. package/dist/MediaCard.d.mts +6 -6
  114. package/dist/MediaCard.d.ts +6 -6
  115. package/dist/MediaCard.js +30 -27
  116. package/dist/MediaCard.mjs +5 -6
  117. package/dist/MenuItem.d.mts +6 -5
  118. package/dist/MenuItem.d.ts +6 -5
  119. package/dist/MenuItem.js +33 -28
  120. package/dist/MenuItem.mjs +5 -6
  121. package/dist/MonthPicker.d.mts +2 -2
  122. package/dist/MonthPicker.d.ts +2 -2
  123. package/dist/MonthPicker.js +23 -14
  124. package/dist/MonthPicker.mjs +3 -4
  125. package/dist/NumberStepper.d.mts +4 -3
  126. package/dist/NumberStepper.d.ts +4 -3
  127. package/dist/NumberStepper.js +34 -28
  128. package/dist/NumberStepper.mjs +5 -6
  129. package/dist/PagerDots.d.mts +2 -2
  130. package/dist/PagerDots.d.ts +2 -2
  131. package/dist/PagerDots.js +30 -27
  132. package/dist/PagerDots.mjs +4 -5
  133. package/dist/Pressable.d.mts +3 -27
  134. package/dist/Pressable.d.ts +3 -27
  135. package/dist/Pressable.js +23 -14
  136. package/dist/Pressable.mjs +2 -3
  137. package/dist/PricingCard.d.mts +2 -2
  138. package/dist/PricingCard.d.ts +2 -2
  139. package/dist/PricingCard.js +31 -29
  140. package/dist/PricingCard.mjs +7 -8
  141. package/dist/Progress.d.mts +2 -2
  142. package/dist/Progress.d.ts +2 -2
  143. package/dist/Progress.mjs +2 -3
  144. package/dist/RadioGroup.d.mts +2 -2
  145. package/dist/RadioGroup.d.ts +2 -2
  146. package/dist/RadioGroup.js +23 -14
  147. package/dist/RadioGroup.mjs +3 -4
  148. package/dist/RetrayProvider.d.mts +1 -1
  149. package/dist/RetrayProvider.d.ts +1 -1
  150. package/dist/RetrayProvider.js +14 -34
  151. package/dist/RetrayProvider.mjs +3 -4
  152. package/dist/ScreenContainer.d.mts +24 -0
  153. package/dist/ScreenContainer.d.ts +24 -0
  154. package/dist/ScreenContainer.js +85 -0
  155. package/dist/ScreenContainer.mjs +3 -0
  156. package/dist/Select.d.mts +3 -2
  157. package/dist/Select.d.ts +3 -2
  158. package/dist/Select.js +41 -46
  159. package/dist/Select.mjs +3 -4
  160. package/dist/SelectableCard.d.mts +5 -5
  161. package/dist/SelectableCard.d.ts +5 -5
  162. package/dist/SelectableCard.js +30 -27
  163. package/dist/SelectableCard.mjs +5 -6
  164. package/dist/SelectableGrid.d.mts +5 -4
  165. package/dist/SelectableGrid.d.ts +5 -4
  166. package/dist/SelectableGrid.js +80 -45
  167. package/dist/SelectableGrid.mjs +5 -6
  168. package/dist/Separator.d.mts +4 -2
  169. package/dist/Separator.d.ts +4 -2
  170. package/dist/Separator.js +29 -1
  171. package/dist/Separator.mjs +3 -3
  172. package/dist/Sheet.d.mts +11 -11
  173. package/dist/Sheet.d.ts +11 -11
  174. package/dist/Sheet.js +62 -34
  175. package/dist/Sheet.mjs +4 -4
  176. package/dist/SheetSelect.d.mts +2 -2
  177. package/dist/SheetSelect.d.ts +2 -2
  178. package/dist/SheetSelect.js +30 -27
  179. package/dist/SheetSelect.mjs +5 -6
  180. package/dist/Skeleton.d.mts +5 -5
  181. package/dist/Skeleton.d.ts +5 -5
  182. package/dist/Skeleton.mjs +3 -4
  183. package/dist/Slider.d.mts +3 -2
  184. package/dist/Slider.d.ts +3 -2
  185. package/dist/Slider.js +25 -14
  186. package/dist/Slider.mjs +3 -4
  187. package/dist/Spinner.d.mts +2 -2
  188. package/dist/Spinner.d.ts +2 -2
  189. package/dist/Spinner.mjs +2 -3
  190. package/dist/Stats.d.mts +6 -6
  191. package/dist/Stats.d.ts +6 -6
  192. package/dist/Stats.js +30 -27
  193. package/dist/Stats.mjs +5 -6
  194. package/dist/Switch.d.mts +3 -2
  195. package/dist/Switch.d.ts +3 -2
  196. package/dist/Switch.js +25 -15
  197. package/dist/Switch.mjs +3 -4
  198. package/dist/TabBar.d.mts +3 -3
  199. package/dist/TabBar.d.ts +3 -3
  200. package/dist/TabBar.js +30 -27
  201. package/dist/TabBar.mjs +4 -5
  202. package/dist/Tabs.d.mts +13 -13
  203. package/dist/Tabs.d.ts +13 -13
  204. package/dist/Tabs.js +23 -14
  205. package/dist/Tabs.mjs +3 -4
  206. package/dist/Text.d.mts +4 -4
  207. package/dist/Text.d.ts +4 -4
  208. package/dist/Text.js +20 -2
  209. package/dist/Text.mjs +3 -4
  210. package/dist/Textarea.d.mts +3 -3
  211. package/dist/Textarea.d.ts +3 -3
  212. package/dist/Textarea.js +7 -13
  213. package/dist/Textarea.mjs +3 -4
  214. package/dist/Toast.d.mts +15 -13
  215. package/dist/Toast.d.ts +15 -13
  216. package/dist/Toast.mjs +2 -3
  217. package/dist/Toggle.d.mts +4 -4
  218. package/dist/Toggle.d.ts +4 -4
  219. package/dist/Toggle.js +30 -27
  220. package/dist/Toggle.mjs +4 -5
  221. package/dist/VirtualizedList.d.mts +28 -0
  222. package/dist/VirtualizedList.d.ts +28 -0
  223. package/dist/VirtualizedList.js +130 -0
  224. package/dist/VirtualizedList.mjs +3 -0
  225. package/dist/{chunk-MZ6WRTD2.mjs → chunk-24JTXQ2M.mjs} +7 -13
  226. package/dist/{chunk-OBV72JD4.mjs → chunk-2DDJ53DK.mjs} +9 -11
  227. package/dist/{chunk-6CR4S6W2.mjs → chunk-2J5OZOMX.mjs} +19 -8
  228. package/dist/{chunk-4NQFTHN3.mjs → chunk-3GE4UFV5.mjs} +2 -2
  229. package/dist/{chunk-KAGADD2O.mjs → chunk-3RIZCKRM.mjs} +2 -2
  230. package/dist/{chunk-DE25XTVQ.mjs → chunk-3VHFOSZR.mjs} +2 -2
  231. package/dist/{chunk-UOKFSFNJ.mjs → chunk-4PF4LKNT.mjs} +4 -2
  232. package/dist/{chunk-5MYNAAFE.mjs → chunk-5J7VKFSZ.mjs} +4 -4
  233. package/dist/{chunk-BTUW5LSG.mjs → chunk-5TNQ573V.mjs} +4 -3
  234. package/dist/{chunk-6QLBHUEG.mjs → chunk-6T2DVIQT.mjs} +7 -5
  235. package/dist/{chunk-L3YKPTJQ.mjs → chunk-7CE6PDCQ.mjs} +2 -2
  236. package/dist/{chunk-Y6YS33GM.mjs → chunk-AHFEAY6M.mjs} +4 -4
  237. package/dist/{chunk-4ZO5PTKF.mjs → chunk-AZRATPNP.mjs} +5 -3
  238. package/dist/{chunk-V2ZB2XNS.mjs → chunk-BGXOEFDM.mjs} +9 -22
  239. package/dist/{chunk-KC5QDYGZ.mjs → chunk-BMAAAJWN.mjs} +2 -2
  240. package/dist/{chunk-IJCMPVW5.mjs → chunk-BQMJQMWY.mjs} +2 -2
  241. package/dist/{chunk-E4EQSCKR.mjs → chunk-BTPCY4C7.mjs} +7 -5
  242. package/dist/chunk-BVJAYPAD.mjs +55 -0
  243. package/dist/{chunk-RA6SAAFE.mjs → chunk-BWLVX2SQ.mjs} +4 -4
  244. package/dist/{chunk-EROPDCB5.mjs → chunk-CCEM3HIJ.mjs} +30 -25
  245. package/dist/chunk-CTUFFKGS.mjs +30 -0
  246. package/dist/{chunk-EHGBHFMH.mjs → chunk-CYGYC7XT.mjs} +8 -4
  247. package/dist/{chunk-ESQDPO5E.mjs → chunk-DLAOTHHS.mjs} +7 -6
  248. package/dist/{chunk-QY3X2UYR.mjs → chunk-DYYPDQA2.mjs} +21 -7
  249. package/dist/{chunk-S44XWTTC.mjs → chunk-E4BJ5WXG.mjs} +3 -3
  250. package/dist/{chunk-HUSSF6TF.mjs → chunk-EQNCMDZC.mjs} +1 -1
  251. package/dist/{chunk-PI6RULJX.mjs → chunk-EQYTDFDD.mjs} +1 -1
  252. package/dist/{chunk-BULKGOIZ.mjs → chunk-FE26TPCI.mjs} +4 -4
  253. package/dist/{chunk-DBHSUUKU.mjs → chunk-FOUSI6JD.mjs} +1 -1
  254. package/dist/{chunk-KPTY7UYQ.mjs → chunk-GR7PKEKD.mjs} +1 -1
  255. package/dist/{chunk-RRKM4MKB.mjs → chunk-HLWGFBIF.mjs} +3 -3
  256. package/dist/chunk-HMKJGVXA.mjs +35 -0
  257. package/dist/{chunk-U6DEBYU5.mjs → chunk-IFGZUJFH.mjs} +3 -3
  258. package/dist/{chunk-2VIDP72N.mjs → chunk-K3V6OTVB.mjs} +1 -1
  259. package/dist/{chunk-K7TKID3V.mjs → chunk-K4YFTUMC.mjs} +3 -3
  260. package/dist/{chunk-NGEN2EES.mjs → chunk-MQAK2W6L.mjs} +14 -22
  261. package/dist/{chunk-CM2DG4MR.mjs → chunk-MSS3CD6F.mjs} +4 -4
  262. package/dist/{chunk-TETMEKZE.mjs → chunk-NQYS6RPX.mjs} +8 -5
  263. package/dist/{chunk-62BBSSUF.mjs → chunk-P5KC3RTG.mjs} +1 -1
  264. package/dist/{chunk-K3QX2M26.mjs → chunk-PPKCGCZ3.mjs} +5 -5
  265. package/dist/{chunk-ITG4JQM3.mjs → chunk-QEE3EQ3N.mjs} +2 -2
  266. package/dist/{chunk-URIH43IJ.mjs → chunk-RLPPRIJ7.mjs} +20 -34
  267. package/dist/{chunk-XCIG6HT2.mjs → chunk-S433IOQE.mjs} +2 -2
  268. package/dist/{chunk-IGU223UM.mjs → chunk-SWUZKVYO.mjs} +1 -1
  269. package/dist/{chunk-MP7GLMIR.mjs → chunk-T4KMKHTI.mjs} +55 -23
  270. package/dist/{chunk-2QOHHBJC.mjs → chunk-UBTP4NPP.mjs} +5 -21
  271. package/dist/{chunk-TMH263OK.mjs → chunk-UEA2VYGW.mjs} +3 -3
  272. package/dist/chunk-VISIOH33.mjs +37 -0
  273. package/dist/{chunk-SZEKQAOY.mjs → chunk-VSKBODEY.mjs} +1 -1
  274. package/dist/{chunk-FTTI6T5Q.mjs → chunk-W422TEH2.mjs} +3 -3
  275. package/dist/{chunk-WIPEDNSD.mjs → chunk-WD5LBXPR.mjs} +4 -4
  276. package/dist/chunk-WFNGSYS4.mjs +111 -0
  277. package/dist/chunk-WR6DCNAE.mjs +65 -0
  278. package/dist/{chunk-ERWJPVX7.mjs → chunk-XKBB2UZU.mjs} +2 -2
  279. package/dist/{chunk-CBIZLRYH.mjs → chunk-Y5TPAKOS.mjs} +14 -17
  280. package/dist/{chunk-AZV7KNJI.mjs → chunk-YKWIMVGU.mjs} +2 -2
  281. package/dist/{chunk-ZKDKKQCE.mjs → chunk-YOXSXHDE.mjs} +4 -4
  282. package/dist/{chunk-PGQ6FMXS.mjs → chunk-ZO5BRTCW.mjs} +2 -2
  283. package/dist/{chunk-KSSVIFYR.mjs → chunk-ZQGCQ7SA.mjs} +14 -34
  284. package/dist/{chunk-ZTPYUU5C.mjs → chunk-ZRUUUVOO.mjs} +3 -3
  285. package/dist/fonts.mjs +0 -2
  286. package/dist/{index-CY34hxPN.d.ts → index-CinAt5Uo.d.mts} +3 -3
  287. package/dist/{index-CY34hxPN.d.mts → index-CinAt5Uo.d.ts} +3 -3
  288. package/dist/index.d.mts +69 -19
  289. package/dist/index.d.ts +69 -19
  290. package/dist/index.js +1023 -839
  291. package/dist/index.mjs +76 -70
  292. package/package.json +15 -12
  293. package/src/components/Accordion/Accordion.tsx +12 -18
  294. package/src/components/AppHeader/AppHeader.tsx +33 -10
  295. package/src/components/Checkbox/Checkbox.tsx +3 -0
  296. package/src/components/ConfirmDialog/ConfirmDialog.tsx +7 -21
  297. package/src/components/ErrorBoundary/ErrorBoundary.tsx +5 -2
  298. package/src/components/Image/Image.tsx +50 -0
  299. package/src/components/Image/index.ts +2 -0
  300. package/src/components/ImageUpload/ImageUpload.tsx +34 -26
  301. package/src/components/{ListGroup/ListGroup.tsx → ItemGroup/ItemGroup.tsx} +15 -29
  302. package/src/components/ItemGroup/index.ts +2 -0
  303. package/src/components/ListGroup/index.tsx +20 -0
  304. package/src/components/ListItem/ListItem.tsx +3 -0
  305. package/src/components/MenuGroup/index.tsx +20 -0
  306. package/src/components/MenuItem/MenuItem.tsx +3 -0
  307. package/src/components/NumberStepper/NumberStepper.tsx +4 -0
  308. package/src/components/Pressable/Pressable.tsx +0 -24
  309. package/src/components/ScreenContainer/ScreenContainer.tsx +94 -0
  310. package/src/components/ScreenContainer/index.ts +2 -0
  311. package/src/components/Select/Select.tsx +25 -30
  312. package/src/components/SelectableGrid/SelectableGrid.tsx +51 -20
  313. package/src/components/Separator/Separator.tsx +35 -2
  314. package/src/components/Sheet/Sheet.tsx +3 -21
  315. package/src/components/Sheet/index.ts +2 -2
  316. package/src/components/Slider/Slider.tsx +3 -0
  317. package/src/components/Switch/Switch.tsx +3 -1
  318. package/src/components/Tabs/Tabs.tsx +9 -9
  319. package/src/components/Tabs/index.ts +1 -1
  320. package/src/components/Text/Text.tsx +7 -0
  321. package/src/components/VirtualizedList/VirtualizedList.tsx +154 -0
  322. package/src/components/VirtualizedList/index.ts +2 -0
  323. package/src/hooks/useConfirmDialog.ts +2 -11
  324. package/src/hooks/useSheetModal.ts +40 -0
  325. package/src/index.ts +5 -1
  326. package/src/theme/colors.ts +19 -57
  327. package/src/tokens.ts +21 -7
  328. package/src/utils/curatedIcons.ts +9 -18
  329. package/src/utils/haptics.ts +10 -21
  330. package/src/utils/icons.ts +7 -14
  331. package/dist/ListGroup.d.mts +0 -34
  332. package/dist/ListGroup.d.ts +0 -34
  333. package/dist/ListGroup.mjs +0 -5
  334. package/dist/MenuGroup.d.mts +0 -34
  335. package/dist/MenuGroup.d.ts +0 -34
  336. package/dist/MenuGroup.js +0 -106
  337. package/dist/MenuGroup.mjs +0 -5
  338. package/dist/chunk-ARONDO7M.mjs +0 -40
  339. package/dist/chunk-EW2FIDSM.mjs +0 -29
  340. package/dist/chunk-S2VGME7X.mjs +0 -82
  341. package/dist/chunk-Y6FXYEAI.mjs +0 -8
  342. package/src/components/ListGroup/index.ts +0 -1
  343. package/src/components/MenuGroup/MenuGroup.tsx +0 -145
  344. package/src/components/MenuGroup/index.ts +0 -1
@@ -106,31 +106,22 @@ const CATEGORIES: CuratedCategoryDef[] = [
106
106
  },
107
107
  ]
108
108
 
109
- let _allIcons: string[] | null = null
110
- let _categorized: CuratedCategoryDef[] | null = null
111
-
112
109
  export function getAllCuratedIcons(): string[] {
113
- if (!_allIcons) {
114
- const seen = new Set<string>()
115
- const result: string[] = []
116
- for (const cat of CATEGORIES) {
117
- for (const name of cat.icons) {
118
- if (!seen.has(name)) {
119
- seen.add(name)
120
- result.push(name)
121
- }
110
+ const seen = new Set<string>()
111
+ const result: string[] = []
112
+ for (const cat of CATEGORIES) {
113
+ for (const name of cat.icons) {
114
+ if (!seen.has(name)) {
115
+ seen.add(name)
116
+ result.push(name)
122
117
  }
123
118
  }
124
- _allIcons = result
125
119
  }
126
- return _allIcons!
120
+ return result
127
121
  }
128
122
 
129
123
  export function getCuratedCategories(): CuratedCategoryDef[] {
130
- if (!_categorized) {
131
- _categorized = CATEGORIES.map((cat) => ({ ...cat, icons: [...cat.icons] }))
132
- }
133
- return _categorized!
124
+ return CATEGORIES.map((cat) => ({ ...cat, icons: [...cat.icons] }))
134
125
  }
135
126
 
136
127
  export function getIconCategory(name: string): string | undefined {
@@ -1,45 +1,34 @@
1
1
  import { Platform } from 'react-native'
2
+ import * as Haptics from 'expo-haptics'
2
3
 
3
- let _haptics: typeof import('expo-haptics') | null = null
4
- let _loaded = false
5
-
6
- async function getHaptics(): Promise<typeof import('expo-haptics') | null> {
7
- if (Platform.OS === 'web') return null
8
- if (!_loaded) {
9
- _loaded = true
10
- try {
11
- _haptics = await import('expo-haptics')
12
- } catch {
13
- _haptics = null
14
- }
15
- }
16
- return _haptics
4
+ function maybeHaptics() {
5
+ return Platform.OS === 'web' ? null : Haptics
17
6
  }
18
7
 
19
8
  export function selectionAsync(): void {
20
- getHaptics().then((h) => h?.selectionAsync())
9
+ maybeHaptics()?.selectionAsync()
21
10
  }
22
11
 
23
12
  export function impactLight(): void {
24
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Light))
13
+ maybeHaptics()?.impactAsync(Haptics.ImpactFeedbackStyle.Light)
25
14
  }
26
15
 
27
16
  export function impactMedium(): void {
28
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Medium))
17
+ maybeHaptics()?.impactAsync(Haptics.ImpactFeedbackStyle.Medium)
29
18
  }
30
19
 
31
20
  export function impactHeavy(): void {
32
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Heavy))
21
+ maybeHaptics()?.impactAsync(Haptics.ImpactFeedbackStyle.Heavy)
33
22
  }
34
23
 
35
24
  export function notificationSuccess(): void {
36
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Success))
25
+ maybeHaptics()?.notificationAsync(Haptics.NotificationFeedbackType.Success)
37
26
  }
38
27
 
39
28
  export function notificationError(): void {
40
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Error))
29
+ maybeHaptics()?.notificationAsync(Haptics.NotificationFeedbackType.Error)
41
30
  }
42
31
 
43
32
  export function notificationWarning(): void {
44
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Warning))
33
+ maybeHaptics()?.notificationAsync(Haptics.NotificationFeedbackType.Warning)
45
34
  }
@@ -26,27 +26,20 @@ const ALL_FAMILIES: { name: IconFamily; component: IconComponentType; glyphMap?:
26
26
  { name: 'Ionicons', component: Ionicons as unknown as IconComponentType },
27
27
  ]
28
28
 
29
- // Lazy singleton cache — populates on first Icon render, persists for session.
30
- let glyphCacheInitialized = false
31
- function ensureGlyphCache() {
32
- if (glyphCacheInitialized) return
33
- glyphCacheInitialized = true
34
- for (const entry of ALL_FAMILIES) {
35
- try {
36
- entry.glyphMap = (entry.component as unknown as { glyphMap?: Record<string, number> }).glyphMap
37
- } catch {
38
- entry.glyphMap = {}
39
- }
29
+ function getGlyphMap(component: IconComponentType): Record<string, number> {
30
+ try {
31
+ return (component as unknown as { glyphMap?: Record<string, number> }).glyphMap ?? {}
32
+ } catch {
33
+ return {}
40
34
  }
41
35
  }
42
36
 
43
37
  export function Icon({ name, size, color, family }: IconProps): React.ReactElement | null {
44
- ensureGlyphCache()
45
38
  const entry = family
46
39
  ? ALL_FAMILIES.find((f) => f.name === family)
47
40
  : ALL_FAMILIES.find((f) => {
48
- const glyphMap = f.glyphMap
49
- return glyphMap ? name in glyphMap : false
41
+ const glyphMap = getGlyphMap(f.component)
42
+ return name in glyphMap
50
43
  })
51
44
 
52
45
  if (!entry) return null
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { ViewStyle } from 'react-native';
3
-
4
- type ListGroupVariant = 'plain' | 'card';
5
- interface ListGroupProps {
6
- children: React.ReactNode;
7
- /**
8
- * - `plain` (default): no background, plain ListItems inside.
9
- * - `card`: card surface with background + border wrapping plain ListItems.
10
- */
11
- variant?: ListGroupVariant;
12
- style?: ViewStyle;
13
- }
14
- interface ListGroupHeaderProps {
15
- children: React.ReactNode;
16
- style?: ViewStyle;
17
- }
18
- interface ListGroupFooterProps {
19
- children: React.ReactNode;
20
- style?: ViewStyle;
21
- }
22
- /**
23
- * ListGroup wraps multiple ListItems and auto-adds separators between them.
24
- * Use variant="card" for a standalone surface or "plain" for items inside another container.
25
- */
26
- declare function ListGroup({ children, variant, style }: ListGroupProps): React.JSX.Element;
27
- declare namespace ListGroup {
28
- var Header: typeof ListGroupHeader;
29
- var Footer: typeof ListGroupFooter;
30
- }
31
- declare function ListGroupHeader({ children, style }: ListGroupHeaderProps): React.JSX.Element;
32
- declare function ListGroupFooter({ children, style }: ListGroupFooterProps): React.JSX.Element;
33
-
34
- export { ListGroup, ListGroupFooter, type ListGroupFooterProps, ListGroupHeader, type ListGroupHeaderProps, type ListGroupProps, type ListGroupVariant };
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { ViewStyle } from 'react-native';
3
-
4
- type ListGroupVariant = 'plain' | 'card';
5
- interface ListGroupProps {
6
- children: React.ReactNode;
7
- /**
8
- * - `plain` (default): no background, plain ListItems inside.
9
- * - `card`: card surface with background + border wrapping plain ListItems.
10
- */
11
- variant?: ListGroupVariant;
12
- style?: ViewStyle;
13
- }
14
- interface ListGroupHeaderProps {
15
- children: React.ReactNode;
16
- style?: ViewStyle;
17
- }
18
- interface ListGroupFooterProps {
19
- children: React.ReactNode;
20
- style?: ViewStyle;
21
- }
22
- /**
23
- * ListGroup wraps multiple ListItems and auto-adds separators between them.
24
- * Use variant="card" for a standalone surface or "plain" for items inside another container.
25
- */
26
- declare function ListGroup({ children, variant, style }: ListGroupProps): React.JSX.Element;
27
- declare namespace ListGroup {
28
- var Header: typeof ListGroupHeader;
29
- var Footer: typeof ListGroupFooter;
30
- }
31
- declare function ListGroupHeader({ children, style }: ListGroupHeaderProps): React.JSX.Element;
32
- declare function ListGroupFooter({ children, style }: ListGroupFooterProps): React.JSX.Element;
33
-
34
- export { ListGroup, ListGroupFooter, type ListGroupFooterProps, ListGroupHeader, type ListGroupHeaderProps, type ListGroupProps, type ListGroupVariant };
@@ -1,5 +0,0 @@
1
- export { ListGroup, ListGroupFooter, ListGroupHeader } from './chunk-OBV72JD4.mjs';
2
- import './chunk-QY3X2UYR.mjs';
3
- import './chunk-KSSVIFYR.mjs';
4
- import './chunk-2CE3TQVY.mjs';
5
- import './chunk-Y6FXYEAI.mjs';
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { ViewStyle } from 'react-native';
3
-
4
- type MenuGroupVariant = 'plain' | 'card';
5
- interface MenuGroupProps {
6
- children: React.ReactNode;
7
- /**
8
- * - `plain` (default): no background, plain MenuItems inside.
9
- * - `card`: card surface with background + border wrapping plain MenuItems.
10
- */
11
- variant?: MenuGroupVariant;
12
- style?: ViewStyle;
13
- }
14
- interface MenuGroupHeaderProps {
15
- children: React.ReactNode;
16
- style?: ViewStyle;
17
- }
18
- interface MenuGroupFooterProps {
19
- children: React.ReactNode;
20
- style?: ViewStyle;
21
- }
22
- /**
23
- * MenuGroup wraps multiple MenuItems and auto-adds separators between them.
24
- * Use variant="card" for a standalone surface or "plain" for items inside another container.
25
- */
26
- declare function MenuGroup({ children, variant, style }: MenuGroupProps): React.JSX.Element;
27
- declare namespace MenuGroup {
28
- var Header: typeof MenuGroupHeader;
29
- var Footer: typeof MenuGroupFooter;
30
- }
31
- declare function MenuGroupHeader({ children, style }: MenuGroupHeaderProps): React.JSX.Element;
32
- declare function MenuGroupFooter({ children, style }: MenuGroupFooterProps): React.JSX.Element;
33
-
34
- export { MenuGroup, MenuGroupFooter, type MenuGroupFooterProps, MenuGroupHeader, type MenuGroupHeaderProps, type MenuGroupProps, type MenuGroupVariant };
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { ViewStyle } from 'react-native';
3
-
4
- type MenuGroupVariant = 'plain' | 'card';
5
- interface MenuGroupProps {
6
- children: React.ReactNode;
7
- /**
8
- * - `plain` (default): no background, plain MenuItems inside.
9
- * - `card`: card surface with background + border wrapping plain MenuItems.
10
- */
11
- variant?: MenuGroupVariant;
12
- style?: ViewStyle;
13
- }
14
- interface MenuGroupHeaderProps {
15
- children: React.ReactNode;
16
- style?: ViewStyle;
17
- }
18
- interface MenuGroupFooterProps {
19
- children: React.ReactNode;
20
- style?: ViewStyle;
21
- }
22
- /**
23
- * MenuGroup wraps multiple MenuItems and auto-adds separators between them.
24
- * Use variant="card" for a standalone surface or "plain" for items inside another container.
25
- */
26
- declare function MenuGroup({ children, variant, style }: MenuGroupProps): React.JSX.Element;
27
- declare namespace MenuGroup {
28
- var Header: typeof MenuGroupHeader;
29
- var Footer: typeof MenuGroupFooter;
30
- }
31
- declare function MenuGroupHeader({ children, style }: MenuGroupHeaderProps): React.JSX.Element;
32
- declare function MenuGroupFooter({ children, style }: MenuGroupFooterProps): React.JSX.Element;
33
-
34
- export { MenuGroup, MenuGroupFooter, type MenuGroupFooterProps, MenuGroupHeader, type MenuGroupHeaderProps, type MenuGroupProps, type MenuGroupVariant };
package/dist/MenuGroup.js DELETED
@@ -1,106 +0,0 @@
1
- 'use strict';
2
-
3
- var React2 = require('react');
4
- var reactNative = require('react-native');
5
- var reactNativeSizeMatters = require('react-native-size-matters');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var React2__default = /*#__PURE__*/_interopDefault(React2);
10
-
11
- // src/components/MenuGroup/MenuGroup.tsx
12
- var ThemeContext = React2.createContext(void 0);
13
- function useTheme() {
14
- const context = React2.useContext(ThemeContext);
15
- if (!context) {
16
- throw new Error("useTheme must be used within a ThemeProvider");
17
- }
18
- return context;
19
- }
20
- var isWeb = reactNative.Platform.OS === "web";
21
- var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
22
- var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
23
-
24
- // src/tokens.ts
25
- var RADIUS = {
26
- md: 14};
27
-
28
- // src/components/MenuGroup/MenuGroup.tsx
29
- function MenuGroup({ children, variant = "plain", style }) {
30
- const { colors } = useTheme();
31
- const processedChildren = React2__default.default.Children.map(children, (child, index) => {
32
- if (!React2__default.default.isValidElement(child)) return child;
33
- if (child.type === MenuGroupHeader || child.type === MenuGroupFooter) {
34
- return child;
35
- }
36
- const childProps = child.props;
37
- const isMenuItem = "onPress" in childProps;
38
- if (!isMenuItem) return child;
39
- const isLast = index === React2__default.default.Children.count(children) - 1;
40
- if (childProps["showSeparator"] === void 0 && !isLast) {
41
- return React2__default.default.cloneElement(child, {
42
- showSeparator: true
43
- });
44
- }
45
- return child;
46
- });
47
- const cardStyle = variant === "card" ? {
48
- backgroundColor: colors.card,
49
- borderRadius: RADIUS.md,
50
- borderWidth: 1,
51
- borderColor: colors.border,
52
- shadowColor: "#000",
53
- shadowOffset: { width: 0, height: 2 },
54
- shadowOpacity: 0.06,
55
- shadowRadius: 6,
56
- elevation: 2,
57
- paddingVertical: vs(4)
58
- } : {};
59
- return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.container, cardStyle, style] }, processedChildren);
60
- }
61
- function MenuGroupHeader({ children, style }) {
62
- const { colors } = useTheme();
63
- if (typeof children === "string") {
64
- return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.header, { borderBottomColor: colors.separator }, style] }, /* @__PURE__ */ React2__default.default.createElement(reactNative.Text, { style: [styles.headerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
65
- }
66
- return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.header, { borderBottomColor: colors.separator }, style] }, children);
67
- }
68
- function MenuGroupFooter({ children, style }) {
69
- const { colors } = useTheme();
70
- if (typeof children === "string") {
71
- return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.footer, style] }, /* @__PURE__ */ React2__default.default.createElement(reactNative.Text, { style: [styles.footerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
72
- }
73
- return /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.footer, style] }, children);
74
- }
75
- MenuGroup.Header = MenuGroupHeader;
76
- MenuGroup.Footer = MenuGroupFooter;
77
- var styles = reactNative.StyleSheet.create({
78
- container: {
79
- overflow: "hidden"
80
- },
81
- header: {
82
- paddingHorizontal: s(16),
83
- paddingTop: vs(12),
84
- paddingBottom: vs(8),
85
- borderBottomWidth: reactNative.StyleSheet.hairlineWidth
86
- },
87
- headerText: {
88
- fontFamily: "Sohne-SemiBold",
89
- fontSize: 13,
90
- letterSpacing: 0.32,
91
- textTransform: "uppercase"
92
- },
93
- footer: {
94
- paddingHorizontal: s(16),
95
- paddingTop: vs(8),
96
- paddingBottom: vs(12)
97
- },
98
- footerText: {
99
- fontFamily: "Sohne-Regular",
100
- fontSize: 12
101
- }
102
- });
103
-
104
- exports.MenuGroup = MenuGroup;
105
- exports.MenuGroupFooter = MenuGroupFooter;
106
- exports.MenuGroupHeader = MenuGroupHeader;
@@ -1,5 +0,0 @@
1
- export { MenuGroup, MenuGroupFooter, MenuGroupHeader } from './chunk-S2VGME7X.mjs';
2
- import './chunk-QY3X2UYR.mjs';
3
- import './chunk-KSSVIFYR.mjs';
4
- import './chunk-2CE3TQVY.mjs';
5
- import './chunk-Y6FXYEAI.mjs';
@@ -1,40 +0,0 @@
1
- import { Platform } from 'react-native';
2
-
3
- // src/utils/haptics.ts
4
- var _haptics = null;
5
- var _loaded = false;
6
- async function getHaptics() {
7
- if (Platform.OS === "web") return null;
8
- if (!_loaded) {
9
- _loaded = true;
10
- try {
11
- _haptics = await import('expo-haptics');
12
- } catch {
13
- _haptics = null;
14
- }
15
- }
16
- return _haptics;
17
- }
18
- function selectionAsync() {
19
- getHaptics().then((h) => h?.selectionAsync());
20
- }
21
- function impactLight() {
22
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Light));
23
- }
24
- function impactMedium() {
25
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Medium));
26
- }
27
- function impactHeavy() {
28
- getHaptics().then((h) => h?.impactAsync(h.ImpactFeedbackStyle.Heavy));
29
- }
30
- function notificationSuccess() {
31
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Success));
32
- }
33
- function notificationError() {
34
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Error));
35
- }
36
- function notificationWarning() {
37
- getHaptics().then((h) => h?.notificationAsync(h.NotificationFeedbackType.Warning));
38
- }
39
-
40
- export { impactHeavy, impactLight, impactMedium, notificationError, notificationSuccess, notificationWarning, selectionAsync };
@@ -1,29 +0,0 @@
1
- import { useTheme } from './chunk-KSSVIFYR.mjs';
2
- import React from 'react';
3
- import { StyleSheet, View } from 'react-native';
4
-
5
- function Separator({ orientation = "horizontal", style }) {
6
- const { colors } = useTheme();
7
- return /* @__PURE__ */ React.createElement(
8
- View,
9
- {
10
- style: [
11
- orientation === "horizontal" ? styles.horizontal : styles.vertical,
12
- { backgroundColor: colors.separator },
13
- style
14
- ]
15
- }
16
- );
17
- }
18
- var styles = StyleSheet.create({
19
- horizontal: {
20
- height: 1,
21
- width: "100%"
22
- },
23
- vertical: {
24
- width: 1,
25
- height: "100%"
26
- }
27
- });
28
-
29
- export { Separator };
@@ -1,82 +0,0 @@
1
- import { RADIUS } from './chunk-QY3X2UYR.mjs';
2
- import { useTheme } from './chunk-KSSVIFYR.mjs';
3
- import { vs, s } from './chunk-2CE3TQVY.mjs';
4
- import React from 'react';
5
- import { StyleSheet, View, Text } from 'react-native';
6
-
7
- function MenuGroup({ children, variant = "plain", style }) {
8
- const { colors } = useTheme();
9
- const processedChildren = React.Children.map(children, (child, index) => {
10
- if (!React.isValidElement(child)) return child;
11
- if (child.type === MenuGroupHeader || child.type === MenuGroupFooter) {
12
- return child;
13
- }
14
- const childProps = child.props;
15
- const isMenuItem = "onPress" in childProps;
16
- if (!isMenuItem) return child;
17
- const isLast = index === React.Children.count(children) - 1;
18
- if (childProps["showSeparator"] === void 0 && !isLast) {
19
- return React.cloneElement(child, {
20
- showSeparator: true
21
- });
22
- }
23
- return child;
24
- });
25
- const cardStyle = variant === "card" ? {
26
- backgroundColor: colors.card,
27
- borderRadius: RADIUS.md,
28
- borderWidth: 1,
29
- borderColor: colors.border,
30
- shadowColor: "#000",
31
- shadowOffset: { width: 0, height: 2 },
32
- shadowOpacity: 0.06,
33
- shadowRadius: 6,
34
- elevation: 2,
35
- paddingVertical: vs(4)
36
- } : {};
37
- return /* @__PURE__ */ React.createElement(View, { style: [styles.container, cardStyle, style] }, processedChildren);
38
- }
39
- function MenuGroupHeader({ children, style }) {
40
- const { colors } = useTheme();
41
- if (typeof children === "string") {
42
- return /* @__PURE__ */ React.createElement(View, { style: [styles.header, { borderBottomColor: colors.separator }, style] }, /* @__PURE__ */ React.createElement(Text, { style: [styles.headerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
43
- }
44
- return /* @__PURE__ */ React.createElement(View, { style: [styles.header, { borderBottomColor: colors.separator }, style] }, children);
45
- }
46
- function MenuGroupFooter({ children, style }) {
47
- const { colors } = useTheme();
48
- if (typeof children === "string") {
49
- return /* @__PURE__ */ React.createElement(View, { style: [styles.footer, style] }, /* @__PURE__ */ React.createElement(Text, { style: [styles.footerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
50
- }
51
- return /* @__PURE__ */ React.createElement(View, { style: [styles.footer, style] }, children);
52
- }
53
- MenuGroup.Header = MenuGroupHeader;
54
- MenuGroup.Footer = MenuGroupFooter;
55
- var styles = StyleSheet.create({
56
- container: {
57
- overflow: "hidden"
58
- },
59
- header: {
60
- paddingHorizontal: s(16),
61
- paddingTop: vs(12),
62
- paddingBottom: vs(8),
63
- borderBottomWidth: StyleSheet.hairlineWidth
64
- },
65
- headerText: {
66
- fontFamily: "Sohne-SemiBold",
67
- fontSize: 13,
68
- letterSpacing: 0.32,
69
- textTransform: "uppercase"
70
- },
71
- footer: {
72
- paddingHorizontal: s(16),
73
- paddingTop: vs(8),
74
- paddingBottom: vs(12)
75
- },
76
- footerText: {
77
- fontFamily: "Sohne-Regular",
78
- fontSize: 12
79
- }
80
- });
81
-
82
- export { MenuGroup, MenuGroupFooter, MenuGroupHeader };
@@ -1,8 +0,0 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined") return require.apply(this, arguments);
5
- throw Error('Dynamic require of "' + x + '" is not supported');
6
- });
7
-
8
- export { __require };
@@ -1 +0,0 @@
1
- export * from './ListGroup'