@12-apps/ui 6.39.19 → 6.40.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 (773) hide show
  1. package/components-guidelines.md +110 -0
  2. package/dist/_internal/components/data-display/Alert/Alert.js +3 -2
  3. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -2
  4. package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -2
  5. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
  7. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  8. package/dist/_internal/components/data-display/Badge/Badge.js +9 -7
  9. package/dist/_internal/components/data-display/Badge/Badge.styles.js +7 -5
  10. package/dist/_internal/components/data-display/Badge/BadgeContent.js +8 -6
  11. package/dist/_internal/components/data-display/Banner/Banner.js +3 -2
  12. package/dist/_internal/components/data-display/Banner/Banner.styles.js +3 -2
  13. package/dist/_internal/components/data-display/CardKit/CardKebab.js +8 -7
  14. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -2
  15. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +12 -11
  16. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +12 -11
  17. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +8 -6
  18. package/dist/_internal/components/data-display/Carousel/Carousel.js +12 -10
  19. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +7 -5
  20. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +7 -5
  21. package/dist/_internal/components/data-display/Chart/Chart.js +11 -9
  22. package/dist/_internal/components/data-display/Chart/SpecChart.js +14 -12
  23. package/dist/_internal/components/data-display/Chart/chart-context.js +8 -6
  24. package/dist/_internal/components/data-display/Chart/chart-internals.js +7 -5
  25. package/dist/_internal/components/data-display/Chart/chart-renderers.js +10 -8
  26. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  27. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +6 -5
  29. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +67 -66
  30. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +90 -89
  31. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +13 -12
  32. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +17 -16
  33. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +22 -21
  34. package/dist/_internal/components/data-display/DataViews/base-card.js +9 -8
  35. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +11 -10
  36. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +10 -9
  37. package/dist/_internal/components/data-display/DataViews/base-list-card.js +17 -16
  38. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +3 -3
  39. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +19 -19
  40. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +6 -5
  41. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +9 -8
  42. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +3 -3
  43. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +15 -14
  44. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +8 -7
  45. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +10 -9
  46. package/dist/_internal/components/data-display/DataViews/data-views-export.js +10 -9
  47. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +25 -25
  48. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +19 -18
  49. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +8 -7
  50. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +63 -62
  51. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +6 -5
  52. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +36 -35
  53. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  54. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +19 -18
  55. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +23 -22
  56. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +3 -3
  57. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +5 -5
  58. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +7 -7
  59. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  60. package/dist/_internal/components/data-display/DataViews/data-views-search.js +3 -3
  61. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +10 -9
  62. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +26 -25
  63. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +35 -34
  64. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +25 -24
  65. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +10 -9
  66. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  67. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +6 -5
  68. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +12 -11
  69. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +3 -3
  70. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +6 -5
  71. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  72. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +14 -14
  73. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +13 -13
  74. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +22 -20
  75. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  76. package/dist/_internal/components/data-display/LazyImage/LazyImage.hooks.js +1 -1
  77. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +2 -2
  78. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
  79. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  80. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
  81. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  82. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +12 -12
  83. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +3 -3
  84. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  85. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  86. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  87. package/dist/_internal/components/data-display/Progress/Progress.js +6 -5
  88. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +4 -3
  89. package/dist/_internal/components/data-display/Progress/Progress.styles.js +5 -4
  90. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  91. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +6 -4
  92. package/dist/_internal/components/data-display/Sheet/Sheet.js +8 -6
  93. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +7 -5
  94. package/dist/_internal/components/data-display/Table/Table.js +5 -5
  95. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
  96. package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
  97. package/dist/_internal/components/data-display/index.js +78 -76
  98. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
  99. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +10 -9
  100. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
  101. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
  102. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  103. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +8 -7
  104. package/dist/_internal/components/feedback/index.js +19 -18
  105. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +9 -9
  106. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +6 -6
  107. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +4 -4
  108. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +4 -4
  109. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +3 -3
  110. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +4 -4
  111. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +3 -3
  112. package/dist/_internal/components/form/Button/Button.js +7 -6
  113. package/dist/_internal/components/form/Button/Button.styles.js +5 -4
  114. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  115. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  116. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  117. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +9 -9
  118. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -4
  119. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -4
  120. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +6 -6
  121. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +5 -5
  122. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +11 -11
  123. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -3
  124. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -4
  125. package/dist/_internal/components/form/CepField/CepField.js +6 -6
  126. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
  127. package/dist/_internal/components/form/Command/Command.js +8 -6
  128. package/dist/_internal/components/form/Command/Command.styles.js +7 -5
  129. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -3
  130. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +5 -5
  131. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +12 -12
  132. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +4 -4
  133. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +5 -5
  134. package/dist/_internal/components/form/Input/Input.js +5 -5
  135. package/dist/_internal/components/form/Input/Input.metrics.js +2 -2
  136. package/dist/_internal/components/form/Input/Input.styles.js +4 -4
  137. package/dist/_internal/components/form/InputOTP/InputOTP.js +4 -4
  138. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -3
  139. package/dist/_internal/components/form/Label/Label.js +8 -6
  140. package/dist/_internal/components/form/Label/Label.styles.js +7 -5
  141. package/dist/_internal/components/form/Menubar/Menubar.item.js +8 -6
  142. package/dist/_internal/components/form/Menubar/Menubar.js +10 -8
  143. package/dist/_internal/components/form/Menubar/Menubar.styles.js +7 -5
  144. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +9 -7
  145. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  146. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -5
  147. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -3
  148. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -4
  149. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  150. package/dist/_internal/components/form/Select/Select.js +4 -4
  151. package/dist/_internal/components/form/Select/Select.metrics.js +2 -2
  152. package/dist/_internal/components/form/Switch/Switch.js +8 -7
  153. package/dist/_internal/components/form/Switch/Switch.parts.js +6 -5
  154. package/dist/_internal/components/form/Switch/Switch.styles.js +5 -4
  155. package/dist/_internal/components/form/Textarea/Textarea.js +3 -3
  156. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +2 -2
  157. package/dist/_internal/components/form/Toggle/Toggle.js +4 -4
  158. package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -3
  159. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -3
  160. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  161. package/dist/_internal/components/form/index.js +62 -60
  162. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +12 -12
  163. package/dist/_internal/components/form/total-form/Fields/CepField.js +7 -7
  164. package/dist/_internal/components/form/total-form/Fields/SelectField.js +5 -5
  165. package/dist/_internal/components/form/total-form/Fields/TextField.js +6 -6
  166. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -4
  167. package/dist/_internal/components/form/total-form/Fields/index.js +23 -23
  168. package/dist/_internal/components/form/total-form/SubmitButton.js +8 -7
  169. package/dist/_internal/components/index.js +180 -178
  170. package/dist/_internal/components/layout/Box/Box.js +9 -7
  171. package/dist/_internal/components/layout/Card/Card.js +2 -2
  172. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +3 -3
  173. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
  174. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +4 -4
  175. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +3 -3
  176. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +3 -3
  177. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +3 -3
  178. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +3 -3
  179. package/dist/_internal/components/layout/Separator/Separator.js +3 -3
  180. package/dist/_internal/components/layout/Separator/Separator.styles.js +2 -2
  181. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +6 -6
  182. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +4 -4
  183. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  184. package/dist/_internal/components/layout/Stack/Stack.js +10 -8
  185. package/dist/_internal/components/layout/TableFilter/TableFilter.js +3 -3
  186. package/dist/_internal/components/layout/index.js +16 -16
  187. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +15 -13
  188. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +7 -5
  189. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  190. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +2 -2
  191. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +4 -4
  192. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
  193. package/dist/_internal/components/navigation/Pagination/Pagination.js +4 -4
  194. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +3 -3
  195. package/dist/_internal/components/navigation/Tabs/Tabs.js +4 -4
  196. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +3 -3
  197. package/dist/_internal/components/navigation/index.js +31 -29
  198. package/dist/_internal/components/typography/Heading/Heading.js +6 -5
  199. package/dist/_internal/components/typography/Heading/Heading.metrics.js +4 -3
  200. package/dist/_internal/components/typography/Heading/Heading.styles.js +5 -4
  201. package/dist/_internal/components/typography/Text/Text.js +5 -4
  202. package/dist/_internal/components/typography/Text/Text.metrics.js +4 -3
  203. package/dist/_internal/components/typography/index.js +8 -7
  204. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +1 -1
  205. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +6 -4
  206. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +6 -4
  207. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +6 -4
  208. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +6 -4
  209. package/dist/_internal/components/utility/index.js +7 -5
  210. package/dist/_internal/icons/Icon.js +9 -7
  211. package/dist/_internal/provider/UiProvider.js +8 -6
  212. package/dist/_internal/provider/mui-bridge.js +7 -5
  213. package/dist/_internal/provider/use-ui-theme.js +8 -6
  214. package/dist/_internal/social-login-button/social-login-button.js +17 -16
  215. package/dist/_internal/tokens/density.core.js +18 -0
  216. package/dist/_internal/tokens/density.core.js.map +1 -0
  217. package/dist/_internal/tokens/density.js +31 -0
  218. package/dist/_internal/tokens/density.js.map +1 -0
  219. package/dist/_internal/tokens/field-height.core.js +1 -1
  220. package/dist/_internal/tokens/field-height.js +6 -4
  221. package/dist/_internal/tokens/theme.js +3 -2
  222. package/dist/_internal/user-avatar/user-avatar.js +15 -14
  223. package/dist/charts.js +23 -21
  224. package/dist/{chunk-N23GCN5U.js → chunk-23XBBGWD.js} +2 -2
  225. package/dist/{chunk-HVXIOIM5.js → chunk-2MLS6KU4.js} +2 -2
  226. package/dist/{chunk-BSUG4KMP.js → chunk-2Q5QHSU2.js} +8 -8
  227. package/dist/{chunk-GMUYCN33.js → chunk-2TSGRQ2J.js} +34 -14
  228. package/dist/chunk-2TSGRQ2J.js.map +1 -0
  229. package/dist/{chunk-MCJRHF7Z.js → chunk-2XTBGZSR.js} +10 -10
  230. package/dist/{chunk-IASDP44E.js → chunk-3AOOI2NR.js} +6 -6
  231. package/dist/{chunk-7DK6YVJU.js → chunk-3B4YMZD5.js} +2 -2
  232. package/dist/{chunk-TCV3N44E.js → chunk-3CLBGHTL.js} +2 -2
  233. package/dist/{chunk-YTY7TD7S.js → chunk-3HKUOLPD.js} +5 -5
  234. package/dist/{chunk-DFCQQN6P.js → chunk-3PGFMBEI.js} +2 -2
  235. package/dist/{chunk-NLYNRE7L.js → chunk-3RUCLKAK.js} +4 -4
  236. package/dist/{chunk-HWSS6C7C.js → chunk-3UXBIUJF.js} +8 -8
  237. package/dist/{chunk-DJYL2LC6.js → chunk-44Z72DDM.js} +2 -2
  238. package/dist/{chunk-4WCDMCIS.js → chunk-4CHYMTBT.js} +4 -4
  239. package/dist/{chunk-FNRPQE2D.js → chunk-4D2IVVHR.js} +2 -2
  240. package/dist/{chunk-M2Q5CLPU.js → chunk-4JEXYOSN.js} +4 -4
  241. package/dist/{chunk-HN3PZTUK.js → chunk-4MKVGSHX.js} +5 -5
  242. package/dist/{chunk-3LSIFHQK.js → chunk-4RXPIHJG.js} +2 -2
  243. package/dist/{chunk-OQRG34VG.js → chunk-4SHMSLFA.js} +2 -2
  244. package/dist/{chunk-SLDSWQVE.js → chunk-4SSWJRC4.js} +6 -6
  245. package/dist/{chunk-FNG33MKA.js → chunk-4UASV6VL.js} +2 -2
  246. package/dist/{chunk-YTINPQKU.js → chunk-4XHVGUOM.js} +2 -2
  247. package/dist/{chunk-WZNTZX5N.js → chunk-53TDQYA3.js} +4 -4
  248. package/dist/{chunk-67O4GPJJ.js → chunk-5A4XPYNK.js} +2 -2
  249. package/dist/{chunk-OHZU4IT3.js → chunk-5B7BTLN4.js} +2 -2
  250. package/dist/{chunk-K5V6TCYB.js → chunk-5ETBB2DG.js} +4 -4
  251. package/dist/{chunk-UMNXSQ7I.js → chunk-5K4G2XYS.js} +2 -2
  252. package/dist/{chunk-5752357K.js → chunk-5KGABAQB.js} +4 -4
  253. package/dist/{chunk-JKIKHWD2.js → chunk-5NT2M2JI.js} +4 -4
  254. package/dist/{chunk-BKASAYQL.js → chunk-5XWCKCHP.js} +8 -8
  255. package/dist/{chunk-JYR6VV4Y.js → chunk-6BS2RBW4.js} +5 -5
  256. package/dist/{chunk-HQZRI7UX.js → chunk-6N2EDWMG.js} +4 -4
  257. package/dist/{chunk-NOKN4HRK.js → chunk-6PPHALM3.js} +2 -2
  258. package/dist/{chunk-H224XFFD.js → chunk-6REPQ352.js} +2 -2
  259. package/dist/{chunk-THMT3G3L.js → chunk-743SY4WQ.js} +4 -4
  260. package/dist/{chunk-KJDBY2KN.js → chunk-7LILFS72.js} +2 -2
  261. package/dist/{chunk-AG3DY5TH.js → chunk-ADSA76T7.js} +2 -2
  262. package/dist/{chunk-JH5BKA3Y.js → chunk-AHDNANID.js} +26 -8
  263. package/dist/chunk-AHDNANID.js.map +1 -0
  264. package/dist/{chunk-KN4ZE2XZ.js → chunk-AJVFSUC4.js} +19 -19
  265. package/dist/{chunk-VY2BMSHN.js → chunk-ANYOSBNA.js} +2 -2
  266. package/dist/{chunk-4WF6ZLIW.js → chunk-APPIPQFT.js} +8 -8
  267. package/dist/{chunk-YUXDVW62.js → chunk-AQCQ2USS.js} +2 -2
  268. package/dist/{chunk-37USSARD.js → chunk-AU3GV6UL.js} +4 -4
  269. package/dist/{chunk-KN5J3NEZ.js → chunk-AW336SO7.js} +2 -2
  270. package/dist/{chunk-ME3WYPYK.js → chunk-BDBI4W77.js} +5 -5
  271. package/dist/{chunk-4NPPO63U.js → chunk-BKHO4RSF.js} +5 -5
  272. package/dist/{chunk-PCLKFR27.js → chunk-BKT2KJ56.js} +8 -8
  273. package/dist/{chunk-HM2JJNUE.js → chunk-BLUURKCY.js} +5 -5
  274. package/dist/{chunk-UKX3MPB7.js → chunk-BXEMC4YH.js} +2 -2
  275. package/dist/{chunk-H6AWKLOV.js → chunk-C6FVXX7Y.js} +2 -2
  276. package/dist/{chunk-CYZZHWNK.js → chunk-CJ45OL7L.js} +2 -2
  277. package/dist/{chunk-2S752BIJ.js → chunk-CKI33CN2.js} +2 -2
  278. package/dist/{chunk-KKN4LLVE.js → chunk-CKPFLEOL.js} +3 -3
  279. package/dist/{chunk-GC56IWIZ.js → chunk-CLSC36JS.js} +9 -9
  280. package/dist/{chunk-RDCHT2WN.js → chunk-CLTK76ZF.js} +2 -2
  281. package/dist/{chunk-EA2UNEL6.js → chunk-CNR5RFKC.js} +2 -2
  282. package/dist/{chunk-O25SH2MA.js → chunk-COUFRGD6.js} +7 -7
  283. package/dist/{chunk-MBHWVRV5.js → chunk-D455V3BW.js} +5 -5
  284. package/dist/{chunk-7X7ZHJHM.js → chunk-DDVNYVJH.js} +2 -2
  285. package/dist/{chunk-P52LYD6S.js → chunk-DFI2RKVQ.js} +2 -2
  286. package/dist/{chunk-IRD45DRW.js → chunk-DOLDAAXH.js} +3 -3
  287. package/dist/{chunk-TEEJ4GNY.js → chunk-DUITNU72.js} +2 -2
  288. package/dist/{chunk-J5UZB6Y6.js → chunk-E2FMNY6B.js} +2 -2
  289. package/dist/{chunk-5HDYTTE7.js → chunk-EDBVMLNX.js} +2 -2
  290. package/dist/{chunk-5CQNBMLK.js → chunk-EKM7C4X2.js} +4 -4
  291. package/dist/{chunk-L566FMDD.js → chunk-EO5IEWFI.js} +6 -6
  292. package/dist/{chunk-VY6L74JQ.js → chunk-EQXIW5MQ.js} +4 -4
  293. package/dist/{chunk-CGO452DC.js → chunk-EXFX3JRN.js} +10 -7
  294. package/dist/{chunk-CGO452DC.js.map → chunk-EXFX3JRN.js.map} +1 -1
  295. package/dist/{chunk-6PU3JYVY.js → chunk-F3AYISXT.js} +4 -4
  296. package/dist/{chunk-IBGP3VSR.js → chunk-FHW3ATT7.js} +2 -2
  297. package/dist/{chunk-3UABIEP3.js → chunk-FI6BL4UU.js} +2 -2
  298. package/dist/{chunk-WL6N33AB.js → chunk-FIO55AKI.js} +4 -4
  299. package/dist/{chunk-Z43N7ASP.js → chunk-FRTEU7ZO.js} +2 -2
  300. package/dist/{chunk-WB6ZU3B3.js → chunk-FYZJEME4.js} +6 -6
  301. package/dist/{chunk-IGGXKT5B.js → chunk-G2WERTWZ.js} +2 -2
  302. package/dist/{chunk-T6EKPFKZ.js → chunk-G3SKAI6S.js} +2 -2
  303. package/dist/{chunk-WY5PBZ7Q.js → chunk-G6ZPQHBL.js} +2 -2
  304. package/dist/{chunk-IQJCLFF4.js → chunk-GANW7FXQ.js} +2 -2
  305. package/dist/{chunk-PA3AA55Q.js → chunk-GBEHJBYM.js} +2 -2
  306. package/dist/{chunk-ZXSWXE6U.js → chunk-GE26GVHM.js} +5 -5
  307. package/dist/{chunk-7D2C4LK2.js → chunk-GJ7GIGDS.js} +4 -4
  308. package/dist/{chunk-7ICK5MXV.js → chunk-GJFAI3J5.js} +10 -10
  309. package/dist/{chunk-5FAI25JQ.js → chunk-GPT673YL.js} +3 -3
  310. package/dist/{chunk-QXSW3CNN.js → chunk-GVFPOKJW.js} +2 -2
  311. package/dist/{chunk-VPPIODKX.js → chunk-H772ZSAI.js} +2 -2
  312. package/dist/{chunk-DRSY37PB.js → chunk-HDELNMZC.js} +2 -2
  313. package/dist/{chunk-M4QXG5JP.js → chunk-HQWJUHR4.js} +4 -4
  314. package/dist/{chunk-K7FSTB2K.js → chunk-HSNOWYEE.js} +2 -2
  315. package/dist/{chunk-OJ2XR3WH.js → chunk-HZBRXLV7.js} +2 -2
  316. package/dist/{chunk-BUPDBEBA.js → chunk-I72PREY7.js} +2 -2
  317. package/dist/{chunk-TXEN3QJ4.js → chunk-IEWAFD6L.js} +2 -2
  318. package/dist/{chunk-ZBVU2YWV.js → chunk-IITZA6U2.js} +9 -9
  319. package/dist/{chunk-4BNV5AAI.js → chunk-ITFFA3H2.js} +3 -3
  320. package/dist/{chunk-RB3X6CEE.js → chunk-IWGW2E35.js} +2 -2
  321. package/dist/{chunk-RTEY5COP.js → chunk-JB56E4XQ.js} +4 -4
  322. package/dist/{chunk-7EH4D6FU.js → chunk-JDUIWHJ3.js} +2 -2
  323. package/dist/{chunk-FLDLUAHW.js → chunk-JE6GQB5J.js} +4 -4
  324. package/dist/{chunk-35443PF6.js → chunk-JIRZ27RI.js} +2 -2
  325. package/dist/{chunk-5MW7OYBM.js → chunk-JSGVYOMN.js} +2 -2
  326. package/dist/{chunk-RNIU447I.js → chunk-JU3FRRO2.js} +2 -2
  327. package/dist/{chunk-LXT3X33C.js → chunk-JZ5IGO5G.js} +2 -2
  328. package/dist/{chunk-GEB4WSZH.js → chunk-K2U4BNHQ.js} +3 -3
  329. package/dist/{chunk-WOAXKWAB.js → chunk-K4A3JDYQ.js} +2 -2
  330. package/dist/{chunk-2OWKL4CC.js → chunk-KCDNOMMT.js} +9 -9
  331. package/dist/{chunk-4WNFOBTH.js → chunk-KOX2AEFW.js} +2 -2
  332. package/dist/{chunk-ZGCPDA3F.js → chunk-KQS4ZJGS.js} +5 -5
  333. package/dist/{chunk-2K7WPHI3.js → chunk-KW3H5FUS.js} +2 -2
  334. package/dist/{chunk-I4MRBEWU.js → chunk-KZT5JC3E.js} +12 -12
  335. package/dist/{chunk-VRPREI27.js → chunk-L75CZ3SI.js} +2 -2
  336. package/dist/{chunk-YZ2DMP23.js → chunk-LJSKF43D.js} +2 -2
  337. package/dist/{chunk-62UAI62O.js → chunk-LPWIAVGP.js} +2 -2
  338. package/dist/{chunk-3CTQZDSD.js → chunk-MKJHDHLF.js} +4 -4
  339. package/dist/{chunk-URHX4FAQ.js → chunk-MKLIMY3D.js} +2 -2
  340. package/dist/{chunk-2FM5SUQV.js → chunk-MM5XSAVE.js} +2 -2
  341. package/dist/{chunk-ORRI6FMN.js → chunk-MT7QJRP7.js} +3 -3
  342. package/dist/{chunk-CRG24BGI.js → chunk-N4D5V3AA.js} +2 -2
  343. package/dist/{chunk-FNO5TWBJ.js → chunk-NCEQWEXT.js} +4 -4
  344. package/dist/{chunk-FWPFCK4D.js → chunk-NDHDBOUH.js} +4 -4
  345. package/dist/{chunk-JC22FNFA.js → chunk-NFJ3VVD3.js} +2 -2
  346. package/dist/{chunk-2622YFM6.js → chunk-NSVSC6ZC.js} +6 -6
  347. package/dist/{chunk-66O55OZI.js → chunk-NYFGFELX.js} +2 -2
  348. package/dist/{chunk-PZBK3F52.js → chunk-O6MJWHU5.js} +3 -3
  349. package/dist/chunk-O6MJWHU5.js.map +1 -0
  350. package/dist/{chunk-2LIRGFEK.js → chunk-O7OQZJ3D.js} +2 -2
  351. package/dist/{chunk-TGXCG62P.js → chunk-OPT7X3Y6.js} +2 -2
  352. package/dist/{chunk-WN5PNP6F.js → chunk-OTWMG7B2.js} +4 -4
  353. package/dist/{chunk-EYZ6QBTV.js → chunk-OXLOC6TC.js} +3 -3
  354. package/dist/{chunk-4T6UIYJB.js → chunk-OZGJ3YCN.js} +2 -2
  355. package/dist/{chunk-JXECOCNA.js → chunk-P6Q2O3TU.js} +2 -2
  356. package/dist/{chunk-YMTZN54Q.js → chunk-P7JF6XT7.js} +2 -2
  357. package/dist/{chunk-ZN6YATOG.js → chunk-PAT2BQOQ.js} +2 -2
  358. package/dist/{chunk-TZBOWSAM.js → chunk-PICOOZLX.js} +6 -6
  359. package/dist/{chunk-JJJM75XF.js → chunk-PNDYAIKM.js} +2 -2
  360. package/dist/{chunk-EJYJLVPK.js → chunk-PRLYYKMG.js} +3 -3
  361. package/dist/{chunk-M4KVKQRN.js → chunk-Q33JWFSA.js} +3 -3
  362. package/dist/{chunk-VJ2BNJ5M.js → chunk-QMELMQPA.js} +4 -4
  363. package/dist/{chunk-HDJQDMHB.js → chunk-QMHS6ZDI.js} +2 -2
  364. package/dist/{chunk-O2DLEAUP.js → chunk-QQ46JX5H.js} +4 -4
  365. package/dist/{chunk-2WVHZIWP.js → chunk-QSRZOXQI.js} +2 -2
  366. package/dist/{chunk-BRM3T4LQ.js → chunk-QUFKPCWD.js} +6 -6
  367. package/dist/{chunk-DF4QODJ6.js → chunk-QUIHOPOC.js} +6 -6
  368. package/dist/{chunk-BVF2BSWV.js → chunk-QWFAEUFV.js} +28 -10
  369. package/dist/chunk-QWFAEUFV.js.map +1 -0
  370. package/dist/{chunk-4GB46HLK.js → chunk-QX3CXOJ3.js} +2 -2
  371. package/dist/{chunk-C3LZ3OGJ.js → chunk-R2FUQV24.js} +2 -2
  372. package/dist/{chunk-GOWBYHYW.js → chunk-R6SBP5M5.js} +4 -4
  373. package/dist/{chunk-36JKV7CA.js → chunk-RNC574FS.js} +3 -3
  374. package/dist/{chunk-4RPFI474.js → chunk-RSDYS5B3.js} +6 -6
  375. package/dist/{chunk-X4F32GUB.js → chunk-RSWHKOUN.js} +2 -2
  376. package/dist/{chunk-6RLCBNDV.js → chunk-RUZVK4FV.js} +7 -7
  377. package/dist/{chunk-X53F33KA.js → chunk-RWXYND4H.js} +2 -2
  378. package/dist/{chunk-PWZHCBG3.js → chunk-SBV62CSC.js} +2 -2
  379. package/dist/{chunk-W5TI46QN.js → chunk-SCVBGQFO.js} +3 -3
  380. package/dist/{chunk-MXCIUKTQ.js → chunk-SDBBJ6FG.js} +4 -4
  381. package/dist/{chunk-WRCLYSTX.js → chunk-SE4WZIKD.js} +2 -2
  382. package/dist/{chunk-GY4NBSCN.js → chunk-SE6TW72O.js} +2 -2
  383. package/dist/{chunk-LP3JCXER.js → chunk-SNW5MJ6I.js} +2 -2
  384. package/dist/{chunk-5OBGW3FG.js → chunk-STTULW2K.js} +2 -2
  385. package/dist/{chunk-NR5TW4AH.js → chunk-SXVCXLKU.js} +3 -3
  386. package/dist/{chunk-MQ277OLB.js → chunk-T2HZ3GVA.js} +8 -8
  387. package/dist/{chunk-57FZM6GH.js → chunk-T7UUP7VD.js} +2 -2
  388. package/dist/{chunk-FBUCXTA4.js → chunk-TJ7NQG7E.js} +4 -4
  389. package/dist/{chunk-I5ZVCY2N.js → chunk-TJPQIFI4.js} +6 -6
  390. package/dist/{chunk-Y6C4MYZE.js → chunk-TNQDSTIA.js} +7 -7
  391. package/dist/chunk-TRTX4BDI.js +35 -0
  392. package/dist/chunk-TRTX4BDI.js.map +1 -0
  393. package/dist/{chunk-MLQYIJTO.js → chunk-U6W2RY3Z.js} +5 -5
  394. package/dist/{chunk-LNHYBA4B.js → chunk-UFUMYNKS.js} +2 -2
  395. package/dist/{chunk-FY6PONLA.js → chunk-UI5O6J6R.js} +4 -4
  396. package/dist/{chunk-J3XFUCCR.js → chunk-UP6RO2PR.js} +12 -12
  397. package/dist/{chunk-Y6G4I42P.js → chunk-V3RQFWL6.js} +2 -2
  398. package/dist/{chunk-ZWCYSAI5.js → chunk-V7A5ZAAF.js} +5 -5
  399. package/dist/chunk-VBP46YP4.js +42 -0
  400. package/dist/chunk-VBP46YP4.js.map +1 -0
  401. package/dist/{chunk-S6JHTEV4.js → chunk-VE3P77TV.js} +3 -3
  402. package/dist/{chunk-KHPL2J3B.js → chunk-VPAOVEI2.js} +3 -3
  403. package/dist/{chunk-FERUQ7OB.js → chunk-VYA4QWQL.js} +2 -2
  404. package/dist/{chunk-ZUME25DS.js → chunk-WGUY7EIB.js} +5 -5
  405. package/dist/{chunk-N7LPVR7P.js → chunk-WL2S2YB3.js} +4 -4
  406. package/dist/{chunk-G3XLFQ2Z.js → chunk-WRHBXOGN.js} +3 -3
  407. package/dist/{chunk-DYGWKZ7T.js → chunk-WTXPGASQ.js} +3 -3
  408. package/dist/{chunk-OAW6GCS3.js → chunk-WUFTDJ2L.js} +3 -3
  409. package/dist/{chunk-2JNHWKQK.js → chunk-WUQKXAYF.js} +12 -12
  410. package/dist/{chunk-B7CNP5HW.js → chunk-WV62BSWA.js} +2 -2
  411. package/dist/{chunk-JK5UJM4Y.js → chunk-WY35GCHY.js} +9 -9
  412. package/dist/{chunk-IWEUSZY3.js → chunk-X66E5WSX.js} +3 -3
  413. package/dist/{chunk-F4KYBBTY.js → chunk-XLXMJ6X2.js} +3 -3
  414. package/dist/{chunk-JRJCBDGN.js → chunk-XOZYUJQ5.js} +4 -4
  415. package/dist/{chunk-PARTZ7XI.js → chunk-XP522FFM.js} +2 -2
  416. package/dist/{chunk-A2TANYNR.js → chunk-XXPEFK4V.js} +7 -7
  417. package/dist/{chunk-YKEO6UHN.js → chunk-XZJM6EPC.js} +4 -4
  418. package/dist/{chunk-BLW6KLDR.js → chunk-YFODI4KT.js} +11 -4
  419. package/dist/chunk-YFODI4KT.js.map +1 -0
  420. package/dist/{chunk-QOLIBVGS.js → chunk-YGYQC7MT.js} +4 -4
  421. package/dist/{chunk-U4QUDFPJ.js → chunk-Z4O3F6KU.js} +4 -4
  422. package/dist/{chunk-DSF4VT7L.js → chunk-ZE56GK5C.js} +3 -3
  423. package/dist/{chunk-LEHMWJNZ.js → chunk-ZEYUSS3W.js} +5 -5
  424. package/dist/{chunk-TU5A2CV7.js → chunk-ZFUOLLZS.js} +4 -4
  425. package/dist/{chunk-S36NC22G.js → chunk-ZK7YERPQ.js} +2 -2
  426. package/dist/{chunk-SCZABICW.js → chunk-ZO4NO77T.js} +2 -2
  427. package/dist/{chunk-TCAQOUIB.js → chunk-ZSTSISM6.js} +1 -1
  428. package/dist/chunk-ZSTSISM6.js.map +1 -0
  429. package/dist/data-display/Alert.js +3 -2
  430. package/dist/data-display/AsyncStateContainer.js +3 -3
  431. package/dist/data-display/Avatar.js +3 -3
  432. package/dist/data-display/Badge.js +9 -7
  433. package/dist/data-display/Banner.js +3 -2
  434. package/dist/data-display/CardKit.js +16 -15
  435. package/dist/data-display/Carousel.js +12 -10
  436. package/dist/data-display/Chart.js +23 -21
  437. package/dist/data-display/DataGrid.js +3 -3
  438. package/dist/data-display/DataViews.js +112 -111
  439. package/dist/data-display/DescriptionItem.js +6 -5
  440. package/dist/data-display/EmptyState.js +2 -2
  441. package/dist/data-display/FleetMap.js +22 -20
  442. package/dist/data-display/InteractiveTooltip.js +2 -2
  443. package/dist/data-display/LazyImage.js +2 -2
  444. package/dist/data-display/Lightbox.js +6 -6
  445. package/dist/data-display/MapPreview.js +12 -12
  446. package/dist/data-display/Progress.js +6 -5
  447. package/dist/data-display/SectionOnboarding.js +3 -3
  448. package/dist/data-display/Sheet.js +8 -6
  449. package/dist/data-display/Table.js +5 -5
  450. package/dist/feedback/ConfirmAction.js +13 -12
  451. package/dist/feedback/Dialog.js +3 -3
  452. package/dist/feedback/Modal.js +2 -2
  453. package/dist/feedback/NotificationStatusNotice.js +8 -7
  454. package/dist/form/AddressAutocomplete.js +9 -9
  455. package/dist/form/Autocomplete.js +4 -4
  456. package/dist/form/Button.js +7 -6
  457. package/dist/form/Calendar.js +4 -4
  458. package/dist/form/CategorySelect.js +11 -11
  459. package/dist/form/CepField.js +6 -6
  460. package/dist/form/CodeEditor.js +2 -2
  461. package/dist/form/Command.js +8 -6
  462. package/dist/form/CreatableSelect.js +3 -3
  463. package/dist/form/DateRangePicker.js +12 -12
  464. package/dist/form/Input.js +5 -5
  465. package/dist/form/InputOTP.js +4 -4
  466. package/dist/form/Label.js +8 -6
  467. package/dist/form/Menubar.js +10 -8
  468. package/dist/form/PhoneInput.js +3 -3
  469. package/dist/form/RadioGroup.js +5 -5
  470. package/dist/form/RichTextEditor.js +2 -2
  471. package/dist/form/Select.js +4 -4
  472. package/dist/form/Switch.js +8 -7
  473. package/dist/form/Textarea.js +3 -3
  474. package/dist/form/Toggle.js +4 -4
  475. package/dist/form/ToggleGroup.js +3 -3
  476. package/dist/form/UploadButton.js +2 -2
  477. package/dist/form/total-form.js +34 -33
  478. package/dist/icons.js +9 -7
  479. package/dist/layout/Box.js +9 -7
  480. package/dist/layout/Card.js +2 -2
  481. package/dist/layout/ContentToolbar.js +11 -11
  482. package/dist/layout/Separator.js +3 -3
  483. package/dist/layout/SettingsLayout.js +7 -7
  484. package/dist/layout/Stack.js +10 -8
  485. package/dist/layout/TableFilter.js +3 -3
  486. package/dist/native/chunks/{chunk-ONXKFA5Z.js → chunk-A2QNZ4VK.js} +4 -4
  487. package/dist/native/chunks/{chunk-X6RQGKGF.js → chunk-BST5DUUD.js} +2 -2
  488. package/dist/native/chunks/{chunk-GUBTMR2K.js → chunk-EDYZEMVD.js} +2 -2
  489. package/dist/native/chunks/{chunk-SZF56GVJ.js → chunk-LECBJD35.js} +3 -3
  490. package/dist/native/chunks/{chunk-JBYDLWQA.js → chunk-MTRRGDBQ.js} +5 -5
  491. package/dist/native/chunks/{chunk-IMGBBIMT.js → chunk-PN7C2BEY.js} +2 -2
  492. package/dist/native/chunks/{chunk-R5XVZRDD.js → chunk-RADD26LG.js} +46 -5
  493. package/dist/native/chunks/chunk-RADD26LG.js.map +1 -0
  494. package/dist/native/chunks/{chunk-4ZAULIDG.js → chunk-S4F364X4.js} +3 -3
  495. package/dist/native/chunks/{chunk-5IASLIBI.js → chunk-VJFKRXY2.js} +2 -2
  496. package/dist/native/data-display/Alert.js +3 -3
  497. package/dist/native/data-display/Avatar.js +3 -3
  498. package/dist/native/data-display/Badge.js +3 -3
  499. package/dist/native/data-display/Chip.js +3 -3
  500. package/dist/native/data-display/EmptyState.js +6 -6
  501. package/dist/native/data-display/ErrorState.js +5 -5
  502. package/dist/native/data-display/FleetMap.js +7 -7
  503. package/dist/native/data-display/LoadingState.js +2 -2
  504. package/dist/native/data-display/Progress.js +2 -2
  505. package/dist/native/feedback/Dialog.js +3 -3
  506. package/dist/native/form/Button.js +4 -4
  507. package/dist/native/form/Checkbox.js +3 -3
  508. package/dist/native/form/Input.js +4 -4
  509. package/dist/native/form/Select.js +5 -5
  510. package/dist/native/form/Switch.js +2 -2
  511. package/dist/native/icons.js +3 -3
  512. package/dist/native/layout/Box.js +3 -3
  513. package/dist/native/layout/Card.js +2 -2
  514. package/dist/native/layout/Container.js +2 -2
  515. package/dist/native/layout/Skeleton.js +3 -3
  516. package/dist/native/layout/Spacer.js +2 -2
  517. package/dist/native/layout/Stack.js +3 -3
  518. package/dist/native/provider.js +2 -2
  519. package/dist/native/tokens.js +15 -3
  520. package/dist/native/typography/Heading.js +2 -2
  521. package/dist/native/typography/Paragraph.js +2 -2
  522. package/dist/native/typography/Text.js +2 -2
  523. package/dist/navigation/AppHeader.js +21 -19
  524. package/dist/navigation/CommandPalette.js +3 -3
  525. package/dist/navigation/NavigationMenu.js +4 -4
  526. package/dist/navigation/Pagination.js +4 -4
  527. package/dist/navigation/Tabs.js +4 -4
  528. package/dist/provider.js +9 -7
  529. package/dist/social-login-button.js +17 -16
  530. package/dist/tokens.js +28 -6
  531. package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
  532. package/dist/types/components/data-display/LazyImage/LazyImage.hooks.d.ts +1 -1
  533. package/dist/types/components/data-display/LazyImage/LazyImage.hooks.d.ts.map +1 -1
  534. package/dist/types/provider/mui-bridge.d.ts.map +1 -1
  535. package/dist/types/tokens/density.core.d.ts +73 -0
  536. package/dist/types/tokens/density.core.d.ts.map +1 -0
  537. package/dist/types/tokens/density.d.ts +95 -0
  538. package/dist/types/tokens/density.d.ts.map +1 -0
  539. package/dist/types/tokens/field-height.core.d.ts +7 -2
  540. package/dist/types/tokens/field-height.core.d.ts.map +1 -1
  541. package/dist/types/tokens/field-height.d.ts +9 -0
  542. package/dist/types/tokens/field-height.d.ts.map +1 -1
  543. package/dist/types/tokens/scales.d.ts +2 -1
  544. package/dist/types/tokens/scales.d.ts.map +1 -1
  545. package/dist/types/tokens/theme.d.ts +30 -0
  546. package/dist/types/tokens/theme.d.ts.map +1 -1
  547. package/dist/types-native/tokens/density.core.d.ts +73 -0
  548. package/dist/types-native/tokens/density.core.d.ts.map +1 -0
  549. package/dist/types-native/tokens/field-height.core.d.ts +7 -2
  550. package/dist/types-native/tokens/field-height.core.d.ts.map +1 -1
  551. package/dist/types-native/tokens/index.native.d.ts +1 -0
  552. package/dist/types-native/tokens/index.native.d.ts.map +1 -1
  553. package/dist/types-native/tokens/theme.d.ts +30 -0
  554. package/dist/types-native/tokens/theme.d.ts.map +1 -1
  555. package/dist/typography/Heading.js +6 -5
  556. package/dist/typography/Text.js +5 -4
  557. package/dist/user-avatar.js +15 -14
  558. package/dist/utility/InstallPrompt.js +1 -1
  559. package/dist/utility/WorkflowStep.js +6 -4
  560. package/package.json +1 -1
  561. package/src/components/data-display/LazyImage/LazyImage.hooks.ts +64 -15
  562. package/src/components/data-display/LazyImage/LazyImage.md +3 -42
  563. package/src/components/data-display/LazyImage/LazyImage.tsx +44 -8
  564. package/src/provider/mui-bridge.ts +17 -3
  565. package/src/tokens/density.core.ts +118 -0
  566. package/src/tokens/density.ts +134 -0
  567. package/src/tokens/field-height.core.ts +8 -3
  568. package/src/tokens/field-height.ts +19 -8
  569. package/src/tokens/index.native.ts +11 -0
  570. package/src/tokens/scales.ts +15 -0
  571. package/src/tokens/theme.ts +43 -2
  572. package/dist/chunk-BLW6KLDR.js.map +0 -1
  573. package/dist/chunk-BVF2BSWV.js.map +0 -1
  574. package/dist/chunk-GMUYCN33.js.map +0 -1
  575. package/dist/chunk-JH5BKA3Y.js.map +0 -1
  576. package/dist/chunk-PZBK3F52.js.map +0 -1
  577. package/dist/chunk-TCAQOUIB.js.map +0 -1
  578. package/dist/native/chunks/chunk-R5XVZRDD.js.map +0 -1
  579. /package/dist/{chunk-N23GCN5U.js.map → chunk-23XBBGWD.js.map} +0 -0
  580. /package/dist/{chunk-HVXIOIM5.js.map → chunk-2MLS6KU4.js.map} +0 -0
  581. /package/dist/{chunk-BSUG4KMP.js.map → chunk-2Q5QHSU2.js.map} +0 -0
  582. /package/dist/{chunk-MCJRHF7Z.js.map → chunk-2XTBGZSR.js.map} +0 -0
  583. /package/dist/{chunk-IASDP44E.js.map → chunk-3AOOI2NR.js.map} +0 -0
  584. /package/dist/{chunk-7DK6YVJU.js.map → chunk-3B4YMZD5.js.map} +0 -0
  585. /package/dist/{chunk-TCV3N44E.js.map → chunk-3CLBGHTL.js.map} +0 -0
  586. /package/dist/{chunk-YTY7TD7S.js.map → chunk-3HKUOLPD.js.map} +0 -0
  587. /package/dist/{chunk-DFCQQN6P.js.map → chunk-3PGFMBEI.js.map} +0 -0
  588. /package/dist/{chunk-NLYNRE7L.js.map → chunk-3RUCLKAK.js.map} +0 -0
  589. /package/dist/{chunk-HWSS6C7C.js.map → chunk-3UXBIUJF.js.map} +0 -0
  590. /package/dist/{chunk-DJYL2LC6.js.map → chunk-44Z72DDM.js.map} +0 -0
  591. /package/dist/{chunk-4WCDMCIS.js.map → chunk-4CHYMTBT.js.map} +0 -0
  592. /package/dist/{chunk-FNRPQE2D.js.map → chunk-4D2IVVHR.js.map} +0 -0
  593. /package/dist/{chunk-M2Q5CLPU.js.map → chunk-4JEXYOSN.js.map} +0 -0
  594. /package/dist/{chunk-HN3PZTUK.js.map → chunk-4MKVGSHX.js.map} +0 -0
  595. /package/dist/{chunk-3LSIFHQK.js.map → chunk-4RXPIHJG.js.map} +0 -0
  596. /package/dist/{chunk-OQRG34VG.js.map → chunk-4SHMSLFA.js.map} +0 -0
  597. /package/dist/{chunk-SLDSWQVE.js.map → chunk-4SSWJRC4.js.map} +0 -0
  598. /package/dist/{chunk-FNG33MKA.js.map → chunk-4UASV6VL.js.map} +0 -0
  599. /package/dist/{chunk-YTINPQKU.js.map → chunk-4XHVGUOM.js.map} +0 -0
  600. /package/dist/{chunk-WZNTZX5N.js.map → chunk-53TDQYA3.js.map} +0 -0
  601. /package/dist/{chunk-67O4GPJJ.js.map → chunk-5A4XPYNK.js.map} +0 -0
  602. /package/dist/{chunk-OHZU4IT3.js.map → chunk-5B7BTLN4.js.map} +0 -0
  603. /package/dist/{chunk-K5V6TCYB.js.map → chunk-5ETBB2DG.js.map} +0 -0
  604. /package/dist/{chunk-UMNXSQ7I.js.map → chunk-5K4G2XYS.js.map} +0 -0
  605. /package/dist/{chunk-5752357K.js.map → chunk-5KGABAQB.js.map} +0 -0
  606. /package/dist/{chunk-JKIKHWD2.js.map → chunk-5NT2M2JI.js.map} +0 -0
  607. /package/dist/{chunk-BKASAYQL.js.map → chunk-5XWCKCHP.js.map} +0 -0
  608. /package/dist/{chunk-JYR6VV4Y.js.map → chunk-6BS2RBW4.js.map} +0 -0
  609. /package/dist/{chunk-HQZRI7UX.js.map → chunk-6N2EDWMG.js.map} +0 -0
  610. /package/dist/{chunk-NOKN4HRK.js.map → chunk-6PPHALM3.js.map} +0 -0
  611. /package/dist/{chunk-H224XFFD.js.map → chunk-6REPQ352.js.map} +0 -0
  612. /package/dist/{chunk-THMT3G3L.js.map → chunk-743SY4WQ.js.map} +0 -0
  613. /package/dist/{chunk-KJDBY2KN.js.map → chunk-7LILFS72.js.map} +0 -0
  614. /package/dist/{chunk-AG3DY5TH.js.map → chunk-ADSA76T7.js.map} +0 -0
  615. /package/dist/{chunk-KN4ZE2XZ.js.map → chunk-AJVFSUC4.js.map} +0 -0
  616. /package/dist/{chunk-VY2BMSHN.js.map → chunk-ANYOSBNA.js.map} +0 -0
  617. /package/dist/{chunk-4WF6ZLIW.js.map → chunk-APPIPQFT.js.map} +0 -0
  618. /package/dist/{chunk-YUXDVW62.js.map → chunk-AQCQ2USS.js.map} +0 -0
  619. /package/dist/{chunk-37USSARD.js.map → chunk-AU3GV6UL.js.map} +0 -0
  620. /package/dist/{chunk-KN5J3NEZ.js.map → chunk-AW336SO7.js.map} +0 -0
  621. /package/dist/{chunk-ME3WYPYK.js.map → chunk-BDBI4W77.js.map} +0 -0
  622. /package/dist/{chunk-4NPPO63U.js.map → chunk-BKHO4RSF.js.map} +0 -0
  623. /package/dist/{chunk-PCLKFR27.js.map → chunk-BKT2KJ56.js.map} +0 -0
  624. /package/dist/{chunk-HM2JJNUE.js.map → chunk-BLUURKCY.js.map} +0 -0
  625. /package/dist/{chunk-UKX3MPB7.js.map → chunk-BXEMC4YH.js.map} +0 -0
  626. /package/dist/{chunk-H6AWKLOV.js.map → chunk-C6FVXX7Y.js.map} +0 -0
  627. /package/dist/{chunk-CYZZHWNK.js.map → chunk-CJ45OL7L.js.map} +0 -0
  628. /package/dist/{chunk-2S752BIJ.js.map → chunk-CKI33CN2.js.map} +0 -0
  629. /package/dist/{chunk-KKN4LLVE.js.map → chunk-CKPFLEOL.js.map} +0 -0
  630. /package/dist/{chunk-GC56IWIZ.js.map → chunk-CLSC36JS.js.map} +0 -0
  631. /package/dist/{chunk-RDCHT2WN.js.map → chunk-CLTK76ZF.js.map} +0 -0
  632. /package/dist/{chunk-EA2UNEL6.js.map → chunk-CNR5RFKC.js.map} +0 -0
  633. /package/dist/{chunk-O25SH2MA.js.map → chunk-COUFRGD6.js.map} +0 -0
  634. /package/dist/{chunk-MBHWVRV5.js.map → chunk-D455V3BW.js.map} +0 -0
  635. /package/dist/{chunk-7X7ZHJHM.js.map → chunk-DDVNYVJH.js.map} +0 -0
  636. /package/dist/{chunk-P52LYD6S.js.map → chunk-DFI2RKVQ.js.map} +0 -0
  637. /package/dist/{chunk-IRD45DRW.js.map → chunk-DOLDAAXH.js.map} +0 -0
  638. /package/dist/{chunk-TEEJ4GNY.js.map → chunk-DUITNU72.js.map} +0 -0
  639. /package/dist/{chunk-J5UZB6Y6.js.map → chunk-E2FMNY6B.js.map} +0 -0
  640. /package/dist/{chunk-5HDYTTE7.js.map → chunk-EDBVMLNX.js.map} +0 -0
  641. /package/dist/{chunk-5CQNBMLK.js.map → chunk-EKM7C4X2.js.map} +0 -0
  642. /package/dist/{chunk-L566FMDD.js.map → chunk-EO5IEWFI.js.map} +0 -0
  643. /package/dist/{chunk-VY6L74JQ.js.map → chunk-EQXIW5MQ.js.map} +0 -0
  644. /package/dist/{chunk-6PU3JYVY.js.map → chunk-F3AYISXT.js.map} +0 -0
  645. /package/dist/{chunk-IBGP3VSR.js.map → chunk-FHW3ATT7.js.map} +0 -0
  646. /package/dist/{chunk-3UABIEP3.js.map → chunk-FI6BL4UU.js.map} +0 -0
  647. /package/dist/{chunk-WL6N33AB.js.map → chunk-FIO55AKI.js.map} +0 -0
  648. /package/dist/{chunk-Z43N7ASP.js.map → chunk-FRTEU7ZO.js.map} +0 -0
  649. /package/dist/{chunk-WB6ZU3B3.js.map → chunk-FYZJEME4.js.map} +0 -0
  650. /package/dist/{chunk-IGGXKT5B.js.map → chunk-G2WERTWZ.js.map} +0 -0
  651. /package/dist/{chunk-T6EKPFKZ.js.map → chunk-G3SKAI6S.js.map} +0 -0
  652. /package/dist/{chunk-WY5PBZ7Q.js.map → chunk-G6ZPQHBL.js.map} +0 -0
  653. /package/dist/{chunk-IQJCLFF4.js.map → chunk-GANW7FXQ.js.map} +0 -0
  654. /package/dist/{chunk-PA3AA55Q.js.map → chunk-GBEHJBYM.js.map} +0 -0
  655. /package/dist/{chunk-ZXSWXE6U.js.map → chunk-GE26GVHM.js.map} +0 -0
  656. /package/dist/{chunk-7D2C4LK2.js.map → chunk-GJ7GIGDS.js.map} +0 -0
  657. /package/dist/{chunk-7ICK5MXV.js.map → chunk-GJFAI3J5.js.map} +0 -0
  658. /package/dist/{chunk-5FAI25JQ.js.map → chunk-GPT673YL.js.map} +0 -0
  659. /package/dist/{chunk-QXSW3CNN.js.map → chunk-GVFPOKJW.js.map} +0 -0
  660. /package/dist/{chunk-VPPIODKX.js.map → chunk-H772ZSAI.js.map} +0 -0
  661. /package/dist/{chunk-DRSY37PB.js.map → chunk-HDELNMZC.js.map} +0 -0
  662. /package/dist/{chunk-M4QXG5JP.js.map → chunk-HQWJUHR4.js.map} +0 -0
  663. /package/dist/{chunk-K7FSTB2K.js.map → chunk-HSNOWYEE.js.map} +0 -0
  664. /package/dist/{chunk-OJ2XR3WH.js.map → chunk-HZBRXLV7.js.map} +0 -0
  665. /package/dist/{chunk-BUPDBEBA.js.map → chunk-I72PREY7.js.map} +0 -0
  666. /package/dist/{chunk-TXEN3QJ4.js.map → chunk-IEWAFD6L.js.map} +0 -0
  667. /package/dist/{chunk-ZBVU2YWV.js.map → chunk-IITZA6U2.js.map} +0 -0
  668. /package/dist/{chunk-4BNV5AAI.js.map → chunk-ITFFA3H2.js.map} +0 -0
  669. /package/dist/{chunk-RB3X6CEE.js.map → chunk-IWGW2E35.js.map} +0 -0
  670. /package/dist/{chunk-RTEY5COP.js.map → chunk-JB56E4XQ.js.map} +0 -0
  671. /package/dist/{chunk-7EH4D6FU.js.map → chunk-JDUIWHJ3.js.map} +0 -0
  672. /package/dist/{chunk-FLDLUAHW.js.map → chunk-JE6GQB5J.js.map} +0 -0
  673. /package/dist/{chunk-35443PF6.js.map → chunk-JIRZ27RI.js.map} +0 -0
  674. /package/dist/{chunk-5MW7OYBM.js.map → chunk-JSGVYOMN.js.map} +0 -0
  675. /package/dist/{chunk-RNIU447I.js.map → chunk-JU3FRRO2.js.map} +0 -0
  676. /package/dist/{chunk-LXT3X33C.js.map → chunk-JZ5IGO5G.js.map} +0 -0
  677. /package/dist/{chunk-GEB4WSZH.js.map → chunk-K2U4BNHQ.js.map} +0 -0
  678. /package/dist/{chunk-WOAXKWAB.js.map → chunk-K4A3JDYQ.js.map} +0 -0
  679. /package/dist/{chunk-2OWKL4CC.js.map → chunk-KCDNOMMT.js.map} +0 -0
  680. /package/dist/{chunk-4WNFOBTH.js.map → chunk-KOX2AEFW.js.map} +0 -0
  681. /package/dist/{chunk-ZGCPDA3F.js.map → chunk-KQS4ZJGS.js.map} +0 -0
  682. /package/dist/{chunk-2K7WPHI3.js.map → chunk-KW3H5FUS.js.map} +0 -0
  683. /package/dist/{chunk-I4MRBEWU.js.map → chunk-KZT5JC3E.js.map} +0 -0
  684. /package/dist/{chunk-VRPREI27.js.map → chunk-L75CZ3SI.js.map} +0 -0
  685. /package/dist/{chunk-YZ2DMP23.js.map → chunk-LJSKF43D.js.map} +0 -0
  686. /package/dist/{chunk-62UAI62O.js.map → chunk-LPWIAVGP.js.map} +0 -0
  687. /package/dist/{chunk-3CTQZDSD.js.map → chunk-MKJHDHLF.js.map} +0 -0
  688. /package/dist/{chunk-URHX4FAQ.js.map → chunk-MKLIMY3D.js.map} +0 -0
  689. /package/dist/{chunk-2FM5SUQV.js.map → chunk-MM5XSAVE.js.map} +0 -0
  690. /package/dist/{chunk-ORRI6FMN.js.map → chunk-MT7QJRP7.js.map} +0 -0
  691. /package/dist/{chunk-CRG24BGI.js.map → chunk-N4D5V3AA.js.map} +0 -0
  692. /package/dist/{chunk-FNO5TWBJ.js.map → chunk-NCEQWEXT.js.map} +0 -0
  693. /package/dist/{chunk-FWPFCK4D.js.map → chunk-NDHDBOUH.js.map} +0 -0
  694. /package/dist/{chunk-JC22FNFA.js.map → chunk-NFJ3VVD3.js.map} +0 -0
  695. /package/dist/{chunk-2622YFM6.js.map → chunk-NSVSC6ZC.js.map} +0 -0
  696. /package/dist/{chunk-66O55OZI.js.map → chunk-NYFGFELX.js.map} +0 -0
  697. /package/dist/{chunk-2LIRGFEK.js.map → chunk-O7OQZJ3D.js.map} +0 -0
  698. /package/dist/{chunk-TGXCG62P.js.map → chunk-OPT7X3Y6.js.map} +0 -0
  699. /package/dist/{chunk-WN5PNP6F.js.map → chunk-OTWMG7B2.js.map} +0 -0
  700. /package/dist/{chunk-EYZ6QBTV.js.map → chunk-OXLOC6TC.js.map} +0 -0
  701. /package/dist/{chunk-4T6UIYJB.js.map → chunk-OZGJ3YCN.js.map} +0 -0
  702. /package/dist/{chunk-JXECOCNA.js.map → chunk-P6Q2O3TU.js.map} +0 -0
  703. /package/dist/{chunk-YMTZN54Q.js.map → chunk-P7JF6XT7.js.map} +0 -0
  704. /package/dist/{chunk-ZN6YATOG.js.map → chunk-PAT2BQOQ.js.map} +0 -0
  705. /package/dist/{chunk-TZBOWSAM.js.map → chunk-PICOOZLX.js.map} +0 -0
  706. /package/dist/{chunk-JJJM75XF.js.map → chunk-PNDYAIKM.js.map} +0 -0
  707. /package/dist/{chunk-EJYJLVPK.js.map → chunk-PRLYYKMG.js.map} +0 -0
  708. /package/dist/{chunk-M4KVKQRN.js.map → chunk-Q33JWFSA.js.map} +0 -0
  709. /package/dist/{chunk-VJ2BNJ5M.js.map → chunk-QMELMQPA.js.map} +0 -0
  710. /package/dist/{chunk-HDJQDMHB.js.map → chunk-QMHS6ZDI.js.map} +0 -0
  711. /package/dist/{chunk-O2DLEAUP.js.map → chunk-QQ46JX5H.js.map} +0 -0
  712. /package/dist/{chunk-2WVHZIWP.js.map → chunk-QSRZOXQI.js.map} +0 -0
  713. /package/dist/{chunk-BRM3T4LQ.js.map → chunk-QUFKPCWD.js.map} +0 -0
  714. /package/dist/{chunk-DF4QODJ6.js.map → chunk-QUIHOPOC.js.map} +0 -0
  715. /package/dist/{chunk-4GB46HLK.js.map → chunk-QX3CXOJ3.js.map} +0 -0
  716. /package/dist/{chunk-C3LZ3OGJ.js.map → chunk-R2FUQV24.js.map} +0 -0
  717. /package/dist/{chunk-GOWBYHYW.js.map → chunk-R6SBP5M5.js.map} +0 -0
  718. /package/dist/{chunk-36JKV7CA.js.map → chunk-RNC574FS.js.map} +0 -0
  719. /package/dist/{chunk-4RPFI474.js.map → chunk-RSDYS5B3.js.map} +0 -0
  720. /package/dist/{chunk-X4F32GUB.js.map → chunk-RSWHKOUN.js.map} +0 -0
  721. /package/dist/{chunk-6RLCBNDV.js.map → chunk-RUZVK4FV.js.map} +0 -0
  722. /package/dist/{chunk-X53F33KA.js.map → chunk-RWXYND4H.js.map} +0 -0
  723. /package/dist/{chunk-PWZHCBG3.js.map → chunk-SBV62CSC.js.map} +0 -0
  724. /package/dist/{chunk-W5TI46QN.js.map → chunk-SCVBGQFO.js.map} +0 -0
  725. /package/dist/{chunk-MXCIUKTQ.js.map → chunk-SDBBJ6FG.js.map} +0 -0
  726. /package/dist/{chunk-WRCLYSTX.js.map → chunk-SE4WZIKD.js.map} +0 -0
  727. /package/dist/{chunk-GY4NBSCN.js.map → chunk-SE6TW72O.js.map} +0 -0
  728. /package/dist/{chunk-LP3JCXER.js.map → chunk-SNW5MJ6I.js.map} +0 -0
  729. /package/dist/{chunk-5OBGW3FG.js.map → chunk-STTULW2K.js.map} +0 -0
  730. /package/dist/{chunk-NR5TW4AH.js.map → chunk-SXVCXLKU.js.map} +0 -0
  731. /package/dist/{chunk-MQ277OLB.js.map → chunk-T2HZ3GVA.js.map} +0 -0
  732. /package/dist/{chunk-57FZM6GH.js.map → chunk-T7UUP7VD.js.map} +0 -0
  733. /package/dist/{chunk-FBUCXTA4.js.map → chunk-TJ7NQG7E.js.map} +0 -0
  734. /package/dist/{chunk-I5ZVCY2N.js.map → chunk-TJPQIFI4.js.map} +0 -0
  735. /package/dist/{chunk-Y6C4MYZE.js.map → chunk-TNQDSTIA.js.map} +0 -0
  736. /package/dist/{chunk-MLQYIJTO.js.map → chunk-U6W2RY3Z.js.map} +0 -0
  737. /package/dist/{chunk-LNHYBA4B.js.map → chunk-UFUMYNKS.js.map} +0 -0
  738. /package/dist/{chunk-FY6PONLA.js.map → chunk-UI5O6J6R.js.map} +0 -0
  739. /package/dist/{chunk-J3XFUCCR.js.map → chunk-UP6RO2PR.js.map} +0 -0
  740. /package/dist/{chunk-Y6G4I42P.js.map → chunk-V3RQFWL6.js.map} +0 -0
  741. /package/dist/{chunk-ZWCYSAI5.js.map → chunk-V7A5ZAAF.js.map} +0 -0
  742. /package/dist/{chunk-S6JHTEV4.js.map → chunk-VE3P77TV.js.map} +0 -0
  743. /package/dist/{chunk-KHPL2J3B.js.map → chunk-VPAOVEI2.js.map} +0 -0
  744. /package/dist/{chunk-FERUQ7OB.js.map → chunk-VYA4QWQL.js.map} +0 -0
  745. /package/dist/{chunk-ZUME25DS.js.map → chunk-WGUY7EIB.js.map} +0 -0
  746. /package/dist/{chunk-N7LPVR7P.js.map → chunk-WL2S2YB3.js.map} +0 -0
  747. /package/dist/{chunk-G3XLFQ2Z.js.map → chunk-WRHBXOGN.js.map} +0 -0
  748. /package/dist/{chunk-DYGWKZ7T.js.map → chunk-WTXPGASQ.js.map} +0 -0
  749. /package/dist/{chunk-OAW6GCS3.js.map → chunk-WUFTDJ2L.js.map} +0 -0
  750. /package/dist/{chunk-2JNHWKQK.js.map → chunk-WUQKXAYF.js.map} +0 -0
  751. /package/dist/{chunk-B7CNP5HW.js.map → chunk-WV62BSWA.js.map} +0 -0
  752. /package/dist/{chunk-JK5UJM4Y.js.map → chunk-WY35GCHY.js.map} +0 -0
  753. /package/dist/{chunk-IWEUSZY3.js.map → chunk-X66E5WSX.js.map} +0 -0
  754. /package/dist/{chunk-F4KYBBTY.js.map → chunk-XLXMJ6X2.js.map} +0 -0
  755. /package/dist/{chunk-JRJCBDGN.js.map → chunk-XOZYUJQ5.js.map} +0 -0
  756. /package/dist/{chunk-PARTZ7XI.js.map → chunk-XP522FFM.js.map} +0 -0
  757. /package/dist/{chunk-A2TANYNR.js.map → chunk-XXPEFK4V.js.map} +0 -0
  758. /package/dist/{chunk-YKEO6UHN.js.map → chunk-XZJM6EPC.js.map} +0 -0
  759. /package/dist/{chunk-QOLIBVGS.js.map → chunk-YGYQC7MT.js.map} +0 -0
  760. /package/dist/{chunk-U4QUDFPJ.js.map → chunk-Z4O3F6KU.js.map} +0 -0
  761. /package/dist/{chunk-DSF4VT7L.js.map → chunk-ZE56GK5C.js.map} +0 -0
  762. /package/dist/{chunk-LEHMWJNZ.js.map → chunk-ZEYUSS3W.js.map} +0 -0
  763. /package/dist/{chunk-TU5A2CV7.js.map → chunk-ZFUOLLZS.js.map} +0 -0
  764. /package/dist/{chunk-S36NC22G.js.map → chunk-ZK7YERPQ.js.map} +0 -0
  765. /package/dist/{chunk-SCZABICW.js.map → chunk-ZO4NO77T.js.map} +0 -0
  766. /package/dist/native/chunks/{chunk-ONXKFA5Z.js.map → chunk-A2QNZ4VK.js.map} +0 -0
  767. /package/dist/native/chunks/{chunk-X6RQGKGF.js.map → chunk-BST5DUUD.js.map} +0 -0
  768. /package/dist/native/chunks/{chunk-GUBTMR2K.js.map → chunk-EDYZEMVD.js.map} +0 -0
  769. /package/dist/native/chunks/{chunk-SZF56GVJ.js.map → chunk-LECBJD35.js.map} +0 -0
  770. /package/dist/native/chunks/{chunk-JBYDLWQA.js.map → chunk-MTRRGDBQ.js.map} +0 -0
  771. /package/dist/native/chunks/{chunk-IMGBBIMT.js.map → chunk-PN7C2BEY.js.map} +0 -0
  772. /package/dist/native/chunks/{chunk-4ZAULIDG.js.map → chunk-S4F364X4.js.map} +0 -0
  773. /package/dist/native/chunks/{chunk-5IASLIBI.js.map → chunk-VJFKRXY2.js.map} +0 -0
@@ -21,7 +21,8 @@ type LazyImageDefaultedKeys =
21
21
  | 'skeletonProps'
22
22
  | 'spinnerProps'
23
23
  | 'sx'
24
- | 'role';
24
+ | 'role'
25
+ | 'data-testid';
25
26
 
26
27
  export type ResolvedLazyImageProps = LazyImageProps &
27
28
  Required<Pick<LazyImageProps, LazyImageDefaultedKeys>>;
@@ -43,6 +44,10 @@ const LAZY_IMAGE_DEFAULTS: Pick<LazyImageProps, LazyImageDefaultedKeys> = {
43
44
  spinnerProps: {},
44
45
  sx: {},
45
46
  role: 'img',
47
+ // FUT-2774 #3: with no default, every derived id (`${testId}-img`, …) read
48
+ // literally as `"undefined-img"` for a caller that omitted it — and every
49
+ // such instance on a page collided on the same ids.
50
+ 'data-testid': 'lazy-image',
46
51
  };
47
52
 
48
53
  // Strips explicitly-undefined props before the merge, so `lazy={undefined}` still
@@ -141,7 +146,7 @@ const usePlaceholderPhase = (
141
146
  props: ResolvedLazyImageProps,
142
147
  loadingState: NonNullable<LazyImageProps['loadingState']>,
143
148
  ) => {
144
- const { placeholder, fadeIn, fadeInDuration } = props;
149
+ const { placeholder, fadeIn, fadeInDuration, src } = props;
145
150
  // Only this mode draws a placeholder. Otherwise the real image settling
146
151
  // retires the phase at once — batched into the load's own render, with no
147
152
  // timer — so a placeholder switched on afterwards never covers a loaded image.
@@ -149,6 +154,18 @@ const usePlaceholderPhase = (
149
154
  const [retired, setRetired] = useState(false);
150
155
  const fadeTimeoutRef = useTimeoutRef();
151
156
 
157
+ // FUT-2774 #2: `retired` was set once and never reset, and this hook took
158
+ // no `src` at all — so a mounted instance reused for a NEW image (a
159
+ // carousel swapping `src` rather than remounting) never showed the
160
+ // placeholder again for it. Reset on every `src` change, the same way
161
+ // `useImageSource` already resets `currentSrc`/`isLoading`/`hasError`; drop
162
+ // any fade timer left over from the PREVIOUS image, or it would retire the
163
+ // new placeholder on a schedule that has nothing to do with it.
164
+ useEffect(() => {
165
+ clearTimeout(fadeTimeoutRef.current);
166
+ setRetired(false);
167
+ }, [src, fadeTimeoutRef]);
168
+
152
169
  const retire = useCallback(() => setRetired(true), []);
153
170
 
154
171
  // The real image fades in over the placeholder, so it goes when the fade ends.
@@ -186,23 +203,49 @@ const useImageSource = (
186
203
  retryCount: 0,
187
204
  currentSrc: lazy ? null : src,
188
205
  });
206
+ // FUT-2774 #1: the last `src` PROP this hook has already requested — as
207
+ // opposed to `state.currentSrc`, which a retry deliberately diverges from
208
+ // `src` (its cache-busting query string) without a NEW image having
209
+ // arrived. Comparing the effect's guard against `src` itself let a retry's
210
+ // own state update immediately retrigger this effect, which overwrote the
211
+ // cache-busted value back to the plain `src` before the browser ever
212
+ // re-requested it — so `retryOnError` silently never re-fetched anything.
213
+ const requestedSrcRef = useRef<string | null>(lazy ? null : src);
214
+ // `handleImageError` (in `useLazyImage`) owns the retry timer itself, but
215
+ // it schedules against THIS src's identity: read together, the two hooks
216
+ // can tell a timeout meant for an image that is no longer the current one
217
+ // apart from one that still is (FUT-2774, src-changing-mid-retry).
218
+ const retryTimeoutRef = useTimeoutRef();
189
219
 
190
- const markVisible = useCallback(
191
- () => setState((prev) => ({ ...prev, isVisible: true, currentSrc: src })),
192
- [src],
193
- );
220
+ const markVisible = useCallback(() => {
221
+ requestedSrcRef.current = src;
222
+ setState((prev) => ({ ...prev, isVisible: true, currentSrc: src }));
223
+ }, [src]);
194
224
  useVisibility(props, containerRef, state.isVisible, markVisible);
195
225
 
196
- // Load image when it becomes visible
226
+ // Load image when it becomes visible, or when `src` itself changes to a
227
+ // genuinely new value — never when only `state.currentSrc` has (a retry).
197
228
  useEffect(() => {
198
- if (!state.isVisible || !src || state.currentSrc === src) {
229
+ if (!state.isVisible || !src || requestedSrcRef.current === src) {
199
230
  return;
200
231
  }
201
232
 
202
- setState((prev) => ({ ...prev, currentSrc: src, isLoading: true, hasError: false }));
203
- }, [state.isVisible, src, state.currentSrc]);
204
-
205
- return [state, setState] as const;
233
+ // A retry scheduled for the PREVIOUS src must not land on this one: left
234
+ // pending, its stale `setTimeout` would fire later and overwrite this
235
+ // fresh `currentSrc` with `${oldSrc}?retry=N` — cache-busting an image
236
+ // nothing asked for again, and never re-syncing back (FUT-2774).
237
+ clearTimeout(retryTimeoutRef.current);
238
+ requestedSrcRef.current = src;
239
+ setState((prev) => ({
240
+ ...prev,
241
+ currentSrc: src,
242
+ isLoading: true,
243
+ hasError: false,
244
+ retryCount: 0,
245
+ }));
246
+ }, [state.isVisible, src, retryTimeoutRef]);
247
+
248
+ return { state, setState, requestedSrcRef, retryTimeoutRef };
206
249
  };
207
250
 
208
251
  /**
@@ -215,8 +258,7 @@ export const useLazyImage = (props: ResolvedLazyImageProps) => {
215
258
  const { onLoad, onError, retryOnError, maxRetries, retryDelay } = props;
216
259
 
217
260
  const containerRef = useRef<HTMLDivElement>(null);
218
- const retryTimeoutRef = useTimeoutRef();
219
- const [state, setState] = useImageSource(props, containerRef);
261
+ const { state, setState, requestedSrcRef, retryTimeoutRef } = useImageSource(props, containerRef);
220
262
 
221
263
  // Handle deprecated showSpinner prop
222
264
  const effectiveLoadingState = showSpinner ? 'spinner' : loadingState;
@@ -244,6 +286,13 @@ export const useLazyImage = (props: ResolvedLazyImageProps) => {
244
286
  }
245
287
 
246
288
  retryTimeoutRef.current = setTimeout(() => {
289
+ // Belt and suspenders alongside `useImageSource`'s own cancel-on-src-
290
+ // change: if `src` moved on since this timeout was scheduled, this
291
+ // retry is for an image that is no longer live at all — applying it
292
+ // would cache-bust the WRONG `<img>` (FUT-2774).
293
+ if (requestedSrcRef.current !== src) {
294
+ return;
295
+ }
247
296
  setState((prev) => ({
248
297
  ...prev,
249
298
  retryCount: prev.retryCount + 1,
@@ -251,7 +300,7 @@ export const useLazyImage = (props: ResolvedLazyImageProps) => {
251
300
  }));
252
301
  }, retryDelay);
253
302
  },
254
- [onError, retryOnError, state.retryCount, maxRetries, retryDelay, src, retirePlaceholder],
303
+ [onError, retryOnError, state.retryCount, maxRetries, retryDelay, src, retirePlaceholder, requestedSrcRef, retryTimeoutRef],
255
304
  );
256
305
 
257
306
  return {
@@ -16,7 +16,7 @@ The LazyImage component optimizes image loading performance by:
16
16
  ### Basic Usage
17
17
 
18
18
  ```tsx
19
- import { LazyImage } from '@app-services-monitoring/ui';
19
+ import { LazyImage } from '@12-apps/ui';
20
20
 
21
21
  function App() {
22
22
  return (
@@ -225,7 +225,7 @@ wrapping element, rounded to match the image:
225
225
  | Prop | Type | Default | Description |
226
226
  |------|------|---------|-------------|
227
227
  | `decoding` | `'async' \| 'sync' \| 'auto'` | `'async'` | Image decoding hint |
228
- | `loading` | `'eager' \| 'lazy' \| 'auto'` | `'auto'` | Native loading attribute |
228
+ | `loading` | `'eager' \| 'lazy'` | - | Native `loading` attribute; independent of `lazy` (which gates the `IntersectionObserver`) |
229
229
  | `fetchPriority` | `'high' \| 'low' \| 'auto'` | - | Fetch priority hint |
230
230
 
231
231
  ### Customization Props
@@ -334,48 +334,9 @@ The LazyImage component follows accessibility best practices:
334
334
  1. **Lazy Loading**: Images load only when needed, reducing initial page load
335
335
  2. **Intersection Observer**: Efficient viewport detection with configurable margins
336
336
  3. **Progressive Loading**: Support for placeholder images during load
337
- 4. **Retry Logic**: Automatic retry for failed loads with exponential backoff
337
+ 4. **Retry Logic**: Automatic retry for failed loads, at a fixed `retryDelay` — the delay does NOT grow between attempts
338
338
  5. **Native Loading**: Leverages browser's native lazy loading when available
339
339
 
340
- ## Migration from Original LazyImage
341
-
342
- If migrating from the original LazyImage in status-site:
343
-
344
- ```tsx
345
- // Old usage
346
- import { LazyImage } from '../components/LazyImage';
347
-
348
- <LazyImage
349
- src="image.jpg"
350
- alt="Description"
351
- width={400}
352
- height={300}
353
- sx={{ borderRadius: 4 }}
354
- />
355
-
356
- // New usage (fully backward compatible)
357
- import { LazyImage } from '@app-services-monitoring/ui';
358
-
359
- <LazyImage
360
- src="image.jpg"
361
- alt="Description"
362
- width={400}
363
- height={300}
364
- sx={{ borderRadius: 4 }}
365
- />
366
- ```
367
-
368
- ### New Features Available After Migration
369
-
370
- - Error handling with fallback
371
- - Multiple loading states
372
- - Retry mechanism
373
- - Placeholder support
374
- - Spinner overlay option
375
- - Event callbacks
376
- - Better TypeScript support
377
- - Performance optimizations
378
-
379
340
  ## Related Components
380
341
 
381
342
  - [Avatar](../Avatar/Avatar.md) - For user profile images
@@ -88,6 +88,18 @@ const innerLength = (theme: Theme, value: Length): string | undefined =>
88
88
  const orDefault = (value: Length, fallback: number | string): number | string =>
89
89
  value === undefined || value === '' ? fallback : value;
90
90
 
91
+ /**
92
+ * A width/height as `metrics` and the `ReactNode` `ErrorFallback` read it
93
+ * (FUT-2774 #4): an explicit empty string is normalized to "as if unset"
94
+ * rather than mapped to a component-wide default. Unlike `SkeletonIndicator`
95
+ * (a content-less box with nothing else to size by, hence its own deliberate
96
+ * `'100%'`/`'auto'` fallback), these draw the real image or a `ReactNode`
97
+ * fallback — both have their own intrinsic size, so leaving an unset width
98
+ * unset lets it size naturally (`brand-link.tsx`'s logo relies on exactly
99
+ * this: an unset width capped by its own `sx.maxWidth`).
100
+ */
101
+ const emptyToUnset = (value: Length): Length => (value === '' ? undefined : value);
102
+
91
103
  /** The box the image occupies, as CSS, shared by the real image and every stand-in for it. */
92
104
  interface BoxMetrics {
93
105
  width?: string;
@@ -106,10 +118,14 @@ const SkeletonIndicator: React.FC<IndicatorProps> = ({ props }) => {
106
118
  const theme = useTheme();
107
119
  return (
108
120
  <Skeleton
109
- variant="rectangular"
121
+ // FUT-2774 #5: `skeletonProps.variant` was typed but never read — the
122
+ // variant was hard-coded regardless of what a caller passed.
123
+ variant={props.skeletonProps.variant ?? 'rectangular'}
110
124
  width={innerLength(theme, orDefault(props.width, '100%'))}
111
125
  height={innerLength(theme, orDefault(props.height, 'auto'))}
112
- animation={props.skeletonProps.animation || 'pulse'}
126
+ // FUT-2774 #5: `||` reads a caller's `false` the same as "unset", so
127
+ // `skeletonProps.animation={false}` could never turn the animation off.
128
+ animation={props.skeletonProps.animation ?? 'pulse'}
113
129
  intensity={props.skeletonProps.intensity}
114
130
  borderRadius={styleLength(theme, props.borderRadius)}
115
131
  data-testid={`${props['data-testid']}-skeleton`}
@@ -124,8 +140,11 @@ const SpinnerIndicator: React.FC<IndicatorProps> = ({ props }) => {
124
140
  return (
125
141
  <SpinnerOverlay>
126
142
  <CircularProgress
127
- size={styleLength(theme, spinnerProps.size || 40)}
128
- thickness={spinnerProps.thickness || 4}
143
+ // FUT-2774 #5: `||` read `spinnerProps.size`/`thickness` of `0` the
144
+ // same as unset — the same class of bug FUT-2669 fixed for
145
+ // `width`/`height`, missed here.
146
+ size={styleLength(theme, spinnerProps.size ?? 40)}
147
+ thickness={spinnerProps.thickness ?? 4}
129
148
  sx={{ color: spinnerProps.color || theme.palette.primary.main }}
130
149
  data-testid={`${props['data-testid']}-spinner`}
131
150
  />
@@ -209,8 +228,19 @@ const ErrorFallback: React.FC<IndicatorProps> = ({ props, metrics }) => {
209
228
  return (
210
229
  <FallbackContainer
211
230
  sx={{
212
- width: innerLength(theme, width),
213
- height: innerLength(theme, height),
231
+ // FUT-2774 #4 (see `emptyToUnset`). Does NOT change the confirmed
232
+ // height collapse — `ImageContainer`'s own height was already `'auto'`
233
+ // either way; see `LazyImage.test.stories.tsx` for that separate,
234
+ // unresolved defect. `orDefault(height, 'auto')` is safe to share with
235
+ // `SkeletonIndicator` (unlike width's `'100%'`, deliberately NOT
236
+ // shared — see `emptyToUnset`): a PERCENTAGE height against an
237
+ // auto-height containing block computes to `auto` by spec regardless,
238
+ // so whether `sx.height` is omitted (falling through to
239
+ // `FallbackContainer`'s own `height: '100%'`) or set to the literal
240
+ // `'auto'` here, an unset-height container gives the same result
241
+ // either way — nothing for this fallback to protect against.
242
+ width: innerLength(theme, emptyToUnset(width)),
243
+ height: innerLength(theme, orDefault(height, 'auto')),
214
244
  borderRadius: styleLength(theme, borderRadius),
215
245
  }}
216
246
  data-testid={`${testId}-fallback`}
@@ -242,8 +272,14 @@ export const LazyImage = React.memo<LazyImageProps>(function LazyImage(rawProps)
242
272
  const { width, height, borderRadius, alt } = props;
243
273
  const testId = props['data-testid'];
244
274
  const metrics: BoxMetrics = {
245
- width: innerLength(theme, width),
246
- height: innerLength(theme, height),
275
+ // FUT-2774 #4 (see `emptyToUnset`): `metrics` also sizes the REAL `<img>`,
276
+ // where an unset width means "the image's own intrinsic size" —
277
+ // `brand-link.tsx`'s logo relies on exactly that. `height`'s `'auto'`
278
+ // fallback has no such live case to protect: a percentage height against
279
+ // an auto-height containing block computes to `auto` regardless, so
280
+ // sharing `SkeletonIndicator`'s fallback changes nothing observable.
281
+ width: innerLength(theme, emptyToUnset(width)),
282
+ height: innerLength(theme, orDefault(height, 'auto')),
247
283
  objectFit: props.objectFit,
248
284
  objectPosition: props.objectPosition,
249
285
  borderRadius: styleLength(theme, borderRadius),
@@ -1,8 +1,9 @@
1
1
  import type { PaletteColor, Theme, ThemeOptions } from '@mui/material/styles/index.js';
2
2
 
3
3
  import { cssLengthToPx, cssTrackingToEm } from '../tokens/css-units';
4
+ import { densityFontSize, resolveDensityFactor } from '../tokens/density';
4
5
  import { resolveFieldHeight } from '../tokens/field-height.core';
5
- import { fieldOverrides } from '../tokens/field-height';
6
+ import { fieldOverrides, mergeMuiComponents } from '../tokens/field-height';
6
7
  import { fieldRadius } from '../tokens/field-radius';
7
8
  import { accentFor } from '../tokens/scales';
8
9
  import {
@@ -102,6 +103,9 @@ export function uiThemeFromMui(theme: Theme): UiTheme {
102
103
  spacingUnit: unit,
103
104
  radius: { sm: md / 2, md, lg: md * 2, xl: md * 4, full: 9999, field: fieldRadius(theme) },
104
105
  fieldHeight: resolveFieldHeight(theme.fieldHeight),
106
+ // A bare MUI theme (never built through `createUiTheme`/`muiThemeOptionsFrom`)
107
+ // carries no `theme.density` — read back as `'normal'`, factor `1`.
108
+ density: theme.density ?? resolveDensityFactor(),
105
109
  typography: {
106
110
  fontFamily: theme.typography.fontFamily ?? WEB_FONT_FAMILY,
107
111
  monospaceFontFamily: WEB_MONOSPACE_FONT_FAMILY,
@@ -140,9 +144,19 @@ export function muiThemeOptionsFrom(ui: UiTheme): ThemeOptions {
140
144
  shape: { borderRadius: ui.radius.md },
141
145
  fieldRadius: ui.radius.field,
142
146
  fieldHeight: ui.fieldHeight,
143
- components: fieldOverrides(ui.radius.field, ui.fieldHeight),
147
+ // Additive: children 2–4 (FUT-2766–2768) each add one more source here as
148
+ // their own geometry overrides land — this PR wires the merge helper to
149
+ // `fieldOverrides` alone, since no geometry override exists yet.
150
+ components: mergeMuiComponents(fieldOverrides(ui.radius.field, ui.fieldHeight)),
144
151
  spacing: ui.spacingUnit,
145
- typography: { fontFamily: ui.typography.fontFamily ?? WEB_FONT_FAMILY },
152
+ density: ui.density,
153
+ typography: {
154
+ fontFamily: ui.typography.fontFamily ?? WEB_FONT_FAMILY,
155
+ // MUI multiplies every `pxToRem` size by `fontSize / 14` — the lever a
156
+ // density mode moves (`./tokens/relative.ts`). `htmlFontSize` stays
157
+ // untouched: that is a reader's own zoom/accessibility setting, not this.
158
+ fontSize: densityFontSize(ui.density.factor),
159
+ },
146
160
  zIndex: { ...ui.zIndex },
147
161
  };
148
162
  }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * THE ONE DENSITY KNOB, WITH NO RENDERER BEHIND IT.
3
+ *
4
+ * A host that wants a compact admin or a roomy kiosk should say so once, in
5
+ * the theme — not hunt through every component's own numbers. Because every
6
+ * size already goes through `rem(theme, px)` / `theme.spacing()` / `fieldHeight()`
7
+ * (FUT-2585, `./relative.ts`), moving the type scale, the spacing unit and the
8
+ * field height BY THE SAME FACTOR is enough to make the whole package denser
9
+ * or roomier — no `size` step is rewritten, no component is touched (FUT-2764
10
+ * Decision 3).
11
+ *
12
+ * Three named levels, or a raw factor for a repository the three names don't
13
+ * fit (a kiosk app, say). A repository can also redefine what a named level
14
+ * itself means (`densityFactors`). Precedence, highest first, ABOVE
15
+ * `resolveDensityFactor` itself — this file's own resolver has no notion of an
16
+ * "explicit option" to defer to, that is each CALLER's job:
17
+ *
18
+ * - On the `createUiTheme` path (`./theme.ts`): an explicit `spacingUnit` /
19
+ * `fieldHeight` option (`UiThemeOptions` carries no `typography.fontSize` —
20
+ * only `fontFamily`/`monospaceFontFamily`) still wins over EVERYTHING below,
21
+ * unchanged.
22
+ * - On the MUI-native path (`densityThemeOptions`'s output, or a host's own
23
+ * `createTheme()` options merged around it): whichever `typography.fontSize`
24
+ * / `spacing` a host's OWN object literal states last wins — plain
25
+ * JavaScript object-spread order, not a rule this package enforces. See
26
+ * `./density.ts` for exactly where to put it.
27
+ *
28
+ * Below that: a numeric `density` (used as the factor directly, no table
29
+ * lookup, and only when it is a USABLE one — see `resolveDensityFactor`) >
30
+ * `densityFactors[level]` (a repository's own override for a named level,
31
+ * same usability rule) > the built-in table below. No `density` at all
32
+ * resolves to `{ level: 'normal', factor: 1 }` — today, byte-for-byte.
33
+ *
34
+ * This file is the resolver alone, so the native renderer and `./theme.ts`
35
+ * read it without importing MUI. The web reader — `useDensity()`, the MUI
36
+ * theme channel, and the standalone `densityThemeOptions()` — is in
37
+ * `./density.ts`.
38
+ */
39
+
40
+ export type DensityLevel = 'compact' | 'normal' | 'comfortable';
41
+
42
+ export const DEFAULT_DENSITY: DensityLevel = 'normal';
43
+
44
+ /**
45
+ * The built-in factor table — the LOWEST-precedence source. A repository's
46
+ * own `densityFactors` entry for a level wins over it; a numeric `density`
47
+ * bypasses it entirely. Confirmed against screenshots before this PR merges
48
+ * (see the ticket's Done when) — `compact` 0.9, `normal` 1 (no-op),
49
+ * `comfortable` 1.1.
50
+ */
51
+ export const DENSITY_FACTOR: Record<DensityLevel, number> = {
52
+ compact: 0.9,
53
+ normal: 1,
54
+ comfortable: 1.1,
55
+ };
56
+
57
+ export interface ResolvedDensity {
58
+ /** Present only when a NAMED level was given; a raw numeric `density` has no name. */
59
+ level?: DensityLevel;
60
+ factor: number;
61
+ }
62
+
63
+ /**
64
+ * A usable factor — a positive, finite number. The same shape
65
+ * `resolveFieldHeight` (`./field-height.core`) already accepts for a `height`;
66
+ * a numeric `density` and a `densityFactors` entry are held to the same rule
67
+ * so an unusable one falls back exactly the way an unusable `fieldHeight`
68
+ * option already does, rather than baking a `0`, a negative or a `NaN`/
69
+ * `Infinity` into `spacingUnit`/`fieldHeight`/`typography.fontSize`.
70
+ */
71
+ function isUsableFactor(value: unknown): value is number {
72
+ return typeof value === 'number' && Number.isFinite(value) && value > 0;
73
+ }
74
+
75
+ /**
76
+ * Precedence (highest first): a numeric `density` IS the factor, no table lookup —
77
+ * but only when it is a usable one (a positive, finite number); `0`, a negative
78
+ * number, `NaN` or `Infinity` are not a density anyone meant, so they fall back
79
+ * to `'normal'`, factor `1`, exactly as no `density` at all does. A named
80
+ * `density` resolves through `factors?.[level] ?? DENSITY_FACTOR[level]` — a
81
+ * repository's own `densityFactors` override wins over the built-in table, but
82
+ * only when IT is usable too; an unusable entry falls back to the BUILT-IN
83
+ * table's value for that same level (not to `'normal'` — the level itself is
84
+ * still the one asked for, only its factor is unusable). No `density` at all
85
+ * resolves to `{ level: 'normal', factor: 1 }`.
86
+ */
87
+ export function resolveDensityFactor(
88
+ density?: DensityLevel | number,
89
+ factors?: Partial<Record<DensityLevel, number>>,
90
+ ): ResolvedDensity {
91
+ if (typeof density === 'number') {
92
+ if (isUsableFactor(density)) return { factor: density };
93
+ density = undefined; // not usable — fall through to 'normal', below
94
+ }
95
+ const level = density ?? DEFAULT_DENSITY;
96
+ const override = factors?.[level];
97
+ const factor = isUsableFactor(override) ? override : DENSITY_FACTOR[level];
98
+ return { level, factor };
99
+ }
100
+
101
+ const BASE_FONT_SIZE = 14; // MUI's own typography.fontSize baseline
102
+ const BASE_SPACING_UNIT = 8; // theme.ts's literal default
103
+ const BASE_FIELD_HEIGHT = 2.5; // field-height.core.ts's DEFAULT_FIELD_HEIGHT
104
+
105
+ /** MUI's own `typography.fontSize` at this factor. `htmlFontSize` is never touched. */
106
+ export function densityFontSize(factor: number): number {
107
+ return BASE_FONT_SIZE * factor;
108
+ }
109
+
110
+ /** The theme's `spacingUnit` at this factor. */
111
+ export function densitySpacingUnit(factor: number): number {
112
+ return BASE_SPACING_UNIT * factor;
113
+ }
114
+
115
+ /** The standard field height (multiples of the default font size) at this factor. */
116
+ export function densityFieldHeight(factor: number): number {
117
+ return BASE_FIELD_HEIGHT * factor;
118
+ }
@@ -0,0 +1,134 @@
1
+ import { useTheme } from '@mui/material/styles/index.js';
2
+ import type { ThemeOptions } from '@mui/material/styles/index.js';
3
+
4
+ import {
5
+ densityFieldHeight,
6
+ densityFontSize,
7
+ densitySpacingUnit,
8
+ resolveDensityFactor,
9
+ type DensityLevel,
10
+ type ResolvedDensity,
11
+ } from './density.core';
12
+ import { fieldOverrides, mergeMuiComponents } from './field-height';
13
+ import { DEFAULT_FIELD_RADIUS } from './field-radius.core';
14
+
15
+ /**
16
+ * DENSITY ON THE WEB: the MUI theme channel, the reader, and the standalone
17
+ * entry point for a host that never calls `createUiTheme`/`UiProvider`.
18
+ *
19
+ * The argument for one density knob, the factor table and its precedence are
20
+ * in `./density.core.ts`.
21
+ */
22
+
23
+ export {
24
+ DEFAULT_DENSITY,
25
+ DENSITY_FACTOR,
26
+ densityFieldHeight,
27
+ densityFontSize,
28
+ densitySpacingUnit,
29
+ resolveDensityFactor,
30
+ type DensityLevel,
31
+ type ResolvedDensity,
32
+ } from './density.core';
33
+
34
+ declare module '@mui/material/styles' {
35
+ interface Theme {
36
+ /** The density this theme renders at. See `@12-apps/ui/tokens`' `useDensity`. */
37
+ density?: ResolvedDensity;
38
+ }
39
+ interface ThemeOptions {
40
+ /** The density this theme renders at. See `@12-apps/ui/tokens`' `useDensity`. */
41
+ density?: ResolvedDensity;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * The theme's resolved density — a plain theme read, not a step-shifting
47
+ * resolver (`size` stays hierarchy; see `./density.core.ts`). A `styleOverrides`
48
+ * callback already gets `{ theme }` and can read `theme.density` directly;
49
+ * this is for a component that needs the level in its own render logic
50
+ * (`Table`/`DataGrid`/`DataViews` each read it once to source their own
51
+ * `density` prop's default).
52
+ *
53
+ * Falls back to `resolveDensityFactor()` (`'normal'`, factor `1`) for a bare
54
+ * MUI theme built without `createUiTheme`/`muiThemeOptionsFrom`.
55
+ */
56
+ export function useDensity(): ResolvedDensity {
57
+ return useTheme().density ?? resolveDensityFactor();
58
+ }
59
+
60
+ /**
61
+ * The density factor as a MUI `ThemeOptions` fragment, for a host that builds
62
+ * `createTheme()` directly and never calls `createUiTheme`/`UiProvider` — the
63
+ * same precedence `resolveDensityFactor` gives `createUiTheme`, so the two
64
+ * consumption paths agree on `typography`/`spacing`/`fieldHeight`/`components`
65
+ * (FUT-2764's Design section), not just the first two. `fieldHeight` matters
66
+ * on its own: `Input`/`Select`/`Button` each read `theme.fieldHeight` directly
67
+ * (`Input.tsx`, `Select.tsx`, `Button.styles.ts`'s `buttonSize`), so a fragment
68
+ * that carried only `typography`/`spacing` left every field standing at the
69
+ * DEFAULT height (2.5) at every density on this path — the two paths would
70
+ * agree on the type scale and disagree on the one number three components key
71
+ * their own layout off.
72
+ *
73
+ * `components` is the matching MUI-native override (`fieldOverrides`) for a
74
+ * HOST's own bare `TextField`/`Select`, mirroring `muiThemeOptionsFrom`'s own
75
+ * `components: mergeMuiComponents(fieldOverrides(...))`. It carries ONLY the
76
+ * field overrides this function knows about (`MuiOutlinedInput`'s `root`,
77
+ * `input` and `notchedOutline`; `MuiInputLabel`'s `outlined`) — a host with
78
+ * ITS OWN overrides for OTHER components merges them in with
79
+ * `mergeMuiComponents(densityThemeOptions(density).components, hostOverrides)`,
80
+ * which keeps a component only ONE side touches untouched. For a component
81
+ * BOTH sides style, the merge is by INNER key (`root`/`input`/…): a key only
82
+ * one side sets survives from that side, but a key BOTH set is replaced
83
+ * WHOLESALE by whichever source is passed LAST — not deep-merged — so a host
84
+ * wanting to ADD to, say, `MuiOutlinedInput`'s `root` alongside the radius
85
+ * override needs to write that one key's object out in full itself.
86
+ *
87
+ * `fieldRadius` (3rd argument, optional) exists because density does NOT touch
88
+ * the field's CORNER — this is only for a host that already draws its OWN,
89
+ * non-default radius and wants `components` to match it instead of clashing;
90
+ * it defaults
91
+ * to the same {@link DEFAULT_FIELD_RADIUS} `createUiTheme` itself falls back
92
+ * to when a host names no `fieldRadius`, so the two paths still agree with no
93
+ * argument passed at all — the existing 2-argument call keeps working
94
+ * unchanged.
95
+ *
96
+ * **Where to spread it — the first `createTheme()` call, not a later layering
97
+ * one.** `createTheme(options, ...args)` (`createThemeNoVars.js`) only runs
98
+ * `createSpacing`/`createTypography` on `options`, the FIRST argument; every
99
+ * later argument is deep-merged onto the theme those two already built, with
100
+ * no such reprocessing. So a host with a base theme and a SECOND, layering
101
+ * `createTheme()` call on top of it — exactly the shape a two-theme host uses,
102
+ * `createTheme(outer, { palette: { ... } })` — must apply density at the
103
+ * FIRST call (where the base itself is built), never spread onto `outer` in
104
+ * the second one:
105
+ *
106
+ * ```ts
107
+ * // RIGHT — density goes into the base's OWN construction. The second,
108
+ * // layering call is unaffected: it never restates spacing/typography/
109
+ * // fieldHeight/components itself, so `theme.spacing`/`pxToRem`/`fieldHeight`
110
+ * // carry over from `base` UNCHANGED, already correctly scaled.
111
+ * const base = createTheme({ palette: { primary: { main }, ... }, ...densityThemeOptions('compact') });
112
+ * const themed = createTheme(base, { palette: { primary: { main: brand } } });
113
+ *
114
+ * // WRONG — a second, layering argument onto an ALREADY-BUILT theme is
115
+ * // deepmerged with no reprocessing: `spacing`/`typography.fontSize` would
116
+ * // overwrite the already-resolved `theme.spacing` function/`pxToRem` ratio
117
+ * // instead of rescaling them.
118
+ * createTheme(outer, { ...densityThemeOptions('compact') });
119
+ * ```
120
+ */
121
+ export function densityThemeOptions(
122
+ density: DensityLevel | number,
123
+ factors?: Partial<Record<DensityLevel, number>>,
124
+ fieldRadius: number = DEFAULT_FIELD_RADIUS,
125
+ ): Pick<ThemeOptions, 'typography' | 'spacing' | 'fieldHeight' | 'components'> {
126
+ const { factor } = resolveDensityFactor(density, factors);
127
+ const fieldHeight = densityFieldHeight(factor);
128
+ return {
129
+ typography: { fontSize: densityFontSize(factor) },
130
+ spacing: densitySpacingUnit(factor),
131
+ fieldHeight,
132
+ components: mergeMuiComponents(fieldOverrides(fieldRadius, fieldHeight)),
133
+ };
134
+ }
@@ -44,9 +44,14 @@ export const FIELD_HEIGHT_SCALE: Record<SizeValue, number> = {
44
44
  xl: 1.4,
45
45
  };
46
46
 
47
- /** A usable standard height: the given one when it is a positive number, the default otherwise. */
48
- export function resolveFieldHeight(height: unknown): number {
49
- return typeof height === 'number' && Number.isFinite(height) && height > 0 ? height : DEFAULT_FIELD_HEIGHT;
47
+ /**
48
+ * A usable standard height: the given one when it is a positive number, a
49
+ * caller's own `fallback` otherwise — {@link DEFAULT_FIELD_HEIGHT} unless a
50
+ * density factor (`./density.core`) already worked out a denser or roomier
51
+ * one to fall back to instead.
52
+ */
53
+ export function resolveFieldHeight(height: unknown, fallback: number = DEFAULT_FIELD_HEIGHT): number {
54
+ return typeof height === 'number' && Number.isFinite(height) && height > 0 ? height : fallback;
50
55
  }
51
56
 
52
57
  /** A field's height for a size, in multiples of the default font size (`rem`). */
@@ -120,23 +120,34 @@ export function fieldHeightOverrides(height: number = DEFAULT_FIELD_HEIGHT): Com
120
120
  }
121
121
 
122
122
  /**
123
- * Both field overrides — the corner and the height — merged per component.
124
- * They meet on `MuiOutlinedInput` (`root` from the radius, `input` from the
125
- * height), so a plain spread would lose one of them.
123
+ * Several `Components<Theme>` override sets, merged per component name — a
124
+ * later source's `styleOverrides` win over an earlier one's for the SAME
125
+ * inner key, but neither erases the other's keys. A plain spread of the
126
+ * top-level objects would drop every override but the last source's for a
127
+ * component two sources both style (`fieldOverrides` below merges exactly
128
+ * two; density's geometry overrides, FUT-2766–2768, add more).
126
129
  */
127
- export function fieldOverrides(radius: number | undefined, height: number | undefined): Components<Theme> {
130
+ export function mergeMuiComponents(...sources: Components<Theme>[]): Components<Theme> {
128
131
  type Entry = { styleOverrides?: Record<string, unknown> };
129
- const corner = fieldRadiusOverrides(radius) as Record<string, Entry>;
130
- const tall = fieldHeightOverrides(height) as Record<string, Entry>;
131
- const names = new Set([...Object.keys(corner), ...Object.keys(tall)]);
132
+ const maps = sources as unknown as Record<string, Entry>[];
133
+ const names = new Set(maps.flatMap((map) => Object.keys(map)));
132
134
  return Object.fromEntries(
133
135
  [...names].map((name) => [
134
136
  name,
135
- { styleOverrides: { ...corner[name]?.styleOverrides, ...tall[name]?.styleOverrides } },
137
+ { styleOverrides: Object.assign({}, ...maps.map((map) => map[name]?.styleOverrides)) },
136
138
  ]),
137
139
  ) as Components<Theme>;
138
140
  }
139
141
 
142
+ /**
143
+ * Both field overrides — the corner and the height — merged per component.
144
+ * They meet on `MuiOutlinedInput` (`root` from the radius, `input` from the
145
+ * height), so a plain spread would lose one of them.
146
+ */
147
+ export function fieldOverrides(radius: number | undefined, height: number | undefined): Components<Theme> {
148
+ return mergeMuiComponents(fieldRadiusOverrides(radius), fieldHeightOverrides(height));
149
+ }
150
+
140
151
  /**
141
152
  * THE field standard on a MUI `TextField` / `Select` / `Autocomplete`, for a
142
153
  * composite that renders MUI's own: the field radius, the field height for