@12-apps/ui 6.17.0 → 6.18.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 (732) hide show
  1. package/NATIVE.md +94 -0
  2. package/components-catalog.md +23 -0
  3. package/components-guidelines.md +16 -1
  4. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  5. package/dist/_internal/components/data-display/CardKit/CardKebab.js +10 -4
  6. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +10 -4
  7. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +10 -4
  8. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +9 -4
  9. package/dist/_internal/components/data-display/Carousel/Carousel.js +11 -6
  10. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +8 -3
  11. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +8 -3
  12. package/dist/_internal/components/data-display/Chart/Chart.js +11 -6
  13. package/dist/_internal/components/data-display/Chart/SpecChart.js +12 -7
  14. package/dist/_internal/components/data-display/Chart/chart-context.js +9 -4
  15. package/dist/_internal/components/data-display/Chart/chart-internals.js +8 -3
  16. package/dist/_internal/components/data-display/Chart/chart-renderers.js +10 -5
  17. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +1 -1
  18. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +8 -2
  19. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +50 -43
  20. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +70 -63
  21. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +12 -5
  22. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +16 -9
  23. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +16 -9
  24. package/dist/_internal/components/data-display/DataViews/base-card.js +8 -2
  25. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +10 -4
  26. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +9 -3
  27. package/dist/_internal/components/data-display/DataViews/base-list-card.js +13 -7
  28. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +10 -10
  29. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +8 -2
  30. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +11 -5
  31. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +15 -8
  32. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +8 -2
  33. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +12 -5
  34. package/dist/_internal/components/data-display/DataViews/data-views-export.js +12 -5
  35. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  36. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +16 -9
  37. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +10 -4
  38. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +47 -40
  39. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +8 -2
  40. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +24 -17
  41. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +8 -2
  42. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +13 -6
  43. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  44. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +12 -5
  45. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +19 -12
  46. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +21 -14
  47. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +18 -11
  48. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +12 -5
  49. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +8 -2
  50. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +12 -6
  51. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  52. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +8 -2
  53. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  54. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  55. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +8 -3
  56. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  57. package/dist/_internal/components/data-display/Sheet/Sheet.js +12 -7
  58. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +8 -3
  59. package/dist/_internal/components/data-display/index.js +68 -61
  60. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +10 -4
  61. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  62. package/dist/_internal/components/feedback/index.js +27 -21
  63. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
  64. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +6 -6
  65. package/dist/_internal/components/form/Button/Button.base.js +1 -0
  66. package/dist/_internal/components/form/Button/Button.base.js.map +1 -0
  67. package/dist/_internal/components/form/Button/Button.helpers.js +1 -1
  68. package/dist/_internal/components/form/Button/Button.js +9 -3
  69. package/dist/_internal/components/form/Button/Button.metrics.js +47 -0
  70. package/dist/_internal/components/form/Button/Button.metrics.js.map +1 -0
  71. package/dist/_internal/components/form/Button/Button.styles.js +6 -1
  72. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  73. package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
  74. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  75. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  76. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  77. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  78. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  79. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  80. package/dist/_internal/components/form/CepField/CepField.js +4 -4
  81. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
  82. package/dist/_internal/components/form/Command/Command.js +9 -4
  83. package/dist/_internal/components/form/Command/Command.styles.js +8 -3
  84. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +2 -2
  85. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
  86. package/dist/_internal/components/form/Form/Form.js +1 -1
  87. package/dist/_internal/components/form/Input/Input.js +2 -2
  88. package/dist/_internal/components/form/Label/Label.js +9 -4
  89. package/dist/_internal/components/form/Label/Label.styles.js +8 -3
  90. package/dist/_internal/components/form/Menubar/Menubar.item.js +9 -4
  91. package/dist/_internal/components/form/Menubar/Menubar.js +12 -7
  92. package/dist/_internal/components/form/Menubar/Menubar.styles.js +8 -3
  93. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +10 -5
  94. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  95. package/dist/_internal/components/form/index.js +95 -88
  96. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  97. package/dist/_internal/components/form/total-form/Fields/CepField.js +5 -5
  98. package/dist/_internal/components/form/total-form/Fields/SelectField.js +2 -2
  99. package/dist/_internal/components/form/total-form/Fields/TextField.js +4 -4
  100. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +2 -2
  101. package/dist/_internal/components/form/total-form/Fields/index.js +24 -24
  102. package/dist/_internal/components/form/total-form/FormContainer.js +2 -2
  103. package/dist/_internal/components/form/total-form/SubmitButton.js +10 -4
  104. package/dist/_internal/components/index.js +261 -253
  105. package/dist/_internal/components/layout/Box/Box.base.js +8 -0
  106. package/dist/_internal/components/layout/Box/Box.base.js.map +1 -0
  107. package/dist/_internal/components/layout/Box/Box.js +22 -0
  108. package/dist/_internal/components/layout/Box/Box.js.map +1 -0
  109. package/dist/_internal/components/layout/Box/Box.types.js +8 -0
  110. package/dist/_internal/components/layout/Box/Box.types.js.map +1 -0
  111. package/dist/_internal/components/layout/Box/box-layout.js +11 -0
  112. package/dist/_internal/components/layout/Box/box-layout.js.map +1 -0
  113. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
  114. package/dist/_internal/components/layout/Stack/Stack.base.js +1 -0
  115. package/dist/_internal/components/layout/Stack/Stack.base.js.map +1 -0
  116. package/dist/_internal/components/layout/Stack/Stack.js +22 -0
  117. package/dist/_internal/components/layout/Stack/Stack.js.map +1 -0
  118. package/dist/_internal/components/layout/Stack/Stack.types.js +1 -0
  119. package/dist/_internal/components/layout/Stack/Stack.types.js.map +1 -0
  120. package/dist/_internal/components/layout/Stack/with-dividers.js +8 -0
  121. package/dist/_internal/components/layout/Stack/with-dividers.js.map +1 -0
  122. package/dist/_internal/components/layout/index.js +19 -19
  123. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +18 -11
  124. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +8 -3
  125. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  126. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +3 -3
  127. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +5 -5
  128. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  129. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +3 -3
  130. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  131. package/dist/_internal/components/navigation/index.js +38 -31
  132. package/dist/_internal/components/typography/Heading/Heading.js +4 -3
  133. package/dist/_internal/components/typography/Heading/Heading.styles.js +3 -2
  134. package/dist/_internal/components/typography/Text/Text.base.js +1 -0
  135. package/dist/_internal/components/typography/Text/Text.base.js.map +1 -0
  136. package/dist/_internal/components/typography/Text/Text.js +7 -1
  137. package/dist/_internal/components/typography/Text/Text.metrics.js +34 -0
  138. package/dist/_internal/components/typography/Text/Text.metrics.js.map +1 -0
  139. package/dist/_internal/components/typography/index.js +13 -7
  140. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  141. package/dist/_internal/components/utility/index.js +26 -26
  142. package/dist/_internal/icons/Icon.js +21 -0
  143. package/dist/_internal/icons/Icon.js.map +1 -0
  144. package/dist/_internal/icons/Icon.types.js +10 -0
  145. package/dist/_internal/icons/Icon.types.js.map +1 -0
  146. package/dist/_internal/icons/icon-color.js +10 -0
  147. package/dist/_internal/icons/icon-color.js.map +1 -0
  148. package/dist/_internal/icons/paths.generated.js +10 -0
  149. package/dist/_internal/icons/paths.generated.js.map +1 -0
  150. package/dist/_internal/platform/test-id.js +12 -0
  151. package/dist/_internal/platform/test-id.js.map +1 -0
  152. package/dist/_internal/provider/UiProvider.js +17 -0
  153. package/dist/_internal/provider/UiProvider.js.map +1 -0
  154. package/dist/_internal/provider/UiProvider.types.js +8 -0
  155. package/dist/_internal/provider/UiProvider.types.js.map +1 -0
  156. package/dist/_internal/provider/mui-bridge.js +17 -0
  157. package/dist/_internal/provider/mui-bridge.js.map +1 -0
  158. package/dist/_internal/provider/ui-theme-context.js +9 -0
  159. package/dist/_internal/provider/ui-theme-context.js.map +1 -0
  160. package/dist/_internal/provider/use-ui-theme.js +16 -0
  161. package/dist/_internal/provider/use-ui-theme.js.map +1 -0
  162. package/dist/_internal/social-login-button/social-login-button.js +15 -8
  163. package/dist/_internal/tokens/color.js +26 -0
  164. package/dist/_internal/tokens/color.js.map +1 -0
  165. package/dist/_internal/tokens/css-units.js +10 -0
  166. package/dist/_internal/tokens/css-units.js.map +1 -0
  167. package/dist/_internal/tokens/heading-scale.js +10 -0
  168. package/dist/_internal/tokens/heading-scale.js.map +1 -0
  169. package/dist/_internal/tokens/theme.js +33 -0
  170. package/dist/_internal/tokens/theme.js.map +1 -0
  171. package/dist/_internal/tokens/typography.js +5 -3
  172. package/dist/_internal/tokens/vocabulary.js +22 -0
  173. package/dist/_internal/tokens/vocabulary.js.map +1 -0
  174. package/dist/_internal/user-avatar/user-avatar.js +12 -5
  175. package/dist/charts.js +12 -7
  176. package/dist/{chunk-IAQFQNBL.js → chunk-24BUCMQA.js} +15 -9
  177. package/dist/chunk-24BUCMQA.js.map +1 -0
  178. package/dist/{chunk-GFBNUWT5.js → chunk-2EKALM6P.js} +6 -6
  179. package/dist/{chunk-VRHBJXZ7.js → chunk-2PCOC3PT.js} +62 -42
  180. package/dist/chunk-2PCOC3PT.js.map +1 -0
  181. package/dist/{chunk-ISW5K72V.js → chunk-2ZRZTGWP.js} +5 -5
  182. package/dist/{chunk-3ORFVLI3.js → chunk-37YPZHAG.js} +2 -2
  183. package/dist/{chunk-EB4BTKKY.js → chunk-3AFUWDYS.js} +4 -4
  184. package/dist/{chunk-HR7YTBR7.js → chunk-3AOOI2NR.js} +4 -4
  185. package/dist/{chunk-PKJKA4CU.js → chunk-3ZFORMNT.js} +4 -4
  186. package/dist/{chunk-PLK7UGO6.js → chunk-4EJSUL62.js} +3 -3
  187. package/dist/{chunk-WMALDOF5.js → chunk-4G3FGCWX.js} +4 -4
  188. package/dist/chunk-4GGH6ZQ7.js +14 -0
  189. package/dist/chunk-4GGH6ZQ7.js.map +1 -0
  190. package/dist/{chunk-2PPWKCMW.js → chunk-4N4ENTF7.js} +2 -2
  191. package/dist/{chunk-6CBYPMYQ.js → chunk-4R2CDZOQ.js} +4 -4
  192. package/dist/{chunk-FJHNNSD3.js → chunk-4WK2RTVY.js} +5 -5
  193. package/dist/{chunk-6U7NA74A.js → chunk-5HOJSVQH.js} +2 -2
  194. package/dist/{chunk-2XGM5PDA.js → chunk-624TFFLJ.js} +5 -3
  195. package/dist/{chunk-2XGM5PDA.js.map → chunk-624TFFLJ.js.map} +1 -1
  196. package/dist/{chunk-QETBO7EC.js → chunk-67LDIJQZ.js} +2 -2
  197. package/dist/chunk-6JAIFIPW.js +111 -0
  198. package/dist/chunk-6JAIFIPW.js.map +1 -0
  199. package/dist/{chunk-X4X4CVWJ.js → chunk-6JZE4IIN.js} +2 -2
  200. package/dist/{chunk-LUWATXU4.js → chunk-74KMXBG3.js} +10 -10
  201. package/dist/{chunk-ZDWU52DJ.js → chunk-7AR2R7TV.js} +4 -4
  202. package/dist/{chunk-B6IURHSZ.js → chunk-7DNQHMDO.js} +4 -4
  203. package/dist/{chunk-G7CFUI4I.js → chunk-7EESF76V.js} +2 -2
  204. package/dist/chunk-7JXLGOM2.js +25 -0
  205. package/dist/chunk-7JXLGOM2.js.map +1 -0
  206. package/dist/{chunk-AX7UFG2U.js → chunk-7RZ4WOQW.js} +3 -3
  207. package/dist/chunk-7V6ZRQYW.js +90 -0
  208. package/dist/chunk-7V6ZRQYW.js.map +1 -0
  209. package/dist/chunk-7ZPUN7TV.js +29 -0
  210. package/dist/chunk-7ZPUN7TV.js.map +1 -0
  211. package/dist/chunk-AG66JBNH.js +21 -0
  212. package/dist/chunk-AG66JBNH.js.map +1 -0
  213. package/dist/{chunk-WFX5GASM.js → chunk-B7BZAIHL.js} +2 -2
  214. package/dist/{chunk-RX6DWIIW.js → chunk-BILE3A7F.js} +3 -3
  215. package/dist/{chunk-XSKVBGCZ.js → chunk-BLBOYCOV.js} +6 -6
  216. package/dist/{chunk-4Y65Q3CR.js → chunk-C52BELLW.js} +3 -3
  217. package/dist/{chunk-QCIWROKG.js → chunk-CGQI4XE5.js} +5 -3
  218. package/dist/{chunk-QCIWROKG.js.map → chunk-CGQI4XE5.js.map} +1 -1
  219. package/dist/{chunk-RP3W6IQO.js → chunk-CPNSVIIB.js} +5 -5
  220. package/dist/{chunk-T4SM36XC.js → chunk-D7FJ2GAD.js} +2 -2
  221. package/dist/{chunk-SCGVB7DS.js → chunk-DOADQW7I.js} +2 -2
  222. package/dist/{chunk-RIAIJTEW.js → chunk-DOMEYGTN.js} +2 -2
  223. package/dist/{chunk-7HPPUO2A.js → chunk-DQHC5P64.js} +3 -3
  224. package/dist/{chunk-W2UTDN4T.js → chunk-DWZ7FLA7.js} +4 -4
  225. package/dist/{chunk-24LW52EU.js → chunk-DX527XPL.js} +2 -2
  226. package/dist/{chunk-OK5BHFZE.js → chunk-E6OILRUU.js} +2 -2
  227. package/dist/{chunk-A4YWFX5C.js → chunk-ENNW5SKT.js} +2 -2
  228. package/dist/{chunk-BPYPUEM5.js → chunk-EPNCYUQ7.js} +5 -5
  229. package/dist/{chunk-MUAVYVDJ.js → chunk-EW7ZNSWU.js} +5 -5
  230. package/dist/{chunk-DWUMMMLR.js → chunk-FOMK3WPG.js} +2 -2
  231. package/dist/{chunk-RQ4EQ5FJ.js → chunk-FP4R47TM.js} +2 -2
  232. package/dist/{chunk-7CA6GVBO.js → chunk-FZXKH2ZT.js} +3 -7
  233. package/dist/chunk-FZXKH2ZT.js.map +1 -0
  234. package/dist/{chunk-SHQWIDD5.js → chunk-GJQYM3PM.js} +4 -4
  235. package/dist/{chunk-WEH5TCPE.js → chunk-GSTRPZS4.js} +8 -8
  236. package/dist/chunk-H2EQVMU3.js +49 -0
  237. package/dist/chunk-H2EQVMU3.js.map +1 -0
  238. package/dist/{chunk-WC3W36AM.js → chunk-HOJL2GKW.js} +4 -4
  239. package/dist/{chunk-PMFW55F5.js → chunk-HSAH5QUQ.js} +5 -5
  240. package/dist/{chunk-A3KY6NUA.js → chunk-IH4CX43Q.js} +2 -2
  241. package/dist/{chunk-HEDOL2RV.js → chunk-IJIT5HQP.js} +3 -3
  242. package/dist/{chunk-VZO7VREP.js → chunk-IPPTOL53.js} +2 -2
  243. package/dist/chunk-IPPTOL53.js.map +1 -0
  244. package/dist/{chunk-VR5HDUBK.js → chunk-IPS55KWK.js} +2 -2
  245. package/dist/chunk-ITGG5OKP.js +86 -0
  246. package/dist/chunk-ITGG5OKP.js.map +1 -0
  247. package/dist/{chunk-ELYLG4F7.js → chunk-J54WH74M.js} +4 -4
  248. package/dist/chunk-J6UFAMIC.js +19 -0
  249. package/dist/chunk-J6UFAMIC.js.map +1 -0
  250. package/dist/{chunk-5ZOJLYD2.js → chunk-JE6RZ5L6.js} +4 -4
  251. package/dist/{chunk-NYUGX76C.js → chunk-JT6TERQL.js} +20 -17
  252. package/dist/chunk-JT6TERQL.js.map +1 -0
  253. package/dist/chunk-KLREH4X6.js +16 -0
  254. package/dist/chunk-KLREH4X6.js.map +1 -0
  255. package/dist/{chunk-EY4LPLIR.js → chunk-KQ74QU55.js} +3 -3
  256. package/dist/{chunk-XULTDO56.js → chunk-KT6HWAEN.js} +2 -2
  257. package/dist/{chunk-COSJTD6Z.js → chunk-KZSKI2R3.js} +2 -2
  258. package/dist/{chunk-DQIQKIEA.js → chunk-L5ZZJ4XE.js} +3 -3
  259. package/dist/{chunk-SFAP5EH5.js → chunk-LUMF63BM.js} +4 -4
  260. package/dist/{chunk-LIQHOLDQ.js → chunk-LYMAMKJT.js} +2 -2
  261. package/dist/{chunk-6RFL7HGI.js → chunk-LZRURORY.js} +4 -4
  262. package/dist/{chunk-KXNWDXR7.js → chunk-M2K7BPHX.js} +2 -2
  263. package/dist/{chunk-WLDK74RR.js → chunk-MSUSZLRE.js} +2 -2
  264. package/dist/{chunk-EE2LBAJH.js → chunk-MUVJD26L.js} +10 -10
  265. package/dist/{chunk-VVXRIPV5.js → chunk-MY5VNNSP.js} +9 -9
  266. package/dist/{chunk-JPDKRGYI.js → chunk-MZQTHSLN.js} +3 -3
  267. package/dist/{chunk-FF55LRSV.js → chunk-NETZMGQP.js} +2 -2
  268. package/dist/{chunk-3QGRQNTP.js → chunk-NFAKRI4S.js} +6 -6
  269. package/dist/{chunk-KSF7TLXH.js → chunk-NHSMLVNC.js} +6 -6
  270. package/dist/chunk-NQN5Z36J.js +182 -0
  271. package/dist/chunk-NQN5Z36J.js.map +1 -0
  272. package/dist/{chunk-HQJ75HHI.js → chunk-NYLXHOMR.js} +2 -2
  273. package/dist/chunk-OCUVKI63.js +35 -0
  274. package/dist/chunk-OCUVKI63.js.map +1 -0
  275. package/dist/{chunk-CXA6UNFF.js → chunk-OH3YGJT5.js} +7 -7
  276. package/dist/{chunk-45N6LXUU.js → chunk-OI3HOI74.js} +2 -2
  277. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  278. package/dist/{chunk-M3RIC6JI.js → chunk-OQXOYHIV.js} +4 -4
  279. package/dist/{chunk-3LO5JWTC.js → chunk-P5YYVDAD.js} +3 -3
  280. package/dist/{chunk-6TYSEAAT.js → chunk-PC5FFEIY.js} +4 -4
  281. package/dist/{chunk-SLYZMJEL.js → chunk-PHCSPHDH.js} +3 -3
  282. package/dist/{chunk-TCAB2ERD.js → chunk-PNYXXLPU.js} +2 -2
  283. package/dist/chunk-PT6TCWIW.js +13 -0
  284. package/dist/chunk-PT6TCWIW.js.map +1 -0
  285. package/dist/{chunk-IPE5FFFD.js → chunk-PUBPZOQJ.js} +2 -2
  286. package/dist/chunk-QLWBQQW7.js +18 -0
  287. package/dist/chunk-QLWBQQW7.js.map +1 -0
  288. package/dist/{chunk-6HNEEJES.js → chunk-QRX5BYUQ.js} +4 -4
  289. package/dist/chunk-QWBQVQRG.js +18 -0
  290. package/dist/chunk-QWBQVQRG.js.map +1 -0
  291. package/dist/{chunk-5QXSPLWU.js → chunk-R6SSXEK2.js} +2 -2
  292. package/dist/chunk-RLC46NIW.js +47 -0
  293. package/dist/chunk-RLC46NIW.js.map +1 -0
  294. package/dist/{chunk-NR3J7VQL.js → chunk-RNCQ5KHQ.js} +2 -2
  295. package/dist/chunk-RTSK5OZT.js +15 -0
  296. package/dist/chunk-RTSK5OZT.js.map +1 -0
  297. package/dist/{chunk-7FOOLP5H.js → chunk-RXSGHPCR.js} +4 -4
  298. package/dist/{chunk-Z56IO7OV.js → chunk-RXVPUW7V.js} +2 -2
  299. package/dist/{chunk-5SYD23V4.js → chunk-SKZHOWTS.js} +4 -4
  300. package/dist/{chunk-FWL2N2KH.js → chunk-SX3V2DLV.js} +2 -2
  301. package/dist/{chunk-AUYC5K5K.js → chunk-TAMIZE4Q.js} +1 -1
  302. package/dist/chunk-TAMIZE4Q.js.map +1 -0
  303. package/dist/{chunk-3GOX75ZM.js → chunk-TF4TPLF2.js} +2 -2
  304. package/dist/{chunk-3DQP6OPC.js → chunk-THBT56JE.js} +2 -2
  305. package/dist/{chunk-DGMR3IMM.js → chunk-U7RULTSH.js} +3 -3
  306. package/dist/{chunk-RRX6ZTNX.js → chunk-UEJQQVP2.js} +4 -4
  307. package/dist/{chunk-O3OU2PPT.js → chunk-UQHJQ26Y.js} +2 -2
  308. package/dist/chunk-V3PLFYKO.js +34 -0
  309. package/dist/chunk-V3PLFYKO.js.map +1 -0
  310. package/dist/chunk-V5IOLAIS.js +22 -0
  311. package/dist/chunk-V5IOLAIS.js.map +1 -0
  312. package/dist/{chunk-WR6F6J43.js → chunk-V662PA6T.js} +6 -6
  313. package/dist/{chunk-VJKRJYZL.js → chunk-VEFDL77X.js} +2 -2
  314. package/dist/{chunk-GT7C6TSM.js → chunk-VNEEXUWA.js} +3 -3
  315. package/dist/{chunk-N34YHFZW.js → chunk-W2YNUUVJ.js} +2 -2
  316. package/dist/{chunk-N4WANJI3.js → chunk-WBVHRLIS.js} +4 -4
  317. package/dist/{chunk-MHFJBNDP.js → chunk-WO52KYSU.js} +8 -8
  318. package/dist/{chunk-ENK4XGKF.js → chunk-WUPVHIMD.js} +2 -2
  319. package/dist/{chunk-KNNBIXWJ.js → chunk-WX7VWW3W.js} +3 -3
  320. package/dist/{chunk-TUAIPMU7.js → chunk-X5BHPSAC.js} +5 -5
  321. package/dist/chunk-X5D3PTWI.js +58 -0
  322. package/dist/chunk-X5D3PTWI.js.map +1 -0
  323. package/dist/{chunk-TPUIIZN2.js → chunk-XKMFIH27.js} +12 -12
  324. package/dist/{chunk-T53L42XW.js → chunk-XSJWN3WH.js} +7 -7
  325. package/dist/{chunk-AVU6KU27.js → chunk-XXDXW6TX.js} +2 -2
  326. package/dist/chunk-XZTRZ3HO.js +7 -0
  327. package/dist/chunk-XZTRZ3HO.js.map +1 -0
  328. package/dist/chunk-YMRI5QKG.js +134 -0
  329. package/dist/chunk-YMRI5QKG.js.map +1 -0
  330. package/dist/{chunk-45OIUWGO.js → chunk-YNQGXSDD.js} +5 -5
  331. package/dist/{chunk-5VVM2PPV.js → chunk-ZEBJT5JZ.js} +3 -3
  332. package/dist/{chunk-DJORMYOV.js → chunk-ZU3SWR4I.js} +2 -2
  333. package/dist/data-display/AsyncStateContainer.js +3 -3
  334. package/dist/data-display/CardKit.js +14 -8
  335. package/dist/data-display/Carousel.js +11 -6
  336. package/dist/data-display/Chart.js +12 -7
  337. package/dist/data-display/DataGrid.js +1 -1
  338. package/dist/data-display/DataViews.js +78 -71
  339. package/dist/data-display/DescriptionItem.js +8 -2
  340. package/dist/data-display/InteractiveTooltip.js +2 -2
  341. package/dist/data-display/Lightbox.js +3 -3
  342. package/dist/data-display/Sheet.js +12 -7
  343. package/dist/en-US.js +8 -8
  344. package/dist/feedback/ConfirmAction.js +12 -6
  345. package/dist/feedback/TutorialOverlay.js +2 -2
  346. package/dist/form/AddressAutocomplete.js +6 -6
  347. package/dist/form/Button.js +9 -3
  348. package/dist/form/Calendar.js +6 -6
  349. package/dist/form/CategorySelect.js +11 -11
  350. package/dist/form/CepField.js +4 -4
  351. package/dist/form/CodeEditor.js +1 -1
  352. package/dist/form/Command.js +9 -4
  353. package/dist/form/CreatableSelect.js +2 -2
  354. package/dist/form/DateRangePicker.js +9 -9
  355. package/dist/form/Form.js +1 -1
  356. package/dist/form/Input.js +2 -2
  357. package/dist/form/Label.js +9 -4
  358. package/dist/form/Menubar.js +12 -7
  359. package/dist/form/RichTextEditor.js +2 -2
  360. package/dist/form/total-form.js +38 -32
  361. package/dist/icons.js +31 -0
  362. package/dist/icons.js.map +1 -0
  363. package/dist/layout/Box.js +23 -0
  364. package/dist/layout/Box.js.map +1 -0
  365. package/dist/layout/SettingsLayout.js +2 -2
  366. package/dist/layout/Stack.js +22 -0
  367. package/dist/layout/Stack.js.map +1 -0
  368. package/dist/locales.js +25 -25
  369. package/dist/native/chunks/chunk-5WLOVHKK.js +29 -0
  370. package/dist/native/chunks/chunk-5WLOVHKK.js.map +1 -0
  371. package/dist/native/chunks/chunk-L2UUNK2M.js +316 -0
  372. package/dist/native/chunks/chunk-L2UUNK2M.js.map +1 -0
  373. package/dist/native/chunks/chunk-M4DTJDWU.js +18 -0
  374. package/dist/native/chunks/chunk-M4DTJDWU.js.map +1 -0
  375. package/dist/native/chunks/chunk-QZ233LRH.js +136 -0
  376. package/dist/native/chunks/chunk-QZ233LRH.js.map +1 -0
  377. package/dist/native/chunks/chunk-VGBKUL6D.js +21 -0
  378. package/dist/native/chunks/chunk-VGBKUL6D.js.map +1 -0
  379. package/dist/native/form/Button.js +321 -0
  380. package/dist/native/form/Button.js.map +1 -0
  381. package/dist/native/icons.js +108 -0
  382. package/dist/native/icons.js.map +1 -0
  383. package/dist/native/layout/Box.js +12 -0
  384. package/dist/native/layout/Box.js.map +1 -0
  385. package/dist/native/layout/Stack.js +30 -0
  386. package/dist/native/layout/Stack.js.map +1 -0
  387. package/dist/native/provider.js +26 -0
  388. package/dist/native/provider.js.map +1 -0
  389. package/dist/native/tokens.js +65 -0
  390. package/dist/native/tokens.js.map +1 -0
  391. package/dist/native/typography/Text.js +131 -0
  392. package/dist/native/typography/Text.js.map +1 -0
  393. package/dist/navigation/AppHeader.js +19 -12
  394. package/dist/navigation/CommandPalette.js +3 -3
  395. package/dist/navigation/NavigationMenu.js +5 -5
  396. package/dist/navigation/Pagination.js +2 -2
  397. package/dist/provider.js +26 -0
  398. package/dist/provider.js.map +1 -0
  399. package/dist/pt-BR.js +8 -8
  400. package/dist/social-login-button.js +15 -8
  401. package/dist/tokens.js +59 -6
  402. package/dist/types/components/form/Button/Button.base.d.ts +65 -0
  403. package/dist/types/components/form/Button/Button.base.d.ts.map +1 -0
  404. package/dist/types/components/form/Button/Button.d.ts.map +1 -1
  405. package/dist/types/components/form/Button/Button.helpers.d.ts +7 -3
  406. package/dist/types/components/form/Button/Button.helpers.d.ts.map +1 -1
  407. package/dist/types/components/form/Button/Button.metrics.d.ts +52 -0
  408. package/dist/types/components/form/Button/Button.metrics.d.ts.map +1 -0
  409. package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
  410. package/dist/types/components/form/Button/Button.types.d.ts +3 -46
  411. package/dist/types/components/form/Button/Button.types.d.ts.map +1 -1
  412. package/dist/types/components/form/Button/index.d.ts +1 -1
  413. package/dist/types/components/form/Button/index.d.ts.map +1 -1
  414. package/dist/types/components/form/Form/Form.d.ts.map +1 -1
  415. package/dist/types/components/layout/Box/Box.base.d.ts +60 -0
  416. package/dist/types/components/layout/Box/Box.base.d.ts.map +1 -0
  417. package/dist/types/components/layout/Box/Box.d.ts +10 -0
  418. package/dist/types/components/layout/Box/Box.d.ts.map +1 -0
  419. package/dist/types/components/layout/Box/Box.types.d.ts +11 -0
  420. package/dist/types/components/layout/Box/Box.types.d.ts.map +1 -0
  421. package/dist/types/components/layout/Box/box-layout.d.ts +42 -0
  422. package/dist/types/components/layout/Box/box-layout.d.ts.map +1 -0
  423. package/dist/types/components/layout/Box/index.d.ts +5 -0
  424. package/dist/types/components/layout/Box/index.d.ts.map +1 -0
  425. package/dist/types/components/layout/Stack/Stack.base.d.ts +13 -0
  426. package/dist/types/components/layout/Stack/Stack.base.d.ts.map +1 -0
  427. package/dist/types/components/layout/Stack/Stack.d.ts +4 -0
  428. package/dist/types/components/layout/Stack/Stack.d.ts.map +1 -0
  429. package/dist/types/components/layout/Stack/Stack.types.d.ts +5 -0
  430. package/dist/types/components/layout/Stack/Stack.types.d.ts.map +1 -0
  431. package/dist/types/components/layout/Stack/index.d.ts +3 -0
  432. package/dist/types/components/layout/Stack/index.d.ts.map +1 -0
  433. package/dist/types/components/layout/Stack/with-dividers.d.ts +4 -0
  434. package/dist/types/components/layout/Stack/with-dividers.d.ts.map +1 -0
  435. package/dist/types/components/typography/Text/Text.base.d.ts +23 -0
  436. package/dist/types/components/typography/Text/Text.base.d.ts.map +1 -0
  437. package/dist/types/components/typography/Text/Text.d.ts.map +1 -1
  438. package/dist/types/components/typography/Text/Text.metrics.d.ts +29 -0
  439. package/dist/types/components/typography/Text/Text.metrics.d.ts.map +1 -0
  440. package/dist/types/components/typography/Text/Text.types.d.ts +3 -11
  441. package/dist/types/components/typography/Text/Text.types.d.ts.map +1 -1
  442. package/dist/types/components/typography/Text/index.d.ts +1 -1
  443. package/dist/types/components/typography/Text/index.d.ts.map +1 -1
  444. package/dist/types/icons/Icon.d.ts +13 -0
  445. package/dist/types/icons/Icon.d.ts.map +1 -0
  446. package/dist/types/icons/Icon.types.d.ts +30 -0
  447. package/dist/types/icons/Icon.types.d.ts.map +1 -0
  448. package/dist/types/icons/icon-color.d.ts +10 -0
  449. package/dist/types/icons/icon-color.d.ts.map +1 -0
  450. package/dist/types/icons/index.d.ts +6 -0
  451. package/dist/types/icons/index.d.ts.map +1 -0
  452. package/dist/types/icons/paths.generated.d.ts +43 -0
  453. package/dist/types/icons/paths.generated.d.ts.map +1 -0
  454. package/dist/types/platform/test-id.d.ts +21 -0
  455. package/dist/types/platform/test-id.d.ts.map +1 -0
  456. package/dist/types/provider/UiProvider.d.ts +15 -0
  457. package/dist/types/provider/UiProvider.d.ts.map +1 -0
  458. package/dist/types/provider/UiProvider.types.d.ts +17 -0
  459. package/dist/types/provider/UiProvider.types.d.ts.map +1 -0
  460. package/dist/types/provider/index.d.ts +5 -0
  461. package/dist/types/provider/index.d.ts.map +1 -0
  462. package/dist/types/provider/mui-bridge.d.ts +7 -0
  463. package/dist/types/provider/mui-bridge.d.ts.map +1 -0
  464. package/dist/types/provider/ui-theme-context.d.ts +12 -0
  465. package/dist/types/provider/ui-theme-context.d.ts.map +1 -0
  466. package/dist/types/provider/use-ui-theme.d.ts +11 -0
  467. package/dist/types/provider/use-ui-theme.d.ts.map +1 -0
  468. package/dist/types/tokens/color.d.ts +44 -0
  469. package/dist/types/tokens/color.d.ts.map +1 -0
  470. package/dist/types/tokens/css-units.d.ts +14 -0
  471. package/dist/types/tokens/css-units.d.ts.map +1 -0
  472. package/dist/types/tokens/heading-scale.d.ts +65 -0
  473. package/dist/types/tokens/heading-scale.d.ts.map +1 -0
  474. package/dist/types/tokens/scales.d.ts +9 -114
  475. package/dist/types/tokens/scales.d.ts.map +1 -1
  476. package/dist/types/tokens/theme.d.ts +166 -0
  477. package/dist/types/tokens/theme.d.ts.map +1 -0
  478. package/dist/types/tokens/typography.d.ts +6 -62
  479. package/dist/types/tokens/typography.d.ts.map +1 -1
  480. package/dist/types/tokens/vocabulary.d.ts +117 -0
  481. package/dist/types/tokens/vocabulary.d.ts.map +1 -0
  482. package/dist/types-native/components/form/Button/Button.base.d.ts +65 -0
  483. package/dist/types-native/components/form/Button/Button.base.d.ts.map +1 -0
  484. package/dist/types-native/components/form/Button/Button.helpers.d.ts +10 -0
  485. package/dist/types-native/components/form/Button/Button.helpers.d.ts.map +1 -0
  486. package/dist/types-native/components/form/Button/Button.metrics.d.ts +52 -0
  487. package/dist/types-native/components/form/Button/Button.metrics.d.ts.map +1 -0
  488. package/dist/types-native/components/form/Button/Button.native.d.ts +10 -0
  489. package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -0
  490. package/dist/types-native/components/form/Button/Button.types.native.d.ts +17 -0
  491. package/dist/types-native/components/form/Button/Button.types.native.d.ts.map +1 -0
  492. package/dist/types-native/components/form/Button/index.native.d.ts +3 -0
  493. package/dist/types-native/components/form/Button/index.native.d.ts.map +1 -0
  494. package/dist/types-native/components/layout/Box/Box.base.d.ts +60 -0
  495. package/dist/types-native/components/layout/Box/Box.base.d.ts.map +1 -0
  496. package/dist/types-native/components/layout/Box/Box.native.d.ts +7 -0
  497. package/dist/types-native/components/layout/Box/Box.native.d.ts.map +1 -0
  498. package/dist/types-native/components/layout/Box/Box.types.native.d.ts +9 -0
  499. package/dist/types-native/components/layout/Box/Box.types.native.d.ts.map +1 -0
  500. package/dist/types-native/components/layout/Box/box-layout.d.ts +42 -0
  501. package/dist/types-native/components/layout/Box/box-layout.d.ts.map +1 -0
  502. package/dist/types-native/components/layout/Box/index.native.d.ts +5 -0
  503. package/dist/types-native/components/layout/Box/index.native.d.ts.map +1 -0
  504. package/dist/types-native/components/layout/Stack/Stack.base.d.ts +13 -0
  505. package/dist/types-native/components/layout/Stack/Stack.base.d.ts.map +1 -0
  506. package/dist/types-native/components/layout/Stack/Stack.native.d.ts +4 -0
  507. package/dist/types-native/components/layout/Stack/Stack.native.d.ts.map +1 -0
  508. package/dist/types-native/components/layout/Stack/Stack.types.native.d.ts +5 -0
  509. package/dist/types-native/components/layout/Stack/Stack.types.native.d.ts.map +1 -0
  510. package/dist/types-native/components/layout/Stack/index.native.d.ts +3 -0
  511. package/dist/types-native/components/layout/Stack/index.native.d.ts.map +1 -0
  512. package/dist/types-native/components/layout/Stack/with-dividers.d.ts +4 -0
  513. package/dist/types-native/components/layout/Stack/with-dividers.d.ts.map +1 -0
  514. package/dist/types-native/components/typography/Text/Text.base.d.ts +23 -0
  515. package/dist/types-native/components/typography/Text/Text.base.d.ts.map +1 -0
  516. package/dist/types-native/components/typography/Text/Text.metrics.d.ts +29 -0
  517. package/dist/types-native/components/typography/Text/Text.metrics.d.ts.map +1 -0
  518. package/dist/types-native/components/typography/Text/Text.native.d.ts +25 -0
  519. package/dist/types-native/components/typography/Text/Text.native.d.ts.map +1 -0
  520. package/dist/types-native/components/typography/Text/Text.types.native.d.ts +8 -0
  521. package/dist/types-native/components/typography/Text/Text.types.native.d.ts.map +1 -0
  522. package/dist/types-native/components/typography/Text/index.native.d.ts +3 -0
  523. package/dist/types-native/components/typography/Text/index.native.d.ts.map +1 -0
  524. package/dist/types-native/icons/Icon.native.d.ts +15 -0
  525. package/dist/types-native/icons/Icon.native.d.ts.map +1 -0
  526. package/dist/types-native/icons/Icon.types.d.ts +30 -0
  527. package/dist/types-native/icons/Icon.types.d.ts.map +1 -0
  528. package/dist/types-native/icons/icon-color.d.ts +10 -0
  529. package/dist/types-native/icons/icon-color.d.ts.map +1 -0
  530. package/dist/types-native/icons/index.native.d.ts +6 -0
  531. package/dist/types-native/icons/index.native.d.ts.map +1 -0
  532. package/dist/types-native/icons/paths.generated.d.ts +43 -0
  533. package/dist/types-native/icons/paths.generated.d.ts.map +1 -0
  534. package/dist/types-native/platform/test-id.d.ts +21 -0
  535. package/dist/types-native/platform/test-id.d.ts.map +1 -0
  536. package/dist/types-native/provider/UiProvider.native.d.ts +8 -0
  537. package/dist/types-native/provider/UiProvider.native.d.ts.map +1 -0
  538. package/dist/types-native/provider/UiProvider.types.d.ts +17 -0
  539. package/dist/types-native/provider/UiProvider.types.d.ts.map +1 -0
  540. package/dist/types-native/provider/index.native.d.ts +4 -0
  541. package/dist/types-native/provider/index.native.d.ts.map +1 -0
  542. package/dist/types-native/provider/ui-theme-context.d.ts +12 -0
  543. package/dist/types-native/provider/ui-theme-context.d.ts.map +1 -0
  544. package/dist/types-native/provider/use-ui-theme.native.d.ts +4 -0
  545. package/dist/types-native/provider/use-ui-theme.native.d.ts.map +1 -0
  546. package/dist/types-native/tokens/color.d.ts +44 -0
  547. package/dist/types-native/tokens/color.d.ts.map +1 -0
  548. package/dist/types-native/tokens/css-units.d.ts +14 -0
  549. package/dist/types-native/tokens/css-units.d.ts.map +1 -0
  550. package/dist/types-native/tokens/heading-scale.d.ts +65 -0
  551. package/dist/types-native/tokens/heading-scale.d.ts.map +1 -0
  552. package/dist/types-native/tokens/index.native.d.ts +10 -0
  553. package/dist/types-native/tokens/index.native.d.ts.map +1 -0
  554. package/dist/types-native/tokens/theme.d.ts +166 -0
  555. package/dist/types-native/tokens/theme.d.ts.map +1 -0
  556. package/dist/types-native/tokens/vocabulary.d.ts +117 -0
  557. package/dist/types-native/tokens/vocabulary.d.ts.map +1 -0
  558. package/dist/typography/Heading.js +4 -3
  559. package/dist/typography/Text.js +7 -1
  560. package/dist/user-avatar.js +12 -5
  561. package/dist/utility/InstallPrompt.js +2 -2
  562. package/package.json +79 -7
  563. package/src/components/form/Button/Button.base.ts +80 -0
  564. package/src/components/form/Button/Button.helpers.ts +12 -7
  565. package/src/components/form/Button/Button.metrics.ts +101 -0
  566. package/src/components/form/Button/Button.native.tsx +339 -0
  567. package/src/components/form/Button/Button.styles.ts +16 -16
  568. package/src/components/form/Button/Button.tsx +8 -5
  569. package/src/components/form/Button/Button.types.native.ts +27 -0
  570. package/src/components/form/Button/Button.types.ts +8 -58
  571. package/src/components/form/Button/index.native.ts +2 -0
  572. package/src/components/form/Button/index.ts +1 -1
  573. package/src/components/form/Form/Form.md +46 -1
  574. package/src/components/form/Form/Form.tsx +40 -1
  575. package/src/components/layout/Box/Box.base.ts +69 -0
  576. package/src/components/layout/Box/Box.md +46 -0
  577. package/src/components/layout/Box/Box.native.tsx +22 -0
  578. package/src/components/layout/Box/Box.tsx +56 -0
  579. package/src/components/layout/Box/Box.types.native.ts +21 -0
  580. package/src/components/layout/Box/Box.types.ts +22 -0
  581. package/src/components/layout/Box/box-layout.ts +144 -0
  582. package/src/components/layout/Box/index.native.ts +14 -0
  583. package/src/components/layout/Box/index.ts +14 -0
  584. package/src/components/layout/Stack/Stack.base.ts +14 -0
  585. package/src/components/layout/Stack/Stack.md +19 -0
  586. package/src/components/layout/Stack/Stack.native.tsx +16 -0
  587. package/src/components/layout/Stack/Stack.tsx +15 -0
  588. package/src/components/layout/Stack/Stack.types.native.ts +6 -0
  589. package/src/components/layout/Stack/Stack.types.ts +6 -0
  590. package/src/components/layout/Stack/index.native.ts +2 -0
  591. package/src/components/layout/Stack/index.ts +2 -0
  592. package/src/components/layout/Stack/with-dividers.ts +15 -0
  593. package/src/components/typography/Text/Text.base.ts +25 -0
  594. package/src/components/typography/Text/Text.metrics.ts +30 -0
  595. package/src/components/typography/Text/Text.native.tsx +149 -0
  596. package/src/components/typography/Text/Text.tsx +45 -27
  597. package/src/components/typography/Text/Text.types.native.ts +11 -0
  598. package/src/components/typography/Text/Text.types.ts +7 -12
  599. package/src/components/typography/Text/index.native.ts +2 -0
  600. package/src/components/typography/Text/index.ts +1 -1
  601. package/src/icons/Icon.md +28 -0
  602. package/src/icons/Icon.native.tsx +44 -0
  603. package/src/icons/Icon.tsx +47 -0
  604. package/src/icons/Icon.types.ts +40 -0
  605. package/src/icons/glyphs.json +39 -0
  606. package/src/icons/icon-color.ts +20 -0
  607. package/src/icons/index.native.ts +5 -0
  608. package/src/icons/index.ts +5 -0
  609. package/src/icons/paths.generated.ts +51 -0
  610. package/src/platform/test-id.ts +34 -0
  611. package/src/provider/UiProvider.native.tsx +13 -0
  612. package/src/provider/UiProvider.tsx +22 -0
  613. package/src/provider/UiProvider.types.ts +20 -0
  614. package/src/provider/index.native.ts +3 -0
  615. package/src/provider/index.ts +4 -0
  616. package/src/provider/mui-bridge.ts +141 -0
  617. package/src/provider/ui-theme-context.ts +13 -0
  618. package/src/provider/use-ui-theme.native.ts +9 -0
  619. package/src/provider/use-ui-theme.ts +18 -0
  620. package/src/tokens/color.ts +163 -0
  621. package/src/tokens/css-units.ts +28 -0
  622. package/src/tokens/heading-scale.ts +87 -0
  623. package/src/tokens/index.native.ts +9 -0
  624. package/src/tokens/scales.ts +11 -186
  625. package/src/tokens/theme.ts +334 -0
  626. package/src/tokens/typography.ts +6 -83
  627. package/src/tokens/vocabulary.ts +189 -0
  628. package/dist/chunk-7CA6GVBO.js.map +0 -1
  629. package/dist/chunk-AUYC5K5K.js.map +0 -1
  630. package/dist/chunk-I6PZVHIT.js +0 -46
  631. package/dist/chunk-I6PZVHIT.js.map +0 -1
  632. package/dist/chunk-IAQFQNBL.js.map +0 -1
  633. package/dist/chunk-NYUGX76C.js.map +0 -1
  634. package/dist/chunk-VRHBJXZ7.js.map +0 -1
  635. package/dist/chunk-VZO7VREP.js.map +0 -1
  636. /package/dist/{chunk-GFBNUWT5.js.map → chunk-2EKALM6P.js.map} +0 -0
  637. /package/dist/{chunk-ISW5K72V.js.map → chunk-2ZRZTGWP.js.map} +0 -0
  638. /package/dist/{chunk-3ORFVLI3.js.map → chunk-37YPZHAG.js.map} +0 -0
  639. /package/dist/{chunk-EB4BTKKY.js.map → chunk-3AFUWDYS.js.map} +0 -0
  640. /package/dist/{chunk-HR7YTBR7.js.map → chunk-3AOOI2NR.js.map} +0 -0
  641. /package/dist/{chunk-PKJKA4CU.js.map → chunk-3ZFORMNT.js.map} +0 -0
  642. /package/dist/{chunk-PLK7UGO6.js.map → chunk-4EJSUL62.js.map} +0 -0
  643. /package/dist/{chunk-WMALDOF5.js.map → chunk-4G3FGCWX.js.map} +0 -0
  644. /package/dist/{chunk-2PPWKCMW.js.map → chunk-4N4ENTF7.js.map} +0 -0
  645. /package/dist/{chunk-6CBYPMYQ.js.map → chunk-4R2CDZOQ.js.map} +0 -0
  646. /package/dist/{chunk-FJHNNSD3.js.map → chunk-4WK2RTVY.js.map} +0 -0
  647. /package/dist/{chunk-6U7NA74A.js.map → chunk-5HOJSVQH.js.map} +0 -0
  648. /package/dist/{chunk-QETBO7EC.js.map → chunk-67LDIJQZ.js.map} +0 -0
  649. /package/dist/{chunk-X4X4CVWJ.js.map → chunk-6JZE4IIN.js.map} +0 -0
  650. /package/dist/{chunk-LUWATXU4.js.map → chunk-74KMXBG3.js.map} +0 -0
  651. /package/dist/{chunk-ZDWU52DJ.js.map → chunk-7AR2R7TV.js.map} +0 -0
  652. /package/dist/{chunk-B6IURHSZ.js.map → chunk-7DNQHMDO.js.map} +0 -0
  653. /package/dist/{chunk-G7CFUI4I.js.map → chunk-7EESF76V.js.map} +0 -0
  654. /package/dist/{chunk-AX7UFG2U.js.map → chunk-7RZ4WOQW.js.map} +0 -0
  655. /package/dist/{chunk-WFX5GASM.js.map → chunk-B7BZAIHL.js.map} +0 -0
  656. /package/dist/{chunk-RX6DWIIW.js.map → chunk-BILE3A7F.js.map} +0 -0
  657. /package/dist/{chunk-XSKVBGCZ.js.map → chunk-BLBOYCOV.js.map} +0 -0
  658. /package/dist/{chunk-4Y65Q3CR.js.map → chunk-C52BELLW.js.map} +0 -0
  659. /package/dist/{chunk-RP3W6IQO.js.map → chunk-CPNSVIIB.js.map} +0 -0
  660. /package/dist/{chunk-T4SM36XC.js.map → chunk-D7FJ2GAD.js.map} +0 -0
  661. /package/dist/{chunk-SCGVB7DS.js.map → chunk-DOADQW7I.js.map} +0 -0
  662. /package/dist/{chunk-RIAIJTEW.js.map → chunk-DOMEYGTN.js.map} +0 -0
  663. /package/dist/{chunk-7HPPUO2A.js.map → chunk-DQHC5P64.js.map} +0 -0
  664. /package/dist/{chunk-W2UTDN4T.js.map → chunk-DWZ7FLA7.js.map} +0 -0
  665. /package/dist/{chunk-24LW52EU.js.map → chunk-DX527XPL.js.map} +0 -0
  666. /package/dist/{chunk-OK5BHFZE.js.map → chunk-E6OILRUU.js.map} +0 -0
  667. /package/dist/{chunk-A4YWFX5C.js.map → chunk-ENNW5SKT.js.map} +0 -0
  668. /package/dist/{chunk-BPYPUEM5.js.map → chunk-EPNCYUQ7.js.map} +0 -0
  669. /package/dist/{chunk-MUAVYVDJ.js.map → chunk-EW7ZNSWU.js.map} +0 -0
  670. /package/dist/{chunk-DWUMMMLR.js.map → chunk-FOMK3WPG.js.map} +0 -0
  671. /package/dist/{chunk-RQ4EQ5FJ.js.map → chunk-FP4R47TM.js.map} +0 -0
  672. /package/dist/{chunk-SHQWIDD5.js.map → chunk-GJQYM3PM.js.map} +0 -0
  673. /package/dist/{chunk-WEH5TCPE.js.map → chunk-GSTRPZS4.js.map} +0 -0
  674. /package/dist/{chunk-WC3W36AM.js.map → chunk-HOJL2GKW.js.map} +0 -0
  675. /package/dist/{chunk-PMFW55F5.js.map → chunk-HSAH5QUQ.js.map} +0 -0
  676. /package/dist/{chunk-A3KY6NUA.js.map → chunk-IH4CX43Q.js.map} +0 -0
  677. /package/dist/{chunk-HEDOL2RV.js.map → chunk-IJIT5HQP.js.map} +0 -0
  678. /package/dist/{chunk-VR5HDUBK.js.map → chunk-IPS55KWK.js.map} +0 -0
  679. /package/dist/{chunk-ELYLG4F7.js.map → chunk-J54WH74M.js.map} +0 -0
  680. /package/dist/{chunk-5ZOJLYD2.js.map → chunk-JE6RZ5L6.js.map} +0 -0
  681. /package/dist/{chunk-EY4LPLIR.js.map → chunk-KQ74QU55.js.map} +0 -0
  682. /package/dist/{chunk-XULTDO56.js.map → chunk-KT6HWAEN.js.map} +0 -0
  683. /package/dist/{chunk-COSJTD6Z.js.map → chunk-KZSKI2R3.js.map} +0 -0
  684. /package/dist/{chunk-DQIQKIEA.js.map → chunk-L5ZZJ4XE.js.map} +0 -0
  685. /package/dist/{chunk-SFAP5EH5.js.map → chunk-LUMF63BM.js.map} +0 -0
  686. /package/dist/{chunk-LIQHOLDQ.js.map → chunk-LYMAMKJT.js.map} +0 -0
  687. /package/dist/{chunk-6RFL7HGI.js.map → chunk-LZRURORY.js.map} +0 -0
  688. /package/dist/{chunk-KXNWDXR7.js.map → chunk-M2K7BPHX.js.map} +0 -0
  689. /package/dist/{chunk-WLDK74RR.js.map → chunk-MSUSZLRE.js.map} +0 -0
  690. /package/dist/{chunk-EE2LBAJH.js.map → chunk-MUVJD26L.js.map} +0 -0
  691. /package/dist/{chunk-VVXRIPV5.js.map → chunk-MY5VNNSP.js.map} +0 -0
  692. /package/dist/{chunk-JPDKRGYI.js.map → chunk-MZQTHSLN.js.map} +0 -0
  693. /package/dist/{chunk-FF55LRSV.js.map → chunk-NETZMGQP.js.map} +0 -0
  694. /package/dist/{chunk-3QGRQNTP.js.map → chunk-NFAKRI4S.js.map} +0 -0
  695. /package/dist/{chunk-KSF7TLXH.js.map → chunk-NHSMLVNC.js.map} +0 -0
  696. /package/dist/{chunk-HQJ75HHI.js.map → chunk-NYLXHOMR.js.map} +0 -0
  697. /package/dist/{chunk-CXA6UNFF.js.map → chunk-OH3YGJT5.js.map} +0 -0
  698. /package/dist/{chunk-45N6LXUU.js.map → chunk-OI3HOI74.js.map} +0 -0
  699. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  700. /package/dist/{chunk-M3RIC6JI.js.map → chunk-OQXOYHIV.js.map} +0 -0
  701. /package/dist/{chunk-3LO5JWTC.js.map → chunk-P5YYVDAD.js.map} +0 -0
  702. /package/dist/{chunk-6TYSEAAT.js.map → chunk-PC5FFEIY.js.map} +0 -0
  703. /package/dist/{chunk-SLYZMJEL.js.map → chunk-PHCSPHDH.js.map} +0 -0
  704. /package/dist/{chunk-TCAB2ERD.js.map → chunk-PNYXXLPU.js.map} +0 -0
  705. /package/dist/{chunk-IPE5FFFD.js.map → chunk-PUBPZOQJ.js.map} +0 -0
  706. /package/dist/{chunk-6HNEEJES.js.map → chunk-QRX5BYUQ.js.map} +0 -0
  707. /package/dist/{chunk-5QXSPLWU.js.map → chunk-R6SSXEK2.js.map} +0 -0
  708. /package/dist/{chunk-NR3J7VQL.js.map → chunk-RNCQ5KHQ.js.map} +0 -0
  709. /package/dist/{chunk-7FOOLP5H.js.map → chunk-RXSGHPCR.js.map} +0 -0
  710. /package/dist/{chunk-Z56IO7OV.js.map → chunk-RXVPUW7V.js.map} +0 -0
  711. /package/dist/{chunk-5SYD23V4.js.map → chunk-SKZHOWTS.js.map} +0 -0
  712. /package/dist/{chunk-FWL2N2KH.js.map → chunk-SX3V2DLV.js.map} +0 -0
  713. /package/dist/{chunk-3GOX75ZM.js.map → chunk-TF4TPLF2.js.map} +0 -0
  714. /package/dist/{chunk-3DQP6OPC.js.map → chunk-THBT56JE.js.map} +0 -0
  715. /package/dist/{chunk-DGMR3IMM.js.map → chunk-U7RULTSH.js.map} +0 -0
  716. /package/dist/{chunk-RRX6ZTNX.js.map → chunk-UEJQQVP2.js.map} +0 -0
  717. /package/dist/{chunk-O3OU2PPT.js.map → chunk-UQHJQ26Y.js.map} +0 -0
  718. /package/dist/{chunk-WR6F6J43.js.map → chunk-V662PA6T.js.map} +0 -0
  719. /package/dist/{chunk-VJKRJYZL.js.map → chunk-VEFDL77X.js.map} +0 -0
  720. /package/dist/{chunk-GT7C6TSM.js.map → chunk-VNEEXUWA.js.map} +0 -0
  721. /package/dist/{chunk-N34YHFZW.js.map → chunk-W2YNUUVJ.js.map} +0 -0
  722. /package/dist/{chunk-N4WANJI3.js.map → chunk-WBVHRLIS.js.map} +0 -0
  723. /package/dist/{chunk-MHFJBNDP.js.map → chunk-WO52KYSU.js.map} +0 -0
  724. /package/dist/{chunk-ENK4XGKF.js.map → chunk-WUPVHIMD.js.map} +0 -0
  725. /package/dist/{chunk-KNNBIXWJ.js.map → chunk-WX7VWW3W.js.map} +0 -0
  726. /package/dist/{chunk-TUAIPMU7.js.map → chunk-X5BHPSAC.js.map} +0 -0
  727. /package/dist/{chunk-TPUIIZN2.js.map → chunk-XKMFIH27.js.map} +0 -0
  728. /package/dist/{chunk-T53L42XW.js.map → chunk-XSJWN3WH.js.map} +0 -0
  729. /package/dist/{chunk-AVU6KU27.js.map → chunk-XXDXW6TX.js.map} +0 -0
  730. /package/dist/{chunk-45OIUWGO.js.map → chunk-YNQGXSDD.js.map} +0 -0
  731. /package/dist/{chunk-5VVM2PPV.js.map → chunk-ZEBJT5JZ.js.map} +0 -0
  732. /package/dist/{chunk-DJORMYOV.js.map → chunk-ZU3SWR4I.js.map} +0 -0
@@ -0,0 +1,22 @@
1
+ import { createTheme, ThemeProvider } from '@mui/material/styles/index.js';
2
+ import * as React from 'react';
3
+
4
+ import { muiThemeOptionsFrom } from './mui-bridge';
5
+ import { isUiTheme, type UiProviderProps } from './UiProvider.types';
6
+ import { createUiTheme } from '../tokens/theme';
7
+
8
+ /**
9
+ * The same provider name on both renderers.
10
+ *
11
+ * On the web it is a MUI `ThemeProvider` fed from a `UiTheme`, for a host that
12
+ * has no MUI theme of its own. A host that already mounts one (every origin app
13
+ * does) needs nothing from this file: the web components read MUI's theme, and
14
+ * `useUiTheme` derives the neutral view from it.
15
+ */
16
+ export function UiProvider({ theme, children }: UiProviderProps): React.JSX.Element {
17
+ const ui = React.useMemo(() => (isUiTheme(theme) ? theme : createUiTheme(theme)), [theme]);
18
+ const mui = React.useMemo(() => createTheme(muiThemeOptionsFrom(ui)), [ui]);
19
+ return <ThemeProvider theme={mui}>{children}</ThemeProvider>;
20
+ }
21
+
22
+ UiProvider.displayName = 'UiProvider';
@@ -0,0 +1,20 @@
1
+ import type * as React from 'react';
2
+
3
+ import type { UiTheme, UiThemeOptions } from '../tokens/theme';
4
+
5
+ export interface UiProviderProps {
6
+ /**
7
+ * A built `UiTheme`, or the options to build one. Omit for the package
8
+ * default: the platform's light theme.
9
+ */
10
+ theme?: UiTheme | UiThemeOptions;
11
+ children: React.ReactNode;
12
+ }
13
+
14
+ /**
15
+ * Options may carry a `palette` too (the seeds), so the discriminant is the
16
+ * one thing only a BUILT theme has: `spacing` as a function. Options carry a
17
+ * numeric `spacingUnit` instead.
18
+ */
19
+ export const isUiTheme = (theme: UiTheme | UiThemeOptions | undefined): theme is UiTheme =>
20
+ theme !== undefined && 'palette' in theme && 'spacing' in theme && typeof theme.spacing === 'function';
@@ -0,0 +1,3 @@
1
+ export { UiProvider } from './UiProvider.native';
2
+ export type { UiProviderProps } from './UiProvider.types';
3
+ export { useUiTheme } from './use-ui-theme.native';
@@ -0,0 +1,4 @@
1
+ export { UiProvider } from './UiProvider';
2
+ export type { UiProviderProps } from './UiProvider.types';
3
+ export { useUiTheme } from './use-ui-theme';
4
+ export { muiThemeOptionsFrom, uiThemeFromMui } from './mui-bridge';
@@ -0,0 +1,141 @@
1
+ import type { PaletteColor, Theme, ThemeOptions } from '@mui/material/styles/index.js';
2
+
3
+ import { cssLengthToPx, cssTrackingToEm } from '../tokens/css-units';
4
+ import { accentFor } from '../tokens/scales';
5
+ import {
6
+ FONT_WEIGHTS,
7
+ TYPE_SIZES,
8
+ WEB_FONT_FAMILY,
9
+ WEB_MONOSPACE_FONT_FAMILY,
10
+ type UiHeadingStep,
11
+ type UiPaletteColor,
12
+ type UiTheme,
13
+ } from '../tokens/theme';
14
+ import { HEADING_LEVELS, headingMetrics, type HeadingLevel } from '../tokens/typography';
15
+
16
+ /**
17
+ * THE TWO DIRECTIONS BETWEEN MUI'S THEME AND OURS. Web only.
18
+ *
19
+ * `uiThemeFromMui` is how a web component — or a shared style resolver such
20
+ * as `box-layout.ts` — reads the host's MUI theme in the neutral shape the
21
+ * native renderer reads natively. `muiThemeOptionsFrom` is the reverse, for
22
+ * a host that has a `UiTheme` and no MUI theme yet: `UiProvider` on the web is
23
+ * a MUI `ThemeProvider` fed by it.
24
+ *
25
+ * Both are field-by-field on purpose. A spread would carry MUI's extra keys
26
+ * across and the native side would silently depend on one.
27
+ */
28
+
29
+ const slot = (color: PaletteColor): UiPaletteColor => ({
30
+ main: color.main,
31
+ light: color.light,
32
+ dark: color.dark,
33
+ contrastText: color.contrastText,
34
+ });
35
+
36
+ function headingSteps(theme: Theme): Record<HeadingLevel, UiHeadingStep> {
37
+ return Object.fromEntries(
38
+ HEADING_LEVELS.map((level) => {
39
+ const metrics = headingMetrics(theme, level);
40
+ return [
41
+ level,
42
+ {
43
+ fontSize: cssLengthToPx(metrics.fontSize, 16),
44
+ lineHeight: metrics.lineHeight,
45
+ letterSpacing: cssTrackingToEm(metrics.letterSpacing),
46
+ normalWeight: metrics.normalWeight,
47
+ },
48
+ ];
49
+ }),
50
+ ) as Record<HeadingLevel, UiHeadingStep>;
51
+ }
52
+
53
+ /** The host's MUI theme in the shape the native renderer reads. */
54
+ export function uiThemeFromMui(theme: Theme): UiTheme {
55
+ const { palette } = theme;
56
+ const unit = cssLengthToPx(theme.spacing(1), 8);
57
+ const md = cssLengthToPx(theme.shape.borderRadius, 4);
58
+
59
+ return {
60
+ mode: palette.mode,
61
+ palette: {
62
+ mode: palette.mode,
63
+ primary: slot(palette.primary),
64
+ secondary: slot(palette.secondary),
65
+ success: slot(palette.success),
66
+ warning: slot(palette.warning),
67
+ info: slot(palette.info),
68
+ danger: slot(palette.error),
69
+ neutral: accentFor(theme, 'neutral'),
70
+ text: {
71
+ primary: palette.text.primary,
72
+ secondary: palette.text.secondary,
73
+ disabled: palette.text.disabled,
74
+ },
75
+ background: { default: palette.background.default, paper: palette.background.paper },
76
+ divider: palette.divider,
77
+ action: {
78
+ active: palette.action.active,
79
+ hover: palette.action.hover,
80
+ selected: palette.action.selected,
81
+ disabled: palette.action.disabled,
82
+ disabledBackground: palette.action.disabledBackground,
83
+ focus: palette.action.focus,
84
+ },
85
+ grey: {
86
+ 50: palette.grey[50],
87
+ 100: palette.grey[100],
88
+ 200: palette.grey[200],
89
+ 300: palette.grey[300],
90
+ 400: palette.grey[400],
91
+ 500: palette.grey[500],
92
+ 600: palette.grey[600],
93
+ 700: palette.grey[700],
94
+ 800: palette.grey[800],
95
+ 900: palette.grey[900],
96
+ },
97
+ },
98
+ spacing: (units: number) => units * unit,
99
+ spacingUnit: unit,
100
+ radius: { sm: md / 2, md, lg: md * 2, xl: md * 4, full: 9999 },
101
+ typography: {
102
+ fontFamily: theme.typography.fontFamily ?? WEB_FONT_FAMILY,
103
+ monospaceFontFamily: WEB_MONOSPACE_FONT_FAMILY,
104
+ sizes: TYPE_SIZES,
105
+ weights: FONT_WEIGHTS,
106
+ heading: headingSteps(theme),
107
+ },
108
+ zIndex: {
109
+ appBar: theme.zIndex.appBar,
110
+ drawer: theme.zIndex.drawer,
111
+ modal: theme.zIndex.modal,
112
+ snackbar: theme.zIndex.snackbar,
113
+ tooltip: theme.zIndex.tooltip,
114
+ },
115
+ };
116
+ }
117
+
118
+ /** A `UiTheme` as the options MUI's `createTheme` builds the same palette from. */
119
+ export function muiThemeOptionsFrom(ui: UiTheme): ThemeOptions {
120
+ const { palette } = ui;
121
+ return {
122
+ palette: {
123
+ mode: palette.mode,
124
+ primary: { ...palette.primary },
125
+ secondary: { ...palette.secondary },
126
+ success: { ...palette.success },
127
+ warning: { ...palette.warning },
128
+ info: { ...palette.info },
129
+ error: { ...palette.danger },
130
+ text: { ...palette.text },
131
+ background: { ...palette.background },
132
+ divider: palette.divider,
133
+ action: { ...palette.action },
134
+ grey: { ...palette.grey },
135
+ },
136
+ shape: { borderRadius: ui.radius.md },
137
+ spacing: ui.spacingUnit,
138
+ typography: { fontFamily: ui.typography.fontFamily ?? WEB_FONT_FAMILY },
139
+ zIndex: { ...ui.zIndex },
140
+ };
141
+ }
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+
3
+ import type { UiTheme } from '../tokens/theme';
4
+
5
+ /**
6
+ * The native renderer's theme channel.
7
+ *
8
+ * Only the native files read it. On the web the theme every component paints
9
+ * from is MUI's, reached through emotion's own context, and `use-ui-theme.ts`
10
+ * derives a `UiTheme` view of it — so there is exactly one source of truth per
11
+ * renderer rather than two that can disagree.
12
+ */
13
+ export const UiThemeContext = React.createContext<UiTheme | null>(null);
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+
3
+ import { UiThemeContext } from './ui-theme-context';
4
+ import { DEFAULT_UI_THEME, type UiTheme } from '../tokens/theme';
5
+
6
+ /** The theme the nearest `UiProvider` set, or the package default without one. */
7
+ export function useUiTheme(): UiTheme {
8
+ return React.useContext(UiThemeContext) ?? DEFAULT_UI_THEME;
9
+ }
@@ -0,0 +1,18 @@
1
+ import { useTheme } from '@mui/material/styles/index.js';
2
+ import * as React from 'react';
3
+
4
+ import { uiThemeFromMui } from './mui-bridge';
5
+ import type { UiTheme } from '../tokens/theme';
6
+
7
+ /**
8
+ * The web reading of the theme: MUI's, as a `UiTheme`.
9
+ *
10
+ * Derived rather than provided on purpose. A host that already mounts its own
11
+ * `ThemeProvider` (every origin app does, through `@12-apps/app-shell`) gets
12
+ * the same numbers a MUI-styled sibling paints with, and nothing has to be
13
+ * mounted twice or kept in step.
14
+ */
15
+ export function useUiTheme(): UiTheme {
16
+ const theme = useTheme();
17
+ return React.useMemo(() => uiThemeFromMui(theme), [theme]);
18
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * COLOUR ARITHMETIC WITH NO RENDERER BEHIND IT.
3
+ *
4
+ * Every shade the web components paint comes out of MUI's colour manipulator:
5
+ * `lighten(main, 0.2)` is a palette's `light`, `darken(main, 0.3)` its `dark`,
6
+ * `alpha(main, 0.1)` the hover wash on an outline button. A native component
7
+ * that wants the SAME pixel has to run the SAME arithmetic, and it cannot
8
+ * import it — `@mui/material/styles` drags emotion and the DOM in behind it.
9
+ *
10
+ * So the arithmetic lives here, once, with nothing behind it. It is a faithful
11
+ * port of `@mui/system/colorManipulator` (MIT), down to the truncation:
12
+ * `lighten('#6366F1', 0.2)` is `rgb(130, 132, 243)` on both sides because both
13
+ * TRUNCATE 132.6 rather than round it. A port that rounded would be one pixel
14
+ * of tint away from the web on every button, forever, and nothing would flag it.
15
+ *
16
+ * `color()` space strings are deliberately unsupported: nothing in this package
17
+ * emits one, and a smaller surface is a smaller thing to keep identical.
18
+ */
19
+
20
+ export type ColorFormat = 'rgb' | 'rgba' | 'hsl' | 'hsla';
21
+
22
+ export interface DecomposedColor {
23
+ type: ColorFormat;
24
+ values: number[];
25
+ }
26
+
27
+ const FORMATS: readonly ColorFormat[] = ['rgb', 'rgba', 'hsl', 'hsla'];
28
+
29
+ const clamp = (value: number, min = 0, max = 1): number => Math.min(Math.max(min, value), max);
30
+
31
+ /** `#rgb`, `#rgba`, `#rrggbb` or `#rrggbbaa` to its `rgb()` / `rgba()` string. */
32
+ export function hexToRgb(color: string): string {
33
+ const hex = color.slice(1);
34
+ const pair = new RegExp(`.{1,${hex.length >= 6 ? 2 : 1}}`, 'g');
35
+ let channels: string[] | null = hex.match(pair);
36
+ if (channels && channels[0]?.length === 1) {
37
+ channels = channels.map((channel) => channel + channel);
38
+ }
39
+ if (!channels) return '';
40
+
41
+ const parts = channels.map((channel, index) =>
42
+ index < 3 ? parseInt(channel, 16) : Math.round((parseInt(channel, 16) / 255) * 1000) / 1000,
43
+ );
44
+ return `rgb${channels.length === 4 ? 'a' : ''}(${parts.join(', ')})`;
45
+ }
46
+
47
+ /** Any supported colour string to its type and numeric channels. */
48
+ export function decomposeColor(color: string): DecomposedColor {
49
+ if (color.charAt(0) === '#') {
50
+ return decomposeColor(hexToRgb(color));
51
+ }
52
+
53
+ const marker = color.indexOf('(');
54
+ const type = color.substring(0, marker) as ColorFormat;
55
+ if (!FORMATS.includes(type)) {
56
+ throw new Error(
57
+ `@12-apps/ui: unsupported colour "${color}". Use #nnn, #nnnnnn, rgb(), rgba(), hsl() or hsla().`,
58
+ );
59
+ }
60
+
61
+ const values = color
62
+ .substring(marker + 1, color.length - 1)
63
+ .split(',')
64
+ .map((value) => parseFloat(value));
65
+
66
+ return { type, values };
67
+ }
68
+
69
+ /** The inverse of {@link decomposeColor}, with MUI's channel truncation. */
70
+ export function recomposeColor({ type, values }: DecomposedColor): string {
71
+ const parts: Array<number | string> = type.startsWith('rgb')
72
+ ? values.map((value, index) => (index < 3 ? Math.trunc(value) : value))
73
+ : [values[0] ?? 0, `${values[1] ?? 0}%`, `${values[2] ?? 0}%`, ...values.slice(3)];
74
+
75
+ return `${type}(${parts.join(', ')})`;
76
+ }
77
+
78
+ /** An `hsl()` / `hsla()` string to its `rgb()` / `rgba()` equivalent. */
79
+ export function hslToRgb(color: string): string {
80
+ const { type, values } = decomposeColor(color);
81
+ const h = values[0] ?? 0;
82
+ const s = (values[1] ?? 0) / 100;
83
+ const l = (values[2] ?? 0) / 100;
84
+ const a = s * Math.min(l, 1 - l);
85
+ const f = (n: number, k = (n + h / 30) % 12): number =>
86
+ l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
87
+
88
+ const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];
89
+ if (type === 'hsla') {
90
+ return recomposeColor({ type: 'rgba', values: [...rgb, values[3] ?? 1] });
91
+ }
92
+ return recomposeColor({ type: 'rgb', values: rgb });
93
+ }
94
+
95
+ /** Relative luminance (WCAG 2.0), to three decimals like MUI. */
96
+ export function getLuminance(color: string): number {
97
+ const decomposed = decomposeColor(color);
98
+ const channels = decomposed.type.startsWith('hsl')
99
+ ? decomposeColor(hslToRgb(color)).values
100
+ : decomposed.values;
101
+
102
+ const [r, g, b] = channels.slice(0, 3).map((value) => {
103
+ const c = value / 255;
104
+ return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
105
+ });
106
+
107
+ return Number((0.2126 * (r ?? 0) + 0.7152 * (g ?? 0) + 0.0722 * (b ?? 0)).toFixed(3));
108
+ }
109
+
110
+ /** WCAG contrast ratio between two colours, 1 to 21. */
111
+ export function getContrastRatio(foreground: string, background: string): number {
112
+ const lumA = getLuminance(foreground);
113
+ const lumB = getLuminance(background);
114
+ return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);
115
+ }
116
+
117
+ /** The colour with its alpha channel set to `value` (0 to 1). */
118
+ export function alpha(color: string, value: number): string {
119
+ const decomposed = decomposeColor(color);
120
+ const type: ColorFormat = decomposed.type.endsWith('a')
121
+ ? decomposed.type
122
+ : (`${decomposed.type}a` as ColorFormat);
123
+ const values = decomposed.values.slice(0, 3);
124
+ values[3] = clamp(value);
125
+ return recomposeColor({ type, values });
126
+ }
127
+
128
+ /** The colour moved `coefficient` (0 to 1) of the way towards black. */
129
+ export function darken(color: string, coefficient: number): string {
130
+ const decomposed = decomposeColor(color);
131
+ const amount = clamp(coefficient);
132
+ const values = [...decomposed.values];
133
+
134
+ if (decomposed.type.startsWith('hsl')) {
135
+ values[2] = (values[2] ?? 0) * (1 - amount);
136
+ } else {
137
+ for (let index = 0; index < 3; index += 1) {
138
+ values[index] = (values[index] ?? 0) * (1 - amount);
139
+ }
140
+ }
141
+ return recomposeColor({ type: decomposed.type, values });
142
+ }
143
+
144
+ /** The colour moved `coefficient` (0 to 1) of the way towards white. */
145
+ export function lighten(color: string, coefficient: number): string {
146
+ const decomposed = decomposeColor(color);
147
+ const amount = clamp(coefficient);
148
+ const values = [...decomposed.values];
149
+
150
+ if (decomposed.type.startsWith('hsl')) {
151
+ values[2] = (values[2] ?? 0) + (100 - (values[2] ?? 0)) * amount;
152
+ } else {
153
+ for (let index = 0; index < 3; index += 1) {
154
+ values[index] = (values[index] ?? 0) + (255 - (values[index] ?? 0)) * amount;
155
+ }
156
+ }
157
+ return recomposeColor({ type: decomposed.type, values });
158
+ }
159
+
160
+ /** Darken a light colour or lighten a dark one, by `coefficient`. */
161
+ export function emphasize(color: string, coefficient = 0.15): string {
162
+ return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);
163
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * THE ONE READER OF CSS LENGTHS.
3
+ *
4
+ * `HEADING_SCALE` and a host's MUI overrides speak CSS — `'2rem'`, `'-0.02em'`
5
+ * — and both `tokens/theme.ts` and `provider/mui-bridge.ts` need them as
6
+ * numbers. Two private parsers drifted (one multiplied `em` by 16, one did
7
+ * not), so there is one, here, with the rule spelled out: a length becomes px
8
+ * against a 16px root, a tracking value becomes em.
9
+ */
10
+
11
+ const ROOT_PX = 16;
12
+
13
+ /** `'1.5rem'` → 24, `'1.5em'` → 24, `'20px'` → 20, `20` → 20, unparseable → `fallback`. */
14
+ export function cssLengthToPx(value: string | number | undefined, fallback: number): number {
15
+ if (typeof value === 'number') return value;
16
+ if (value === undefined) return fallback;
17
+ const parsed = Number.parseFloat(value);
18
+ if (Number.isNaN(parsed)) return fallback;
19
+ return value.endsWith('rem') || value.endsWith('em') ? parsed * ROOT_PX : parsed;
20
+ }
21
+
22
+ /** `'-0.02em'` → -0.02, `'0.5px'` → 0.5 / 16, `undefined` → `undefined` ("normal"). */
23
+ export function cssTrackingToEm(value: string | undefined): number | undefined {
24
+ if (value === undefined) return undefined;
25
+ const parsed = Number.parseFloat(value);
26
+ if (Number.isNaN(parsed)) return undefined;
27
+ return value.endsWith('px') ? parsed / ROOT_PX : parsed;
28
+ }
@@ -0,0 +1,87 @@
1
+
2
+ /**
3
+ * THE THIRD VOCABULARY: the type scale.
4
+ *
5
+ * `scales.ts` opens by saying the package had both halves of every argument at
6
+ * once until the size and colour vocabularies were declared in one place and
7
+ * every component derived from them. The type scale was the one that never got
8
+ * that treatment — it lived as a private `LEVELS` table inside
9
+ * `Heading.styles.ts`, which is exactly the shape that file exists to refuse.
10
+ *
11
+ * Two things follow from it being private, and the second is the expensive one.
12
+ *
13
+ * **It could not be re-themed.** `Heading` read `theme.typography.h1.fontFamily`
14
+ * from the theme and then ignored the theme for every other metric, so a host
15
+ * calling `createTheme({ typography: { h1: { fontSize: '2rem' } } })` changed
16
+ * `<Typography variant="h1">` and left `<Heading level="h1">` at 48px. A design
17
+ * system whose type scale cannot be set by the design is not a system.
18
+ *
19
+ * **And the numbers were a landing page's.** `h1` at 3rem and `h2` at 2.5rem are
20
+ * hero metrics. Dropped into an operations console they put a 48px title
21
+ * directly above 14px body copy — a 3.4x jump with nothing in between — so
22
+ * product teams stopped reaching for the component. Measured in one consuming
23
+ * repo: `<Heading>` appeared four times in the entire codebase while raw
24
+ * `fontSize` appeared in dozens of files. The component was not disliked, it was
25
+ * unusable at app scale, and every host paid for that in hand-rolled CSS.
26
+ *
27
+ * So the defaults below are an APP scale, and `display` keeps the hero size for
28
+ * the screens that actually want one. A marketing page asks for `display`; a
29
+ * console asks for `h1` and gets something it can put on a page.
30
+ */
31
+
32
+ /**
33
+ * A step on the scale.
34
+ *
35
+ * `display` is a SIZE, not a rank — see `Heading`, which renders it as `h1` so
36
+ * the document still gets exactly one level-one heading.
37
+ */
38
+ export type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'display';
39
+
40
+ /**
41
+ * The runtime list, declared beside the union for the reason `SIZE_VALUES`
42
+ * gives: a story's `argTypes.options` spelled by hand drifts from the type, and
43
+ * the direction it drifts is "documents less than the component accepts".
44
+ */
45
+ export const HEADING_LEVELS = [
46
+ 'display',
47
+ 'h1',
48
+ 'h2',
49
+ 'h3',
50
+ 'h4',
51
+ 'h5',
52
+ 'h6',
53
+ ] as const satisfies readonly HeadingLevel[];
54
+
55
+ /** Everything one step of the scale decides. */
56
+ export interface HeadingMetrics {
57
+ fontSize: string;
58
+ lineHeight: number;
59
+ letterSpacing?: string;
60
+ /**
61
+ * The weight this step carries when the caller asks for `normal`. A heading's
62
+ * "normal" is not body text's 400 — it is the weight the step is meant to
63
+ * carry, which gets heavier as the step gets larger.
64
+ */
65
+ normalWeight: number;
66
+ }
67
+
68
+ /**
69
+ * The house default, in CODE rather than in a component.
70
+ *
71
+ * ~1.15x per step from a 1rem `h6`, which keeps six distinguishable ranks inside
72
+ * the range an application actually uses. The old table ran 1.125rem → 4rem and
73
+ * spent its top three steps above anything a product screen wants.
74
+ */
75
+ export const HEADING_SCALE: Record<HeadingLevel, HeadingMetrics> = {
76
+ // The hero size the old `h1` was really offering, under the name that says so.
77
+ display: { fontSize: '3rem', lineHeight: 1.05, letterSpacing: '-0.03em', normalWeight: 800 },
78
+ h1: { fontSize: '2rem', lineHeight: 1.2, letterSpacing: '-0.02em', normalWeight: 700 },
79
+ h2: { fontSize: '1.75rem', lineHeight: 1.25, letterSpacing: '-0.015em', normalWeight: 700 },
80
+ h3: { fontSize: '1.5rem', lineHeight: 1.3, letterSpacing: '-0.01em', normalWeight: 600 },
81
+ h4: { fontSize: '1.25rem', lineHeight: 1.35, letterSpacing: '-0.005em', normalWeight: 600 },
82
+ h5: { fontSize: '1.125rem', lineHeight: 1.4, normalWeight: 600 },
83
+ h6: { fontSize: '1rem', lineHeight: 1.5, normalWeight: 600 },
84
+ };
85
+
86
+ /** A host's overrides: any subset of the steps, any subset of each step's metrics. */
87
+ export type HeadingScaleOverrides = Partial<Record<HeadingLevel, Partial<HeadingMetrics>>>;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `@12-apps/ui/tokens` on React Native: the vocabulary, the type scale, the
3
+ * theme and the colour arithmetic. NOT `accentFor` or `headingMetrics`, which
4
+ * read a MUI `Theme` and belong to the web build — a native component reads
5
+ * `useUiTheme()` from `@12-apps/ui/provider` instead.
6
+ */
7
+ export * from './vocabulary';
8
+ export * from './theme';
9
+ export * from './color';