@thewhileloop/whileui 1.2.3 → 3.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 (690) hide show
  1. package/README.md +264 -88
  2. package/dist/blocks/chat/chat.d.ts +3 -4
  3. package/dist/blocks/chat/chat.js +29 -17
  4. package/dist/blocks/chat/index.d.ts +0 -1
  5. package/dist/blocks/chat/index.js +0 -1
  6. package/dist/blocks/commerce/checkout-summary.d.ts +1 -2
  7. package/dist/blocks/commerce/checkout-summary.js +16 -4
  8. package/dist/blocks/commerce/feature-gate.d.ts +1 -2
  9. package/dist/blocks/commerce/feature-gate.js +14 -4
  10. package/dist/blocks/commerce/index.d.ts +0 -1
  11. package/dist/blocks/commerce/index.js +0 -1
  12. package/dist/blocks/commerce/metric-card.d.ts +10 -31
  13. package/dist/blocks/commerce/metric-card.js +7 -3
  14. package/dist/blocks/commerce/plan-toggle.d.ts +1 -2
  15. package/dist/blocks/commerce/plan-toggle.js +11 -9
  16. package/dist/blocks/commerce/pricing-card.d.ts +1 -2
  17. package/dist/blocks/commerce/pricing-card.js +23 -6
  18. package/dist/blocks/commerce/product-card.d.ts +1 -2
  19. package/dist/blocks/commerce/product-card.js +23 -9
  20. package/dist/blocks/commerce/subscription-card.d.ts +1 -2
  21. package/dist/blocks/commerce/subscription-card.js +6 -3
  22. package/dist/blocks/commerce/upgrade-banner.d.ts +1 -2
  23. package/dist/blocks/commerce/upgrade-banner.js +13 -3
  24. package/dist/blocks/commerce/usage-bar.d.ts +1 -2
  25. package/dist/blocks/commerce/usage-bar.js +4 -2
  26. package/dist/blocks/datepicker/date-range-picker-modal.d.ts +2 -3
  27. package/dist/blocks/datepicker/date-range-picker-modal.js +25 -7
  28. package/dist/blocks/datepicker/datepicker-inline.d.ts +1 -2
  29. package/dist/blocks/datepicker/datepicker-inline.js +9 -3
  30. package/dist/blocks/datepicker/datepicker-modal.d.ts +2 -3
  31. package/dist/blocks/datepicker/datepicker-modal.js +44 -18
  32. package/dist/blocks/datepicker/index.d.ts +0 -1
  33. package/dist/blocks/datepicker/index.js +0 -1
  34. package/dist/blocks/datepicker/use-calendar-theme.d.ts +0 -1
  35. package/dist/blocks/datepicker/use-calendar-theme.js +0 -1
  36. package/dist/blocks/layout/action-bar.d.ts +1 -2
  37. package/dist/blocks/layout/action-bar.js +0 -1
  38. package/dist/blocks/layout/app-shell.d.ts +1 -2
  39. package/dist/blocks/layout/app-shell.js +11 -5
  40. package/dist/blocks/layout/confirm-action-sheet.d.ts +1 -2
  41. package/dist/blocks/layout/confirm-action-sheet.js +18 -6
  42. package/dist/blocks/layout/content-skeleton.d.ts +1 -2
  43. package/dist/blocks/layout/content-skeleton.js +22 -9
  44. package/dist/blocks/layout/docked-input.d.ts +11 -0
  45. package/dist/blocks/layout/docked-input.js +27 -0
  46. package/dist/blocks/layout/empty-state.d.ts +1 -2
  47. package/dist/blocks/layout/empty-state.js +10 -5
  48. package/dist/blocks/layout/error-boundary.d.ts +1 -2
  49. package/dist/blocks/layout/error-boundary.js +0 -2
  50. package/dist/blocks/layout/error-state.d.ts +1 -2
  51. package/dist/blocks/layout/error-state.js +0 -2
  52. package/dist/blocks/layout/form-modal-screen.d.ts +1 -2
  53. package/dist/blocks/layout/form-modal-screen.js +24 -21
  54. package/dist/blocks/layout/index.d.ts +2 -2
  55. package/dist/blocks/layout/index.js +2 -2
  56. package/dist/blocks/layout/keyboard-aware-screen.d.ts +14 -0
  57. package/dist/blocks/layout/keyboard-aware-screen.js +12 -0
  58. package/dist/blocks/layout/loading-screen.d.ts +1 -2
  59. package/dist/blocks/layout/loading-screen.js +6 -8
  60. package/dist/blocks/layout/page-skeleton.d.ts +1 -2
  61. package/dist/blocks/layout/page-skeleton.js +38 -20
  62. package/dist/blocks/layout/pull-to-refresh-scroll-view.d.ts +8 -4
  63. package/dist/blocks/layout/pull-to-refresh-scroll-view.js +17 -4
  64. package/dist/blocks/layout/screen-skeleton.d.ts +1 -2
  65. package/dist/blocks/layout/screen-skeleton.js +0 -1
  66. package/dist/blocks/layout/sheet.d.ts +9 -9
  67. package/dist/blocks/layout/sheet.js +51 -21
  68. package/dist/blocks/layout/smart-input.d.ts +9 -3
  69. package/dist/blocks/layout/smart-input.js +136 -9
  70. package/dist/blocks/lists/index.d.ts +0 -2
  71. package/dist/blocks/lists/index.js +0 -2
  72. package/dist/blocks/lists/list-item.d.ts +1 -2
  73. package/dist/blocks/lists/list-item.js +20 -6
  74. package/dist/blocks/lists/notification-item.d.ts +1 -2
  75. package/dist/blocks/lists/notification-item.js +19 -6
  76. package/dist/blocks/lists/timeline-feed.d.ts +1 -2
  77. package/dist/blocks/lists/timeline-feed.js +4 -2
  78. package/dist/blocks/media/index.d.ts +0 -1
  79. package/dist/blocks/media/index.js +0 -1
  80. package/dist/blocks/media/smart-image.d.ts +39 -99
  81. package/dist/blocks/media/smart-image.js +24 -8
  82. package/dist/blocks/navigation/bottom-nav.d.ts +1 -2
  83. package/dist/blocks/navigation/bottom-nav.js +7 -4
  84. package/dist/blocks/navigation/drawer-menu.d.ts +1 -2
  85. package/dist/blocks/navigation/drawer-menu.js +117 -64
  86. package/dist/blocks/navigation/floating-bottom-nav.d.ts +1 -2
  87. package/dist/blocks/navigation/floating-bottom-nav.js +14 -5
  88. package/dist/blocks/navigation/header.d.ts +2 -3
  89. package/dist/blocks/navigation/header.js +13 -5
  90. package/dist/blocks/navigation/index.d.ts +0 -2
  91. package/dist/blocks/navigation/index.js +0 -2
  92. package/dist/blocks/navigation/tab-bar.d.ts +1 -2
  93. package/dist/blocks/navigation/tab-bar.js +22 -10
  94. package/dist/blocks/splash/index.d.ts +0 -1
  95. package/dist/blocks/splash/index.js +0 -1
  96. package/dist/blocks/splash/splash-screen.d.ts +3 -4
  97. package/dist/blocks/splash/splash-screen.js +15 -11
  98. package/dist/components/accordion/accordion.d.ts +4 -5
  99. package/dist/components/accordion/accordion.js +6 -7
  100. package/dist/components/accordion/index.d.ts +0 -1
  101. package/dist/components/accordion/index.js +0 -1
  102. package/dist/components/alert/alert.d.ts +23 -56
  103. package/dist/components/alert/alert.js +20 -9
  104. package/dist/components/alert/index.d.ts +0 -1
  105. package/dist/components/alert/index.js +0 -1
  106. package/dist/components/alert-dialog/alert-dialog.d.ts +9 -10
  107. package/dist/components/alert-dialog/alert-dialog.js +175 -54
  108. package/dist/components/alert-dialog/index.d.ts +0 -1
  109. package/dist/components/alert-dialog/index.js +0 -1
  110. package/dist/components/aspect-ratio/aspect-ratio.d.ts +1 -2
  111. package/dist/components/aspect-ratio/aspect-ratio.js +0 -3
  112. package/dist/components/aspect-ratio/index.d.ts +0 -1
  113. package/dist/components/aspect-ratio/index.js +0 -1
  114. package/dist/components/avatar/avatar.d.ts +20 -48
  115. package/dist/components/avatar/avatar.js +8 -9
  116. package/dist/components/avatar/index.d.ts +0 -1
  117. package/dist/components/avatar/index.js +0 -1
  118. package/dist/components/badge/badge.d.ts +86 -215
  119. package/dist/components/badge/badge.js +21 -9
  120. package/dist/components/badge/index.d.ts +0 -1
  121. package/dist/components/badge/index.js +0 -1
  122. package/dist/components/button/button.d.ts +75 -193
  123. package/dist/components/button/button.js +62 -33
  124. package/dist/components/button/index.d.ts +0 -1
  125. package/dist/components/button/index.js +0 -1
  126. package/dist/components/card/card.d.ts +32 -74
  127. package/dist/components/card/card.js +29 -15
  128. package/dist/components/card/index.d.ts +0 -1
  129. package/dist/components/card/index.js +0 -1
  130. package/dist/components/checkbox/checkbox.d.ts +1 -2
  131. package/dist/components/checkbox/checkbox.js +15 -2
  132. package/dist/components/checkbox/index.d.ts +0 -1
  133. package/dist/components/checkbox/index.js +0 -1
  134. package/dist/components/collapsible/collapsible.d.ts +4 -4
  135. package/dist/components/collapsible/collapsible.js +8 -11
  136. package/dist/components/collapsible/index.d.ts +0 -1
  137. package/dist/components/collapsible/index.js +0 -1
  138. package/dist/components/container/container.d.ts +74 -0
  139. package/dist/components/container/container.js +43 -0
  140. package/dist/components/container/index.d.ts +1 -0
  141. package/dist/components/container/index.js +1 -0
  142. package/dist/components/context-menu/context-menu.d.ts +6 -7
  143. package/dist/components/context-menu/context-menu.js +42 -12
  144. package/dist/components/context-menu/index.d.ts +0 -1
  145. package/dist/components/context-menu/index.js +0 -1
  146. package/dist/components/data-row/data-row.d.ts +18 -39
  147. package/dist/components/data-row/data-row.js +36 -18
  148. package/dist/components/data-row/index.d.ts +0 -1
  149. package/dist/components/data-row/index.js +0 -1
  150. package/dist/components/dialog/dialog.d.ts +8 -9
  151. package/dist/components/dialog/dialog.js +48 -24
  152. package/dist/components/dialog/index.d.ts +0 -1
  153. package/dist/components/dialog/index.js +0 -1
  154. package/dist/components/dropdown-menu/dropdown-menu.d.ts +6 -7
  155. package/dist/components/dropdown-menu/dropdown-menu.js +45 -11
  156. package/dist/components/dropdown-menu/index.d.ts +0 -1
  157. package/dist/components/dropdown-menu/index.js +0 -1
  158. package/dist/components/form-field/form-field.d.ts +31 -88
  159. package/dist/components/form-field/form-field.js +27 -14
  160. package/dist/components/form-field/index.d.ts +0 -1
  161. package/dist/components/form-field/index.js +0 -1
  162. package/dist/components/hover-card/hover-card.d.ts +4 -4
  163. package/dist/components/hover-card/hover-card.js +12 -3
  164. package/dist/components/hover-card/index.d.ts +0 -1
  165. package/dist/components/hover-card/index.js +0 -1
  166. package/dist/components/input/index.d.ts +0 -1
  167. package/dist/components/input/index.js +0 -1
  168. package/dist/components/input/input.d.ts +12 -32
  169. package/dist/components/input/input.js +18 -3
  170. package/dist/components/label/index.d.ts +0 -1
  171. package/dist/components/label/index.js +0 -1
  172. package/dist/components/label/label.d.ts +3 -4
  173. package/dist/components/label/label.js +0 -1
  174. package/dist/components/labeled-field/index.d.ts +0 -1
  175. package/dist/components/labeled-field/index.js +0 -1
  176. package/dist/components/labeled-field/labeled-field.d.ts +4 -4
  177. package/dist/components/labeled-field/labeled-field.js +10 -2
  178. package/dist/components/menubar/index.d.ts +0 -1
  179. package/dist/components/menubar/index.js +0 -1
  180. package/dist/components/menubar/menubar.d.ts +7 -8
  181. package/dist/components/menubar/menubar.js +48 -15
  182. package/dist/components/numeric-input/index.d.ts +0 -1
  183. package/dist/components/numeric-input/index.js +0 -1
  184. package/dist/components/numeric-input/numeric-input.d.ts +29 -83
  185. package/dist/components/numeric-input/numeric-input.js +93 -73
  186. package/dist/components/otp-input/index.d.ts +0 -1
  187. package/dist/components/otp-input/index.js +0 -1
  188. package/dist/components/otp-input/otp-input.d.ts +22 -67
  189. package/dist/components/otp-input/otp-input.js +13 -9
  190. package/dist/components/popover/index.d.ts +0 -1
  191. package/dist/components/popover/index.js +0 -1
  192. package/dist/components/popover/popover.d.ts +8 -5
  193. package/dist/components/popover/popover.js +21 -4
  194. package/dist/components/pressable/index.d.ts +0 -1
  195. package/dist/components/pressable/index.js +0 -1
  196. package/dist/components/pressable/pressable.d.ts +10 -4
  197. package/dist/components/pressable/pressable.js +47 -4
  198. package/dist/components/progress/index.d.ts +0 -1
  199. package/dist/components/progress/index.js +0 -1
  200. package/dist/components/progress/progress.d.ts +15 -40
  201. package/dist/components/progress/progress.js +5 -2
  202. package/dist/components/radio-group/index.d.ts +0 -1
  203. package/dist/components/radio-group/index.js +0 -1
  204. package/dist/components/radio-group/radio-group.d.ts +2 -3
  205. package/dist/components/radio-group/radio-group.js +16 -7
  206. package/dist/components/row/index.d.ts +0 -1
  207. package/dist/components/row/index.js +0 -1
  208. package/dist/components/row/row.d.ts +63 -164
  209. package/dist/components/row/row.js +0 -1
  210. package/dist/components/segmented-control/index.d.ts +0 -1
  211. package/dist/components/segmented-control/index.js +0 -1
  212. package/dist/components/segmented-control/segmented-control.d.ts +72 -245
  213. package/dist/components/segmented-control/segmented-control.js +57 -24
  214. package/dist/components/select/index.d.ts +0 -1
  215. package/dist/components/select/index.js +0 -1
  216. package/dist/components/select/select.d.ts +23 -27
  217. package/dist/components/select/select.js +54 -12
  218. package/dist/components/separator/index.d.ts +0 -1
  219. package/dist/components/separator/index.js +0 -1
  220. package/dist/components/separator/separator.d.ts +3 -4
  221. package/dist/components/separator/separator.js +0 -1
  222. package/dist/components/skeleton/index.d.ts +0 -1
  223. package/dist/components/skeleton/index.js +0 -1
  224. package/dist/components/skeleton/skeleton.d.ts +10 -31
  225. package/dist/components/skeleton/skeleton.js +7 -8
  226. package/dist/components/spinner/index.d.ts +0 -1
  227. package/dist/components/spinner/index.js +0 -1
  228. package/dist/components/spinner/spinner.d.ts +13 -38
  229. package/dist/components/spinner/spinner.js +4 -2
  230. package/dist/components/stack/index.d.ts +0 -1
  231. package/dist/components/stack/index.js +0 -1
  232. package/dist/components/stack/stack.d.ts +63 -164
  233. package/dist/components/stack/stack.js +0 -1
  234. package/dist/components/switch/index.d.ts +0 -1
  235. package/dist/components/switch/index.js +0 -1
  236. package/dist/components/switch/switch.d.ts +1 -2
  237. package/dist/components/switch/switch.js +21 -2
  238. package/dist/components/tabs/index.d.ts +0 -1
  239. package/dist/components/tabs/index.js +0 -1
  240. package/dist/components/tabs/tabs.d.ts +13 -34
  241. package/dist/components/tabs/tabs.js +42 -12
  242. package/dist/components/text/index.d.ts +0 -1
  243. package/dist/components/text/index.js +0 -1
  244. package/dist/components/text/text.d.ts +51 -132
  245. package/dist/components/text/text.js +0 -1
  246. package/dist/components/textarea/index.d.ts +0 -1
  247. package/dist/components/textarea/index.js +0 -1
  248. package/dist/components/textarea/textarea.d.ts +15 -40
  249. package/dist/components/textarea/textarea.js +17 -9
  250. package/dist/components/toast/index.d.ts +0 -1
  251. package/dist/components/toast/index.js +0 -1
  252. package/dist/components/toast/toast.d.ts +15 -40
  253. package/dist/components/toast/toast.js +40 -24
  254. package/dist/components/toggle/index.d.ts +0 -1
  255. package/dist/components/toggle/index.js +0 -1
  256. package/dist/components/toggle/toggle.d.ts +44 -141
  257. package/dist/components/toggle/toggle.js +32 -16
  258. package/dist/components/toggle-group/index.d.ts +0 -1
  259. package/dist/components/toggle-group/index.js +0 -1
  260. package/dist/components/toggle-group/toggle-group.d.ts +45 -142
  261. package/dist/components/toggle-group/toggle-group.js +36 -19
  262. package/dist/components/tooltip/index.d.ts +0 -1
  263. package/dist/components/tooltip/index.js +0 -1
  264. package/dist/components/tooltip/tooltip.d.ts +4 -4
  265. package/dist/components/tooltip/tooltip.js +20 -3
  266. package/dist/components/view/index.d.ts +0 -1
  267. package/dist/components/view/index.js +0 -1
  268. package/dist/components/view/view.d.ts +3 -4
  269. package/dist/components/view/view.js +0 -1
  270. package/dist/index.d.ts +9 -3
  271. package/dist/index.js +9 -7
  272. package/dist/lib/cn.d.ts +0 -1
  273. package/dist/lib/cn.js +0 -1
  274. package/dist/lib/compose-event-handlers.d.ts +15 -0
  275. package/dist/lib/compose-event-handlers.js +20 -0
  276. package/dist/lib/focus-ring.d.ts +25 -0
  277. package/dist/lib/focus-ring.js +25 -0
  278. package/dist/lib/font-context.d.ts +1 -1
  279. package/dist/lib/font-context.js +6 -4
  280. package/dist/lib/frosted-surface.d.ts +0 -1
  281. package/dist/lib/frosted-surface.js +31 -6
  282. package/dist/lib/interaction-tokens.d.ts +12 -1
  283. package/dist/lib/interaction-tokens.js +27 -13
  284. package/dist/lib/motion-policy.d.ts +25 -0
  285. package/dist/lib/motion-policy.js +97 -0
  286. package/dist/lib/overlay-insets.d.ts +17 -0
  287. package/dist/lib/overlay-insets.js +23 -0
  288. package/dist/lib/portal.d.ts +0 -1
  289. package/dist/lib/portal.js +0 -1
  290. package/dist/lib/react-native-classname.d.ts +0 -1
  291. package/dist/lib/react-native-classname.js +0 -1
  292. package/dist/lib/recipes.d.ts +30 -0
  293. package/dist/lib/recipes.js +138 -0
  294. package/dist/lib/ref-types.d.ts +3 -0
  295. package/dist/lib/ref-types.js +1 -0
  296. package/dist/lib/tap-only.d.ts +11 -0
  297. package/dist/lib/tap-only.js +24 -0
  298. package/dist/lib/theme-bridge.d.ts +4 -3
  299. package/dist/lib/theme-bridge.js +24 -12
  300. package/dist/lib/theme-colors.d.ts +2 -46
  301. package/dist/lib/theme-colors.js +25 -226
  302. package/dist/lib/theme-contract.d.ts +78 -0
  303. package/dist/lib/theme-contract.js +481 -0
  304. package/dist/lib/theme-derive.d.ts +4 -0
  305. package/dist/lib/theme-derive.js +80 -0
  306. package/dist/lib/theme-presets.d.ts +31 -0
  307. package/dist/lib/theme-presets.js +221 -0
  308. package/dist/lib/tv.d.ts +0 -1
  309. package/dist/lib/tv.js +0 -1
  310. package/dist/lib/visual-token-contract.d.ts +110 -0
  311. package/dist/lib/visual-token-contract.js +583 -0
  312. package/dist/lib/visual-tokens.d.ts +2 -38
  313. package/dist/lib/visual-tokens.js +22 -75
  314. package/dist/tokens.d.ts +4 -0
  315. package/dist/tokens.js +6 -0
  316. package/dist/vite.d.ts +0 -1
  317. package/dist/vite.js +0 -1
  318. package/package.json +40 -29
  319. package/dist/blocks/auth/forgot-password-form.d.ts +0 -10
  320. package/dist/blocks/auth/forgot-password-form.d.ts.map +0 -1
  321. package/dist/blocks/auth/forgot-password-form.js +0 -17
  322. package/dist/blocks/auth/forgot-password-form.js.map +0 -1
  323. package/dist/blocks/auth/index.d.ts +0 -8
  324. package/dist/blocks/auth/index.d.ts.map +0 -1
  325. package/dist/blocks/auth/index.js +0 -8
  326. package/dist/blocks/auth/index.js.map +0 -1
  327. package/dist/blocks/auth/reset-password-form.d.ts +0 -9
  328. package/dist/blocks/auth/reset-password-form.d.ts.map +0 -1
  329. package/dist/blocks/auth/reset-password-form.js +0 -16
  330. package/dist/blocks/auth/reset-password-form.js.map +0 -1
  331. package/dist/blocks/auth/sign-in-form.d.ts +0 -17
  332. package/dist/blocks/auth/sign-in-form.d.ts.map +0 -1
  333. package/dist/blocks/auth/sign-in-form.js +0 -19
  334. package/dist/blocks/auth/sign-in-form.js.map +0 -1
  335. package/dist/blocks/auth/sign-up-form.d.ts +0 -17
  336. package/dist/blocks/auth/sign-up-form.d.ts.map +0 -1
  337. package/dist/blocks/auth/sign-up-form.js +0 -21
  338. package/dist/blocks/auth/sign-up-form.js.map +0 -1
  339. package/dist/blocks/auth/social-connections.d.ts +0 -10
  340. package/dist/blocks/auth/social-connections.d.ts.map +0 -1
  341. package/dist/blocks/auth/social-connections.js +0 -8
  342. package/dist/blocks/auth/social-connections.js.map +0 -1
  343. package/dist/blocks/auth/user-menu.d.ts +0 -12
  344. package/dist/blocks/auth/user-menu.d.ts.map +0 -1
  345. package/dist/blocks/auth/user-menu.js +0 -10
  346. package/dist/blocks/auth/user-menu.js.map +0 -1
  347. package/dist/blocks/auth/verify-email-form.d.ts +0 -10
  348. package/dist/blocks/auth/verify-email-form.d.ts.map +0 -1
  349. package/dist/blocks/auth/verify-email-form.js +0 -17
  350. package/dist/blocks/auth/verify-email-form.js.map +0 -1
  351. package/dist/blocks/chat/chat.d.ts.map +0 -1
  352. package/dist/blocks/chat/chat.js.map +0 -1
  353. package/dist/blocks/chat/index.d.ts.map +0 -1
  354. package/dist/blocks/chat/index.js.map +0 -1
  355. package/dist/blocks/commerce/checkout-summary.d.ts.map +0 -1
  356. package/dist/blocks/commerce/checkout-summary.js.map +0 -1
  357. package/dist/blocks/commerce/feature-gate.d.ts.map +0 -1
  358. package/dist/blocks/commerce/feature-gate.js.map +0 -1
  359. package/dist/blocks/commerce/index.d.ts.map +0 -1
  360. package/dist/blocks/commerce/index.js.map +0 -1
  361. package/dist/blocks/commerce/metric-card.d.ts.map +0 -1
  362. package/dist/blocks/commerce/metric-card.js.map +0 -1
  363. package/dist/blocks/commerce/plan-toggle.d.ts.map +0 -1
  364. package/dist/blocks/commerce/plan-toggle.js.map +0 -1
  365. package/dist/blocks/commerce/pricing-card.d.ts.map +0 -1
  366. package/dist/blocks/commerce/pricing-card.js.map +0 -1
  367. package/dist/blocks/commerce/product-card.d.ts.map +0 -1
  368. package/dist/blocks/commerce/product-card.js.map +0 -1
  369. package/dist/blocks/commerce/subscription-card.d.ts.map +0 -1
  370. package/dist/blocks/commerce/subscription-card.js.map +0 -1
  371. package/dist/blocks/commerce/upgrade-banner.d.ts.map +0 -1
  372. package/dist/blocks/commerce/upgrade-banner.js.map +0 -1
  373. package/dist/blocks/commerce/usage-bar.d.ts.map +0 -1
  374. package/dist/blocks/commerce/usage-bar.js.map +0 -1
  375. package/dist/blocks/datepicker/date-range-picker-modal.d.ts.map +0 -1
  376. package/dist/blocks/datepicker/date-range-picker-modal.js.map +0 -1
  377. package/dist/blocks/datepicker/datepicker-inline.d.ts.map +0 -1
  378. package/dist/blocks/datepicker/datepicker-inline.js.map +0 -1
  379. package/dist/blocks/datepicker/datepicker-modal.d.ts.map +0 -1
  380. package/dist/blocks/datepicker/datepicker-modal.js.map +0 -1
  381. package/dist/blocks/datepicker/index.d.ts.map +0 -1
  382. package/dist/blocks/datepicker/index.js.map +0 -1
  383. package/dist/blocks/datepicker/use-calendar-theme.d.ts.map +0 -1
  384. package/dist/blocks/datepicker/use-calendar-theme.js.map +0 -1
  385. package/dist/blocks/layout/action-bar.d.ts.map +0 -1
  386. package/dist/blocks/layout/action-bar.js.map +0 -1
  387. package/dist/blocks/layout/app-shell.d.ts.map +0 -1
  388. package/dist/blocks/layout/app-shell.js.map +0 -1
  389. package/dist/blocks/layout/confirm-action-sheet.d.ts.map +0 -1
  390. package/dist/blocks/layout/confirm-action-sheet.js.map +0 -1
  391. package/dist/blocks/layout/content-skeleton.d.ts.map +0 -1
  392. package/dist/blocks/layout/content-skeleton.js.map +0 -1
  393. package/dist/blocks/layout/empty-state.d.ts.map +0 -1
  394. package/dist/blocks/layout/empty-state.js.map +0 -1
  395. package/dist/blocks/layout/error-boundary.d.ts.map +0 -1
  396. package/dist/blocks/layout/error-boundary.js.map +0 -1
  397. package/dist/blocks/layout/error-state.d.ts.map +0 -1
  398. package/dist/blocks/layout/error-state.js.map +0 -1
  399. package/dist/blocks/layout/form-modal-screen.d.ts.map +0 -1
  400. package/dist/blocks/layout/form-modal-screen.js.map +0 -1
  401. package/dist/blocks/layout/index.d.ts.map +0 -1
  402. package/dist/blocks/layout/index.js.map +0 -1
  403. package/dist/blocks/layout/loading-screen.d.ts.map +0 -1
  404. package/dist/blocks/layout/loading-screen.js.map +0 -1
  405. package/dist/blocks/layout/onboarding-screen.d.ts +0 -19
  406. package/dist/blocks/layout/onboarding-screen.d.ts.map +0 -1
  407. package/dist/blocks/layout/onboarding-screen.js +0 -35
  408. package/dist/blocks/layout/onboarding-screen.js.map +0 -1
  409. package/dist/blocks/layout/page-skeleton.d.ts.map +0 -1
  410. package/dist/blocks/layout/page-skeleton.js.map +0 -1
  411. package/dist/blocks/layout/pull-to-refresh-scroll-view.d.ts.map +0 -1
  412. package/dist/blocks/layout/pull-to-refresh-scroll-view.js.map +0 -1
  413. package/dist/blocks/layout/screen-skeleton.d.ts.map +0 -1
  414. package/dist/blocks/layout/screen-skeleton.js.map +0 -1
  415. package/dist/blocks/layout/sheet.d.ts.map +0 -1
  416. package/dist/blocks/layout/sheet.js.map +0 -1
  417. package/dist/blocks/layout/smart-image.d.ts +0 -9
  418. package/dist/blocks/layout/smart-image.d.ts.map +0 -1
  419. package/dist/blocks/layout/smart-image.js +0 -23
  420. package/dist/blocks/layout/smart-image.js.map +0 -1
  421. package/dist/blocks/layout/smart-input.d.ts.map +0 -1
  422. package/dist/blocks/layout/smart-input.js.map +0 -1
  423. package/dist/blocks/lists/index.d.ts.map +0 -1
  424. package/dist/blocks/lists/index.js.map +0 -1
  425. package/dist/blocks/lists/list-item.d.ts.map +0 -1
  426. package/dist/blocks/lists/list-item.js.map +0 -1
  427. package/dist/blocks/lists/notification-item.d.ts.map +0 -1
  428. package/dist/blocks/lists/notification-item.js.map +0 -1
  429. package/dist/blocks/lists/swipeable-item.d.ts +0 -17
  430. package/dist/blocks/lists/swipeable-item.d.ts.map +0 -1
  431. package/dist/blocks/lists/swipeable-item.js +0 -65
  432. package/dist/blocks/lists/swipeable-item.js.map +0 -1
  433. package/dist/blocks/lists/timeline-feed.d.ts.map +0 -1
  434. package/dist/blocks/lists/timeline-feed.js.map +0 -1
  435. package/dist/blocks/media/index.d.ts.map +0 -1
  436. package/dist/blocks/media/index.js.map +0 -1
  437. package/dist/blocks/media/smart-image.d.ts.map +0 -1
  438. package/dist/blocks/media/smart-image.js.map +0 -1
  439. package/dist/blocks/navigation/bottom-nav.d.ts.map +0 -1
  440. package/dist/blocks/navigation/bottom-nav.js.map +0 -1
  441. package/dist/blocks/navigation/drawer-menu.d.ts.map +0 -1
  442. package/dist/blocks/navigation/drawer-menu.js.map +0 -1
  443. package/dist/blocks/navigation/floating-bottom-nav.d.ts.map +0 -1
  444. package/dist/blocks/navigation/floating-bottom-nav.js.map +0 -1
  445. package/dist/blocks/navigation/header.d.ts.map +0 -1
  446. package/dist/blocks/navigation/header.js.map +0 -1
  447. package/dist/blocks/navigation/index.d.ts.map +0 -1
  448. package/dist/blocks/navigation/index.js.map +0 -1
  449. package/dist/blocks/navigation/navigation-sidebar.d.ts +0 -25
  450. package/dist/blocks/navigation/navigation-sidebar.d.ts.map +0 -1
  451. package/dist/blocks/navigation/navigation-sidebar.js +0 -18
  452. package/dist/blocks/navigation/navigation-sidebar.js.map +0 -1
  453. package/dist/blocks/navigation/tab-bar.d.ts.map +0 -1
  454. package/dist/blocks/navigation/tab-bar.js.map +0 -1
  455. package/dist/blocks/profile/account-card.d.ts +0 -11
  456. package/dist/blocks/profile/account-card.d.ts.map +0 -1
  457. package/dist/blocks/profile/account-card.js +0 -10
  458. package/dist/blocks/profile/account-card.js.map +0 -1
  459. package/dist/blocks/profile/index.d.ts +0 -5
  460. package/dist/blocks/profile/index.d.ts.map +0 -1
  461. package/dist/blocks/profile/index.js +0 -5
  462. package/dist/blocks/profile/index.js.map +0 -1
  463. package/dist/blocks/profile/profile-header.d.ts +0 -27
  464. package/dist/blocks/profile/profile-header.d.ts.map +0 -1
  465. package/dist/blocks/profile/profile-header.js +0 -11
  466. package/dist/blocks/profile/profile-header.js.map +0 -1
  467. package/dist/blocks/profile/settings-item.d.ts +0 -15
  468. package/dist/blocks/profile/settings-item.d.ts.map +0 -1
  469. package/dist/blocks/profile/settings-item.js +0 -11
  470. package/dist/blocks/profile/settings-item.js.map +0 -1
  471. package/dist/blocks/profile/settings-section.d.ts +0 -7
  472. package/dist/blocks/profile/settings-section.d.ts.map +0 -1
  473. package/dist/blocks/profile/settings-section.js +0 -9
  474. package/dist/blocks/profile/settings-section.js.map +0 -1
  475. package/dist/blocks/splash/index.d.ts.map +0 -1
  476. package/dist/blocks/splash/index.js.map +0 -1
  477. package/dist/blocks/splash/splash-screen.d.ts.map +0 -1
  478. package/dist/blocks/splash/splash-screen.js.map +0 -1
  479. package/dist/components/accordion/accordion.d.ts.map +0 -1
  480. package/dist/components/accordion/accordion.js.map +0 -1
  481. package/dist/components/accordion/index.d.ts.map +0 -1
  482. package/dist/components/accordion/index.js.map +0 -1
  483. package/dist/components/alert/alert.d.ts.map +0 -1
  484. package/dist/components/alert/alert.js.map +0 -1
  485. package/dist/components/alert/index.d.ts.map +0 -1
  486. package/dist/components/alert/index.js.map +0 -1
  487. package/dist/components/alert-dialog/alert-dialog.d.ts.map +0 -1
  488. package/dist/components/alert-dialog/alert-dialog.js.map +0 -1
  489. package/dist/components/alert-dialog/index.d.ts.map +0 -1
  490. package/dist/components/alert-dialog/index.js.map +0 -1
  491. package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +0 -1
  492. package/dist/components/aspect-ratio/aspect-ratio.js.map +0 -1
  493. package/dist/components/aspect-ratio/index.d.ts.map +0 -1
  494. package/dist/components/aspect-ratio/index.js.map +0 -1
  495. package/dist/components/avatar/avatar.d.ts.map +0 -1
  496. package/dist/components/avatar/avatar.js.map +0 -1
  497. package/dist/components/avatar/index.d.ts.map +0 -1
  498. package/dist/components/avatar/index.js.map +0 -1
  499. package/dist/components/badge/badge.d.ts.map +0 -1
  500. package/dist/components/badge/badge.js.map +0 -1
  501. package/dist/components/badge/index.d.ts.map +0 -1
  502. package/dist/components/badge/index.js.map +0 -1
  503. package/dist/components/box/box.d.ts +0 -143
  504. package/dist/components/box/box.d.ts.map +0 -1
  505. package/dist/components/box/box.js +0 -38
  506. package/dist/components/box/box.js.map +0 -1
  507. package/dist/components/box/index.d.ts +0 -2
  508. package/dist/components/box/index.d.ts.map +0 -1
  509. package/dist/components/box/index.js +0 -2
  510. package/dist/components/box/index.js.map +0 -1
  511. package/dist/components/button/button.d.ts.map +0 -1
  512. package/dist/components/button/button.js.map +0 -1
  513. package/dist/components/button/index.d.ts.map +0 -1
  514. package/dist/components/button/index.js.map +0 -1
  515. package/dist/components/card/card.d.ts.map +0 -1
  516. package/dist/components/card/card.js.map +0 -1
  517. package/dist/components/card/index.d.ts.map +0 -1
  518. package/dist/components/card/index.js.map +0 -1
  519. package/dist/components/checkbox/checkbox.d.ts.map +0 -1
  520. package/dist/components/checkbox/checkbox.js.map +0 -1
  521. package/dist/components/checkbox/index.d.ts.map +0 -1
  522. package/dist/components/checkbox/index.js.map +0 -1
  523. package/dist/components/collapsible/collapsible.d.ts.map +0 -1
  524. package/dist/components/collapsible/collapsible.js.map +0 -1
  525. package/dist/components/collapsible/index.d.ts.map +0 -1
  526. package/dist/components/collapsible/index.js.map +0 -1
  527. package/dist/components/context-menu/context-menu.d.ts.map +0 -1
  528. package/dist/components/context-menu/context-menu.js.map +0 -1
  529. package/dist/components/context-menu/index.d.ts.map +0 -1
  530. package/dist/components/context-menu/index.js.map +0 -1
  531. package/dist/components/data-row/data-row.d.ts.map +0 -1
  532. package/dist/components/data-row/data-row.js.map +0 -1
  533. package/dist/components/data-row/index.d.ts.map +0 -1
  534. package/dist/components/data-row/index.js.map +0 -1
  535. package/dist/components/dialog/dialog.d.ts.map +0 -1
  536. package/dist/components/dialog/dialog.js.map +0 -1
  537. package/dist/components/dialog/index.d.ts.map +0 -1
  538. package/dist/components/dialog/index.js.map +0 -1
  539. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
  540. package/dist/components/dropdown-menu/dropdown-menu.js.map +0 -1
  541. package/dist/components/dropdown-menu/index.d.ts.map +0 -1
  542. package/dist/components/dropdown-menu/index.js.map +0 -1
  543. package/dist/components/form-field/form-field.d.ts.map +0 -1
  544. package/dist/components/form-field/form-field.js.map +0 -1
  545. package/dist/components/form-field/index.d.ts.map +0 -1
  546. package/dist/components/form-field/index.js.map +0 -1
  547. package/dist/components/hover-card/hover-card.d.ts.map +0 -1
  548. package/dist/components/hover-card/hover-card.js.map +0 -1
  549. package/dist/components/hover-card/index.d.ts.map +0 -1
  550. package/dist/components/hover-card/index.js.map +0 -1
  551. package/dist/components/input/index.d.ts.map +0 -1
  552. package/dist/components/input/index.js.map +0 -1
  553. package/dist/components/input/input.d.ts.map +0 -1
  554. package/dist/components/input/input.js.map +0 -1
  555. package/dist/components/label/index.d.ts.map +0 -1
  556. package/dist/components/label/index.js.map +0 -1
  557. package/dist/components/label/label.d.ts.map +0 -1
  558. package/dist/components/label/label.js.map +0 -1
  559. package/dist/components/labeled-field/index.d.ts.map +0 -1
  560. package/dist/components/labeled-field/index.js.map +0 -1
  561. package/dist/components/labeled-field/labeled-field.d.ts.map +0 -1
  562. package/dist/components/labeled-field/labeled-field.js.map +0 -1
  563. package/dist/components/layout/index.d.ts +0 -2
  564. package/dist/components/layout/index.d.ts.map +0 -1
  565. package/dist/components/layout/index.js +0 -2
  566. package/dist/components/layout/index.js.map +0 -1
  567. package/dist/components/layout/layout.d.ts +0 -395
  568. package/dist/components/layout/layout.d.ts.map +0 -1
  569. package/dist/components/layout/layout.js +0 -93
  570. package/dist/components/layout/layout.js.map +0 -1
  571. package/dist/components/menubar/index.d.ts.map +0 -1
  572. package/dist/components/menubar/index.js.map +0 -1
  573. package/dist/components/menubar/menubar.d.ts.map +0 -1
  574. package/dist/components/menubar/menubar.js.map +0 -1
  575. package/dist/components/numeric-input/index.d.ts.map +0 -1
  576. package/dist/components/numeric-input/index.js.map +0 -1
  577. package/dist/components/numeric-input/numeric-input.d.ts.map +0 -1
  578. package/dist/components/numeric-input/numeric-input.js.map +0 -1
  579. package/dist/components/otp-input/index.d.ts.map +0 -1
  580. package/dist/components/otp-input/index.js.map +0 -1
  581. package/dist/components/otp-input/otp-input.d.ts.map +0 -1
  582. package/dist/components/otp-input/otp-input.js.map +0 -1
  583. package/dist/components/popover/index.d.ts.map +0 -1
  584. package/dist/components/popover/index.js.map +0 -1
  585. package/dist/components/popover/popover.d.ts.map +0 -1
  586. package/dist/components/popover/popover.js.map +0 -1
  587. package/dist/components/pressable/index.d.ts.map +0 -1
  588. package/dist/components/pressable/index.js.map +0 -1
  589. package/dist/components/pressable/pressable.d.ts.map +0 -1
  590. package/dist/components/pressable/pressable.js.map +0 -1
  591. package/dist/components/progress/index.d.ts.map +0 -1
  592. package/dist/components/progress/index.js.map +0 -1
  593. package/dist/components/progress/progress.d.ts.map +0 -1
  594. package/dist/components/progress/progress.js.map +0 -1
  595. package/dist/components/radio-group/index.d.ts.map +0 -1
  596. package/dist/components/radio-group/index.js.map +0 -1
  597. package/dist/components/radio-group/radio-group.d.ts.map +0 -1
  598. package/dist/components/radio-group/radio-group.js.map +0 -1
  599. package/dist/components/row/index.d.ts.map +0 -1
  600. package/dist/components/row/index.js.map +0 -1
  601. package/dist/components/row/row.d.ts.map +0 -1
  602. package/dist/components/row/row.js.map +0 -1
  603. package/dist/components/segmented-control/index.d.ts.map +0 -1
  604. package/dist/components/segmented-control/index.js.map +0 -1
  605. package/dist/components/segmented-control/segmented-control.d.ts.map +0 -1
  606. package/dist/components/segmented-control/segmented-control.js.map +0 -1
  607. package/dist/components/select/index.d.ts.map +0 -1
  608. package/dist/components/select/index.js.map +0 -1
  609. package/dist/components/select/select.d.ts.map +0 -1
  610. package/dist/components/select/select.js.map +0 -1
  611. package/dist/components/separator/index.d.ts.map +0 -1
  612. package/dist/components/separator/index.js.map +0 -1
  613. package/dist/components/separator/separator.d.ts.map +0 -1
  614. package/dist/components/separator/separator.js.map +0 -1
  615. package/dist/components/skeleton/index.d.ts.map +0 -1
  616. package/dist/components/skeleton/index.js.map +0 -1
  617. package/dist/components/skeleton/skeleton.d.ts.map +0 -1
  618. package/dist/components/skeleton/skeleton.js.map +0 -1
  619. package/dist/components/spinner/index.d.ts.map +0 -1
  620. package/dist/components/spinner/index.js.map +0 -1
  621. package/dist/components/spinner/spinner.d.ts.map +0 -1
  622. package/dist/components/spinner/spinner.js.map +0 -1
  623. package/dist/components/stack/index.d.ts.map +0 -1
  624. package/dist/components/stack/index.js.map +0 -1
  625. package/dist/components/stack/stack.d.ts.map +0 -1
  626. package/dist/components/stack/stack.js.map +0 -1
  627. package/dist/components/switch/index.d.ts.map +0 -1
  628. package/dist/components/switch/index.js.map +0 -1
  629. package/dist/components/switch/switch.d.ts.map +0 -1
  630. package/dist/components/switch/switch.js.map +0 -1
  631. package/dist/components/tabs/index.d.ts.map +0 -1
  632. package/dist/components/tabs/index.js.map +0 -1
  633. package/dist/components/tabs/tabs.d.ts.map +0 -1
  634. package/dist/components/tabs/tabs.js.map +0 -1
  635. package/dist/components/text/index.d.ts.map +0 -1
  636. package/dist/components/text/index.js.map +0 -1
  637. package/dist/components/text/text.d.ts.map +0 -1
  638. package/dist/components/text/text.js.map +0 -1
  639. package/dist/components/textarea/index.d.ts.map +0 -1
  640. package/dist/components/textarea/index.js.map +0 -1
  641. package/dist/components/textarea/textarea.d.ts.map +0 -1
  642. package/dist/components/textarea/textarea.js.map +0 -1
  643. package/dist/components/toast/index.d.ts.map +0 -1
  644. package/dist/components/toast/index.js.map +0 -1
  645. package/dist/components/toast/toast.d.ts.map +0 -1
  646. package/dist/components/toast/toast.js.map +0 -1
  647. package/dist/components/toggle/index.d.ts.map +0 -1
  648. package/dist/components/toggle/index.js.map +0 -1
  649. package/dist/components/toggle/toggle.d.ts.map +0 -1
  650. package/dist/components/toggle/toggle.js.map +0 -1
  651. package/dist/components/toggle-group/index.d.ts.map +0 -1
  652. package/dist/components/toggle-group/index.js.map +0 -1
  653. package/dist/components/toggle-group/toggle-group.d.ts.map +0 -1
  654. package/dist/components/toggle-group/toggle-group.js.map +0 -1
  655. package/dist/components/tooltip/index.d.ts.map +0 -1
  656. package/dist/components/tooltip/index.js.map +0 -1
  657. package/dist/components/tooltip/tooltip.d.ts.map +0 -1
  658. package/dist/components/tooltip/tooltip.js.map +0 -1
  659. package/dist/components/view/index.d.ts.map +0 -1
  660. package/dist/components/view/index.js.map +0 -1
  661. package/dist/components/view/view.d.ts.map +0 -1
  662. package/dist/components/view/view.js.map +0 -1
  663. package/dist/index.d.ts.map +0 -1
  664. package/dist/index.js.map +0 -1
  665. package/dist/lib/cn.d.ts.map +0 -1
  666. package/dist/lib/cn.js.map +0 -1
  667. package/dist/lib/font-context.d.ts.map +0 -1
  668. package/dist/lib/font-context.js.map +0 -1
  669. package/dist/lib/frosted-surface.d.ts.map +0 -1
  670. package/dist/lib/frosted-surface.js.map +0 -1
  671. package/dist/lib/index.d.ts +0 -6
  672. package/dist/lib/index.d.ts.map +0 -1
  673. package/dist/lib/index.js +0 -6
  674. package/dist/lib/index.js.map +0 -1
  675. package/dist/lib/interaction-tokens.d.ts.map +0 -1
  676. package/dist/lib/interaction-tokens.js.map +0 -1
  677. package/dist/lib/portal.d.ts.map +0 -1
  678. package/dist/lib/portal.js.map +0 -1
  679. package/dist/lib/react-native-classname.d.ts.map +0 -1
  680. package/dist/lib/react-native-classname.js.map +0 -1
  681. package/dist/lib/theme-bridge.d.ts.map +0 -1
  682. package/dist/lib/theme-bridge.js.map +0 -1
  683. package/dist/lib/theme-colors.d.ts.map +0 -1
  684. package/dist/lib/theme-colors.js.map +0 -1
  685. package/dist/lib/tv.d.ts.map +0 -1
  686. package/dist/lib/tv.js.map +0 -1
  687. package/dist/lib/visual-tokens.d.ts.map +0 -1
  688. package/dist/lib/visual-tokens.js.map +0 -1
  689. package/dist/vite.d.ts.map +0 -1
  690. package/dist/vite.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * One focus treatment for every interactive component.
3
+ *
4
+ * Web needs this and native does not: React Native has no `:focus-visible`, and the
5
+ * platforms draw their own focus for hardware keyboards and TV remotes. So these classes
6
+ * are scoped with Uniwind's `web:` selector and compile to nothing elsewhere.
7
+ *
8
+ * `focus-visible`, not `focus`. `:focus` also fires on mouse press, which puts a ring on
9
+ * a button someone just clicked — visually noisy, and it trains people to ignore the ring
10
+ * that keyboard users actually depend on.
11
+ *
12
+ * WCAG 2.4.7 (Focus Visible, AA) requires an indicator. Several components here removed
13
+ * the browser default with `outline-none` and replaced it with nothing, which is the
14
+ * failure this exists to fix — the outline is only safe to remove if a ring takes over.
15
+ *
16
+ * The offset keeps the ring outside the control's own border so the two do not merge
17
+ * into one thick smudge, and `ring-offset-background` fills that gap with the surface
18
+ * colour rather than letting the ring sit on whatever is behind.
19
+ */
20
+ export const focusRing = 'web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2 web:focus-visible:ring-offset-background';
21
+ /**
22
+ * For controls drawn flush against an edge or inside a dense row, where an offset ring
23
+ * would be clipped by the parent or collide with a neighbour.
24
+ */
25
+ export const focusRingInset = 'web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring';
@@ -17,6 +17,7 @@ export interface FontFamilyMap {
17
17
  }
18
18
  export interface ResolvedFont {
19
19
  fontFamily: string;
20
+ paddingRight?: number;
20
21
  }
21
22
  export declare const FontProvider: import("react").Provider<FontFamilyMap | null>;
22
23
  export interface ResolvedFontResult {
@@ -36,4 +37,3 @@ export interface ResolvedFontResult {
36
37
  * ensures the style prop is the sole source of font info.
37
38
  */
38
39
  export declare function useResolveFontFamily(className?: string): ResolvedFontResult | undefined;
39
- //# sourceMappingURL=font-context.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import { createContext, useContext } from 'react';
2
+ import { Platform } from 'react-native';
2
3
  const FontContext = createContext(null);
3
4
  export const FontProvider = FontContext.Provider;
4
5
  const FONT_WEIGHT_RE = /\bfont-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)\b/g;
@@ -15,18 +16,20 @@ export function useResolveFontFamily(className) {
15
16
  const map = useContext(FontContext);
16
17
  if (!map)
17
18
  return undefined;
19
+ const isNative = Platform.OS !== 'web';
20
+ const paddingRight = isNative ? 4 : undefined;
18
21
  if (!className)
19
22
  return {
20
- style: { fontFamily: map['font-normal'] },
23
+ style: { fontFamily: map['font-normal'], paddingRight },
21
24
  className: '',
22
25
  };
23
26
  const classes = className.split(/\s+/);
24
- let resolved = { fontFamily: map['font-normal'] };
27
+ let resolved = { fontFamily: map['font-normal'], paddingRight };
25
28
  for (let i = classes.length - 1; i >= 0; i--) {
26
29
  const cls = classes[i];
27
30
  const mapped = map[cls];
28
31
  if (mapped) {
29
- resolved = { fontFamily: mapped };
32
+ resolved = { fontFamily: mapped, paddingRight };
30
33
  break;
31
34
  }
32
35
  }
@@ -38,4 +41,3 @@ export function useResolveFontFamily(className) {
38
41
  .trim(),
39
42
  };
40
43
  }
41
- //# sourceMappingURL=font-context.js.map
@@ -30,4 +30,3 @@ interface UseFrostedBackdropOptions {
30
30
  }
31
31
  export declare function useFrostedBackdrop({ frosted, blurIntensity, tintColor, }: UseFrostedBackdropOptions): React.ReactNode;
32
32
  export {};
33
- //# sourceMappingURL=frosted-surface.d.ts.map
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Platform, StyleSheet, View } from 'react-native';
3
3
  import { useUniwind } from 'uniwind';
4
+ import { formatRgb, parse } from 'culori';
4
5
  import { useThemeColors } from './theme-colors';
5
6
  import { useVisualTokens } from './visual-tokens';
6
7
  let cachedBlurViewComponent;
@@ -47,6 +48,26 @@ function resolveTintColor(colors, tintToken) {
47
48
  return colors.surfaceTranslucent;
48
49
  return colors.surfaceElevated;
49
50
  }
51
+ function scaleColorAlpha(color, alphaScale) {
52
+ if (alphaScale === 1)
53
+ return color;
54
+ try {
55
+ const parsed = parse(color);
56
+ if (!parsed)
57
+ return color;
58
+ const currentAlpha = typeof parsed.alpha === 'number' ? parsed.alpha : 1;
59
+ if (currentAlpha >= 1)
60
+ return color;
61
+ const nextColor = {
62
+ ...parsed,
63
+ alpha: Math.min(1, Math.max(0, currentAlpha * alphaScale)),
64
+ };
65
+ return formatRgb(nextColor) ?? color;
66
+ }
67
+ catch {
68
+ return color;
69
+ }
70
+ }
50
71
  function resolveBlurIntensity(visualTokens, blurIntensity, preset) {
51
72
  if (typeof blurIntensity === 'number' && Number.isFinite(blurIntensity)) {
52
73
  return Math.max(0, Math.round(blurIntensity));
@@ -60,7 +81,7 @@ function resolveBlurIntensity(visualTokens, blurIntensity, preset) {
60
81
  function getInsetAbsoluteFillStyle() {
61
82
  const inset = Math.max(0, StyleSheet.hairlineWidth);
62
83
  if (inset <= 0) {
63
- return StyleSheet.absoluteFillObject;
84
+ return StyleSheet.absoluteFill;
64
85
  }
65
86
  return {
66
87
  position: 'absolute',
@@ -79,7 +100,7 @@ function FrostedOverlay({ intensity, tintColor, highlightColor, saturationPct, h
79
100
  : undefined;
80
101
  const showHighlight = highlightHeight > 0;
81
102
  const blurFill = getInsetAbsoluteFillStyle();
82
- const tintFill = StyleSheet.absoluteFillObject;
103
+ const tintFill = StyleSheet.absoluteFill;
83
104
  const highlightInset = Math.max(0, StyleSheet.hairlineWidth);
84
105
  if (!BlurView && Platform.OS === 'web') {
85
106
  const webStyle = {
@@ -128,7 +149,7 @@ function FrostedBackdropOverlay({ intensity, tintColor, saturationPct, androidEx
128
149
  ? { experimentalBlurMethod: 'dimezisBlurView' }
129
150
  : undefined;
130
151
  const blurFill = getInsetAbsoluteFillStyle();
131
- const tintFill = StyleSheet.absoluteFillObject;
152
+ const tintFill = StyleSheet.absoluteFill;
132
153
  if (!BlurView && Platform.OS === 'web') {
133
154
  const webStyle = {
134
155
  backdropFilter: `blur(${intensity}px) saturate(${saturationPct}%)`,
@@ -153,6 +174,9 @@ export function useFrostedSurface({ frosted = false, blurIntensity, blurTintToke
153
174
  }
154
175
  const tintToken = blurTintToken ?? defaultTintToken;
155
176
  const tintColor = resolveTintColor(colors, tintToken);
177
+ const resolvedTintColor = Platform.OS === 'android'
178
+ ? scaleColorAlpha(tintColor, visualTokens.androidFrostedTintAlphaScale)
179
+ : tintColor;
156
180
  const intensity = resolveBlurIntensity(visualTokens, blurIntensity, defaultBlurPreset);
157
181
  const highlightColor = colors.surfaceHighlight;
158
182
  const highlightHeight = visualTokens.frostedHighlightHeight;
@@ -160,7 +184,7 @@ export function useFrostedSurface({ frosted = false, blurIntensity, blurTintToke
160
184
  const androidExperimentalBlurEnabled = visualTokens.androidExperimentalBlurEnabled;
161
185
  return {
162
186
  frosted: true,
163
- overlay: (_jsx(FrostedOverlay, { intensity: intensity, tintColor: tintColor, highlightColor: highlightColor, highlightHeight: highlightHeight, saturationPct: saturationPct, androidExperimentalBlurEnabled: androidExperimentalBlurEnabled })),
187
+ overlay: (_jsx(FrostedOverlay, { intensity: intensity, tintColor: resolvedTintColor, highlightColor: highlightColor, highlightHeight: highlightHeight, saturationPct: saturationPct, androidExperimentalBlurEnabled: androidExperimentalBlurEnabled })),
164
188
  surfaceStyle: {
165
189
  backgroundColor: 'transparent',
166
190
  borderColor: colors.surfaceBorder,
@@ -175,7 +199,8 @@ export function useFrostedBackdrop({ frosted = false, blurIntensity, tintColor,
175
199
  const intensity = typeof blurIntensity === 'number' && Number.isFinite(blurIntensity)
176
200
  ? Math.max(0, Math.round(blurIntensity))
177
201
  : visualTokens.frostedBackdropBlurIntensity;
178
- const resolvedTintColor = tintColor ?? colors.overlay;
202
+ const resolvedTintColor = Platform.OS === 'android'
203
+ ? scaleColorAlpha(tintColor ?? colors.overlay, visualTokens.androidFrostedTintAlphaScale)
204
+ : (tintColor ?? colors.overlay);
179
205
  return (_jsx(FrostedBackdropOverlay, { intensity: intensity, tintColor: resolvedTintColor, saturationPct: visualTokens.blurSaturationPct, androidExperimentalBlurEnabled: visualTokens.androidExperimentalBlurEnabled }));
180
206
  }
181
- //# sourceMappingURL=frosted-surface.js.map
@@ -1,4 +1,13 @@
1
1
  import { type PressableProps } from 'react-native';
2
+ /** Motion values used when a `--ui-motion-*` token is absent, and by the provider-less motion policy. */
3
+ export declare const MOTION_TOKEN_DEFAULTS: {
4
+ readonly motionFast: 140;
5
+ readonly motionNormal: 200;
6
+ readonly motionSlow: 280;
7
+ readonly motionSpringDamping: 20;
8
+ readonly motionSpringStiffness: 260;
9
+ readonly motionSpringMass: 0.8;
10
+ };
2
11
  export interface InteractionTokens {
3
12
  pressOpacity: number;
4
13
  pressOpacityStrong: number;
@@ -9,6 +18,9 @@ export interface InteractionTokens {
9
18
  motionFast: number;
10
19
  motionNormal: number;
11
20
  motionSlow: number;
21
+ motionSpringDamping: number;
22
+ motionSpringStiffness: number;
23
+ motionSpringMass: number;
12
24
  drawerOpenDuration: number;
13
25
  drawerCloseDuration: number;
14
26
  }
@@ -23,4 +35,3 @@ export declare function useInteractionTokens(): InteractionTokens;
23
35
  type PressableStyle = PressableProps['style'];
24
36
  export declare function withInteractivePressableStyle(styleProp: PressableStyle | undefined, tokens: InteractionTokens, options?: InteractivePressableOptions): PressableStyle;
25
37
  export {};
26
- //# sourceMappingURL=interaction-tokens.d.ts.map
@@ -8,8 +8,17 @@ function parseNumber(value, fallback) {
8
8
  function clampOpacity(value) {
9
9
  return Math.max(0, Math.min(1, value));
10
10
  }
11
+ /** Motion values used when a `--ui-motion-*` token is absent, and by the provider-less motion policy. */
12
+ export const MOTION_TOKEN_DEFAULTS = {
13
+ motionFast: 140,
14
+ motionNormal: 200,
15
+ motionSlow: 280,
16
+ motionSpringDamping: 20,
17
+ motionSpringStiffness: 260,
18
+ motionSpringMass: 0.8,
19
+ };
11
20
  export function useInteractionTokens() {
12
- const [pressOpacity, pressOpacityStrong, disabledOpacity, disabledOpacitySoft, disabledOpacitySubtle, inactiveOpacity, motionFast, motionNormal, motionSlow, drawerOpenDuration, drawerCloseDuration,] = useCSSVariable([
21
+ const [pressOpacity, pressOpacityStrong, disabledOpacity, disabledOpacitySoft, disabledOpacitySubtle, inactiveOpacity, motionFast, motionNormal, motionSlow, motionSpringDamping, motionSpringStiffness, motionSpringMass, drawerOpenDuration, drawerCloseDuration,] = useCSSVariable([
13
22
  '--ui-press-opacity',
14
23
  '--ui-press-opacity-strong',
15
24
  '--ui-disabled-opacity',
@@ -19,21 +28,27 @@ export function useInteractionTokens() {
19
28
  '--ui-motion-fast',
20
29
  '--ui-motion-normal',
21
30
  '--ui-motion-slow',
31
+ '--ui-motion-spring-damping',
32
+ '--ui-motion-spring-stiffness',
33
+ '--ui-motion-spring-mass',
22
34
  '--ui-drawer-open-duration',
23
35
  '--ui-drawer-close-duration',
24
36
  ]);
25
37
  return {
26
- pressOpacity: clampOpacity(parseNumber(pressOpacity, 0.72)),
27
- pressOpacityStrong: clampOpacity(parseNumber(pressOpacityStrong, 0.9)),
28
- disabledOpacity: clampOpacity(parseNumber(disabledOpacity, 0.5)),
29
- disabledOpacitySoft: clampOpacity(parseNumber(disabledOpacitySoft, 0.6)),
30
- disabledOpacitySubtle: clampOpacity(parseNumber(disabledOpacitySubtle, 0.4)),
31
- inactiveOpacity: clampOpacity(parseNumber(inactiveOpacity, 0.5)),
32
- motionFast: Math.max(0, Math.round(parseNumber(motionFast, 160))),
33
- motionNormal: Math.max(0, Math.round(parseNumber(motionNormal, 220))),
34
- motionSlow: Math.max(0, Math.round(parseNumber(motionSlow, 300))),
35
- drawerOpenDuration: Math.max(0, Math.round(parseNumber(drawerOpenDuration, 300))),
36
- drawerCloseDuration: Math.max(0, Math.round(parseNumber(drawerCloseDuration, 220))),
38
+ pressOpacity: clampOpacity(parseNumber(pressOpacity, 0.82)),
39
+ pressOpacityStrong: clampOpacity(parseNumber(pressOpacityStrong, 0.92)),
40
+ disabledOpacity: clampOpacity(parseNumber(disabledOpacity, 0.46)),
41
+ disabledOpacitySoft: clampOpacity(parseNumber(disabledOpacitySoft, 0.56)),
42
+ disabledOpacitySubtle: clampOpacity(parseNumber(disabledOpacitySubtle, 0.36)),
43
+ inactiveOpacity: clampOpacity(parseNumber(inactiveOpacity, 0.54)),
44
+ motionFast: Math.max(0, Math.round(parseNumber(motionFast, MOTION_TOKEN_DEFAULTS.motionFast))),
45
+ motionNormal: Math.max(0, Math.round(parseNumber(motionNormal, MOTION_TOKEN_DEFAULTS.motionNormal))),
46
+ motionSlow: Math.max(0, Math.round(parseNumber(motionSlow, MOTION_TOKEN_DEFAULTS.motionSlow))),
47
+ motionSpringDamping: Math.max(0, parseNumber(motionSpringDamping, MOTION_TOKEN_DEFAULTS.motionSpringDamping)),
48
+ motionSpringStiffness: Math.max(0, parseNumber(motionSpringStiffness, MOTION_TOKEN_DEFAULTS.motionSpringStiffness)),
49
+ motionSpringMass: Math.max(0.01, parseNumber(motionSpringMass, MOTION_TOKEN_DEFAULTS.motionSpringMass)),
50
+ drawerOpenDuration: Math.max(0, Math.round(parseNumber(drawerOpenDuration, 260))),
51
+ drawerCloseDuration: Math.max(0, Math.round(parseNumber(drawerCloseDuration, 180))),
37
52
  };
38
53
  }
39
54
  function resolveDisabledOpacity(tokens, variant) {
@@ -67,4 +82,3 @@ export function withInteractivePressableStyle(styleProp, tokens, options = {}) {
67
82
  ];
68
83
  };
69
84
  }
70
- //# sourceMappingURL=interaction-tokens.js.map
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { ReduceMotion } from 'react-native-reanimated';
3
+ export type MotionMode = 'system' | 'reduced' | 'full' | 'disabled';
4
+ export type MotionDuration = 'fast' | 'normal' | 'slow';
5
+ export type MotionSpring = 'responsive';
6
+ export interface MotionSpringConfig {
7
+ damping: number;
8
+ stiffness: number;
9
+ mass: number;
10
+ reduceMotion: ReduceMotion;
11
+ }
12
+ export interface MotionPolicy {
13
+ mode: MotionMode;
14
+ reduceMotion: boolean;
15
+ animationsEnabled: boolean;
16
+ durations: Readonly<Record<MotionDuration, number>>;
17
+ springs: Readonly<Record<MotionSpring, Readonly<MotionSpringConfig>>>;
18
+ reanimatedReduceMotion: ReduceMotion;
19
+ }
20
+ export interface MotionProviderProps {
21
+ children: React.ReactNode;
22
+ mode?: MotionMode;
23
+ }
24
+ export declare function MotionProvider({ children, mode }: MotionProviderProps): React.JSX.Element;
25
+ export declare function useMotionPolicy(): MotionPolicy;
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useMemo, useState } from 'react';
3
+ import { AccessibilityInfo } from 'react-native';
4
+ import { ReduceMotion, useReducedMotion } from 'react-native-reanimated';
5
+ import { MOTION_TOKEN_DEFAULTS, useInteractionTokens } from './interaction-tokens';
6
+ // Without a provider, components still render and Reanimated still follows the system
7
+ // setting. Only `--ui-motion-*` overrides and the non-Reanimated reduced-motion paths
8
+ // need `MotionProvider` at the root.
9
+ const DEFAULT_MOTION_POLICY = {
10
+ mode: 'system',
11
+ reduceMotion: false,
12
+ animationsEnabled: true,
13
+ durations: {
14
+ fast: MOTION_TOKEN_DEFAULTS.motionFast,
15
+ normal: MOTION_TOKEN_DEFAULTS.motionNormal,
16
+ slow: MOTION_TOKEN_DEFAULTS.motionSlow,
17
+ },
18
+ springs: {
19
+ responsive: {
20
+ damping: MOTION_TOKEN_DEFAULTS.motionSpringDamping,
21
+ stiffness: MOTION_TOKEN_DEFAULTS.motionSpringStiffness,
22
+ mass: MOTION_TOKEN_DEFAULTS.motionSpringMass,
23
+ reduceMotion: ReduceMotion.System,
24
+ },
25
+ },
26
+ reanimatedReduceMotion: ReduceMotion.System,
27
+ };
28
+ const MotionPolicyContext = createContext(DEFAULT_MOTION_POLICY);
29
+ function useSystemReducedMotion(active) {
30
+ const initialValue = useReducedMotion();
31
+ const [enabled, setEnabled] = useState(initialValue);
32
+ useEffect(() => {
33
+ if (!active)
34
+ return;
35
+ let mounted = true;
36
+ void AccessibilityInfo.isReduceMotionEnabled()
37
+ .then((value) => {
38
+ if (mounted)
39
+ setEnabled(value);
40
+ })
41
+ .catch(() => {
42
+ // Keep Reanimated's startup snapshot if the native query is unavailable.
43
+ });
44
+ const subscription = AccessibilityInfo.addEventListener('reduceMotionChanged', setEnabled);
45
+ return () => {
46
+ mounted = false;
47
+ subscription.remove();
48
+ };
49
+ }, [active]);
50
+ return enabled;
51
+ }
52
+ export function MotionProvider({ children, mode = 'system' }) {
53
+ const interaction = useInteractionTokens();
54
+ const systemReducedMotion = useSystemReducedMotion(mode === 'system');
55
+ const relevantSystemValue = mode === 'system' ? systemReducedMotion : false;
56
+ const policy = useMemo(() => {
57
+ const reduceMotion = mode === 'reduced' || mode === 'disabled' || (mode === 'system' && relevantSystemValue);
58
+ const animationsEnabled = mode !== 'disabled';
59
+ const reanimatedReduceMotion = mode === 'system'
60
+ ? ReduceMotion.System
61
+ : mode === 'full'
62
+ ? ReduceMotion.Never
63
+ : ReduceMotion.Always;
64
+ return {
65
+ mode,
66
+ reduceMotion,
67
+ animationsEnabled,
68
+ durations: {
69
+ fast: animationsEnabled ? interaction.motionFast : 0,
70
+ normal: animationsEnabled ? interaction.motionNormal : 0,
71
+ slow: animationsEnabled ? interaction.motionSlow : 0,
72
+ },
73
+ springs: {
74
+ responsive: {
75
+ damping: interaction.motionSpringDamping,
76
+ stiffness: interaction.motionSpringStiffness,
77
+ mass: interaction.motionSpringMass,
78
+ reduceMotion: reanimatedReduceMotion,
79
+ },
80
+ },
81
+ reanimatedReduceMotion,
82
+ };
83
+ }, [
84
+ interaction.motionFast,
85
+ interaction.motionNormal,
86
+ interaction.motionSlow,
87
+ interaction.motionSpringDamping,
88
+ interaction.motionSpringMass,
89
+ interaction.motionSpringStiffness,
90
+ mode,
91
+ relevantSystemValue,
92
+ ]);
93
+ return _jsx(MotionPolicyContext.Provider, { value: policy, children: children });
94
+ }
95
+ export function useMotionPolicy() {
96
+ return useContext(MotionPolicyContext);
97
+ }
@@ -0,0 +1,17 @@
1
+ export interface OverlayInsets {
2
+ top: number;
3
+ bottom: number;
4
+ left: number;
5
+ right: number;
6
+ }
7
+ /**
8
+ * Collision padding for anything that floats: popovers, dropdowns, context menus.
9
+ *
10
+ * Without it these are only clamped to the viewport, so a trigger near an edge produces
11
+ * a panel sitting flush against it — touching the screen edge on web, and sliding under
12
+ * the notch or home indicator on a device. Both read as broken rather than deliberate.
13
+ *
14
+ * Safe area plus a margin, so the result clears the hardware and still leaves the panel
15
+ * looking placed rather than jammed. Callers can override per instance.
16
+ */
17
+ export declare function useOverlayInsets(): OverlayInsets;
@@ -0,0 +1,23 @@
1
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
2
+ import { useVisualTokens } from './visual-tokens';
3
+ /**
4
+ * Collision padding for anything that floats: popovers, dropdowns, context menus.
5
+ *
6
+ * Without it these are only clamped to the viewport, so a trigger near an edge produces
7
+ * a panel sitting flush against it — touching the screen edge on web, and sliding under
8
+ * the notch or home indicator on a device. Both read as broken rather than deliberate.
9
+ *
10
+ * Safe area plus a margin, so the result clears the hardware and still leaves the panel
11
+ * looking placed rather than jammed. Callers can override per instance.
12
+ */
13
+ export function useOverlayInsets() {
14
+ const safeArea = useSafeAreaInsets();
15
+ const visual = useVisualTokens();
16
+ const margin = visual.surfacePaddingSm;
17
+ return {
18
+ top: safeArea.top + margin,
19
+ bottom: safeArea.bottom + margin,
20
+ left: safeArea.left + margin,
21
+ right: safeArea.right + margin,
22
+ };
23
+ }
@@ -19,4 +19,3 @@
19
19
  * ```
20
20
  */
21
21
  export { PortalHost } from '@rn-primitives/portal';
22
- //# sourceMappingURL=portal.d.ts.map
@@ -19,4 +19,3 @@
19
19
  * ```
20
20
  */
21
21
  export { PortalHost } from '@rn-primitives/portal';
22
- //# sourceMappingURL=portal.js.map
@@ -20,4 +20,3 @@ declare module 'react-native' {
20
20
  }
21
21
  }
22
22
  export {};
23
- //# sourceMappingURL=react-native-classname.d.ts.map
@@ -1,2 +1 @@
1
1
  import 'react-native';
2
- //# sourceMappingURL=react-native-classname.js.map
@@ -0,0 +1,30 @@
1
+ import type { TextStyle, ViewStyle } from 'react-native';
2
+ import { type ThemeColors } from './theme-colors';
3
+ import { type VisualTokens } from './visual-tokens';
4
+ /**
5
+ * Shared style recipes.
6
+ * Components consume these instead of hardcoding radius/height/padding/font
7
+ * classes so a theme (color contract + visual token contract) can fully
8
+ * restyle the package.
9
+ */
10
+ export type ControlSize = 'sm' | 'default' | 'lg' | 'icon';
11
+ export type SurfacePaddingSize = 'none' | 'sm' | 'default' | 'lg';
12
+ export type ShadowTier = 'none' | 'sm' | 'md' | 'lg';
13
+ export type TypographyRole = 'caption' | 'label' | 'body' | 'emphasis' | 'title' | 'headline';
14
+ export declare function controlRecipe(visual: VisualTokens, size?: ControlSize): ViewStyle;
15
+ export declare function fieldRecipe(visual: VisualTokens, size?: ControlSize): ViewStyle;
16
+ export interface SurfaceRecipeOptions {
17
+ padding?: SurfacePaddingSize;
18
+ radius?: 'sm' | 'md' | 'lg' | 'xl';
19
+ bordered?: boolean;
20
+ }
21
+ export declare function surfacePadding(visual: VisualTokens, padding?: SurfacePaddingSize): number;
22
+ export declare function surfaceRadius(visual: VisualTokens, radius?: 'sm' | 'md' | 'lg' | 'xl'): number;
23
+ export declare function surfaceRecipe(visual: VisualTokens, options?: SurfaceRecipeOptions): ViewStyle;
24
+ export declare function shadowStyle(visual: VisualTokens, colors: ThemeColors, tier: ShadowTier): ViewStyle;
25
+ export declare function typographyStyle(visual: VisualTokens, role: TypographyRole): TextStyle;
26
+ export declare function useControlRecipe(size?: ControlSize): ViewStyle;
27
+ export declare function useFieldRecipe(size?: ControlSize): ViewStyle;
28
+ export declare function useSurfaceRecipe(options?: SurfaceRecipeOptions): ViewStyle;
29
+ export declare function useShadowStyle(tier: ShadowTier): ViewStyle;
30
+ export declare function useTypography(role: TypographyRole): TextStyle;
@@ -0,0 +1,138 @@
1
+ import { useThemeColors } from './theme-colors';
2
+ import { useVisualTokens } from './visual-tokens';
3
+ export function controlRecipe(visual, size = 'default') {
4
+ if (size === 'sm') {
5
+ return {
6
+ minHeight: visual.controlHeightSm,
7
+ borderRadius: visual.radiusMd,
8
+ paddingHorizontal: visual.controlPaddingXSm,
9
+ paddingVertical: visual.controlPaddingYSm,
10
+ };
11
+ }
12
+ if (size === 'lg') {
13
+ return {
14
+ minHeight: visual.controlHeightLg,
15
+ borderRadius: visual.radiusXl,
16
+ paddingHorizontal: visual.controlPaddingXLg,
17
+ paddingVertical: visual.controlPaddingYLg,
18
+ };
19
+ }
20
+ if (size === 'icon') {
21
+ return {
22
+ minHeight: visual.controlHeightDefault,
23
+ minWidth: visual.controlHeightDefault,
24
+ width: visual.controlHeightDefault,
25
+ borderRadius: visual.radiusLg,
26
+ paddingHorizontal: 0,
27
+ paddingVertical: 0,
28
+ };
29
+ }
30
+ return {
31
+ minHeight: visual.controlHeightDefault,
32
+ borderRadius: visual.radiusLg,
33
+ paddingHorizontal: visual.controlPaddingXDefault,
34
+ paddingVertical: visual.controlPaddingYDefault,
35
+ };
36
+ }
37
+ export function fieldRecipe(visual, size = 'default') {
38
+ const base = controlRecipe(visual, size);
39
+ return {
40
+ ...base,
41
+ borderWidth: visual.borderWidthControl,
42
+ };
43
+ }
44
+ export function surfacePadding(visual, padding = 'default') {
45
+ if (padding === 'none')
46
+ return 0;
47
+ if (padding === 'sm')
48
+ return visual.surfacePaddingSm;
49
+ if (padding === 'lg')
50
+ return visual.surfacePaddingLg;
51
+ return visual.surfacePaddingDefault;
52
+ }
53
+ export function surfaceRadius(visual, radius = 'xl') {
54
+ if (radius === 'sm')
55
+ return visual.radiusSm;
56
+ if (radius === 'md')
57
+ return visual.radiusMd;
58
+ if (radius === 'lg')
59
+ return visual.radiusLg;
60
+ return visual.radiusXl;
61
+ }
62
+ export function surfaceRecipe(visual, options = {}) {
63
+ const { padding = 'default', radius = 'xl', bordered = true } = options;
64
+ return {
65
+ borderRadius: surfaceRadius(visual, radius),
66
+ padding: surfacePadding(visual, padding),
67
+ ...(bordered ? { borderWidth: visual.borderWidthHairline } : null),
68
+ };
69
+ }
70
+ export function shadowStyle(visual, colors, tier) {
71
+ if (tier === 'none')
72
+ return {};
73
+ const opacity = tier === 'sm'
74
+ ? visual.shadowOpacitySm
75
+ : tier === 'md'
76
+ ? visual.shadowOpacityMd
77
+ : visual.shadowOpacityLg;
78
+ const radius = tier === 'sm'
79
+ ? visual.shadowRadiusSm
80
+ : tier === 'md'
81
+ ? visual.shadowRadiusMd
82
+ : visual.shadowRadiusLg;
83
+ const offsetY = tier === 'sm'
84
+ ? visual.shadowOffsetYSm
85
+ : tier === 'md'
86
+ ? visual.shadowOffsetYMd
87
+ : visual.shadowOffsetYLg;
88
+ const elevation = tier === 'sm'
89
+ ? visual.shadowElevationSm
90
+ : tier === 'md'
91
+ ? visual.shadowElevationMd
92
+ : visual.shadowElevationLg;
93
+ if (opacity <= 0)
94
+ return {};
95
+ return {
96
+ shadowColor: colors.shadow,
97
+ shadowOpacity: opacity,
98
+ shadowRadius: radius,
99
+ shadowOffset: { width: 0, height: offsetY },
100
+ elevation,
101
+ };
102
+ }
103
+ // Component-owned text sizes. Font family/weight stays on className
104
+ // (font-medium etc.) so app font mappings keep working.
105
+ export function typographyStyle(visual, role) {
106
+ if (role === 'caption')
107
+ return {
108
+ fontSize: visual.fontSizeXs,
109
+ letterSpacing: visual.letterSpacingCaption,
110
+ };
111
+ if (role === 'label')
112
+ return { fontSize: visual.fontSizeSm, letterSpacing: visual.letterSpacingLabel };
113
+ if (role === 'emphasis')
114
+ return { fontSize: visual.fontSizeLg, letterSpacing: visual.letterSpacingBody };
115
+ if (role === 'title')
116
+ return { fontSize: visual.fontSizeXl, letterSpacing: visual.letterSpacingTitle };
117
+ if (role === 'headline')
118
+ return {
119
+ fontSize: visual.fontSize2xl,
120
+ letterSpacing: visual.letterSpacingHeadline,
121
+ };
122
+ return { fontSize: visual.fontSizeBase, letterSpacing: visual.letterSpacingBody };
123
+ }
124
+ export function useControlRecipe(size = 'default') {
125
+ return controlRecipe(useVisualTokens(), size);
126
+ }
127
+ export function useFieldRecipe(size = 'default') {
128
+ return fieldRecipe(useVisualTokens(), size);
129
+ }
130
+ export function useSurfaceRecipe(options = {}) {
131
+ return surfaceRecipe(useVisualTokens(), options);
132
+ }
133
+ export function useShadowStyle(tier) {
134
+ return shadowStyle(useVisualTokens(), useThemeColors(), tier);
135
+ }
136
+ export function useTypography(role) {
137
+ return typographyStyle(useVisualTokens(), role);
138
+ }
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+ /** A named public shape for ref-forwarding components under React Native's Strict API. */
3
+ export type ForwardRefComponent<TInstance, TProps> = React.ForwardRefExoticComponent<React.PropsWithoutRef<TProps> & React.RefAttributes<TInstance>>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { GestureResponderEvent } from 'react-native';
2
+ /**
3
+ * Press handlers that fire only for a tap, not for a drag that happens to start and
4
+ * end inside the same view. A `Pressable` keeps a press alive while the finger stays
5
+ * within its bounds, so on a full-screen backdrop every swipe was also a tap and
6
+ * dismissed the overlay. Ten points is the platform touch slop.
7
+ */
8
+ export declare function useTapOnly(onTap: () => void, slop?: number): {
9
+ onPressIn: (event: GestureResponderEvent) => void;
10
+ onPress: (event: GestureResponderEvent) => void;
11
+ };