@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,680 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@retray-dev/ui-kit`.
4
+
5
+ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Semver bump type in brackets.
6
+
7
+ ---
8
+
9
+ ## [13.4.0] — 2026-07-01 (minor)
10
+
11
+ ### Upgrade
12
+ ```bash
13
+ pnpm add @retray-dev/ui-kit@latest
14
+ ```
15
+
16
+ ### What Changed
17
+
18
+ **New:**
19
+ - `useSheetModal` hook — shared BottomSheetModal state machine extracted from Sheet and ConfirmDialog. Exported from barrel: `import { useSheetModal } from '@retray-dev/ui-kit'`
20
+
21
+ **Changes:**
22
+ - Accordion: removed `useDerivedValue`, inlined `withTiming` directly in `useAnimatedStyle` — fewer worklet nodes, same behavior
23
+ - Sheet/ConfirmDialog: migrated to `useSheetModal` hook — removes duplicated state machine logic from both components
24
+ - Haptics: switched from dynamic `import()` (async, per-call) to static `import * as Haptics` at module init — synchronous, no async overhead
25
+ - Icon resolution: removed lazy singleton glyph cache — introspects `glyphMap` per render call (simpler, no memory leak risk)
26
+ - `curatedIcons.ts`: removed lazy singleton cache — pure functions only
27
+ - Color derivation: removed unused `withAlphaOnWhite`, `withAlphaOnDark`, `lighten`, `darken` internal helpers — replaced with `createColorPair` + `mixWithBackground`
28
+ - Shadow presets (lg/xl): reduced opacity and elevation for softer elevation feel — `lg` now `0.12/12/8`, `xl` now `0.18/24/16`
29
+ - `ErrorBoundary`: removed `onCatch` prop (minor breaking — use `onError` instead)
30
+ - `Select`: DRY refactor — extracted `renderPickerItems` to remove duplicated Picker.Item rendering across platforms
31
+ - `ListGroup`/`MenuGroup`: extracted shared `ItemGroup` internal component — `ListGroup` and `MenuGroup` are now thin wrappers with `childPropKey`
32
+
33
+ ### Peer Dep Changes
34
+ None.
35
+
36
+ ---
37
+
38
+ ## [13.2.0] — 2026-06-30 (minor)
39
+
40
+ ### Upgrade
41
+ ```bash
42
+ pnpm add @retray-dev/ui-kit@latest
43
+ ```
44
+
45
+ ### What Changed
46
+
47
+ **New:**
48
+ - `AppHeader`: now accepts `iconName` prop for `@expo/vector-icons` icon
49
+ - Side padding in `AppHeader` fixed — now `s(16)` consistent with design system
50
+ - `AvatarGroup` demo added to example app
51
+
52
+ **Changes:**
53
+ - `expo-image-picker` → `react-native-image-picker` (peer dep changed)
54
+ - `ImageUpload` now uses `react-native-image-picker` directly (dynamic import at tap time)
55
+ - `ConfirmDialog` / `Sheet` state management improved — cleanup on `onDismiss`
56
+ - ESLint strict type checks enabled
57
+ - Added unit tests across multiple components
58
+ - Dependencies updated to latest compatible versions
59
+
60
+ ### Peer Dep Changes
61
+ - **REMOVE** `expo-image-picker` (no longer used)
62
+ - **ADD** `react-native-image-picker` (>=7.0.0, optional — only for ImageUpload)
63
+
64
+ ```bash
65
+ pnpm remove expo-image-picker
66
+ pnpm add react-native-image-picker
67
+ ```
68
+
69
+ ---
70
+
71
+ ## [13.0.0] — 2026-06-25 (major)
72
+
73
+ ### Upgrade
74
+ ```bash
75
+ pnpm add @retray-dev/ui-kit@latest
76
+ ```
77
+
78
+ ### Breaking Changes
79
+ - **VirtualList removed** — was deprecated, not exported from barrel
80
+ - Accessibility labels in Spanish (es-UI mode)
81
+ - All UI text now in Spanish (placeholders, accessibility labels, buttons, errors)
82
+
83
+ ### What Changed
84
+
85
+ **New:**
86
+ - Compound `Sheet` + `AvatarGroup` export structure
87
+ - `opencode.json` config for project
88
+ - All UI documentation updated
89
+
90
+ **Changes:**
91
+ - Accessibility: `PagerDots` improved hitSlop, labels in Spanish
92
+ - Demo screens modularized
93
+ - ESLint configuration improved
94
+ - Removed unused guard utilities and color transition helpers
95
+ - Haptic feedback / pressable components simplified
96
+ - `expo-image` integration for Avatar, MediaCard, ListItem, ImageUpload, ImageViewer
97
+
98
+ ---
99
+
100
+ ## [12.2.0] — 2026-06-22 (minor)
101
+
102
+ ### Upgrade
103
+ ```bash
104
+ pnpm add @retray-dev/ui-kit@latest
105
+ ```
106
+
107
+ ### What Changed
108
+
109
+ **New:**
110
+ - `SelectableCard` + `SelectableCardGroup` components for selection UI
111
+ - Additional derived theme tokens
112
+
113
+ **Changes:**
114
+ - Theme system enhanced with more tokens
115
+ - Documentation improved across components
116
+
117
+ ---
118
+
119
+ ## [12.1.0] — 2026-06-20 (minor)
120
+
121
+ ### Upgrade
122
+ ```bash
123
+ pnpm add @retray-dev/ui-kit@latest
124
+ ```
125
+
126
+ ### What Changed
127
+
128
+ **New:**
129
+ - Migration guides for v10 → v11 → v12
130
+ - Improved `ConfirmDialog` and `IconPicker` state management
131
+
132
+ **Changes:**
133
+ - Component structure cleaned up
134
+ - Component count corrected in README
135
+
136
+ ---
137
+
138
+ ## [12.0.0] — 2026-06-18 (major)
139
+
140
+ ### Upgrade
141
+ ```bash
142
+ pnpm add @retray-dev/ui-kit@latest
143
+ ```
144
+
145
+ ### Breaking Changes
146
+ - **`responsive` / `dialogMaxWidth` props removed** from `Sheet` and `ConfirmDialog` — previously bypassed `@gorhom/bottom-sheet` with native `Modal` + `ScrollView` on wide screens. This created two code paths. Now gorhom handles responsive natively.
147
+ - **`BottomSheetModal` pattern enforced** — always `present()` in handler, never `useEffect`. `useEffect` + `snapToIndex(0)` is banned.
148
+ - **`enableDynamicSizing` without `snapPoints`** — never use both together.
149
+ - **`SheetTextInput` required** inside Sheet — regular `TextInput` breaks keyboard handling.
150
+
151
+ ### What Changed
152
+ - Sheet/ConfirmDialog migrated to strict `@gorhom/bottom-sheet` patterns
153
+ - `BottomSheetModalProvider` re-exported from library
154
+
155
+ ---
156
+
157
+ ## [11.0.0] — 2026-06-15 (major)
158
+
159
+ ### Upgrade
160
+ ```bash
161
+ pnpm add @retray-dev/ui-kit@latest
162
+ ```
163
+
164
+ ### Breaking Changes
165
+ - **`Stats` component added** — was previously internal
166
+ - **`withAlpha` and `hexToRgb`** now exported as public API utilities
167
+
168
+ ### What Changed
169
+
170
+ **New:**
171
+ - `Stats` component for metric/stat displays
172
+ - `withAlpha(hex, alpha)` — converts hex to rgba string
173
+ - `hexToRgb(hex)` — returns `{ r, g, b }` | null
174
+
175
+ ---
176
+
177
+ ## [10.2.0] — 2026-06-14 (minor)
178
+
179
+ ### Upgrade
180
+ ```bash
181
+ pnpm add @retray-dev/ui-kit@latest
182
+ ```
183
+
184
+ ### What Changed
185
+
186
+ **New:**
187
+ - `IconPicker` — visual icon grid picker with categories
188
+ - `NumberStepper` — increment/decrement numeric input
189
+
190
+ **Deps:**
191
+ - `expo-image-picker` added as optional peer (for IconPicker media)
192
+
193
+ ```bash
194
+ pnpm add expo-image-picker
195
+ ```
196
+
197
+ ---
198
+
199
+ ## [10.1.0] — 2026-06-13 (minor)
200
+
201
+ ### Upgrade
202
+ ```bash
203
+ pnpm add @retray-dev/ui-kit@latest
204
+ ```
205
+
206
+ ### What Changed
207
+ - Documentation updates with new commands and component details
208
+ - `.gitignore` cleanup
209
+
210
+ ---
211
+
212
+ ## [10.0.0] — 2026-06-12 (major)
213
+
214
+ ### Upgrade
215
+ ```bash
216
+ pnpm add @retray-dev/ui-kit@latest
217
+ ```
218
+
219
+ ### Breaking Changes
220
+ - **Font system overhauled** — fonts no longer embedded in package. Now copied via **postinstall script** (`scripts/copy-fonts.js`) to consumer's `assets/fonts/sohne/`.
221
+ - **Consumer must define font `require()` calls** — Metro cannot resolve `require()` inside `node_modules`.
222
+ - **Font verification script added** — `npx @retray-dev/ui-kit verify-fonts` to validate installation.
223
+
224
+ ### Migration from v9
225
+
226
+ **Before (v9):** Fonts loaded automatically at module init via internal `require()`.
227
+
228
+ **After (v10):**
229
+ 1. Postinstall copies 28 `.otf` files to `assets/fonts/sohne/`
230
+ 2. Define `SohneFonts` in `App.tsx` with static `require()` (see CONSUMER.md for boilerplate)
231
+ 3. Pass to `expo-font` `useFonts()` hook before rendering UI kit components
232
+ 4. Add `assets/fonts/sohne/` to `.gitignore` (optional)
233
+
234
+ ```bash
235
+ # After install, fonts are at:
236
+ assets/fonts/sohne/
237
+ ```
238
+
239
+ ---
240
+
241
+ ## [9.3.1] — 2026-06-11 (patch)
242
+
243
+ ### Upgrade
244
+ ```bash
245
+ pnpm add @retray-dev/ui-kit@latest
246
+ ```
247
+
248
+ ### What Changed
249
+ - Font verification script added
250
+ - Font path resolution fixed (avoid traversal issues)
251
+
252
+ ---
253
+
254
+ ## [9.3.0] — 2026-06-10 (minor)
255
+
256
+ ### Upgrade
257
+ ```bash
258
+ pnpm add @retray-dev/ui-kit@latest
259
+ ```
260
+
261
+ ### What Changed
262
+
263
+ **New:**
264
+ - Jest test infrastructure (config, setup, mocks for native modules)
265
+ - Unit tests for existing components
266
+
267
+ **Changes:**
268
+ - `ListItem` enhancements
269
+ - `Input` component improvements
270
+ - Testing commands added: `pnpm test`, `pnpm test:watch`, `pnpm test:coverage`
271
+
272
+ ---
273
+
274
+ ## [9.2.0] — 2026-06-09 (minor)
275
+
276
+ ### Upgrade
277
+ ```bash
278
+ pnpm add @retray-dev/ui-kit@latest
279
+ ```
280
+
281
+ ### What Changed
282
+
283
+ **New:**
284
+ - `SheetSelect` — sheet-based select component
285
+ - `ImageUpload` — image picker/upload component
286
+ - Consumer setup guide (CONSUMER.md)
287
+
288
+ **Changes:**
289
+ - `Pressable` component props updated
290
+ - Haptics module imports improved
291
+ - Toast usage updated for consistency
292
+
293
+ ---
294
+
295
+ ## [9.0.0] — 2026-06-09 (major)
296
+
297
+ ### Upgrade
298
+ ```bash
299
+ pnpm add @retray-dev/ui-kit@latest
300
+ ```
301
+
302
+ ### Breaking Changes
303
+ - **`react-native-ease` required** — replaces custom Reanimated animation wrappers across Checkbox, Chip, CategoryStrip, Switch, RadioGroup, Toggle. Static `EaseView` import at module level — omitting it crashes.
304
+ - **`pressto` required** — replaces custom pressable components with `createAnimatedPressable`. All interactive components now use `pressto` pressables. Omitting it crashes module load.
305
+ - **Haptic feedback refactored** — `src/utils/haptics.ts` now uses dynamic `import()` inside function bodies (never at module init) behind `Platform.OS !== 'web'` guard.
306
+ - **`react-native-pulsar` fallback removed** — haptics use `expo-haptics` exclusively.
307
+
308
+ ### Migration from v8
309
+
310
+ **New required peers:**
311
+ ```bash
312
+ pnpm add react-native-ease pressto
313
+ ```
314
+
315
+ **Babel plugin (critical):**
316
+ ```js
317
+ // babel.config.js — use worklets plugin, NOT reanimated plugin
318
+ plugins: ['react-native-worklets/plugin']
319
+ ```
320
+
321
+ ### What Changed
322
+
323
+ **New:**
324
+ - `HolographicCard` — Skia-powered holographic effect (deep import: `@retray-dev/ui-kit/HolographicCard`)
325
+ - `ErrorBoundary` — error boundary component
326
+ - `PricingCard` — pricing plan card
327
+ - `SelectableGrid` — grid selection component
328
+ - `SurfacesScreen`, `ThemeScreen` for example app
329
+
330
+ **Changes:**
331
+ - All interactive components migrated to `pressto` pressables + `react-native-ease` animations
332
+ - `Pressable` component refactored (no more `bounciness` prop)
333
+ - `Button`, `Checkbox`, `RadioGroup`, `Select`, `Tabs`, `Toast`, `Toggle` animations rebuilt with `react-native-ease`
334
+ - Performance: components converted to `memo`-ized versions
335
+ - `@gorhom/bottom-sheet` pinned to `5.2.8` (fix for Reanimated v4 crash)
336
+ - Padding/separator colors standardized
337
+ - Safe area crash fix on Android (added `initialWindowMetrics`)
338
+ - Lint and TS errors fixed
339
+
340
+ ---
341
+
342
+ ## [7.0.1] — 2026-06-02 (patch)
343
+
344
+ ### Upgrade
345
+ ```bash
346
+ pnpm add @retray-dev/ui-kit@latest
347
+ ```
348
+
349
+ ### What Changed
350
+ - `VirtualList` component added (later removed in v13)
351
+ - Safe area crash fix for Android
352
+ - `@gorhom/bottom-sheet` downgraded to `5.2.8` (compatibility)
353
+
354
+ ---
355
+
356
+ ## [6.1.0] — 2026-05-21 (minor)
357
+
358
+ ### Upgrade
359
+ ```bash
360
+ pnpm add @retray-dev/ui-kit@latest
361
+ ```
362
+
363
+ ### What Changed
364
+
365
+ **New:**
366
+ - `subtitle` prop on `MenuItem`
367
+ - `DetailRow` value type enhanced
368
+
369
+ **Changes:**
370
+ - Documentation updated
371
+
372
+ ---
373
+
374
+ ## [6.0.0] — 2026-05-21 (major)
375
+
376
+ ### Upgrade
377
+ ```bash
378
+ pnpm add @retray-dev/ui-kit@latest
379
+ ```
380
+
381
+ ### Breaking Changes
382
+ - **Theme system tokens restructured** — new token set with derived colors
383
+ - `ThemeColors` interface expanded
384
+
385
+ ### What Changed
386
+
387
+ **New:**
388
+ - Migration guide for v5 → v6
389
+ - New theme tokens: `overlay`, `accent`, `accentForeground`
390
+ - Derived tokens: `foregroundSubtle`, `foregroundMuted`, `surface`, `surfaceStrong`, `skeleton`, `*Tint`, `*Border`, `ring`, `input`, `separator`, `overlay`, `accentResolved`, `accentForegroundResolved`
391
+
392
+ **Changes:**
393
+ - UI feedback improved across components
394
+ - Bottom sheet margins and animations enhanced
395
+ - Example app expanded
396
+
397
+ ---
398
+
399
+ ## [5.4.0] — 2026-05-15 (minor)
400
+
401
+ ### Upgrade
402
+ ```bash
403
+ pnpm add @retray-dev/ui-kit@latest
404
+ ```
405
+
406
+ ### What Changed
407
+ - `Button` icon color customization (`iconColor` prop)
408
+ - Theme customizer in component showcase
409
+
410
+ ---
411
+
412
+ ## [5.3.0] — 2026-05-12 (minor)
413
+
414
+ ### Upgrade
415
+ ```bash
416
+ pnpm add @retray-dev/ui-kit@latest
417
+ ```
418
+
419
+ ### What Changed
420
+
421
+ **New:**
422
+ - `DetailRow` component
423
+
424
+ ---
425
+
426
+ ## [5.2.0] — 2026-05-10 (minor)
427
+
428
+ ### Upgrade
429
+ ```bash
430
+ pnpm add @retray-dev/ui-kit@latest
431
+ ```
432
+
433
+ ### What Changed
434
+ - `EXAMPLES.md` composition patterns guide
435
+ - Documentation and example app enhancements
436
+
437
+ ---
438
+
439
+ ## [5.1.0] — 2026-05-09 (minor)
440
+
441
+ ### Upgrade
442
+ ```bash
443
+ pnpm add @retray-dev/ui-kit@latest
444
+ ```
445
+
446
+ ### What Changed
447
+
448
+ **New:**
449
+ - `ChipGroup` component
450
+ - `CategoryStrip` component
451
+
452
+ **Changes:**
453
+ - Documentation with new component categories
454
+
455
+ ---
456
+
457
+ ## [5.0.0] — 2026-05-08 (major)
458
+
459
+ ### Upgrade
460
+ ```bash
461
+ pnpm add @retray-dev/ui-kit@latest
462
+ ```
463
+
464
+ ### Breaking Changes
465
+ - **Airbnb-inspired redesign** — all components visually overhauled
466
+ - **`RADIUS` tokens changed** — `md=14px` (buttons), `sm=8px` (inputs), `lg=12px` (cards), `xl=16px` (sheet top corners)
467
+ - **Touch targets enforced** — all interactive ≥44pt minimum
468
+ - **Haptic pattern standardized** — `selectionAsync` on toggle, `impactLight` on button, etc.
469
+ - **Press scale tokens standardized** — Button 0.95, Card 0.98, ListItem 0.97, Chip 0.94
470
+ - **`SHADOWS` presets added** — sm/md/lg/xl cross-platform shadow system
471
+ - **Typography variants restructured** — 17 variants from `display-xl` through `micro-label`
472
+
473
+ ### What Changed
474
+ - Complete visual redesign with softer shapes, generous spacing, single accent color
475
+ - Color system: 90% background + foreground surfaces, one primary moment
476
+ - `ICON_SIZES` added (HIG roles)
477
+ - `SPACING` 8pt grid with 4pt micro-steps
478
+ - Spring/timing/easing animation tokens standardized
479
+ - All interactive components support `iconName` prop
480
+
481
+ ---
482
+
483
+ ## [4.0.0] — 2026-04-27 (major)
484
+
485
+ ### Upgrade
486
+ ```bash
487
+ pnpm add @retray-dev/ui-kit@latest
488
+ ```
489
+
490
+ ### Breaking Changes
491
+ - **`ConfirmDialog` and `Sheet` use `enableDynamicSizing`** — height auto-fits content, `snapPoints` no longer accepted
492
+ - **`AlertBanner` props enforced** — some props now required
493
+ - **`CurrencyInput` props enforced**
494
+
495
+ ### What Changed
496
+ - `AlertBanner` styling updated
497
+ - `Input` now supports `inputWrapperStyle` prop
498
+ - Documentation improved
499
+
500
+ ---
501
+
502
+ ## [3.0.0] — 2026-04-25 (major)
503
+
504
+ ### Upgrade
505
+ ```bash
506
+ pnpm add @retray-dev/ui-kit@latest
507
+ ```
508
+
509
+ ### Breaking Changes
510
+ - **Typography section restructured** — font families, sizes, weights reorganized
511
+ - **Color tokens expanded** — 12 public tokens with derived system
512
+
513
+ ### What Changed
514
+ - Claude Design styles integrated
515
+ - Design system foundations established
516
+
517
+ ---
518
+
519
+ ## [2.8.0] — 2026-04-20 (minor)
520
+
521
+ ### Upgrade
522
+ ```bash
523
+ pnpm add @retray-dev/ui-kit@latest
524
+ ```
525
+
526
+ ### What Changed
527
+
528
+ **New:**
529
+ - `IconButton` component (circular pressable icon, `RADIUS.full`)
530
+
531
+ ---
532
+
533
+ ## [2.7.0] — 2026-04-18 (minor)
534
+
535
+ ### Upgrade
536
+ ```bash
537
+ pnpm add @retray-dev/ui-kit@latest
538
+ ```
539
+
540
+ ### What Changed
541
+
542
+ **New:**
543
+ - Design tokens: `SPACING`, `ICON_SIZES`, `RADIUS`, `SHADOWS`, `BREAKPOINTS`
544
+ - TypeScript types for all tokens: `Spacing`, `IconSize`, `Radius`, etc.
545
+ - Tokens are static `as const` objects — no provider needed
546
+
547
+ ---
548
+
549
+ ## [2.6.0] — 2026-04-15 (minor)
550
+
551
+ ### Upgrade
552
+ ```bash
553
+ pnpm add @retray-dev/ui-kit@latest
554
+ ```
555
+
556
+ ### What Changed
557
+
558
+ **New:**
559
+ - Icon resolution system (`src/utils/icons.ts`) — scans 6 `@expo/vector-icons` families (Feather > AntDesign > Entypo > FontAwesome5 > MaterialIcons > Ionicons)
560
+ - `Icon` component — resolves icon names via glyphMap introspection, returns `null` if not found (no crash)
561
+ - All components with icon slots now use `Icon` internally
562
+
563
+ **Changes:**
564
+ - Custom scaling utilities (`src/utils/scaling.ts`) — wraps `react-native-size-matters`, web-safe identity fallback
565
+ - Haptic feedback utilities (`src/utils/haptics.ts`) — web-safe wrapper around `expo-haptics`
566
+
567
+ ---
568
+
569
+ ## [2.5.1] — 2026-04-10 (patch)
570
+
571
+ ### Upgrade
572
+ ```bash
573
+ pnpm add @retray-dev/ui-kit@latest
574
+ ```
575
+
576
+ ### What Changed
577
+ - Documentation updated
578
+ - New peer dependencies added
579
+
580
+ ---
581
+
582
+ ## [2.5.0] — 2026-04-10 (minor)
583
+
584
+ ### Upgrade
585
+ ```bash
586
+ pnpm add @retray-dev/ui-kit@latest
587
+ ```
588
+
589
+ ### What Changed
590
+ - Typography and component styles updated across library
591
+ - `Select` and `Slider` refactored with `@expo/libraries`
592
+ - AI Theme customizer added
593
+ - Theme system refactored to support core theme colors with derived palette
594
+ - `Switch` and `Toggle` components enhanced
595
+ - Custom scaling utilities added
596
+
597
+ ---
598
+
599
+ ## [1.8.0] — 2026-04-08 (minor)
600
+
601
+ ### Upgrade
602
+ ```bash
603
+ pnpm add @retray-dev/ui-kit@latest
604
+ ```
605
+
606
+ ### What Changed
607
+ - `CurrencyDisplay` formatting options enhanced
608
+ - `CurrencyInputLarge` component added
609
+ - Modern banking-style UI
610
+ - Working conventions and task guidelines added
611
+
612
+ ---
613
+
614
+ ## [1.5.0] — 2026-04-01 (minor)
615
+
616
+ ### Upgrade
617
+ ```bash
618
+ pnpm add @retray-dev/ui-kit@latest
619
+ ```
620
+
621
+ ### What Changed
622
+ - Animation system updated — Accordion and Toast now use `react-native-reanimated`
623
+ - Animated press effects across components
624
+ - `expo-linear-gradient` added as peer dependency
625
+ - `touchSoundDisabled` added to interactive components
626
+
627
+ ---
628
+
629
+ ## [1.0.0] — 2026-03-31 (initial)
630
+
631
+ ### What Changed
632
+ - Initial release
633
+ - 30+ components across 6 categories: Display, Surfaces, Form, Composition, Navigation, Overlays, Feedback, Data, Utilities
634
+ - Theme system with light/dark mode
635
+ - `@gorhom/bottom-sheet` for modals
636
+ - `expo-haptics` for haptic feedback
637
+ - Sohne font family
638
+ - TypeScript types for all components
639
+
640
+ ### Initial Peer Dependencies
641
+ ```bash
642
+ npx expo install \
643
+ react-native-reanimated \
644
+ react-native-gesture-handler \
645
+ react-native-safe-area-context \
646
+ expo-haptics \
647
+ expo-linear-gradient \
648
+ expo-image \
649
+ @gorhom/bottom-sheet \
650
+ @expo/vector-icons \
651
+ react-native-size-matters
652
+ ```
653
+
654
+ ---
655
+
656
+ ## Appendix: Upgrade Paths
657
+
658
+ ### v9 → v10 (font system)
659
+ 1. Install: `npx expo install expo-font`
660
+ 2. Postinstall copies fonts to `assets/fonts/sohne/`
661
+ 3. Define `SohneFonts` with static `require()` in `App.tsx`
662
+ 4. Use `useFonts(SohneFonts)` before rendering
663
+
664
+ ### v8 → v9 (ease + pressto)
665
+ 1. `pnpm add react-native-ease pressto`
666
+ 2. Update `babel.config.js`: `react-native-worklets/plugin` (not `react-native-reanimated/plugin`)
667
+ 3. `npx expo start --clear`
668
+
669
+ ### v5 → v6 (theme tokens)
670
+ 1. Add new tokens to your theme: `overlay`, `accent`, `accentForeground`
671
+ 2. Derived tokens computed automatically by `deriveColors()`
672
+
673
+ ### v4 → v5 (Airbnb redesign)
674
+ 1. Update `RADIUS` values in your custom themes
675
+ 2. Ensure all touch targets ≥44pt
676
+ 3. Verify typography variants match new 17-variant system
677
+
678
+ ### v3 → v4 (dynamic sizing)
679
+ 1. Remove `snapPoints` from `Sheet` and `ConfirmDialog`
680
+ 2. Replace `<TextInput />` with `<SheetTextInput />` inside Sheet children