@12-apps/ui 6.21.0 → 6.22.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 (612) hide show
  1. package/NATIVE.md +6 -4
  2. package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
  3. package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
  4. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +7 -7
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  6. package/dist/_internal/components/data-display/Badge/Badge.js +3 -3
  7. package/dist/_internal/components/data-display/CardKit/CardKebab.js +4 -4
  8. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
  9. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +10 -10
  10. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
  11. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  12. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  13. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  14. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  15. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  16. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  17. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +3 -3
  18. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +49 -49
  19. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +68 -65
  20. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +10 -7
  21. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +12 -9
  22. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +14 -11
  23. package/dist/_internal/components/data-display/DataViews/base-card.js +9 -7
  24. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +7 -7
  25. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +6 -6
  27. package/dist/_internal/components/data-display/DataViews/base-list-card.js +15 -13
  28. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +12 -12
  29. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +3 -3
  30. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +5 -5
  31. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +8 -8
  32. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +3 -3
  33. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
  34. package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
  35. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +18 -18
  36. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +12 -12
  37. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +4 -4
  38. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +44 -44
  39. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +3 -3
  40. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +22 -22
  41. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +7 -7
  42. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +10 -10
  43. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +3 -3
  44. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
  45. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +13 -13
  46. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +22 -19
  47. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +12 -12
  48. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
  49. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  50. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +3 -3
  51. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +8 -8
  52. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +3 -3
  53. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  54. package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -2
  55. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  56. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +4 -4
  57. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  58. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +4 -4
  59. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  60. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  61. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  62. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -9
  63. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  64. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  65. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  66. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  67. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  68. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  69. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  70. package/dist/_internal/components/data-display/StatCard/StatCard.js +4 -4
  71. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  72. package/dist/_internal/components/data-display/index.js +51 -51
  73. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +4 -4
  74. package/dist/_internal/components/feedback/Dialog/Dialog.base.js +1 -0
  75. package/dist/_internal/components/feedback/Dialog/Dialog.base.js.map +1 -0
  76. package/dist/_internal/components/feedback/Dialog/Dialog.helpers.js +12 -0
  77. package/dist/_internal/components/feedback/Dialog/Dialog.helpers.js.map +1 -0
  78. package/dist/_internal/components/feedback/Dialog/Dialog.js +6 -2
  79. package/dist/_internal/components/feedback/Dialog/Dialog.metrics.js +42 -0
  80. package/dist/_internal/components/feedback/Dialog/Dialog.metrics.js.map +1 -0
  81. package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +3 -1
  82. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  83. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +2 -2
  84. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  85. package/dist/_internal/components/feedback/index.js +18 -15
  86. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  87. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -3
  88. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  89. package/dist/_internal/components/form/Button/Button.js +3 -3
  90. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  91. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  92. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  93. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +6 -6
  94. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  95. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  96. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
  97. package/dist/_internal/components/form/CepField/CepField.js +4 -4
  98. package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
  99. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  100. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
  101. package/dist/_internal/components/form/Input/Input.js +3 -3
  102. package/dist/_internal/components/form/Label/Label.js +2 -2
  103. package/dist/_internal/components/form/Menubar/Menubar.js +5 -5
  104. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
  105. package/dist/_internal/components/form/Select/Select.js +2 -2
  106. package/dist/_internal/components/form/Switch/Switch.js +2 -2
  107. package/dist/_internal/components/form/index.js +32 -32
  108. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
  109. package/dist/_internal/components/form/total-form/Fields/CepField.js +5 -5
  110. package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -3
  111. package/dist/_internal/components/form/total-form/Fields/TextField.js +4 -4
  112. package/dist/_internal/components/form/total-form/Fields/index.js +24 -24
  113. package/dist/_internal/components/form/total-form/SubmitButton.js +4 -4
  114. package/dist/_internal/components/index.js +115 -111
  115. package/dist/_internal/components/layout/Box/Box.js +2 -2
  116. package/dist/_internal/components/layout/Card/Card.base.js +1 -0
  117. package/dist/_internal/components/layout/Card/Card.base.js.map +1 -0
  118. package/dist/_internal/components/layout/Card/Card.helpers.js +1 -1
  119. package/dist/_internal/components/layout/Card/Card.js +6 -3
  120. package/dist/_internal/components/layout/Card/Card.metrics.js +44 -0
  121. package/dist/_internal/components/layout/Card/Card.metrics.js.map +1 -0
  122. package/dist/_internal/components/layout/Card/Card.styles.js +3 -1
  123. package/dist/_internal/components/layout/Container/Container.js +2 -2
  124. package/dist/_internal/components/layout/Skeleton/Skeleton.js +3 -3
  125. package/dist/_internal/components/layout/Spacer/Spacer.js +2 -2
  126. package/dist/_internal/components/layout/Stack/Stack.js +3 -3
  127. package/dist/_internal/components/layout/index.js +13 -11
  128. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +12 -9
  129. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +2 -2
  130. package/dist/_internal/components/navigation/index.js +14 -11
  131. package/dist/_internal/components/typography/Heading/Heading.js +2 -2
  132. package/dist/_internal/components/typography/Paragraph/Paragraph.js +2 -2
  133. package/dist/_internal/components/typography/Text/Text.js +2 -2
  134. package/dist/_internal/components/typography/index.js +4 -4
  135. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +2 -2
  136. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  137. package/dist/_internal/components/utility/index.js +4 -4
  138. package/dist/_internal/icons/Icon.js +2 -2
  139. package/dist/_internal/platform/test-id.js +3 -1
  140. package/dist/_internal/social-login-button/social-login-button.js +11 -9
  141. package/dist/_internal/tokens/mui-type.js +1 -0
  142. package/dist/_internal/tokens/mui-type.js.map +1 -1
  143. package/dist/_internal/tokens/shadow.js +18 -0
  144. package/dist/_internal/tokens/shadow.js.map +1 -0
  145. package/dist/_internal/user-avatar/user-avatar.js +12 -10
  146. package/dist/charts.js +6 -6
  147. package/dist/{chunk-P7FQUGED.js → chunk-23FCBIUN.js} +8 -8
  148. package/dist/{chunk-NUE774AN.js → chunk-25R3ITGZ.js} +2 -2
  149. package/dist/{chunk-Z6UEOSL7.js → chunk-2FDBR77W.js} +3 -3
  150. package/dist/{chunk-IFNK5TPI.js → chunk-2HPP6RVC.js} +2 -2
  151. package/dist/{chunk-6RGWDKUL.js → chunk-2MMEIN4T.js} +4 -4
  152. package/dist/{chunk-YRUCIKPO.js → chunk-2UYR2OOE.js} +4 -4
  153. package/dist/{chunk-26Z7QWID.js → chunk-343TTIHD.js} +2 -2
  154. package/dist/{chunk-BRSF5NRT.js → chunk-3FLVIVOK.js} +4 -4
  155. package/dist/{chunk-BDVNAU2C.js → chunk-4523RYE7.js} +5 -5
  156. package/dist/{chunk-4ETQRBZC.js → chunk-46UPILLK.js} +4 -4
  157. package/dist/{chunk-I3MDKPGG.js → chunk-4IVOHL32.js} +2 -2
  158. package/dist/{chunk-TLX66HCW.js → chunk-4OHRZW7U.js} +5 -5
  159. package/dist/{chunk-2QFTAGDH.js → chunk-4X4KM4ZB.js} +4 -4
  160. package/dist/{chunk-6PRA45LC.js → chunk-5KEMPCW4.js} +54 -45
  161. package/dist/chunk-5KEMPCW4.js.map +1 -0
  162. package/dist/{chunk-CXVMD6FE.js → chunk-5NKUYCZD.js} +4 -4
  163. package/dist/{chunk-77F36LQQ.js → chunk-5OIH36KX.js} +3 -3
  164. package/dist/{chunk-4MLDWACO.js → chunk-5ZTUP65G.js} +10 -10
  165. package/dist/{chunk-GDEXYUPF.js → chunk-67L7HMEP.js} +2 -2
  166. package/dist/{chunk-ZFPJBKVZ.js → chunk-6JGPPTLX.js} +5 -5
  167. package/dist/{chunk-PF5HDFYY.js → chunk-6NZTYZP5.js} +4 -4
  168. package/dist/chunk-6Q6T3FW5.js +92 -0
  169. package/dist/chunk-6Q6T3FW5.js.map +1 -0
  170. package/dist/chunk-73BEVJCS.js +28 -0
  171. package/dist/chunk-73BEVJCS.js.map +1 -0
  172. package/dist/{chunk-I7HYGIEJ.js → chunk-7BYFC2MR.js} +6 -6
  173. package/dist/{chunk-D4T646G4.js → chunk-7NSX7A5H.js} +2 -2
  174. package/dist/{chunk-OH3YGJT5.js → chunk-7TZ6OC5T.js} +2 -2
  175. package/dist/{chunk-QS7ZGRNS.js → chunk-7VN7LFBA.js} +6 -6
  176. package/dist/{chunk-GBNOYRLP.js → chunk-AEGXHZQT.js} +8 -8
  177. package/dist/{chunk-G2IPK2XE.js → chunk-AGSBIUPV.js} +11 -11
  178. package/dist/{chunk-D2IASECY.js → chunk-AIRWM7KK.js} +39 -28
  179. package/dist/chunk-AIRWM7KK.js.map +1 -0
  180. package/dist/{chunk-65DLYC4S.js → chunk-AVGTTWTE.js} +4 -4
  181. package/dist/{chunk-PXH24VIP.js → chunk-B6IURHSZ.js} +4 -4
  182. package/dist/chunk-BEBLRL5D.js +177 -0
  183. package/dist/chunk-BEBLRL5D.js.map +1 -0
  184. package/dist/{chunk-B3BK2SNS.js → chunk-C3CMEDSO.js} +2 -2
  185. package/dist/{chunk-JIINGMEB.js → chunk-CHPZTF34.js} +7 -7
  186. package/dist/{chunk-PWXL3QQ6.js → chunk-CJBBGMIA.js} +2 -2
  187. package/dist/{chunk-BPYPUEM5.js → chunk-CZJLWCEG.js} +2 -2
  188. package/dist/{chunk-BEGWE5O4.js → chunk-DTC224UJ.js} +4 -4
  189. package/dist/{chunk-UB76PBDF.js → chunk-DVFIE54C.js} +2 -2
  190. package/dist/{chunk-KT6HWAEN.js → chunk-DVUPIVI2.js} +4 -4
  191. package/dist/{chunk-GO4MVQGC.js → chunk-DW5FRWRQ.js} +2 -2
  192. package/dist/{chunk-6Z4H2Y77.js → chunk-E27Y7FF2.js} +4 -4
  193. package/dist/{chunk-PANMJFDS.js → chunk-E55CJV65.js} +2 -2
  194. package/dist/{chunk-TPIBJP4S.js → chunk-EOHKZGOZ.js} +2 -2
  195. package/dist/{chunk-SHDIZSN5.js → chunk-EXJBPKGW.js} +5 -5
  196. package/dist/{chunk-DH75UNF3.js → chunk-FGK2C7JR.js} +2 -2
  197. package/dist/{chunk-RI5JZLZL.js → chunk-FKUYRQSP.js} +1 -1
  198. package/dist/chunk-FKUYRQSP.js.map +1 -0
  199. package/dist/{chunk-OOGEYCJH.js → chunk-FL54G7PV.js} +2 -2
  200. package/dist/{chunk-AD776JPA.js → chunk-FR67FG2U.js} +2 -2
  201. package/dist/{chunk-SHQWIDD5.js → chunk-GJQYM3PM.js} +4 -4
  202. package/dist/{chunk-WROCSDVL.js → chunk-GSFNH4C5.js} +5 -5
  203. package/dist/chunk-GYXUCS37.js +36 -0
  204. package/dist/chunk-GYXUCS37.js.map +1 -0
  205. package/dist/{chunk-Z5ABJLTM.js → chunk-HFXTAEYY.js} +2 -2
  206. package/dist/{chunk-BLBOYCOV.js → chunk-HKV4MQ2W.js} +5 -5
  207. package/dist/{chunk-FOMK3WPG.js → chunk-HLYPI5CO.js} +4 -4
  208. package/dist/{chunk-GBRKP5GZ.js → chunk-I5SBTNV2.js} +2 -2
  209. package/dist/{chunk-V5P5Q6HM.js → chunk-J4W4TQPC.js} +6 -6
  210. package/dist/{chunk-RRO2EOJB.js → chunk-JB67KPGM.js} +4 -4
  211. package/dist/{chunk-5ZOJLYD2.js → chunk-JE6RZ5L6.js} +4 -4
  212. package/dist/{chunk-4HYXEMBP.js → chunk-JIKWZDNK.js} +2 -2
  213. package/dist/{chunk-2QLVUVVR.js → chunk-JSH3HFDQ.js} +2 -2
  214. package/dist/{chunk-TZ4SFX3M.js → chunk-JWW2Z3RH.js} +4 -4
  215. package/dist/{chunk-QFHH2NU5.js → chunk-JXNT5TUP.js} +3 -3
  216. package/dist/{chunk-OCXCH2ZW.js → chunk-KTK4A3IF.js} +12 -12
  217. package/dist/{chunk-ZXLIWOXC.js → chunk-LS4FMSHY.js} +5 -5
  218. package/dist/{chunk-SFAP5EH5.js → chunk-LUMF63BM.js} +4 -4
  219. package/dist/{chunk-CZPU5TW3.js → chunk-LYSSO6WC.js} +4 -4
  220. package/dist/{chunk-736HP6BL.js → chunk-M4LQRQFL.js} +2 -2
  221. package/dist/{chunk-426FTCMF.js → chunk-MESRKY67.js} +2 -2
  222. package/dist/{chunk-B5PYBEXO.js → chunk-MP4VSWHK.js} +2 -2
  223. package/dist/{chunk-VWGR5XUP.js → chunk-NWNSUHEB.js} +2 -2
  224. package/dist/{chunk-4K7FDVAB.js → chunk-O3336DJ6.js} +2 -2
  225. package/dist/{chunk-YCCKY5VW.js → chunk-OFOYMZRY.js} +4 -4
  226. package/dist/{chunk-QZDBWXZG.js → chunk-OP65D4UR.js} +2 -2
  227. package/dist/{chunk-BQQONDW5.js → chunk-OVLNF4AZ.js} +6 -6
  228. package/dist/{chunk-ZTZ6S5Q6.js → chunk-OXQP3N6X.js} +4 -4
  229. package/dist/{chunk-3UOHKHOT.js → chunk-PFV6RL4Q.js} +3 -3
  230. package/dist/{chunk-DF2FFYZ7.js → chunk-PMS3H3OO.js} +4 -4
  231. package/dist/{chunk-AGYGNNOM.js → chunk-PQECNGDE.js} +2 -2
  232. package/dist/{chunk-IIROZKW5.js → chunk-PRUSQQDT.js} +2 -2
  233. package/dist/{chunk-IPE5FFFD.js → chunk-PUBPZOQJ.js} +2 -2
  234. package/dist/{chunk-7KTU6YMQ.js → chunk-Q75SJ35X.js} +5 -5
  235. package/dist/{chunk-FINCVAAR.js → chunk-QFJRB27Q.js} +4 -4
  236. package/dist/{chunk-FB36IHCE.js → chunk-QFVFHIHE.js} +8 -8
  237. package/dist/{chunk-IH4RSRQA.js → chunk-QKIJ6YXZ.js} +4 -4
  238. package/dist/{chunk-UOPQOBQZ.js → chunk-QWDEOITU.js} +3 -3
  239. package/dist/{chunk-WBKWIFXA.js → chunk-QYNCPS5W.js} +6 -6
  240. package/dist/{chunk-XEE7PLDR.js → chunk-QZBUGUOY.js} +6 -6
  241. package/dist/{chunk-STH66VLA.js → chunk-R7R3LOKW.js} +2 -2
  242. package/dist/{chunk-OLZTGVBT.js → chunk-REMK55JI.js} +4 -4
  243. package/dist/{chunk-VWBWKLXX.js → chunk-SX3V2DLV.js} +4 -4
  244. package/dist/{chunk-THZ2NAA4.js → chunk-TLMLEC4F.js} +4 -4
  245. package/dist/{chunk-WTIOCG4M.js → chunk-TOYEP23N.js} +2 -2
  246. package/dist/{chunk-ZGHIHEND.js → chunk-TW3BXVEU.js} +2 -2
  247. package/dist/{chunk-6F5IKY32.js → chunk-TYJR4GOF.js} +6 -2
  248. package/dist/{chunk-6F5IKY32.js.map → chunk-TYJR4GOF.js.map} +1 -1
  249. package/dist/{chunk-5RQ7N63M.js → chunk-TZDDL3DR.js} +2 -2
  250. package/dist/{chunk-BEH4DN63.js → chunk-U2YJCNRU.js} +4 -4
  251. package/dist/{chunk-RPQ3W2C6.js → chunk-U2ZDN2AL.js} +2 -2
  252. package/dist/{chunk-WPZT2JD4.js → chunk-U7Q2Y6WG.js} +2 -2
  253. package/dist/{chunk-XLJJ2ZAP.js → chunk-UU3QAKG6.js} +10 -10
  254. package/dist/{chunk-TP4N3X2Q.js → chunk-UVGRRI7N.js} +8 -8
  255. package/dist/{chunk-GCXYCDOA.js → chunk-VLHGBFR6.js} +2 -2
  256. package/dist/chunk-VM3HRSAU.js +79 -0
  257. package/dist/chunk-VM3HRSAU.js.map +1 -0
  258. package/dist/{chunk-QRX5BYUQ.js → chunk-VNDOQEJ7.js} +4 -4
  259. package/dist/{chunk-P6IPJYCS.js → chunk-VNNG46TS.js} +6 -6
  260. package/dist/{chunk-7ZH7ZB33.js → chunk-VQAM2XZV.js} +4 -4
  261. package/dist/{chunk-2SWQ6HIK.js → chunk-W3FAKT3D.js} +4 -4
  262. package/dist/{chunk-JDMYD6QC.js → chunk-W4SDVTZC.js} +2 -2
  263. package/dist/{chunk-7MAOQIWA.js → chunk-W4YWU7LQ.js} +2 -2
  264. package/dist/{chunk-Y46RBFBV.js → chunk-W7Y6RA6W.js} +6 -6
  265. package/dist/{chunk-XFU2S6XT.js → chunk-WGRS4PGY.js} +10 -10
  266. package/dist/{chunk-JXAYT6LX.js → chunk-WLQTHPMX.js} +2 -2
  267. package/dist/{chunk-J2KSG754.js → chunk-WRDPWEIC.js} +5 -5
  268. package/dist/{chunk-RPWEXIAW.js → chunk-X5MPHXG5.js} +6 -6
  269. package/dist/{chunk-UEIVXFUC.js → chunk-XELVDPKL.js} +5 -5
  270. package/dist/{chunk-EPNUVSNK.js → chunk-XFUNJYFT.js} +7 -7
  271. package/dist/{chunk-RRZBATXK.js → chunk-XKV5ZIBG.js} +3 -3
  272. package/dist/{chunk-ZKFYBC6G.js → chunk-XSF6AXEU.js} +2 -2
  273. package/dist/{chunk-VPHOSIPB.js → chunk-XT7HMNBW.js} +9 -9
  274. package/dist/{chunk-R6RVBYTU.js → chunk-XUJG2HFW.js} +3 -3
  275. package/dist/{chunk-S5LE2ARG.js → chunk-YANLN6HP.js} +66 -56
  276. package/dist/chunk-YANLN6HP.js.map +1 -0
  277. package/dist/{chunk-FRQ4HNGF.js → chunk-YJ4HM25H.js} +2 -2
  278. package/dist/{chunk-TVO5STZB.js → chunk-YQ6TNHAC.js} +3 -3
  279. package/dist/{chunk-BNNSO4MC.js → chunk-YTOYMJPM.js} +5 -5
  280. package/dist/{chunk-MCRIT46W.js → chunk-ZIYMBR7K.js} +5 -5
  281. package/dist/{chunk-SAHQLXNN.js → chunk-ZKR5B6YJ.js} +5 -5
  282. package/dist/data-display/Alert.js +4 -4
  283. package/dist/data-display/AsyncStateContainer.js +7 -7
  284. package/dist/data-display/Avatar.js +2 -2
  285. package/dist/data-display/Badge.js +3 -3
  286. package/dist/data-display/CardKit.js +21 -21
  287. package/dist/data-display/Carousel.js +2 -2
  288. package/dist/data-display/Chart.js +6 -6
  289. package/dist/data-display/DataGrid.js +2 -2
  290. package/dist/data-display/DataViews.js +84 -80
  291. package/dist/data-display/DescriptionItem.js +3 -3
  292. package/dist/data-display/EmptyState.js +2 -2
  293. package/dist/data-display/ErrorState.js +2 -2
  294. package/dist/data-display/HoverCard.js +2 -2
  295. package/dist/data-display/LazyImage.js +4 -4
  296. package/dist/data-display/Lightbox.js +3 -3
  297. package/dist/data-display/LoadingState.js +4 -4
  298. package/dist/data-display/MapPreview.js +9 -9
  299. package/dist/data-display/Progress.js +2 -2
  300. package/dist/data-display/SectionOnboarding.js +3 -3
  301. package/dist/data-display/Sheet.js +3 -3
  302. package/dist/data-display/StatCard.js +4 -4
  303. package/dist/data-display/Table.js +3 -3
  304. package/dist/feedback/ConfirmAction.js +7 -7
  305. package/dist/feedback/Dialog.js +6 -2
  306. package/dist/feedback/Modal.js +2 -2
  307. package/dist/feedback/StackedModal.js +2 -2
  308. package/dist/feedback/TutorialOverlay.js +2 -2
  309. package/dist/form/AddressAutocomplete.js +5 -5
  310. package/dist/form/Autocomplete.js +2 -2
  311. package/dist/form/Button.js +3 -3
  312. package/dist/form/Calendar.js +4 -4
  313. package/dist/form/CategorySelect.js +10 -10
  314. package/dist/form/CepField.js +4 -4
  315. package/dist/form/Checkbox.js +2 -2
  316. package/dist/form/CodeEditor.js +2 -2
  317. package/dist/form/DateRangePicker.js +7 -7
  318. package/dist/form/Input.js +3 -3
  319. package/dist/form/Label.js +2 -2
  320. package/dist/form/Menubar.js +5 -5
  321. package/dist/form/Select.js +2 -2
  322. package/dist/form/Switch.js +2 -2
  323. package/dist/form/total-form.js +30 -30
  324. package/dist/icons.js +2 -2
  325. package/dist/layout/Box.js +2 -2
  326. package/dist/layout/Card.js +6 -3
  327. package/dist/layout/Container.js +2 -2
  328. package/dist/layout/ContentToolbar.js +3 -3
  329. package/dist/layout/Skeleton.js +3 -3
  330. package/dist/layout/Spacer.js +2 -2
  331. package/dist/layout/Stack.js +3 -3
  332. package/dist/native/chunks/{chunk-HSIND52T.js → chunk-2UFNPDYT.js} +2 -1
  333. package/dist/native/chunks/chunk-2UFNPDYT.js.map +1 -0
  334. package/dist/native/chunks/{chunk-OGWPPQL4.js → chunk-75JQYVDZ.js} +3 -3
  335. package/dist/native/chunks/{chunk-WKMDCNIN.js → chunk-7LTVGW23.js} +2 -2
  336. package/dist/native/chunks/{chunk-QZAUOHDQ.js → chunk-AR5O4BEY.js} +6 -2
  337. package/dist/native/chunks/{chunk-QZAUOHDQ.js.map → chunk-AR5O4BEY.js.map} +1 -1
  338. package/dist/native/chunks/{chunk-RJVM5YDE.js → chunk-ATS7STZJ.js} +4 -4
  339. package/dist/native/chunks/{chunk-YTHR4Y5P.js → chunk-GWGIWQO7.js} +2 -2
  340. package/dist/native/chunks/{chunk-P3PL4WBO.js → chunk-LEMMXZFN.js} +24 -24
  341. package/dist/native/chunks/{chunk-P3PL4WBO.js.map → chunk-LEMMXZFN.js.map} +1 -1
  342. package/dist/native/chunks/chunk-NRN37A5K.js +67 -0
  343. package/dist/native/chunks/chunk-NRN37A5K.js.map +1 -0
  344. package/dist/native/chunks/{chunk-D4EYAXNG.js → chunk-QYUD3S6F.js} +5 -5
  345. package/dist/native/data-display/Alert.js +8 -8
  346. package/dist/native/data-display/Avatar.js +7 -7
  347. package/dist/native/data-display/Badge.js +8 -8
  348. package/dist/native/data-display/Chip.js +4 -4
  349. package/dist/native/data-display/EmptyState.js +11 -11
  350. package/dist/native/data-display/ErrorState.js +11 -11
  351. package/dist/native/data-display/LoadingState.js +7 -7
  352. package/dist/native/data-display/Progress.js +3 -3
  353. package/dist/native/feedback/Dialog.js +496 -0
  354. package/dist/native/feedback/Dialog.js.map +1 -0
  355. package/dist/native/form/Button.js +4 -4
  356. package/dist/native/form/Checkbox.js +5 -5
  357. package/dist/native/form/Input.js +5 -5
  358. package/dist/native/form/Select.js +6 -6
  359. package/dist/native/form/Switch.js +3 -3
  360. package/dist/native/icons.js +4 -4
  361. package/dist/native/layout/Box.js +4 -4
  362. package/dist/native/layout/Card.js +494 -0
  363. package/dist/native/layout/Card.js.map +1 -0
  364. package/dist/native/layout/Container.js +3 -3
  365. package/dist/native/layout/Skeleton.js +6 -6
  366. package/dist/native/layout/Spacer.js +3 -3
  367. package/dist/native/layout/Stack.js +4 -4
  368. package/dist/native/provider.js +2 -2
  369. package/dist/native/tokens.js +1 -1
  370. package/dist/native/typography/Heading.js +3 -3
  371. package/dist/native/typography/Paragraph.js +3 -3
  372. package/dist/native/typography/Text.js +3 -3
  373. package/dist/navigation/AppHeader.js +12 -9
  374. package/dist/navigation/CommandPalette.js +2 -2
  375. package/dist/social-login-button.js +11 -9
  376. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts +64 -0
  377. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts.map +1 -0
  378. package/dist/types/components/feedback/Dialog/Dialog.d.ts.map +1 -1
  379. package/dist/types/components/feedback/Dialog/Dialog.helpers.d.ts +35 -0
  380. package/dist/types/components/feedback/Dialog/Dialog.helpers.d.ts.map +1 -0
  381. package/dist/types/components/feedback/Dialog/Dialog.metrics.d.ts +133 -0
  382. package/dist/types/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -0
  383. package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts +4 -4
  384. package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
  385. package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +8 -41
  386. package/dist/types/components/feedback/Dialog/Dialog.types.d.ts.map +1 -1
  387. package/dist/types/components/feedback/Dialog/index.d.ts +1 -1
  388. package/dist/types/components/feedback/Dialog/index.d.ts.map +1 -1
  389. package/dist/types/components/layout/Card/Card.base.d.ts +77 -0
  390. package/dist/types/components/layout/Card/Card.base.d.ts.map +1 -0
  391. package/dist/types/components/layout/Card/Card.d.ts.map +1 -1
  392. package/dist/types/components/layout/Card/Card.helpers.d.ts +8 -3
  393. package/dist/types/components/layout/Card/Card.helpers.d.ts.map +1 -1
  394. package/dist/types/components/layout/Card/Card.metrics.d.ts +182 -0
  395. package/dist/types/components/layout/Card/Card.metrics.d.ts.map +1 -0
  396. package/dist/types/components/layout/Card/Card.styles.d.ts +2 -2
  397. package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
  398. package/dist/types/components/layout/Card/Card.types.d.ts +10 -44
  399. package/dist/types/components/layout/Card/Card.types.d.ts.map +1 -1
  400. package/dist/types/components/layout/Card/index.d.ts +1 -1
  401. package/dist/types/components/layout/Card/index.d.ts.map +1 -1
  402. package/dist/types/platform/test-id.d.ts +14 -0
  403. package/dist/types/platform/test-id.d.ts.map +1 -1
  404. package/dist/types/tokens/mui-type.d.ts +1 -1
  405. package/dist/types/tokens/mui-type.d.ts.map +1 -1
  406. package/dist/types/tokens/shadow.d.ts +40 -0
  407. package/dist/types/tokens/shadow.d.ts.map +1 -0
  408. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts +64 -0
  409. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts.map +1 -0
  410. package/dist/types-native/components/feedback/Dialog/Dialog.helpers.d.ts +35 -0
  411. package/dist/types-native/components/feedback/Dialog/Dialog.helpers.d.ts.map +1 -0
  412. package/dist/types-native/components/feedback/Dialog/Dialog.look.native.d.ts +44 -0
  413. package/dist/types-native/components/feedback/Dialog/Dialog.look.native.d.ts.map +1 -0
  414. package/dist/types-native/components/feedback/Dialog/Dialog.metrics.d.ts +133 -0
  415. package/dist/types-native/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -0
  416. package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts +8 -0
  417. package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts.map +1 -0
  418. package/dist/types-native/components/feedback/Dialog/Dialog.types.native.d.ts +25 -0
  419. package/dist/types-native/components/feedback/Dialog/Dialog.types.native.d.ts.map +1 -0
  420. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts +39 -0
  421. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts.map +1 -0
  422. package/dist/types-native/components/feedback/Dialog/index.native.d.ts +4 -0
  423. package/dist/types-native/components/feedback/Dialog/index.native.d.ts.map +1 -0
  424. package/dist/types-native/components/layout/Card/Card.base.d.ts +77 -0
  425. package/dist/types-native/components/layout/Card/Card.base.d.ts.map +1 -0
  426. package/dist/types-native/components/layout/Card/Card.helpers.d.ts +11 -0
  427. package/dist/types-native/components/layout/Card/Card.helpers.d.ts.map +1 -0
  428. package/dist/types-native/components/layout/Card/Card.look.native.d.ts +57 -0
  429. package/dist/types-native/components/layout/Card/Card.look.native.d.ts.map +1 -0
  430. package/dist/types-native/components/layout/Card/Card.metrics.d.ts +182 -0
  431. package/dist/types-native/components/layout/Card/Card.metrics.d.ts.map +1 -0
  432. package/dist/types-native/components/layout/Card/Card.native.d.ts +11 -0
  433. package/dist/types-native/components/layout/Card/Card.native.d.ts.map +1 -0
  434. package/dist/types-native/components/layout/Card/Card.types.native.d.ts +28 -0
  435. package/dist/types-native/components/layout/Card/Card.types.native.d.ts.map +1 -0
  436. package/dist/types-native/components/layout/Card/CardParts.native.d.ts +55 -0
  437. package/dist/types-native/components/layout/Card/CardParts.native.d.ts.map +1 -0
  438. package/dist/types-native/components/layout/Card/index.native.d.ts +4 -0
  439. package/dist/types-native/components/layout/Card/index.native.d.ts.map +1 -0
  440. package/dist/types-native/platform/pulse-ring.native.d.ts +35 -0
  441. package/dist/types-native/platform/pulse-ring.native.d.ts.map +1 -0
  442. package/dist/types-native/platform/test-id.d.ts +14 -0
  443. package/dist/types-native/platform/test-id.d.ts.map +1 -1
  444. package/dist/types-native/tokens/mui-type.d.ts +1 -1
  445. package/dist/types-native/tokens/mui-type.d.ts.map +1 -1
  446. package/dist/types-native/tokens/shadow.d.ts +40 -0
  447. package/dist/types-native/tokens/shadow.d.ts.map +1 -0
  448. package/dist/typography/Heading.js +2 -2
  449. package/dist/typography/Paragraph.js +2 -2
  450. package/dist/typography/Text.js +2 -2
  451. package/dist/user-avatar.js +12 -10
  452. package/dist/utility/InfiniteScroll.js +2 -2
  453. package/dist/utility/InstallPrompt.js +2 -2
  454. package/package.json +9 -1
  455. package/src/components/data-display/CardKit/NATIVE-NOTES.md +48 -0
  456. package/src/components/feedback/Dialog/Dialog.base.ts +69 -0
  457. package/src/components/feedback/Dialog/Dialog.helpers.ts +75 -0
  458. package/src/components/feedback/Dialog/Dialog.look.native.ts +159 -0
  459. package/src/components/feedback/Dialog/Dialog.metrics.ts +140 -0
  460. package/src/components/feedback/Dialog/Dialog.native.tsx +149 -0
  461. package/src/components/feedback/Dialog/Dialog.styles.ts +63 -41
  462. package/src/components/feedback/Dialog/Dialog.tsx +58 -74
  463. package/src/components/feedback/Dialog/Dialog.types.native.ts +46 -0
  464. package/src/components/feedback/Dialog/Dialog.types.ts +24 -41
  465. package/src/components/feedback/Dialog/DialogParts.native.tsx +257 -0
  466. package/src/components/feedback/Dialog/NATIVE-NOTES.md +16 -0
  467. package/src/components/feedback/Dialog/index.native.ts +16 -0
  468. package/src/components/feedback/Dialog/index.ts +8 -2
  469. package/src/components/layout/Card/Card.base.ts +92 -0
  470. package/src/components/layout/Card/Card.helpers.ts +13 -7
  471. package/src/components/layout/Card/Card.look.native.ts +204 -0
  472. package/src/components/layout/Card/Card.metrics.ts +171 -0
  473. package/src/components/layout/Card/Card.native.tsx +130 -0
  474. package/src/components/layout/Card/Card.styles.ts +88 -48
  475. package/src/components/layout/Card/Card.tsx +41 -25
  476. package/src/components/layout/Card/Card.types.native.ts +59 -0
  477. package/src/components/layout/Card/Card.types.ts +30 -45
  478. package/src/components/layout/Card/CardParts.native.tsx +262 -0
  479. package/src/components/layout/Card/NATIVE-NOTES.md +15 -0
  480. package/src/components/layout/Card/index.native.ts +18 -0
  481. package/src/components/layout/Card/index.ts +9 -0
  482. package/src/platform/pulse-ring.native.tsx +82 -0
  483. package/src/platform/test-id.ts +17 -0
  484. package/src/tokens/mui-type.ts +2 -1
  485. package/src/tokens/shadow.ts +59 -0
  486. package/dist/chunk-6PRA45LC.js.map +0 -1
  487. package/dist/chunk-D2IASECY.js.map +0 -1
  488. package/dist/chunk-RI5JZLZL.js.map +0 -1
  489. package/dist/chunk-S5LE2ARG.js.map +0 -1
  490. package/dist/chunk-VMF3UXM4.js +0 -137
  491. package/dist/chunk-VMF3UXM4.js.map +0 -1
  492. package/dist/native/chunks/chunk-HSIND52T.js.map +0 -1
  493. /package/dist/{chunk-P7FQUGED.js.map → chunk-23FCBIUN.js.map} +0 -0
  494. /package/dist/{chunk-NUE774AN.js.map → chunk-25R3ITGZ.js.map} +0 -0
  495. /package/dist/{chunk-Z6UEOSL7.js.map → chunk-2FDBR77W.js.map} +0 -0
  496. /package/dist/{chunk-IFNK5TPI.js.map → chunk-2HPP6RVC.js.map} +0 -0
  497. /package/dist/{chunk-6RGWDKUL.js.map → chunk-2MMEIN4T.js.map} +0 -0
  498. /package/dist/{chunk-YRUCIKPO.js.map → chunk-2UYR2OOE.js.map} +0 -0
  499. /package/dist/{chunk-26Z7QWID.js.map → chunk-343TTIHD.js.map} +0 -0
  500. /package/dist/{chunk-BRSF5NRT.js.map → chunk-3FLVIVOK.js.map} +0 -0
  501. /package/dist/{chunk-BDVNAU2C.js.map → chunk-4523RYE7.js.map} +0 -0
  502. /package/dist/{chunk-4ETQRBZC.js.map → chunk-46UPILLK.js.map} +0 -0
  503. /package/dist/{chunk-I3MDKPGG.js.map → chunk-4IVOHL32.js.map} +0 -0
  504. /package/dist/{chunk-TLX66HCW.js.map → chunk-4OHRZW7U.js.map} +0 -0
  505. /package/dist/{chunk-2QFTAGDH.js.map → chunk-4X4KM4ZB.js.map} +0 -0
  506. /package/dist/{chunk-CXVMD6FE.js.map → chunk-5NKUYCZD.js.map} +0 -0
  507. /package/dist/{chunk-77F36LQQ.js.map → chunk-5OIH36KX.js.map} +0 -0
  508. /package/dist/{chunk-4MLDWACO.js.map → chunk-5ZTUP65G.js.map} +0 -0
  509. /package/dist/{chunk-GDEXYUPF.js.map → chunk-67L7HMEP.js.map} +0 -0
  510. /package/dist/{chunk-ZFPJBKVZ.js.map → chunk-6JGPPTLX.js.map} +0 -0
  511. /package/dist/{chunk-PF5HDFYY.js.map → chunk-6NZTYZP5.js.map} +0 -0
  512. /package/dist/{chunk-I7HYGIEJ.js.map → chunk-7BYFC2MR.js.map} +0 -0
  513. /package/dist/{chunk-D4T646G4.js.map → chunk-7NSX7A5H.js.map} +0 -0
  514. /package/dist/{chunk-OH3YGJT5.js.map → chunk-7TZ6OC5T.js.map} +0 -0
  515. /package/dist/{chunk-QS7ZGRNS.js.map → chunk-7VN7LFBA.js.map} +0 -0
  516. /package/dist/{chunk-GBNOYRLP.js.map → chunk-AEGXHZQT.js.map} +0 -0
  517. /package/dist/{chunk-G2IPK2XE.js.map → chunk-AGSBIUPV.js.map} +0 -0
  518. /package/dist/{chunk-65DLYC4S.js.map → chunk-AVGTTWTE.js.map} +0 -0
  519. /package/dist/{chunk-PXH24VIP.js.map → chunk-B6IURHSZ.js.map} +0 -0
  520. /package/dist/{chunk-B3BK2SNS.js.map → chunk-C3CMEDSO.js.map} +0 -0
  521. /package/dist/{chunk-JIINGMEB.js.map → chunk-CHPZTF34.js.map} +0 -0
  522. /package/dist/{chunk-PWXL3QQ6.js.map → chunk-CJBBGMIA.js.map} +0 -0
  523. /package/dist/{chunk-BPYPUEM5.js.map → chunk-CZJLWCEG.js.map} +0 -0
  524. /package/dist/{chunk-BEGWE5O4.js.map → chunk-DTC224UJ.js.map} +0 -0
  525. /package/dist/{chunk-UB76PBDF.js.map → chunk-DVFIE54C.js.map} +0 -0
  526. /package/dist/{chunk-KT6HWAEN.js.map → chunk-DVUPIVI2.js.map} +0 -0
  527. /package/dist/{chunk-GO4MVQGC.js.map → chunk-DW5FRWRQ.js.map} +0 -0
  528. /package/dist/{chunk-6Z4H2Y77.js.map → chunk-E27Y7FF2.js.map} +0 -0
  529. /package/dist/{chunk-PANMJFDS.js.map → chunk-E55CJV65.js.map} +0 -0
  530. /package/dist/{chunk-TPIBJP4S.js.map → chunk-EOHKZGOZ.js.map} +0 -0
  531. /package/dist/{chunk-SHDIZSN5.js.map → chunk-EXJBPKGW.js.map} +0 -0
  532. /package/dist/{chunk-DH75UNF3.js.map → chunk-FGK2C7JR.js.map} +0 -0
  533. /package/dist/{chunk-OOGEYCJH.js.map → chunk-FL54G7PV.js.map} +0 -0
  534. /package/dist/{chunk-AD776JPA.js.map → chunk-FR67FG2U.js.map} +0 -0
  535. /package/dist/{chunk-SHQWIDD5.js.map → chunk-GJQYM3PM.js.map} +0 -0
  536. /package/dist/{chunk-WROCSDVL.js.map → chunk-GSFNH4C5.js.map} +0 -0
  537. /package/dist/{chunk-Z5ABJLTM.js.map → chunk-HFXTAEYY.js.map} +0 -0
  538. /package/dist/{chunk-BLBOYCOV.js.map → chunk-HKV4MQ2W.js.map} +0 -0
  539. /package/dist/{chunk-FOMK3WPG.js.map → chunk-HLYPI5CO.js.map} +0 -0
  540. /package/dist/{chunk-GBRKP5GZ.js.map → chunk-I5SBTNV2.js.map} +0 -0
  541. /package/dist/{chunk-V5P5Q6HM.js.map → chunk-J4W4TQPC.js.map} +0 -0
  542. /package/dist/{chunk-RRO2EOJB.js.map → chunk-JB67KPGM.js.map} +0 -0
  543. /package/dist/{chunk-5ZOJLYD2.js.map → chunk-JE6RZ5L6.js.map} +0 -0
  544. /package/dist/{chunk-4HYXEMBP.js.map → chunk-JIKWZDNK.js.map} +0 -0
  545. /package/dist/{chunk-2QLVUVVR.js.map → chunk-JSH3HFDQ.js.map} +0 -0
  546. /package/dist/{chunk-TZ4SFX3M.js.map → chunk-JWW2Z3RH.js.map} +0 -0
  547. /package/dist/{chunk-QFHH2NU5.js.map → chunk-JXNT5TUP.js.map} +0 -0
  548. /package/dist/{chunk-OCXCH2ZW.js.map → chunk-KTK4A3IF.js.map} +0 -0
  549. /package/dist/{chunk-ZXLIWOXC.js.map → chunk-LS4FMSHY.js.map} +0 -0
  550. /package/dist/{chunk-SFAP5EH5.js.map → chunk-LUMF63BM.js.map} +0 -0
  551. /package/dist/{chunk-CZPU5TW3.js.map → chunk-LYSSO6WC.js.map} +0 -0
  552. /package/dist/{chunk-736HP6BL.js.map → chunk-M4LQRQFL.js.map} +0 -0
  553. /package/dist/{chunk-426FTCMF.js.map → chunk-MESRKY67.js.map} +0 -0
  554. /package/dist/{chunk-B5PYBEXO.js.map → chunk-MP4VSWHK.js.map} +0 -0
  555. /package/dist/{chunk-VWGR5XUP.js.map → chunk-NWNSUHEB.js.map} +0 -0
  556. /package/dist/{chunk-4K7FDVAB.js.map → chunk-O3336DJ6.js.map} +0 -0
  557. /package/dist/{chunk-YCCKY5VW.js.map → chunk-OFOYMZRY.js.map} +0 -0
  558. /package/dist/{chunk-QZDBWXZG.js.map → chunk-OP65D4UR.js.map} +0 -0
  559. /package/dist/{chunk-BQQONDW5.js.map → chunk-OVLNF4AZ.js.map} +0 -0
  560. /package/dist/{chunk-ZTZ6S5Q6.js.map → chunk-OXQP3N6X.js.map} +0 -0
  561. /package/dist/{chunk-3UOHKHOT.js.map → chunk-PFV6RL4Q.js.map} +0 -0
  562. /package/dist/{chunk-DF2FFYZ7.js.map → chunk-PMS3H3OO.js.map} +0 -0
  563. /package/dist/{chunk-AGYGNNOM.js.map → chunk-PQECNGDE.js.map} +0 -0
  564. /package/dist/{chunk-IIROZKW5.js.map → chunk-PRUSQQDT.js.map} +0 -0
  565. /package/dist/{chunk-IPE5FFFD.js.map → chunk-PUBPZOQJ.js.map} +0 -0
  566. /package/dist/{chunk-7KTU6YMQ.js.map → chunk-Q75SJ35X.js.map} +0 -0
  567. /package/dist/{chunk-FINCVAAR.js.map → chunk-QFJRB27Q.js.map} +0 -0
  568. /package/dist/{chunk-FB36IHCE.js.map → chunk-QFVFHIHE.js.map} +0 -0
  569. /package/dist/{chunk-IH4RSRQA.js.map → chunk-QKIJ6YXZ.js.map} +0 -0
  570. /package/dist/{chunk-UOPQOBQZ.js.map → chunk-QWDEOITU.js.map} +0 -0
  571. /package/dist/{chunk-WBKWIFXA.js.map → chunk-QYNCPS5W.js.map} +0 -0
  572. /package/dist/{chunk-XEE7PLDR.js.map → chunk-QZBUGUOY.js.map} +0 -0
  573. /package/dist/{chunk-STH66VLA.js.map → chunk-R7R3LOKW.js.map} +0 -0
  574. /package/dist/{chunk-OLZTGVBT.js.map → chunk-REMK55JI.js.map} +0 -0
  575. /package/dist/{chunk-VWBWKLXX.js.map → chunk-SX3V2DLV.js.map} +0 -0
  576. /package/dist/{chunk-THZ2NAA4.js.map → chunk-TLMLEC4F.js.map} +0 -0
  577. /package/dist/{chunk-WTIOCG4M.js.map → chunk-TOYEP23N.js.map} +0 -0
  578. /package/dist/{chunk-ZGHIHEND.js.map → chunk-TW3BXVEU.js.map} +0 -0
  579. /package/dist/{chunk-5RQ7N63M.js.map → chunk-TZDDL3DR.js.map} +0 -0
  580. /package/dist/{chunk-BEH4DN63.js.map → chunk-U2YJCNRU.js.map} +0 -0
  581. /package/dist/{chunk-RPQ3W2C6.js.map → chunk-U2ZDN2AL.js.map} +0 -0
  582. /package/dist/{chunk-WPZT2JD4.js.map → chunk-U7Q2Y6WG.js.map} +0 -0
  583. /package/dist/{chunk-XLJJ2ZAP.js.map → chunk-UU3QAKG6.js.map} +0 -0
  584. /package/dist/{chunk-TP4N3X2Q.js.map → chunk-UVGRRI7N.js.map} +0 -0
  585. /package/dist/{chunk-GCXYCDOA.js.map → chunk-VLHGBFR6.js.map} +0 -0
  586. /package/dist/{chunk-QRX5BYUQ.js.map → chunk-VNDOQEJ7.js.map} +0 -0
  587. /package/dist/{chunk-P6IPJYCS.js.map → chunk-VNNG46TS.js.map} +0 -0
  588. /package/dist/{chunk-7ZH7ZB33.js.map → chunk-VQAM2XZV.js.map} +0 -0
  589. /package/dist/{chunk-2SWQ6HIK.js.map → chunk-W3FAKT3D.js.map} +0 -0
  590. /package/dist/{chunk-JDMYD6QC.js.map → chunk-W4SDVTZC.js.map} +0 -0
  591. /package/dist/{chunk-7MAOQIWA.js.map → chunk-W4YWU7LQ.js.map} +0 -0
  592. /package/dist/{chunk-Y46RBFBV.js.map → chunk-W7Y6RA6W.js.map} +0 -0
  593. /package/dist/{chunk-XFU2S6XT.js.map → chunk-WGRS4PGY.js.map} +0 -0
  594. /package/dist/{chunk-JXAYT6LX.js.map → chunk-WLQTHPMX.js.map} +0 -0
  595. /package/dist/{chunk-J2KSG754.js.map → chunk-WRDPWEIC.js.map} +0 -0
  596. /package/dist/{chunk-RPWEXIAW.js.map → chunk-X5MPHXG5.js.map} +0 -0
  597. /package/dist/{chunk-UEIVXFUC.js.map → chunk-XELVDPKL.js.map} +0 -0
  598. /package/dist/{chunk-EPNUVSNK.js.map → chunk-XFUNJYFT.js.map} +0 -0
  599. /package/dist/{chunk-RRZBATXK.js.map → chunk-XKV5ZIBG.js.map} +0 -0
  600. /package/dist/{chunk-ZKFYBC6G.js.map → chunk-XSF6AXEU.js.map} +0 -0
  601. /package/dist/{chunk-VPHOSIPB.js.map → chunk-XT7HMNBW.js.map} +0 -0
  602. /package/dist/{chunk-R6RVBYTU.js.map → chunk-XUJG2HFW.js.map} +0 -0
  603. /package/dist/{chunk-FRQ4HNGF.js.map → chunk-YJ4HM25H.js.map} +0 -0
  604. /package/dist/{chunk-TVO5STZB.js.map → chunk-YQ6TNHAC.js.map} +0 -0
  605. /package/dist/{chunk-BNNSO4MC.js.map → chunk-YTOYMJPM.js.map} +0 -0
  606. /package/dist/{chunk-MCRIT46W.js.map → chunk-ZIYMBR7K.js.map} +0 -0
  607. /package/dist/{chunk-SAHQLXNN.js.map → chunk-ZKR5B6YJ.js.map} +0 -0
  608. /package/dist/native/chunks/{chunk-OGWPPQL4.js.map → chunk-75JQYVDZ.js.map} +0 -0
  609. /package/dist/native/chunks/{chunk-WKMDCNIN.js.map → chunk-7LTVGW23.js.map} +0 -0
  610. /package/dist/native/chunks/{chunk-RJVM5YDE.js.map → chunk-ATS7STZJ.js.map} +0 -0
  611. /package/dist/native/chunks/{chunk-YTHR4Y5P.js.map → chunk-GWGIWQO7.js.map} +0 -0
  612. /package/dist/native/chunks/{chunk-D4EYAXNG.js.map → chunk-QYUD3S6F.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  Stack
3
- } from "../chunk-5RQ7N63M.js";
3
+ } from "../chunk-TZDDL3DR.js";
4
4
  import "../chunk-4GGH6ZQ7.js";
5
- import "../chunk-7MAOQIWA.js";
5
+ import "../chunk-W4YWU7LQ.js";
6
6
  import "../chunk-7V6ZRQYW.js";
7
7
  import "../chunk-OCUVKI63.js";
8
8
  import "../chunk-KLREH4X6.js";
9
9
  import "../chunk-YMRI5QKG.js";
10
- import "../chunk-6F5IKY32.js";
10
+ import "../chunk-TYJR4GOF.js";
11
11
  import "../chunk-V5IOLAIS.js";
12
12
  import "../chunk-7ZPUN7TV.js";
13
13
  import "../chunk-PT6TCWIW.js";
@@ -1,5 +1,6 @@
1
1
  // src/tokens/mui-type.ts
2
2
  var MUI_TYPE = {
3
+ h5: { fontSize: 24, lineHeight: 1.334, fontWeight: 400, letterSpacingEm: 0 },
3
4
  h6: { fontSize: 20, lineHeight: 1.6, fontWeight: 500, letterSpacingEm: 75e-4 },
4
5
  body1: { fontSize: 16, lineHeight: 1.5, fontWeight: 400, letterSpacingEm: 938e-5 },
5
6
  body2: { fontSize: 14, lineHeight: 1.43, fontWeight: 400, letterSpacingEm: 0.01071 },
@@ -22,4 +23,4 @@ export {
22
23
  MUI_FONT_WEIGHT_MEDIUM,
23
24
  muiTypeStyle
24
25
  };
25
- //# sourceMappingURL=chunk-HSIND52T.js.map
26
+ //# sourceMappingURL=chunk-2UFNPDYT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tokens/mui-type.ts"],"sourcesContent":["import type { UiTheme } from './theme';\n\n/**\n * MUI'S DEFAULT `Typography` VARIANTS, AS NUMBERS.\n *\n * Several web components render a title or a message BY NAME —\n * `<Typography variant=\"h6\">` — and let MUI's theme turn the name into a\n * size. The native halves have no MUI theme, so they need the numbers MUI's\n * `createTypography` produces for those names. These are those numbers, for\n * the variants the ported components use: `fontSize` in px, `lineHeight` as\n * a ratio, `letterSpacing` in em exactly as MUI rounds it\n * (`round(letterSpacing / size)`, five decimals).\n *\n * Only the DEFAULTS. A host that re-themes `typography.h6` moves the web\n * halves and not these; each component that reads this records that as a\n * known gap in its `NATIVE-NOTES.md`.\n */\nexport type MuiTypeVariantName = 'h5' | 'h6' | 'body1' | 'body2' | 'caption';\n\nexport interface MuiTypeVariant {\n fontSize: number;\n lineHeight: number;\n fontWeight: 400 | 500;\n letterSpacingEm: number;\n}\n\nexport const MUI_TYPE: Record<MuiTypeVariantName, MuiTypeVariant> = {\n h5: { fontSize: 24, lineHeight: 1.334, fontWeight: 400, letterSpacingEm: 0 },\n h6: { fontSize: 20, lineHeight: 1.6, fontWeight: 500, letterSpacingEm: 0.0075 },\n body1: { fontSize: 16, lineHeight: 1.5, fontWeight: 400, letterSpacingEm: 0.00938 },\n body2: { fontSize: 14, lineHeight: 1.43, fontWeight: 400, letterSpacingEm: 0.01071 },\n caption: { fontSize: 12, lineHeight: 1.66, fontWeight: 400, letterSpacingEm: 0.03333 },\n};\n\n/** MUI's `theme.typography.fontWeightMedium`, which several web styles name outright. */\nexport const MUI_FONT_WEIGHT_MEDIUM = 500;\n\n/** A variant multiplied out for a renderer whose `lineHeight` and `letterSpacing` are absolute. */\nexport interface MuiTypeStyle {\n fontFamily: string | undefined;\n fontSize: number;\n lineHeight: number;\n fontWeight: `${MuiTypeVariant['fontWeight']}`;\n letterSpacing: number;\n}\n\n/**\n * The variant as absolute numbers, in the theme's font. `fontSize` may be\n * overridden — the Alert's title is `body1` at 1.05rem — and the ratios\n * follow it, which is what the browser does with `em` and a unitless\n * line-height.\n */\nexport function muiTypeStyle(\n theme: Pick<UiTheme, 'typography'>,\n variant: MuiTypeVariantName,\n fontSize: number = MUI_TYPE[variant].fontSize,\n): MuiTypeStyle {\n const step = MUI_TYPE[variant];\n return {\n fontFamily: theme.typography.fontFamily,\n fontSize,\n lineHeight: fontSize * step.lineHeight,\n fontWeight: `${step.fontWeight}`,\n letterSpacing: fontSize * step.letterSpacingEm,\n };\n}\n"],"mappings":";AA0BO,IAAM,WAAuD;AAAA,EAClE,IAAI,EAAE,UAAU,IAAI,YAAY,OAAO,YAAY,KAAK,iBAAiB,EAAE;AAAA,EAC3E,IAAI,EAAE,UAAU,IAAI,YAAY,KAAK,YAAY,KAAK,iBAAiB,MAAO;AAAA,EAC9E,OAAO,EAAE,UAAU,IAAI,YAAY,KAAK,YAAY,KAAK,iBAAiB,OAAQ;AAAA,EAClF,OAAO,EAAE,UAAU,IAAI,YAAY,MAAM,YAAY,KAAK,iBAAiB,QAAQ;AAAA,EACnF,SAAS,EAAE,UAAU,IAAI,YAAY,MAAM,YAAY,KAAK,iBAAiB,QAAQ;AACvF;AAGO,IAAM,yBAAyB;AAiB/B,SAAS,aACd,OACA,SACA,WAAmB,SAAS,OAAO,EAAE,UACvB;AACd,QAAM,OAAO,SAAS,OAAO;AAC7B,SAAO;AAAA,IACL,YAAY,MAAM,WAAW;AAAA,IAC7B;AAAA,IACA,YAAY,WAAW,KAAK;AAAA,IAC5B,YAAY,GAAG,KAAK,UAAU;AAAA,IAC9B,eAAe,WAAW,KAAK;AAAA,EACjC;AACF;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveTestId
3
- } from "./chunk-QZAUOHDQ.js";
3
+ } from "./chunk-AR5O4BEY.js";
4
4
  import {
5
5
  useUiTheme
6
- } from "./chunk-YTHR4Y5P.js";
6
+ } from "./chunk-GWGIWQO7.js";
7
7
 
8
8
  // src/components/layout/Box/Box.base.ts
9
9
  var BOX_BASE_KEYS = [
@@ -133,4 +133,4 @@ export {
133
133
  resolveBoxLayout,
134
134
  Box
135
135
  };
136
- //# sourceMappingURL=chunk-OGWPPQL4.js.map
136
+ //# sourceMappingURL=chunk-75JQYVDZ.js.map
@@ -10,7 +10,7 @@ import {
10
10
  hslToRgb,
11
11
  lighten,
12
12
  recomposeColor
13
- } from "./chunk-P3PL4WBO.js";
13
+ } from "./chunk-LEMMXZFN.js";
14
14
 
15
15
  // src/components/form/Input/Input.metrics.ts
16
16
  var muiVariantFor = (variant) => {
@@ -348,4 +348,4 @@ export {
348
348
  labelStyle,
349
349
  helperStyle
350
350
  };
351
- //# sourceMappingURL=chunk-WKMDCNIN.js.map
351
+ //# sourceMappingURL=chunk-7LTVGW23.js.map
@@ -9,10 +9,14 @@ function withoutTestIdProps(props) {
9
9
  const { testID: _testID, dataTestId: _dataTestId, "data-testid": _dataTestid, ...rest } = props;
10
10
  return rest;
11
11
  }
12
+ function slotTestId(props, suffix, fallback) {
13
+ return props.testID ?? props["data-testid"] ?? childTestId(props, suffix, fallback);
14
+ }
12
15
 
13
16
  export {
14
17
  resolveTestId,
15
18
  childTestId,
16
- withoutTestIdProps
19
+ withoutTestIdProps,
20
+ slotTestId
17
21
  };
18
- //# sourceMappingURL=chunk-QZAUOHDQ.js.map
22
+ //# sourceMappingURL=chunk-AR5O4BEY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/platform/test-id.ts"],"sourcesContent":["/**\n * One test id, three spellings.\n *\n * The web components take `dataTestId` and forward it as `data-testid`; the\n * existing test stories pass `'data-testid'` straight through as an unknown\n * prop; React Native calls the same thing `testID`, and react-native-web turns\n * THAT back into `data-testid`. A native component that honoured only one of\n * the three would pass its own unit tests and fail the shared stories.\n */\nexport interface TestIdProps {\n testID?: string;\n dataTestId?: string;\n 'data-testid'?: string;\n}\n\n/** The id the caller asked for under any of the three names, else `fallback`. */\nexport function resolveTestId(props: TestIdProps, fallback?: string): string | undefined {\n return props.testID ?? props.dataTestId ?? props['data-testid'] ?? fallback;\n}\n\n/**\n * The id under whichever of the three spellings the caller used, together with\n * the props stripped of all three — so a web component can put `data-testid`\n * where the DOM wants it without React seeing `testID` or `dataTestId` and\n * warning that it does not recognise them.\n */\nexport function splitTestId<T extends TestIdProps>(\n props: T,\n fallback?: string,\n): { testId: string | undefined; rest: Omit<T, keyof TestIdProps> } {\n return { testId: resolveTestId(props, fallback), rest: withoutTestIdProps(props) };\n}\n\n/** `${id}-${suffix}` for a sub-element, or `${fallback}-${suffix}` when unnamed. */\nexport function childTestId(\n props: TestIdProps,\n suffix: string,\n fallback: string,\n): string {\n return `${resolveTestId(props, fallback) ?? fallback}-${suffix}`;\n}\n\n/** `props` without any of the three spellings, for spreading onto a native element. */\nexport function withoutTestIdProps<P extends TestIdProps>(props: P): Omit<P, keyof TestIdProps> {\n const { testID: _testID, dataTestId: _dataTestId, 'data-testid': _dataTestid, ...rest } = props;\n return rest;\n}\n"],"mappings":";AAgBO,SAAS,cAAc,OAAoB,UAAuC;AACvF,SAAO,MAAM,UAAU,MAAM,cAAc,MAAM,aAAa,KAAK;AACrE;AAgBO,SAAS,YACd,OACA,QACA,UACQ;AACR,SAAO,GAAG,cAAc,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM;AAChE;AAGO,SAAS,mBAA0C,OAAsC;AAC9F,QAAM,EAAE,QAAQ,SAAS,YAAY,aAAa,eAAe,aAAa,GAAG,KAAK,IAAI;AAC1F,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/platform/test-id.ts"],"sourcesContent":["/**\n * One test id, three spellings.\n *\n * The web components take `dataTestId` and forward it as `data-testid`; the\n * existing test stories pass `'data-testid'` straight through as an unknown\n * prop; React Native calls the same thing `testID`, and react-native-web turns\n * THAT back into `data-testid`. A native component that honoured only one of\n * the three would pass its own unit tests and fail the shared stories.\n */\nexport interface TestIdProps {\n testID?: string;\n dataTestId?: string;\n 'data-testid'?: string;\n}\n\n/** The id the caller asked for under any of the three names, else `fallback`. */\nexport function resolveTestId(props: TestIdProps, fallback?: string): string | undefined {\n return props.testID ?? props.dataTestId ?? props['data-testid'] ?? fallback;\n}\n\n/**\n * The id under whichever of the three spellings the caller used, together with\n * the props stripped of all three — so a web component can put `data-testid`\n * where the DOM wants it without React seeing `testID` or `dataTestId` and\n * warning that it does not recognise them.\n */\nexport function splitTestId<T extends TestIdProps>(\n props: T,\n fallback?: string,\n): { testId: string | undefined; rest: Omit<T, keyof TestIdProps> } {\n return { testId: resolveTestId(props, fallback), rest: withoutTestIdProps(props) };\n}\n\n/** `${id}-${suffix}` for a sub-element, or `${fallback}-${suffix}` when unnamed. */\nexport function childTestId(\n props: TestIdProps,\n suffix: string,\n fallback: string,\n): string {\n return `${resolveTestId(props, fallback) ?? fallback}-${suffix}`;\n}\n\n/** `props` without any of the three spellings, for spreading onto a native element. */\nexport function withoutTestIdProps<P extends TestIdProps>(props: P): Omit<P, keyof TestIdProps> {\n const { testID: _testID, dataTestId: _dataTestId, 'data-testid': _dataTestid, ...rest } = props;\n return rest;\n}\n\n/**\n * A SLOT's own test id, where a raw id means \"this element\" and `dataTestId`\n * means \"the surface I belong to\".\n *\n * `Dialog` names its parts by derivation — `d` gives `d-title`, `d-content`,\n * `d-actions` — and a slot receives the DIALOG's id in `dataTestId` to derive\n * from. A raw `data-testid` (or React Native's `testID`) is something else: it\n * is the id the caller wants ON THIS ELEMENT, which is how the shared stories\n * address a `DialogContent`, so it is taken verbatim and no suffix is added.\n *\n * Both renderers read this one function, which is the only way the web and the\n * native slot can agree about what `<DialogContent data-testid=\"x\">` is called.\n */\nexport function slotTestId(props: TestIdProps, suffix: string, fallback: string): string {\n return props.testID ?? props['data-testid'] ?? childTestId(props, suffix, fallback);\n}\n"],"mappings":";AAgBO,SAAS,cAAc,OAAoB,UAAuC;AACvF,SAAO,MAAM,UAAU,MAAM,cAAc,MAAM,aAAa,KAAK;AACrE;AAgBO,SAAS,YACd,OACA,QACA,UACQ;AACR,SAAO,GAAG,cAAc,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM;AAChE;AAGO,SAAS,mBAA0C,OAAsC;AAC9F,QAAM,EAAE,QAAQ,SAAS,YAAY,aAAa,eAAe,aAAa,GAAG,KAAK,IAAI;AAC1F,SAAO;AACT;AAeO,SAAS,WAAW,OAAoB,QAAgB,UAA0B;AACvF,SAAO,MAAM,UAAU,MAAM,aAAa,KAAK,YAAY,OAAO,QAAQ,QAAQ;AACpF;","names":[]}
@@ -5,15 +5,15 @@ import {
5
5
  childTestId,
6
6
  resolveTestId,
7
7
  withoutTestIdProps
8
- } from "./chunk-QZAUOHDQ.js";
8
+ } from "./chunk-AR5O4BEY.js";
9
9
  import {
10
10
  useUiTheme
11
- } from "./chunk-YTHR4Y5P.js";
11
+ } from "./chunk-GWGIWQO7.js";
12
12
  import {
13
13
  alpha,
14
14
  darken,
15
15
  lighten
16
- } from "./chunk-P3PL4WBO.js";
16
+ } from "./chunk-LEMMXZFN.js";
17
17
 
18
18
  // src/components/form/Button/Button.native.tsx
19
19
  import * as React from "react";
@@ -315,4 +315,4 @@ var styles = StyleSheet.create({
315
315
  export {
316
316
  Button
317
317
  };
318
- //# sourceMappingURL=chunk-RJVM5YDE.js.map
318
+ //# sourceMappingURL=chunk-ATS7STZJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  DEFAULT_UI_THEME
3
- } from "./chunk-P3PL4WBO.js";
3
+ } from "./chunk-LEMMXZFN.js";
4
4
 
5
5
  // src/provider/use-ui-theme.native.ts
6
6
  import * as React2 from "react";
@@ -18,4 +18,4 @@ export {
18
18
  UiThemeContext,
19
19
  useUiTheme
20
20
  };
21
- //# sourceMappingURL=chunk-YTHR4Y5P.js.map
21
+ //# sourceMappingURL=chunk-GWGIWQO7.js.map
@@ -1,24 +1,3 @@
1
- // src/tokens/heading-scale.ts
2
- var HEADING_LEVELS = [
3
- "display",
4
- "h1",
5
- "h2",
6
- "h3",
7
- "h4",
8
- "h5",
9
- "h6"
10
- ];
11
- var HEADING_SCALE = {
12
- // The hero size the old `h1` was really offering, under the name that says so.
13
- display: { fontSize: "3rem", lineHeight: 1.05, letterSpacing: "-0.03em", normalWeight: 800 },
14
- h1: { fontSize: "2rem", lineHeight: 1.2, letterSpacing: "-0.02em", normalWeight: 700 },
15
- h2: { fontSize: "1.75rem", lineHeight: 1.25, letterSpacing: "-0.015em", normalWeight: 700 },
16
- h3: { fontSize: "1.5rem", lineHeight: 1.3, letterSpacing: "-0.01em", normalWeight: 600 },
17
- h4: { fontSize: "1.25rem", lineHeight: 1.35, letterSpacing: "-0.005em", normalWeight: 600 },
18
- h5: { fontSize: "1.125rem", lineHeight: 1.4, normalWeight: 600 },
19
- h6: { fontSize: "1rem", lineHeight: 1.5, normalWeight: 600 }
20
- };
21
-
22
1
  // src/tokens/color.ts
23
2
  var FORMATS = ["rgb", "rgba", "hsl", "hsla"];
24
3
  var clamp = (value, min = 0, max = 1) => Math.min(Math.max(min, value), max);
@@ -117,6 +96,27 @@ function emphasize(color, coefficient = 0.15) {
117
96
  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);
118
97
  }
119
98
 
99
+ // src/tokens/heading-scale.ts
100
+ var HEADING_LEVELS = [
101
+ "display",
102
+ "h1",
103
+ "h2",
104
+ "h3",
105
+ "h4",
106
+ "h5",
107
+ "h6"
108
+ ];
109
+ var HEADING_SCALE = {
110
+ // The hero size the old `h1` was really offering, under the name that says so.
111
+ display: { fontSize: "3rem", lineHeight: 1.05, letterSpacing: "-0.03em", normalWeight: 800 },
112
+ h1: { fontSize: "2rem", lineHeight: 1.2, letterSpacing: "-0.02em", normalWeight: 700 },
113
+ h2: { fontSize: "1.75rem", lineHeight: 1.25, letterSpacing: "-0.015em", normalWeight: 700 },
114
+ h3: { fontSize: "1.5rem", lineHeight: 1.3, letterSpacing: "-0.01em", normalWeight: 600 },
115
+ h4: { fontSize: "1.25rem", lineHeight: 1.35, letterSpacing: "-0.005em", normalWeight: 600 },
116
+ h5: { fontSize: "1.125rem", lineHeight: 1.4, normalWeight: 600 },
117
+ h6: { fontSize: "1rem", lineHeight: 1.5, normalWeight: 600 }
118
+ };
119
+
120
120
  // src/tokens/css-units.ts
121
121
  var ROOT_PX = 16;
122
122
  function cssLengthToPx(value, fallback) {
@@ -288,8 +288,6 @@ function createUiTheme(options = {}) {
288
288
  var DEFAULT_UI_THEME = createUiTheme();
289
289
 
290
290
  export {
291
- HEADING_LEVELS,
292
- HEADING_SCALE,
293
291
  hexToRgb,
294
292
  decomposeColor,
295
293
  recomposeColor,
@@ -301,6 +299,8 @@ export {
301
299
  lighten,
302
300
  emphasize,
303
301
  cssLengthToPx,
302
+ HEADING_LEVELS,
303
+ HEADING_SCALE,
304
304
  px,
305
305
  GREY,
306
306
  DEFAULT_BRAND,
@@ -314,4 +314,4 @@ export {
314
314
  createUiTheme,
315
315
  DEFAULT_UI_THEME
316
316
  };
317
- //# sourceMappingURL=chunk-P3PL4WBO.js.map
317
+ //# sourceMappingURL=chunk-LEMMXZFN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tokens/heading-scale.ts","../../../src/tokens/color.ts","../../../src/tokens/css-units.ts","../../../src/tokens/theme.ts"],"sourcesContent":["\n/**\n * THE THIRD VOCABULARY: the type scale.\n *\n * `scales.ts` opens by saying the package had both halves of every argument at\n * once until the size and colour vocabularies were declared in one place and\n * every component derived from them. The type scale was the one that never got\n * that treatment — it lived as a private `LEVELS` table inside\n * `Heading.styles.ts`, which is exactly the shape that file exists to refuse.\n *\n * Two things follow from it being private, and the second is the expensive one.\n *\n * **It could not be re-themed.** `Heading` read `theme.typography.h1.fontFamily`\n * from the theme and then ignored the theme for every other metric, so a host\n * calling `createTheme({ typography: { h1: { fontSize: '2rem' } } })` changed\n * `<Typography variant=\"h1\">` and left `<Heading level=\"h1\">` at 48px. A design\n * system whose type scale cannot be set by the design is not a system.\n *\n * **And the numbers were a landing page's.** `h1` at 3rem and `h2` at 2.5rem are\n * hero metrics. Dropped into an operations console they put a 48px title\n * directly above 14px body copy — a 3.4x jump with nothing in between — so\n * product teams stopped reaching for the component. Measured in one consuming\n * repo: `<Heading>` appeared four times in the entire codebase while raw\n * `fontSize` appeared in dozens of files. The component was not disliked, it was\n * unusable at app scale, and every host paid for that in hand-rolled CSS.\n *\n * So the defaults below are an APP scale, and `display` keeps the hero size for\n * the screens that actually want one. A marketing page asks for `display`; a\n * console asks for `h1` and gets something it can put on a page.\n */\n\n/**\n * A step on the scale.\n *\n * `display` is a SIZE, not a rank — see `Heading`, which renders it as `h1` so\n * the document still gets exactly one level-one heading.\n */\nexport type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'display';\n\n/**\n * The runtime list, declared beside the union for the reason `SIZE_VALUES`\n * gives: a story's `argTypes.options` spelled by hand drifts from the type, and\n * the direction it drifts is \"documents less than the component accepts\".\n */\nexport const HEADING_LEVELS = [\n 'display',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n] as const satisfies readonly HeadingLevel[];\n\n/** Everything one step of the scale decides. */\nexport interface HeadingMetrics {\n fontSize: string;\n lineHeight: number;\n letterSpacing?: string;\n /**\n * The weight this step carries when the caller asks for `normal`. A heading's\n * \"normal\" is not body text's 400 — it is the weight the step is meant to\n * carry, which gets heavier as the step gets larger.\n */\n normalWeight: number;\n}\n\n/**\n * The house default, in CODE rather than in a component.\n *\n * ~1.15x per step from a 1rem `h6`, which keeps six distinguishable ranks inside\n * the range an application actually uses. The old table ran 1.125rem → 4rem and\n * spent its top three steps above anything a product screen wants.\n */\nexport const HEADING_SCALE: Record<HeadingLevel, HeadingMetrics> = {\n // The hero size the old `h1` was really offering, under the name that says so.\n display: { fontSize: '3rem', lineHeight: 1.05, letterSpacing: '-0.03em', normalWeight: 800 },\n h1: { fontSize: '2rem', lineHeight: 1.2, letterSpacing: '-0.02em', normalWeight: 700 },\n h2: { fontSize: '1.75rem', lineHeight: 1.25, letterSpacing: '-0.015em', normalWeight: 700 },\n h3: { fontSize: '1.5rem', lineHeight: 1.3, letterSpacing: '-0.01em', normalWeight: 600 },\n h4: { fontSize: '1.25rem', lineHeight: 1.35, letterSpacing: '-0.005em', normalWeight: 600 },\n h5: { fontSize: '1.125rem', lineHeight: 1.4, normalWeight: 600 },\n h6: { fontSize: '1rem', lineHeight: 1.5, normalWeight: 600 },\n};\n\n/** A host's overrides: any subset of the steps, any subset of each step's metrics. */\nexport type HeadingScaleOverrides = Partial<Record<HeadingLevel, Partial<HeadingMetrics>>>;\n","/**\n * COLOUR ARITHMETIC WITH NO RENDERER BEHIND IT.\n *\n * Every shade the web components paint comes out of MUI's colour manipulator:\n * `lighten(main, 0.2)` is a palette's `light`, `darken(main, 0.3)` its `dark`,\n * `alpha(main, 0.1)` the hover wash on an outline button. A native component\n * that wants the SAME pixel has to run the SAME arithmetic, and it cannot\n * import it — `@mui/material/styles` drags emotion and the DOM in behind it.\n *\n * So the arithmetic lives here, once, with nothing behind it. It is a faithful\n * port of `@mui/system/colorManipulator` (MIT), down to the truncation:\n * `lighten('#6366F1', 0.2)` is `rgb(130, 132, 243)` on both sides because both\n * TRUNCATE 132.6 rather than round it. A port that rounded would be one pixel\n * of tint away from the web on every button, forever, and nothing would flag it.\n *\n * `color()` space strings are deliberately unsupported: nothing in this package\n * emits one, and a smaller surface is a smaller thing to keep identical.\n */\n\nexport type ColorFormat = 'rgb' | 'rgba' | 'hsl' | 'hsla';\n\nexport interface DecomposedColor {\n type: ColorFormat;\n values: number[];\n}\n\nconst FORMATS: readonly ColorFormat[] = ['rgb', 'rgba', 'hsl', 'hsla'];\n\nconst clamp = (value: number, min = 0, max = 1): number => Math.min(Math.max(min, value), max);\n\n/** `#rgb`, `#rgba`, `#rrggbb` or `#rrggbbaa` to its `rgb()` / `rgba()` string. */\nexport function hexToRgb(color: string): string {\n const hex = color.slice(1);\n const pair = new RegExp(`.{1,${hex.length >= 6 ? 2 : 1}}`, 'g');\n let channels: string[] | null = hex.match(pair);\n if (channels && channels[0]?.length === 1) {\n channels = channels.map((channel) => channel + channel);\n }\n if (!channels) return '';\n\n const parts = channels.map((channel, index) =>\n index < 3 ? parseInt(channel, 16) : Math.round((parseInt(channel, 16) / 255) * 1000) / 1000,\n );\n return `rgb${channels.length === 4 ? 'a' : ''}(${parts.join(', ')})`;\n}\n\n/** Any supported colour string to its type and numeric channels. */\nexport function decomposeColor(color: string): DecomposedColor {\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n\n const marker = color.indexOf('(');\n const type = color.substring(0, marker) as ColorFormat;\n if (!FORMATS.includes(type)) {\n throw new Error(\n `@12-apps/ui: unsupported colour \"${color}\". Use #nnn, #nnnnnn, rgb(), rgba(), hsl() or hsla().`,\n );\n }\n\n const values = color\n .substring(marker + 1, color.length - 1)\n .split(',')\n .map((value) => parseFloat(value));\n\n return { type, values };\n}\n\n/** The inverse of {@link decomposeColor}, with MUI's channel truncation. */\nexport function recomposeColor({ type, values }: DecomposedColor): string {\n const parts: Array<number | string> = type.startsWith('rgb')\n ? values.map((value, index) => (index < 3 ? Math.trunc(value) : value))\n : [values[0] ?? 0, `${values[1] ?? 0}%`, `${values[2] ?? 0}%`, ...values.slice(3)];\n\n return `${type}(${parts.join(', ')})`;\n}\n\n/** An `hsl()` / `hsla()` string to its `rgb()` / `rgba()` equivalent. */\nexport function hslToRgb(color: string): string {\n const { type, values } = decomposeColor(color);\n const h = values[0] ?? 0;\n const s = (values[1] ?? 0) / 100;\n const l = (values[2] ?? 0) / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number, k = (n + h / 30) % 12): number =>\n l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (type === 'hsla') {\n return recomposeColor({ type: 'rgba', values: [...rgb, values[3] ?? 1] });\n }\n return recomposeColor({ type: 'rgb', values: rgb });\n}\n\n/** Relative luminance (WCAG 2.0), to three decimals like MUI. */\nexport function getLuminance(color: string): number {\n const decomposed = decomposeColor(color);\n const channels = decomposed.type.startsWith('hsl')\n ? decomposeColor(hslToRgb(color)).values\n : decomposed.values;\n\n const [r, g, b] = channels.slice(0, 3).map((value) => {\n const c = value / 255;\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n });\n\n return Number((0.2126 * (r ?? 0) + 0.7152 * (g ?? 0) + 0.0722 * (b ?? 0)).toFixed(3));\n}\n\n/** WCAG contrast ratio between two colours, 1 to 21. */\nexport function getContrastRatio(foreground: string, background: string): number {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/** The colour with its alpha channel set to `value` (0 to 1). */\nexport function alpha(color: string, value: number): string {\n const decomposed = decomposeColor(color);\n const type: ColorFormat = decomposed.type.endsWith('a')\n ? decomposed.type\n : (`${decomposed.type}a` as ColorFormat);\n const values = decomposed.values.slice(0, 3);\n values[3] = clamp(value);\n return recomposeColor({ type, values });\n}\n\n/** The colour moved `coefficient` (0 to 1) of the way towards black. */\nexport function darken(color: string, coefficient: number): string {\n const decomposed = decomposeColor(color);\n const amount = clamp(coefficient);\n const values = [...decomposed.values];\n\n if (decomposed.type.startsWith('hsl')) {\n values[2] = (values[2] ?? 0) * (1 - amount);\n } else {\n for (let index = 0; index < 3; index += 1) {\n values[index] = (values[index] ?? 0) * (1 - amount);\n }\n }\n return recomposeColor({ type: decomposed.type, values });\n}\n\n/** The colour moved `coefficient` (0 to 1) of the way towards white. */\nexport function lighten(color: string, coefficient: number): string {\n const decomposed = decomposeColor(color);\n const amount = clamp(coefficient);\n const values = [...decomposed.values];\n\n if (decomposed.type.startsWith('hsl')) {\n values[2] = (values[2] ?? 0) + (100 - (values[2] ?? 0)) * amount;\n } else {\n for (let index = 0; index < 3; index += 1) {\n values[index] = (values[index] ?? 0) + (255 - (values[index] ?? 0)) * amount;\n }\n }\n return recomposeColor({ type: decomposed.type, values });\n}\n\n/** Darken a light colour or lighten a dark one, by `coefficient`. */\nexport function emphasize(color: string, coefficient = 0.15): string {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n","/**\n * THE ONE READER OF CSS LENGTHS.\n *\n * `HEADING_SCALE` and a host's MUI overrides speak CSS — `'2rem'`, `'-0.02em'`\n * — and both `tokens/theme.ts` and `provider/mui-bridge.ts` need them as\n * numbers. Two private parsers drifted (one multiplied `em` by 16, one did\n * not), so there is one, here, with the rule spelled out: a length becomes px\n * against a 16px root, a tracking value becomes em.\n */\n\nconst ROOT_PX = 16;\n\n/** `'1.5rem'` → 24, `'1.5em'` → 24, `'20px'` → 20, `20` → 20, unparseable → `fallback`. */\nexport function cssLengthToPx(value: string | number | undefined, fallback: number): number {\n if (typeof value === 'number') return value;\n if (value === undefined) return fallback;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) return fallback;\n return value.endsWith('rem') || value.endsWith('em') ? parsed * ROOT_PX : parsed;\n}\n\n/** `'-0.02em'` → -0.02, `'0.5px'` → 0.5 / 16, `undefined` → `undefined` (\"normal\"). */\nexport function cssTrackingToEm(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) return undefined;\n return value.endsWith('px') ? parsed / ROOT_PX : parsed;\n}\n","import { darken, getContrastRatio, lighten } from './color';\nimport { cssLengthToPx, cssTrackingToEm } from './css-units';\nimport { HEADING_SCALE, type HeadingLevel } from './heading-scale';\n\nimport type { SizeValue } from './vocabulary';\n\n/**\n * THE THEME BOTH RENDERERS READ.\n *\n * On the web every component styles itself from MUI's `Theme`, which is built\n * by the host (`@12-apps/app-shell`'s `createAppTheme` in the origin apps) and\n * reaches a component through emotion's context. React Native has no emotion,\n * no CSS and no MUI, so a native `Button` needs the same decisions — the\n * palette, the spacing unit, the radius, the type scale — from somewhere that\n * does not import a renderer.\n *\n * This is that somewhere. `UiTheme` is a plain object of numbers and colour\n * strings. `createUiTheme` derives it the way MUI's `createPalette` derives its\n * own: a `light` shade is `lighten(main, 0.2)`, a `dark` shade `darken(main,\n * 0.3)`, `contrastText` flips at a 3:1 ratio against `rgba(0, 0, 0, 0.87)`.\n * Same seeds in, same shades out, on both sides — that is the whole basis for\n * a native button being the web button's colour and not a near miss.\n *\n * Numbers are in px on the web and dp on native; both are the CSS-pixel unit\n * a design is drawn in, so a `fontSize: 16` here IS `1rem` in a web style\n * and `16` in a `StyleSheet`. The web components keep their `rem` strings and\n * derive them from these numbers where the two meet (see `px()` below and the\n * `*.metrics.ts` file beside each ported component).\n *\n * `danger` and `neutral` are this package's names (see `./scales`); `danger`\n * is MUI's `error` and `neutral` is drawn from the grey ramp the way\n * `Button.styles.ts` has always drawn it.\n */\n\nexport type UiThemeMode = 'light' | 'dark';\n\nexport interface UiPaletteColor {\n main: string;\n light: string;\n dark: string;\n contrastText: string;\n}\n\nexport type UiGreyStep = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n\nexport interface UiPalette {\n mode: UiThemeMode;\n primary: UiPaletteColor;\n secondary: UiPaletteColor;\n success: UiPaletteColor;\n warning: UiPaletteColor;\n info: UiPaletteColor;\n danger: UiPaletteColor;\n neutral: UiPaletteColor;\n text: { primary: string; secondary: string; disabled: string };\n background: { default: string; paper: string };\n divider: string;\n action: {\n active: string;\n hover: string;\n selected: string;\n disabled: string;\n disabledBackground: string;\n focus: string;\n };\n grey: Record<UiGreyStep, string>;\n}\n\n/** One step of the body scale: `fontSize` in px, `lineHeight` as a ratio. */\nexport interface UiTypeStep {\n fontSize: number;\n lineHeight: number;\n}\n\nexport type UiFontWeight = 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\n\nexport interface UiHeadingStep extends UiTypeStep {\n /** In em, so it scales with the step. `undefined` is \"normal\". */\n letterSpacing?: number;\n normalWeight: number;\n}\n\nexport interface UiTypography {\n /**\n * Native has no fallback stacks: a font is either installed and named, or\n * `undefined` and the platform's own. The web default is MUI's Roboto stack.\n */\n fontFamily: string | undefined;\n monospaceFontFamily: string | undefined;\n sizes: Record<SizeValue, UiTypeStep>;\n weights: Record<UiFontWeight, number>;\n heading: Record<HeadingLevel, UiHeadingStep>;\n}\n\nexport interface UiTheme {\n mode: UiThemeMode;\n palette: UiPalette;\n /** MUI's `theme.spacing(n)`: `n` units of {@link UiTheme.spacingUnit}, in px. */\n spacing: (units: number) => number;\n spacingUnit: number;\n /** `md` is MUI's `shape.borderRadius`; the others are its halves and doubles. */\n radius: { sm: number; md: number; lg: number; xl: number; full: number };\n typography: UiTypography;\n zIndex: { appBar: number; drawer: number; modal: number; snackbar: number; tooltip: number };\n}\n\n/** A seed for one palette slot: a hex `main`, or any subset of the four shades. */\nexport type UiPaletteSeed = string | Partial<UiPaletteColor>;\n\nexport interface UiThemeOptions {\n mode?: UiThemeMode;\n palette?: Partial<{\n primary: UiPaletteSeed;\n secondary: UiPaletteSeed;\n success: UiPaletteSeed;\n warning: UiPaletteSeed;\n info: UiPaletteSeed;\n danger: UiPaletteSeed;\n background: Partial<UiPalette['background']>;\n }>;\n typography?: Partial<Pick<UiTypography, 'fontFamily' | 'monospaceFontFamily'>>;\n spacingUnit?: number;\n}\n\nconst ROOT_FONT_PX = 16;\n\n/** The px value as the rem string the web components write. */\nexport const px = (value: number): string => `${value / ROOT_FONT_PX}rem`;\n\n/** MUI's `createPalette` defaults, exactly. */\nconst TONAL_OFFSET = 0.2;\nconst CONTRAST_THRESHOLD = 3;\nconst DARK_TEXT_PRIMARY = 'rgba(0, 0, 0, 0.87)';\nconst LIGHT_TEXT_PRIMARY = '#fff';\n\nexport const GREY: Record<UiGreyStep, string> = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n};\n\n/**\n * The platform's own seeds. The pair `@12-apps/ui`'s Storybook preview and\n * `@12-apps/app-shell`'s `DEFAULT_THEME_TOKENS` both carry — keep the three in\n * step if the design tokens change.\n */\nexport const DEFAULT_BRAND: Record<UiThemeMode, { primary: string; secondary: string }> = {\n light: { primary: '#6366F1', secondary: '#8B5CF6' },\n dark: { primary: '#818CF8', secondary: '#A78BFA' },\n};\n\n/** MUI's semantic defaults per mode. These are declared shades, not derived. */\nconst SEMANTIC_DEFAULTS: Record<\n UiThemeMode,\n Record<'success' | 'warning' | 'info' | 'danger', UiPaletteColor>\n> = {\n light: {\n success: { main: '#2e7d32', light: '#4caf50', dark: '#1b5e20', contrastText: '#fff' },\n warning: { main: '#ed6c02', light: '#ff9800', dark: '#e65100', contrastText: '#fff' },\n info: { main: '#0288d1', light: '#03a9f4', dark: '#01579b', contrastText: '#fff' },\n danger: { main: '#d32f2f', light: '#ef5350', dark: '#c62828', contrastText: '#fff' },\n },\n dark: {\n success: { main: '#66bb6a', light: '#81c784', dark: '#388e3c', contrastText: DARK_TEXT_PRIMARY },\n warning: { main: '#ffa726', light: '#ffb74d', dark: '#f57c00', contrastText: DARK_TEXT_PRIMARY },\n info: { main: '#29b6f6', light: '#4fc3f7', dark: '#0288d1', contrastText: DARK_TEXT_PRIMARY },\n danger: { main: '#f44336', light: '#e57373', dark: '#d32f2f', contrastText: '#fff' },\n },\n};\n\nconst MODE_DEFAULTS: Record<\n UiThemeMode,\n Pick<UiPalette, 'text' | 'background' | 'divider' | 'action'>\n> = {\n light: {\n text: { primary: DARK_TEXT_PRIMARY, secondary: 'rgba(0, 0, 0, 0.6)', disabled: 'rgba(0, 0, 0, 0.38)' },\n background: { default: '#fff', paper: '#fff' },\n divider: 'rgba(0, 0, 0, 0.12)',\n action: {\n active: 'rgba(0, 0, 0, 0.54)',\n hover: 'rgba(0, 0, 0, 0.04)',\n selected: 'rgba(0, 0, 0, 0.08)',\n disabled: 'rgba(0, 0, 0, 0.26)',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n focus: 'rgba(0, 0, 0, 0.12)',\n },\n },\n dark: {\n text: { primary: '#fff', secondary: 'rgba(255, 255, 255, 0.7)', disabled: 'rgba(255, 255, 255, 0.5)' },\n background: { default: '#121212', paper: '#121212' },\n divider: 'rgba(255, 255, 255, 0.12)',\n action: {\n active: '#fff',\n hover: 'rgba(255, 255, 255, 0.08)',\n selected: 'rgba(255, 255, 255, 0.16)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n focus: 'rgba(255, 255, 255, 0.12)',\n },\n },\n};\n\n/**\n * MUI's `getContrastText`: white where white reads at 3:1 on the colour, the\n * light mode's dark ink otherwise. (MUI's source spells the white as the DARK\n * palette's `text.primary`, which is what made it easy to read backwards.)\n */\nexport function contrastText(background: string): string {\n return getContrastRatio(background, LIGHT_TEXT_PRIMARY) >= CONTRAST_THRESHOLD\n ? LIGHT_TEXT_PRIMARY\n : DARK_TEXT_PRIMARY;\n}\n\n/**\n * MUI's `augmentColor` for a custom colour: derive whatever shade the seed\n * left out. `light` is one tonal offset up, `dark` one and a half down.\n */\nexport function augmentColor(seed: UiPaletteSeed): UiPaletteColor {\n const partial = typeof seed === 'string' ? { main: seed } : seed;\n const main = partial.main ?? partial.light ?? partial.dark;\n if (!main) {\n throw new Error('@12-apps/ui: a palette seed needs at least a `main` colour.');\n }\n return {\n main,\n light: partial.light ?? lighten(main, TONAL_OFFSET),\n dark: partial.dark ?? darken(main, TONAL_OFFSET * 1.5),\n contrastText: partial.contrastText ?? contrastText(main),\n };\n}\n\nconst semantic = (\n mode: UiThemeMode,\n key: 'success' | 'warning' | 'info' | 'danger',\n seed: UiPaletteSeed | undefined,\n): UiPaletteColor => (seed === undefined ? SEMANTIC_DEFAULTS[mode][key] : augmentColor(seed));\n\n/** `neutral` as `accentFor` in `./scales` has always drawn it: three greys and white. */\nexport const NEUTRAL: UiPaletteColor = {\n main: GREY[600],\n light: GREY[400],\n dark: GREY[800],\n contrastText: '#fff',\n};\n\n/** The body scale `Text` renders, in px. `Text.tsx`'s rem map is this, divided by 16. */\nexport const TYPE_SIZES: Record<SizeValue, UiTypeStep> = {\n xs: { fontSize: 12, lineHeight: 1.2 },\n sm: { fontSize: 14, lineHeight: 1.3 },\n md: { fontSize: 16, lineHeight: 1.5 },\n lg: { fontSize: 18, lineHeight: 1.4 },\n xl: { fontSize: 20, lineHeight: 1.3 },\n};\n\nexport const FONT_WEIGHTS: Record<UiFontWeight, number> = {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n};\n\n// `HEADING_SCALE` speaks CSS, this theme speaks numbers; `./css-units` is the\n// one place that conversion is written.\nconst HEADING_STEPS = Object.fromEntries(\n Object.entries(HEADING_SCALE).map(([level, metrics]) => [\n level,\n {\n fontSize: cssLengthToPx(metrics.fontSize, ROOT_FONT_PX),\n lineHeight: metrics.lineHeight,\n letterSpacing: cssTrackingToEm(metrics.letterSpacing),\n normalWeight: metrics.normalWeight,\n },\n ]),\n) as Record<HeadingLevel, UiHeadingStep>;\n\nexport const WEB_FONT_FAMILY = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\nexport const WEB_MONOSPACE_FONT_FAMILY = 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace';\n\n/**\n * Build the theme. Every field is derived here so a host that changes one\n * seed gets every dependent shade recomputed, on both renderers, identically.\n */\nexport function createUiTheme(options: UiThemeOptions = {}): UiTheme {\n const mode = options.mode ?? 'light';\n const seeds = options.palette ?? {};\n const brand = DEFAULT_BRAND[mode];\n const defaults = MODE_DEFAULTS[mode];\n const spacingUnit = options.spacingUnit ?? 8;\n\n const palette: UiPalette = {\n mode,\n primary: augmentColor(seeds.primary ?? brand.primary),\n secondary: augmentColor(seeds.secondary ?? brand.secondary),\n success: semantic(mode, 'success', seeds.success),\n warning: semantic(mode, 'warning', seeds.warning),\n info: semantic(mode, 'info', seeds.info),\n danger: semantic(mode, 'danger', seeds.danger),\n neutral: NEUTRAL,\n text: defaults.text,\n background: { ...defaults.background, ...seeds.background },\n divider: defaults.divider,\n action: defaults.action,\n grey: GREY,\n };\n\n return {\n mode,\n palette,\n spacing: (units: number) => units * spacingUnit,\n spacingUnit,\n radius: { sm: 2, md: 4, lg: 8, xl: 16, full: 9999 },\n typography: {\n fontFamily: options.typography?.fontFamily,\n monospaceFontFamily: options.typography?.monospaceFontFamily,\n sizes: TYPE_SIZES,\n weights: FONT_WEIGHTS,\n heading: HEADING_STEPS,\n },\n zIndex: { appBar: 1100, drawer: 1200, modal: 1300, snackbar: 1400, tooltip: 1500 },\n };\n}\n\n/** The palette slot a house colour name resolves to. */\nexport type UiPaletteKey = 'primary' | 'secondary' | 'success' | 'warning' | 'info' | 'danger' | 'neutral';\n\nexport const DEFAULT_UI_THEME: UiTheme = createUiTheme();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/tokens/color.ts","../../../src/tokens/heading-scale.ts","../../../src/tokens/css-units.ts","../../../src/tokens/theme.ts"],"sourcesContent":["/**\n * COLOUR ARITHMETIC WITH NO RENDERER BEHIND IT.\n *\n * Every shade the web components paint comes out of MUI's colour manipulator:\n * `lighten(main, 0.2)` is a palette's `light`, `darken(main, 0.3)` its `dark`,\n * `alpha(main, 0.1)` the hover wash on an outline button. A native component\n * that wants the SAME pixel has to run the SAME arithmetic, and it cannot\n * import it — `@mui/material/styles` drags emotion and the DOM in behind it.\n *\n * So the arithmetic lives here, once, with nothing behind it. It is a faithful\n * port of `@mui/system/colorManipulator` (MIT), down to the truncation:\n * `lighten('#6366F1', 0.2)` is `rgb(130, 132, 243)` on both sides because both\n * TRUNCATE 132.6 rather than round it. A port that rounded would be one pixel\n * of tint away from the web on every button, forever, and nothing would flag it.\n *\n * `color()` space strings are deliberately unsupported: nothing in this package\n * emits one, and a smaller surface is a smaller thing to keep identical.\n */\n\nexport type ColorFormat = 'rgb' | 'rgba' | 'hsl' | 'hsla';\n\nexport interface DecomposedColor {\n type: ColorFormat;\n values: number[];\n}\n\nconst FORMATS: readonly ColorFormat[] = ['rgb', 'rgba', 'hsl', 'hsla'];\n\nconst clamp = (value: number, min = 0, max = 1): number => Math.min(Math.max(min, value), max);\n\n/** `#rgb`, `#rgba`, `#rrggbb` or `#rrggbbaa` to its `rgb()` / `rgba()` string. */\nexport function hexToRgb(color: string): string {\n const hex = color.slice(1);\n const pair = new RegExp(`.{1,${hex.length >= 6 ? 2 : 1}}`, 'g');\n let channels: string[] | null = hex.match(pair);\n if (channels && channels[0]?.length === 1) {\n channels = channels.map((channel) => channel + channel);\n }\n if (!channels) return '';\n\n const parts = channels.map((channel, index) =>\n index < 3 ? parseInt(channel, 16) : Math.round((parseInt(channel, 16) / 255) * 1000) / 1000,\n );\n return `rgb${channels.length === 4 ? 'a' : ''}(${parts.join(', ')})`;\n}\n\n/** Any supported colour string to its type and numeric channels. */\nexport function decomposeColor(color: string): DecomposedColor {\n if (color.charAt(0) === '#') {\n return decomposeColor(hexToRgb(color));\n }\n\n const marker = color.indexOf('(');\n const type = color.substring(0, marker) as ColorFormat;\n if (!FORMATS.includes(type)) {\n throw new Error(\n `@12-apps/ui: unsupported colour \"${color}\". Use #nnn, #nnnnnn, rgb(), rgba(), hsl() or hsla().`,\n );\n }\n\n const values = color\n .substring(marker + 1, color.length - 1)\n .split(',')\n .map((value) => parseFloat(value));\n\n return { type, values };\n}\n\n/** The inverse of {@link decomposeColor}, with MUI's channel truncation. */\nexport function recomposeColor({ type, values }: DecomposedColor): string {\n const parts: Array<number | string> = type.startsWith('rgb')\n ? values.map((value, index) => (index < 3 ? Math.trunc(value) : value))\n : [values[0] ?? 0, `${values[1] ?? 0}%`, `${values[2] ?? 0}%`, ...values.slice(3)];\n\n return `${type}(${parts.join(', ')})`;\n}\n\n/** An `hsl()` / `hsla()` string to its `rgb()` / `rgba()` equivalent. */\nexport function hslToRgb(color: string): string {\n const { type, values } = decomposeColor(color);\n const h = values[0] ?? 0;\n const s = (values[1] ?? 0) / 100;\n const l = (values[2] ?? 0) / 100;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number, k = (n + h / 30) % 12): number =>\n l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\n const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n if (type === 'hsla') {\n return recomposeColor({ type: 'rgba', values: [...rgb, values[3] ?? 1] });\n }\n return recomposeColor({ type: 'rgb', values: rgb });\n}\n\n/** Relative luminance (WCAG 2.0), to three decimals like MUI. */\nexport function getLuminance(color: string): number {\n const decomposed = decomposeColor(color);\n const channels = decomposed.type.startsWith('hsl')\n ? decomposeColor(hslToRgb(color)).values\n : decomposed.values;\n\n const [r, g, b] = channels.slice(0, 3).map((value) => {\n const c = value / 255;\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n });\n\n return Number((0.2126 * (r ?? 0) + 0.7152 * (g ?? 0) + 0.0722 * (b ?? 0)).toFixed(3));\n}\n\n/** WCAG contrast ratio between two colours, 1 to 21. */\nexport function getContrastRatio(foreground: string, background: string): number {\n const lumA = getLuminance(foreground);\n const lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/** The colour with its alpha channel set to `value` (0 to 1). */\nexport function alpha(color: string, value: number): string {\n const decomposed = decomposeColor(color);\n const type: ColorFormat = decomposed.type.endsWith('a')\n ? decomposed.type\n : (`${decomposed.type}a` as ColorFormat);\n const values = decomposed.values.slice(0, 3);\n values[3] = clamp(value);\n return recomposeColor({ type, values });\n}\n\n/** The colour moved `coefficient` (0 to 1) of the way towards black. */\nexport function darken(color: string, coefficient: number): string {\n const decomposed = decomposeColor(color);\n const amount = clamp(coefficient);\n const values = [...decomposed.values];\n\n if (decomposed.type.startsWith('hsl')) {\n values[2] = (values[2] ?? 0) * (1 - amount);\n } else {\n for (let index = 0; index < 3; index += 1) {\n values[index] = (values[index] ?? 0) * (1 - amount);\n }\n }\n return recomposeColor({ type: decomposed.type, values });\n}\n\n/** The colour moved `coefficient` (0 to 1) of the way towards white. */\nexport function lighten(color: string, coefficient: number): string {\n const decomposed = decomposeColor(color);\n const amount = clamp(coefficient);\n const values = [...decomposed.values];\n\n if (decomposed.type.startsWith('hsl')) {\n values[2] = (values[2] ?? 0) + (100 - (values[2] ?? 0)) * amount;\n } else {\n for (let index = 0; index < 3; index += 1) {\n values[index] = (values[index] ?? 0) + (255 - (values[index] ?? 0)) * amount;\n }\n }\n return recomposeColor({ type: decomposed.type, values });\n}\n\n/** Darken a light colour or lighten a dark one, by `coefficient`. */\nexport function emphasize(color: string, coefficient = 0.15): string {\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n","\n/**\n * THE THIRD VOCABULARY: the type scale.\n *\n * `scales.ts` opens by saying the package had both halves of every argument at\n * once until the size and colour vocabularies were declared in one place and\n * every component derived from them. The type scale was the one that never got\n * that treatment — it lived as a private `LEVELS` table inside\n * `Heading.styles.ts`, which is exactly the shape that file exists to refuse.\n *\n * Two things follow from it being private, and the second is the expensive one.\n *\n * **It could not be re-themed.** `Heading` read `theme.typography.h1.fontFamily`\n * from the theme and then ignored the theme for every other metric, so a host\n * calling `createTheme({ typography: { h1: { fontSize: '2rem' } } })` changed\n * `<Typography variant=\"h1\">` and left `<Heading level=\"h1\">` at 48px. A design\n * system whose type scale cannot be set by the design is not a system.\n *\n * **And the numbers were a landing page's.** `h1` at 3rem and `h2` at 2.5rem are\n * hero metrics. Dropped into an operations console they put a 48px title\n * directly above 14px body copy — a 3.4x jump with nothing in between — so\n * product teams stopped reaching for the component. Measured in one consuming\n * repo: `<Heading>` appeared four times in the entire codebase while raw\n * `fontSize` appeared in dozens of files. The component was not disliked, it was\n * unusable at app scale, and every host paid for that in hand-rolled CSS.\n *\n * So the defaults below are an APP scale, and `display` keeps the hero size for\n * the screens that actually want one. A marketing page asks for `display`; a\n * console asks for `h1` and gets something it can put on a page.\n */\n\n/**\n * A step on the scale.\n *\n * `display` is a SIZE, not a rank — see `Heading`, which renders it as `h1` so\n * the document still gets exactly one level-one heading.\n */\nexport type HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'display';\n\n/**\n * The runtime list, declared beside the union for the reason `SIZE_VALUES`\n * gives: a story's `argTypes.options` spelled by hand drifts from the type, and\n * the direction it drifts is \"documents less than the component accepts\".\n */\nexport const HEADING_LEVELS = [\n 'display',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n] as const satisfies readonly HeadingLevel[];\n\n/** Everything one step of the scale decides. */\nexport interface HeadingMetrics {\n fontSize: string;\n lineHeight: number;\n letterSpacing?: string;\n /**\n * The weight this step carries when the caller asks for `normal`. A heading's\n * \"normal\" is not body text's 400 — it is the weight the step is meant to\n * carry, which gets heavier as the step gets larger.\n */\n normalWeight: number;\n}\n\n/**\n * The house default, in CODE rather than in a component.\n *\n * ~1.15x per step from a 1rem `h6`, which keeps six distinguishable ranks inside\n * the range an application actually uses. The old table ran 1.125rem → 4rem and\n * spent its top three steps above anything a product screen wants.\n */\nexport const HEADING_SCALE: Record<HeadingLevel, HeadingMetrics> = {\n // The hero size the old `h1` was really offering, under the name that says so.\n display: { fontSize: '3rem', lineHeight: 1.05, letterSpacing: '-0.03em', normalWeight: 800 },\n h1: { fontSize: '2rem', lineHeight: 1.2, letterSpacing: '-0.02em', normalWeight: 700 },\n h2: { fontSize: '1.75rem', lineHeight: 1.25, letterSpacing: '-0.015em', normalWeight: 700 },\n h3: { fontSize: '1.5rem', lineHeight: 1.3, letterSpacing: '-0.01em', normalWeight: 600 },\n h4: { fontSize: '1.25rem', lineHeight: 1.35, letterSpacing: '-0.005em', normalWeight: 600 },\n h5: { fontSize: '1.125rem', lineHeight: 1.4, normalWeight: 600 },\n h6: { fontSize: '1rem', lineHeight: 1.5, normalWeight: 600 },\n};\n\n/** A host's overrides: any subset of the steps, any subset of each step's metrics. */\nexport type HeadingScaleOverrides = Partial<Record<HeadingLevel, Partial<HeadingMetrics>>>;\n","/**\n * THE ONE READER OF CSS LENGTHS.\n *\n * `HEADING_SCALE` and a host's MUI overrides speak CSS — `'2rem'`, `'-0.02em'`\n * — and both `tokens/theme.ts` and `provider/mui-bridge.ts` need them as\n * numbers. Two private parsers drifted (one multiplied `em` by 16, one did\n * not), so there is one, here, with the rule spelled out: a length becomes px\n * against a 16px root, a tracking value becomes em.\n */\n\nconst ROOT_PX = 16;\n\n/** `'1.5rem'` → 24, `'1.5em'` → 24, `'20px'` → 20, `20` → 20, unparseable → `fallback`. */\nexport function cssLengthToPx(value: string | number | undefined, fallback: number): number {\n if (typeof value === 'number') return value;\n if (value === undefined) return fallback;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) return fallback;\n return value.endsWith('rem') || value.endsWith('em') ? parsed * ROOT_PX : parsed;\n}\n\n/** `'-0.02em'` → -0.02, `'0.5px'` → 0.5 / 16, `undefined` → `undefined` (\"normal\"). */\nexport function cssTrackingToEm(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number.parseFloat(value);\n if (Number.isNaN(parsed)) return undefined;\n return value.endsWith('px') ? parsed / ROOT_PX : parsed;\n}\n","import { darken, getContrastRatio, lighten } from './color';\nimport { cssLengthToPx, cssTrackingToEm } from './css-units';\nimport { HEADING_SCALE, type HeadingLevel } from './heading-scale';\n\nimport type { SizeValue } from './vocabulary';\n\n/**\n * THE THEME BOTH RENDERERS READ.\n *\n * On the web every component styles itself from MUI's `Theme`, which is built\n * by the host (`@12-apps/app-shell`'s `createAppTheme` in the origin apps) and\n * reaches a component through emotion's context. React Native has no emotion,\n * no CSS and no MUI, so a native `Button` needs the same decisions — the\n * palette, the spacing unit, the radius, the type scale — from somewhere that\n * does not import a renderer.\n *\n * This is that somewhere. `UiTheme` is a plain object of numbers and colour\n * strings. `createUiTheme` derives it the way MUI's `createPalette` derives its\n * own: a `light` shade is `lighten(main, 0.2)`, a `dark` shade `darken(main,\n * 0.3)`, `contrastText` flips at a 3:1 ratio against `rgba(0, 0, 0, 0.87)`.\n * Same seeds in, same shades out, on both sides — that is the whole basis for\n * a native button being the web button's colour and not a near miss.\n *\n * Numbers are in px on the web and dp on native; both are the CSS-pixel unit\n * a design is drawn in, so a `fontSize: 16` here IS `1rem` in a web style\n * and `16` in a `StyleSheet`. The web components keep their `rem` strings and\n * derive them from these numbers where the two meet (see `px()` below and the\n * `*.metrics.ts` file beside each ported component).\n *\n * `danger` and `neutral` are this package's names (see `./scales`); `danger`\n * is MUI's `error` and `neutral` is drawn from the grey ramp the way\n * `Button.styles.ts` has always drawn it.\n */\n\nexport type UiThemeMode = 'light' | 'dark';\n\nexport interface UiPaletteColor {\n main: string;\n light: string;\n dark: string;\n contrastText: string;\n}\n\nexport type UiGreyStep = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\n\nexport interface UiPalette {\n mode: UiThemeMode;\n primary: UiPaletteColor;\n secondary: UiPaletteColor;\n success: UiPaletteColor;\n warning: UiPaletteColor;\n info: UiPaletteColor;\n danger: UiPaletteColor;\n neutral: UiPaletteColor;\n text: { primary: string; secondary: string; disabled: string };\n background: { default: string; paper: string };\n divider: string;\n action: {\n active: string;\n hover: string;\n selected: string;\n disabled: string;\n disabledBackground: string;\n focus: string;\n };\n grey: Record<UiGreyStep, string>;\n}\n\n/** One step of the body scale: `fontSize` in px, `lineHeight` as a ratio. */\nexport interface UiTypeStep {\n fontSize: number;\n lineHeight: number;\n}\n\nexport type UiFontWeight = 'light' | 'normal' | 'medium' | 'semibold' | 'bold';\n\nexport interface UiHeadingStep extends UiTypeStep {\n /** In em, so it scales with the step. `undefined` is \"normal\". */\n letterSpacing?: number;\n normalWeight: number;\n}\n\nexport interface UiTypography {\n /**\n * Native has no fallback stacks: a font is either installed and named, or\n * `undefined` and the platform's own. The web default is MUI's Roboto stack.\n */\n fontFamily: string | undefined;\n monospaceFontFamily: string | undefined;\n sizes: Record<SizeValue, UiTypeStep>;\n weights: Record<UiFontWeight, number>;\n heading: Record<HeadingLevel, UiHeadingStep>;\n}\n\nexport interface UiTheme {\n mode: UiThemeMode;\n palette: UiPalette;\n /** MUI's `theme.spacing(n)`: `n` units of {@link UiTheme.spacingUnit}, in px. */\n spacing: (units: number) => number;\n spacingUnit: number;\n /** `md` is MUI's `shape.borderRadius`; the others are its halves and doubles. */\n radius: { sm: number; md: number; lg: number; xl: number; full: number };\n typography: UiTypography;\n zIndex: { appBar: number; drawer: number; modal: number; snackbar: number; tooltip: number };\n}\n\n/** A seed for one palette slot: a hex `main`, or any subset of the four shades. */\nexport type UiPaletteSeed = string | Partial<UiPaletteColor>;\n\nexport interface UiThemeOptions {\n mode?: UiThemeMode;\n palette?: Partial<{\n primary: UiPaletteSeed;\n secondary: UiPaletteSeed;\n success: UiPaletteSeed;\n warning: UiPaletteSeed;\n info: UiPaletteSeed;\n danger: UiPaletteSeed;\n background: Partial<UiPalette['background']>;\n }>;\n typography?: Partial<Pick<UiTypography, 'fontFamily' | 'monospaceFontFamily'>>;\n spacingUnit?: number;\n}\n\nconst ROOT_FONT_PX = 16;\n\n/** The px value as the rem string the web components write. */\nexport const px = (value: number): string => `${value / ROOT_FONT_PX}rem`;\n\n/** MUI's `createPalette` defaults, exactly. */\nconst TONAL_OFFSET = 0.2;\nconst CONTRAST_THRESHOLD = 3;\nconst DARK_TEXT_PRIMARY = 'rgba(0, 0, 0, 0.87)';\nconst LIGHT_TEXT_PRIMARY = '#fff';\n\nexport const GREY: Record<UiGreyStep, string> = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n};\n\n/**\n * The platform's own seeds. The pair `@12-apps/ui`'s Storybook preview and\n * `@12-apps/app-shell`'s `DEFAULT_THEME_TOKENS` both carry — keep the three in\n * step if the design tokens change.\n */\nexport const DEFAULT_BRAND: Record<UiThemeMode, { primary: string; secondary: string }> = {\n light: { primary: '#6366F1', secondary: '#8B5CF6' },\n dark: { primary: '#818CF8', secondary: '#A78BFA' },\n};\n\n/** MUI's semantic defaults per mode. These are declared shades, not derived. */\nconst SEMANTIC_DEFAULTS: Record<\n UiThemeMode,\n Record<'success' | 'warning' | 'info' | 'danger', UiPaletteColor>\n> = {\n light: {\n success: { main: '#2e7d32', light: '#4caf50', dark: '#1b5e20', contrastText: '#fff' },\n warning: { main: '#ed6c02', light: '#ff9800', dark: '#e65100', contrastText: '#fff' },\n info: { main: '#0288d1', light: '#03a9f4', dark: '#01579b', contrastText: '#fff' },\n danger: { main: '#d32f2f', light: '#ef5350', dark: '#c62828', contrastText: '#fff' },\n },\n dark: {\n success: { main: '#66bb6a', light: '#81c784', dark: '#388e3c', contrastText: DARK_TEXT_PRIMARY },\n warning: { main: '#ffa726', light: '#ffb74d', dark: '#f57c00', contrastText: DARK_TEXT_PRIMARY },\n info: { main: '#29b6f6', light: '#4fc3f7', dark: '#0288d1', contrastText: DARK_TEXT_PRIMARY },\n danger: { main: '#f44336', light: '#e57373', dark: '#d32f2f', contrastText: '#fff' },\n },\n};\n\nconst MODE_DEFAULTS: Record<\n UiThemeMode,\n Pick<UiPalette, 'text' | 'background' | 'divider' | 'action'>\n> = {\n light: {\n text: { primary: DARK_TEXT_PRIMARY, secondary: 'rgba(0, 0, 0, 0.6)', disabled: 'rgba(0, 0, 0, 0.38)' },\n background: { default: '#fff', paper: '#fff' },\n divider: 'rgba(0, 0, 0, 0.12)',\n action: {\n active: 'rgba(0, 0, 0, 0.54)',\n hover: 'rgba(0, 0, 0, 0.04)',\n selected: 'rgba(0, 0, 0, 0.08)',\n disabled: 'rgba(0, 0, 0, 0.26)',\n disabledBackground: 'rgba(0, 0, 0, 0.12)',\n focus: 'rgba(0, 0, 0, 0.12)',\n },\n },\n dark: {\n text: { primary: '#fff', secondary: 'rgba(255, 255, 255, 0.7)', disabled: 'rgba(255, 255, 255, 0.5)' },\n background: { default: '#121212', paper: '#121212' },\n divider: 'rgba(255, 255, 255, 0.12)',\n action: {\n active: '#fff',\n hover: 'rgba(255, 255, 255, 0.08)',\n selected: 'rgba(255, 255, 255, 0.16)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\n focus: 'rgba(255, 255, 255, 0.12)',\n },\n },\n};\n\n/**\n * MUI's `getContrastText`: white where white reads at 3:1 on the colour, the\n * light mode's dark ink otherwise. (MUI's source spells the white as the DARK\n * palette's `text.primary`, which is what made it easy to read backwards.)\n */\nexport function contrastText(background: string): string {\n return getContrastRatio(background, LIGHT_TEXT_PRIMARY) >= CONTRAST_THRESHOLD\n ? LIGHT_TEXT_PRIMARY\n : DARK_TEXT_PRIMARY;\n}\n\n/**\n * MUI's `augmentColor` for a custom colour: derive whatever shade the seed\n * left out. `light` is one tonal offset up, `dark` one and a half down.\n */\nexport function augmentColor(seed: UiPaletteSeed): UiPaletteColor {\n const partial = typeof seed === 'string' ? { main: seed } : seed;\n const main = partial.main ?? partial.light ?? partial.dark;\n if (!main) {\n throw new Error('@12-apps/ui: a palette seed needs at least a `main` colour.');\n }\n return {\n main,\n light: partial.light ?? lighten(main, TONAL_OFFSET),\n dark: partial.dark ?? darken(main, TONAL_OFFSET * 1.5),\n contrastText: partial.contrastText ?? contrastText(main),\n };\n}\n\nconst semantic = (\n mode: UiThemeMode,\n key: 'success' | 'warning' | 'info' | 'danger',\n seed: UiPaletteSeed | undefined,\n): UiPaletteColor => (seed === undefined ? SEMANTIC_DEFAULTS[mode][key] : augmentColor(seed));\n\n/** `neutral` as `accentFor` in `./scales` has always drawn it: three greys and white. */\nexport const NEUTRAL: UiPaletteColor = {\n main: GREY[600],\n light: GREY[400],\n dark: GREY[800],\n contrastText: '#fff',\n};\n\n/** The body scale `Text` renders, in px. `Text.tsx`'s rem map is this, divided by 16. */\nexport const TYPE_SIZES: Record<SizeValue, UiTypeStep> = {\n xs: { fontSize: 12, lineHeight: 1.2 },\n sm: { fontSize: 14, lineHeight: 1.3 },\n md: { fontSize: 16, lineHeight: 1.5 },\n lg: { fontSize: 18, lineHeight: 1.4 },\n xl: { fontSize: 20, lineHeight: 1.3 },\n};\n\nexport const FONT_WEIGHTS: Record<UiFontWeight, number> = {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n};\n\n// `HEADING_SCALE` speaks CSS, this theme speaks numbers; `./css-units` is the\n// one place that conversion is written.\nconst HEADING_STEPS = Object.fromEntries(\n Object.entries(HEADING_SCALE).map(([level, metrics]) => [\n level,\n {\n fontSize: cssLengthToPx(metrics.fontSize, ROOT_FONT_PX),\n lineHeight: metrics.lineHeight,\n letterSpacing: cssTrackingToEm(metrics.letterSpacing),\n normalWeight: metrics.normalWeight,\n },\n ]),\n) as Record<HeadingLevel, UiHeadingStep>;\n\nexport const WEB_FONT_FAMILY = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\nexport const WEB_MONOSPACE_FONT_FAMILY = 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace';\n\n/**\n * Build the theme. Every field is derived here so a host that changes one\n * seed gets every dependent shade recomputed, on both renderers, identically.\n */\nexport function createUiTheme(options: UiThemeOptions = {}): UiTheme {\n const mode = options.mode ?? 'light';\n const seeds = options.palette ?? {};\n const brand = DEFAULT_BRAND[mode];\n const defaults = MODE_DEFAULTS[mode];\n const spacingUnit = options.spacingUnit ?? 8;\n\n const palette: UiPalette = {\n mode,\n primary: augmentColor(seeds.primary ?? brand.primary),\n secondary: augmentColor(seeds.secondary ?? brand.secondary),\n success: semantic(mode, 'success', seeds.success),\n warning: semantic(mode, 'warning', seeds.warning),\n info: semantic(mode, 'info', seeds.info),\n danger: semantic(mode, 'danger', seeds.danger),\n neutral: NEUTRAL,\n text: defaults.text,\n background: { ...defaults.background, ...seeds.background },\n divider: defaults.divider,\n action: defaults.action,\n grey: GREY,\n };\n\n return {\n mode,\n palette,\n spacing: (units: number) => units * spacingUnit,\n spacingUnit,\n radius: { sm: 2, md: 4, lg: 8, xl: 16, full: 9999 },\n typography: {\n fontFamily: options.typography?.fontFamily,\n monospaceFontFamily: options.typography?.monospaceFontFamily,\n sizes: TYPE_SIZES,\n weights: FONT_WEIGHTS,\n heading: HEADING_STEPS,\n },\n zIndex: { appBar: 1100, drawer: 1200, modal: 1300, snackbar: 1400, tooltip: 1500 },\n };\n}\n\n/** The palette slot a house colour name resolves to. */\nexport type UiPaletteKey = 'primary' | 'secondary' | 'success' | 'warning' | 'info' | 'danger' | 'neutral';\n\nexport const DEFAULT_UI_THEME: UiTheme = createUiTheme();\n"],"mappings":"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","names":[]}
@@ -0,0 +1,67 @@
1
+ // src/platform/pulse-ring.native.tsx
2
+ import * as React from "react";
3
+ import { Animated, Easing } from "react-native";
4
+ import { jsx } from "react/jsx-runtime";
5
+ function PulseRing({
6
+ color,
7
+ radius,
8
+ spread,
9
+ durationMs,
10
+ fadeAt,
11
+ opacity,
12
+ testID
13
+ }) {
14
+ const progress = React.useRef(new Animated.Value(0)).current;
15
+ React.useEffect(() => {
16
+ const loop = Animated.loop(
17
+ Animated.timing(progress, {
18
+ toValue: 1,
19
+ duration: durationMs,
20
+ easing: Easing.linear,
21
+ useNativeDriver: false
22
+ })
23
+ );
24
+ loop.start();
25
+ return () => loop.stop();
26
+ }, [durationMs, progress]);
27
+ const grow = progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [0, spread, 0] });
28
+ const inset = Animated.multiply(grow, -1);
29
+ return /* @__PURE__ */ jsx(
30
+ Animated.View,
31
+ {
32
+ testID,
33
+ "aria-hidden": true,
34
+ style: {
35
+ position: "absolute",
36
+ pointerEvents: "none",
37
+ top: inset,
38
+ left: inset,
39
+ right: inset,
40
+ bottom: inset,
41
+ borderWidth: grow,
42
+ borderColor: color,
43
+ borderRadius: radius,
44
+ opacity: progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [opacity, 0, 0] })
45
+ }
46
+ }
47
+ );
48
+ }
49
+
50
+ // src/tokens/shadow.ts
51
+ var BLACK = "#000";
52
+ var WHITE = "#fff";
53
+ var halo = (blurRadius, color) => [
54
+ { offsetX: 0, offsetY: 0, blurRadius, spreadDistance: 0, color }
55
+ ];
56
+ var drop = (offsetY, blurRadius, color) => [
57
+ { offsetX: 0, offsetY, blurRadius, spreadDistance: 0, color }
58
+ ];
59
+
60
+ export {
61
+ BLACK,
62
+ WHITE,
63
+ halo,
64
+ drop,
65
+ PulseRing
66
+ };
67
+ //# sourceMappingURL=chunk-NRN37A5K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform/pulse-ring.native.tsx","../../../src/tokens/shadow.ts"],"sourcesContent":["import * as React from 'react';\nimport { Animated, Easing } from 'react-native';\n\n/**\n * THE `::after` PULSE, AS A REACT NATIVE VIEW.\n *\n * `Card` and `Dialog` pulse the same way on the web: an `::after` that fills\n * the element, carries `box-shadow: 0 0 0 <spread>px currentColor` and animates\n * that spread out and back while fading, once every two seconds, from BEHIND\n * the element (`z-index: -1`). Those two read this; `Button.native.tsx` still\n * carries its own `Pulse`, a filled overlay that scales and fades rather than a\n * ring, and folding it onto this is a `form/Button` change.\n *\n * React Native cannot paint a child behind its parent's own background, so a\n * filled overlay would wash the surface instead of haloing it. This draws a\n * HOLLOW ring instead: the view is inset by the current spread and carries a\n * border of exactly that width, so the band it paints is precisely the region\n * from the surface's edge to `spread` outside it — the same band the box-shadow\n * spread covers, and nothing over the surface itself.\n *\n * Layout props cannot run on the native driver, so this animates on the JS one.\n */\nexport interface PulseRingProps {\n color: string;\n /** The surface's own corner radius, which the ring follows. */\n radius: number | string;\n /** How far out of the edge the ring grows, in px. */\n spread: number;\n durationMs: number;\n /** The fraction of the cycle the ring is still visible for. */\n fadeAt: number;\n /** The ring's opacity at the start of a cycle. */\n opacity: number;\n testID: string;\n}\n\nexport function PulseRing({\n color,\n radius,\n spread,\n durationMs,\n fadeAt,\n opacity,\n testID,\n}: PulseRingProps): React.JSX.Element {\n const progress = React.useRef(new Animated.Value(0)).current;\n\n React.useEffect(() => {\n const loop = Animated.loop(\n Animated.timing(progress, {\n toValue: 1,\n duration: durationMs,\n easing: Easing.linear,\n useNativeDriver: false,\n }),\n );\n loop.start();\n return () => loop.stop();\n }, [durationMs, progress]);\n\n const grow = progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [0, spread, 0] });\n const inset = Animated.multiply(grow, -1);\n\n return (\n <Animated.View\n testID={testID}\n aria-hidden\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n top: inset,\n left: inset,\n right: inset,\n bottom: inset,\n borderWidth: grow,\n borderColor: color,\n borderRadius: radius,\n opacity: progress.interpolate({ inputRange: [0, fadeAt, 1], outputRange: [opacity, 0, 0] }),\n }}\n />\n );\n}\n","/**\n * ONE SHADOW, IN THE SHAPE BOTH RENDERERS READ.\n *\n * A drop shadow is one of the few decorations the two sides express in the same\n * numbers and different syntax: CSS wants `0 8px 32px rgba(…)`, React Native\n * wants `{ offsetX, offsetY, blurRadius, spreadDistance, color }` (its\n * `BoxShadowValue`, which `boxShadow` takes an array of). So the numbers live in\n * a component's `*.metrics.ts` as this object, native passes it straight\n * through, and the web renders it with {@link shadowCss}.\n *\n * {@link shadowCss} reproduces the text the web components already wrote by\n * hand: a bare `0` for a zero length, and no spread at all when the spread is\n * zero. That is what makes moving a shadow into a metrics table a refactor\n * rather than a restyle.\n */\nexport interface UiShadow {\n offsetX: number;\n offsetY: number;\n blurRadius: number;\n spreadDistance: number;\n color: string;\n}\n\n/** A length the way the web writes it: a bare `0`, otherwise px. */\nconst len = (value: number): string => (value === 0 ? '0' : `${value}px`);\n\n/** One shadow as CSS. A zero spread is omitted, as the web has always written it. */\nexport const shadowCss = (shadow: UiShadow): string =>\n [\n len(shadow.offsetX),\n len(shadow.offsetY),\n len(shadow.blurRadius),\n ...(shadow.spreadDistance === 0 ? [] : [len(shadow.spreadDistance)]),\n shadow.color,\n ].join(' ');\n\n/** Several shadows as one CSS declaration. */\nexport const shadowListCss = (shadows: readonly UiShadow[]): string =>\n shadows.map(shadowCss).join(', ');\n\n/**\n * MUI's `palette.common`, which `UiTheme` has no slot for.\n *\n * Here rather than beside each caller because the neumorphic, glass and scrim\n * arithmetic in more than one component mixes from exactly these two, and a\n * per-component copy is a per-component chance to write `#000000`.\n */\nexport const BLACK = '#000';\nexport const WHITE = '#fff';\n\n/** A shadow with no offset — a halo all round, which is how `glow` reads. */\nexport const halo = (blurRadius: number, color: string): UiShadow[] => [\n { offsetX: 0, offsetY: 0, blurRadius, spreadDistance: 0, color },\n];\n\n/** A dropped shadow straight down, which is how a lifted surface sits. */\nexport const drop = (offsetY: number, blurRadius: number, color: string): UiShadow[] => [\n { offsetX: 0, offsetY, blurRadius, spreadDistance: 0, color },\n];\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,UAAU,cAAc;AA+D7B;AA5BG,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,QAAM,WAAiB,aAAO,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;AAErD,EAAM,gBAAU,MAAM;AACpB,UAAM,OAAO,SAAS;AAAA,MACpB,SAAS,OAAO,UAAU;AAAA,QACxB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,OAAO;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AACA,SAAK,MAAM;AACX,WAAO,MAAM,KAAK,KAAK;AAAA,EACzB,GAAG,CAAC,YAAY,QAAQ,CAAC;AAEzB,QAAM,OAAO,SAAS,YAAY,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAC7F,QAAM,QAAQ,SAAS,SAAS,MAAM,EAAE;AAExC,SACE;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACC;AAAA,MACA,eAAW;AAAA,MACX,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,aAAa;AAAA,QACb,cAAc;AAAA,QACd,SAAS,SAAS,YAAY,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;AAAA,MAC5F;AAAA;AAAA,EACF;AAEJ;;;AClCO,IAAM,QAAQ;AACd,IAAM,QAAQ;AAGd,IAAM,OAAO,CAAC,YAAoB,UAA8B;AAAA,EACrE,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,gBAAgB,GAAG,MAAM;AACjE;AAGO,IAAM,OAAO,CAAC,SAAiB,YAAoB,UAA8B;AAAA,EACtF,EAAE,SAAS,GAAG,SAAS,YAAY,gBAAgB,GAAG,MAAM;AAC9D;","names":[]}
@@ -1,12 +1,12 @@
1
- import {
2
- resolveTestId
3
- } from "./chunk-QZAUOHDQ.js";
4
1
  import {
5
2
  COLOR_VALUES
6
3
  } from "./chunk-5WLOVHKK.js";
4
+ import {
5
+ resolveTestId
6
+ } from "./chunk-AR5O4BEY.js";
7
7
  import {
8
8
  useUiTheme
9
- } from "./chunk-YTHR4Y5P.js";
9
+ } from "./chunk-GWGIWQO7.js";
10
10
 
11
11
  // src/icons/Icon.types.ts
12
12
  var ICON_SIZES = {
@@ -111,4 +111,4 @@ export {
111
111
  ICON_NAMES,
112
112
  Icon
113
113
  };
114
- //# sourceMappingURL=chunk-D4EYAXNG.js.map
114
+ //# sourceMappingURL=chunk-QYUD3S6F.js.map
@@ -1,6 +1,3 @@
1
- import {
2
- muiTypeStyle
3
- } from "../chunks/chunk-HSIND52T.js";
4
1
  import {
5
2
  webAria
6
3
  } from "../chunks/chunk-T6BJPP3E.js";
@@ -9,21 +6,24 @@ import {
9
6
  } from "../chunks/chunk-5GJ5OG5R.js";
10
7
  import {
11
8
  Icon
12
- } from "../chunks/chunk-D4EYAXNG.js";
9
+ } from "../chunks/chunk-QYUD3S6F.js";
10
+ import "../chunks/chunk-5WLOVHKK.js";
13
11
  import {
14
12
  resolveTestId,
15
13
  withoutTestIdProps
16
- } from "../chunks/chunk-QZAUOHDQ.js";
17
- import "../chunks/chunk-5WLOVHKK.js";
14
+ } from "../chunks/chunk-AR5O4BEY.js";
15
+ import {
16
+ muiTypeStyle
17
+ } from "../chunks/chunk-2UFNPDYT.js";
18
18
  import {
19
19
  useUiTheme
20
- } from "../chunks/chunk-YTHR4Y5P.js";
20
+ } from "../chunks/chunk-GWGIWQO7.js";
21
21
  import {
22
22
  alpha,
23
23
  contrastText,
24
24
  darken,
25
25
  lighten
26
- } from "../chunks/chunk-P3PL4WBO.js";
26
+ } from "../chunks/chunk-LEMMXZFN.js";
27
27
 
28
28
  // src/components/data-display/Alert/Alert.native.tsx
29
29
  import * as React from "react";
@@ -1,20 +1,20 @@
1
- import {
2
- useLoopedProgress
3
- } from "../chunks/chunk-MLQIOKQZ.js";
4
1
  import {
5
2
  renderTextChildren
6
3
  } from "../chunks/chunk-5GJ5OG5R.js";
7
4
  import {
8
5
  Icon
9
- } from "../chunks/chunk-D4EYAXNG.js";
10
- import "../chunks/chunk-QZAUOHDQ.js";
6
+ } from "../chunks/chunk-QYUD3S6F.js";
11
7
  import "../chunks/chunk-5WLOVHKK.js";
8
+ import "../chunks/chunk-AR5O4BEY.js";
9
+ import {
10
+ useLoopedProgress
11
+ } from "../chunks/chunk-MLQIOKQZ.js";
12
12
  import {
13
13
  useUiTheme
14
- } from "../chunks/chunk-YTHR4Y5P.js";
14
+ } from "../chunks/chunk-GWGIWQO7.js";
15
15
  import {
16
16
  alpha
17
- } from "../chunks/chunk-P3PL4WBO.js";
17
+ } from "../chunks/chunk-LEMMXZFN.js";
18
18
 
19
19
  // src/components/data-display/Avatar/Avatar.native.tsx
20
20
  import * as React2 from "react";
@@ -1,6 +1,3 @@
1
- import {
2
- useLoopedProgress
3
- } from "../chunks/chunk-MLQIOKQZ.js";
4
1
  import {
5
2
  webAria
6
3
  } from "../chunks/chunk-T6BJPP3E.js";
@@ -9,18 +6,21 @@ import {
9
6
  } from "../chunks/chunk-5GJ5OG5R.js";
10
7
  import {
11
8
  Icon
12
- } from "../chunks/chunk-D4EYAXNG.js";
9
+ } from "../chunks/chunk-QYUD3S6F.js";
10
+ import "../chunks/chunk-5WLOVHKK.js";
13
11
  import {
14
12
  resolveTestId
15
- } from "../chunks/chunk-QZAUOHDQ.js";
16
- import "../chunks/chunk-5WLOVHKK.js";
13
+ } from "../chunks/chunk-AR5O4BEY.js";
14
+ import {
15
+ useLoopedProgress
16
+ } from "../chunks/chunk-MLQIOKQZ.js";
17
17
  import {
18
18
  useUiTheme
19
- } from "../chunks/chunk-YTHR4Y5P.js";
19
+ } from "../chunks/chunk-GWGIWQO7.js";
20
20
  import {
21
21
  alpha,
22
22
  contrastText
23
- } from "../chunks/chunk-P3PL4WBO.js";
23
+ } from "../chunks/chunk-LEMMXZFN.js";
24
24
 
25
25
  // src/components/data-display/Badge/Badge.native.tsx
26
26
  import * as React from "react";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  Icon
3
- } from "../chunks/chunk-D4EYAXNG.js";
4
- import "../chunks/chunk-QZAUOHDQ.js";
3
+ } from "../chunks/chunk-QYUD3S6F.js";
5
4
  import "../chunks/chunk-5WLOVHKK.js";
5
+ import "../chunks/chunk-AR5O4BEY.js";
6
6
  import {
7
7
  useUiTheme
8
- } from "../chunks/chunk-YTHR4Y5P.js";
8
+ } from "../chunks/chunk-GWGIWQO7.js";
9
9
  import {
10
10
  alpha
11
- } from "../chunks/chunk-P3PL4WBO.js";
11
+ } from "../chunks/chunk-LEMMXZFN.js";
12
12
 
13
13
  // src/components/data-display/Chip/Chip.native.tsx
14
14
  import * as React from "react";