@12-apps/ui 6.42.0 → 6.43.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 (380) hide show
  1. package/dist/_internal/components/data-display/Alert/Alert.js +3 -3
  2. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -3
  3. package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -3
  4. package/dist/_internal/components/data-display/Badge/Badge.js +4 -4
  5. package/dist/_internal/components/data-display/Badge/Badge.styles.js +4 -4
  6. package/dist/_internal/components/data-display/Badge/BadgeContent.js +4 -4
  7. package/dist/_internal/components/data-display/Banner/Banner.js +3 -3
  8. package/dist/_internal/components/data-display/Banner/Banner.styles.js +3 -3
  9. package/dist/_internal/components/data-display/CardKit/CardKebab.js +3 -3
  10. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -3
  11. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +3 -3
  12. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +3 -3
  13. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +4 -4
  14. package/dist/_internal/components/data-display/Carousel/Carousel.js +4 -4
  15. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -4
  16. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +4 -4
  17. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  18. package/dist/_internal/components/data-display/Chart/SpecChart.js +4 -4
  19. package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
  20. package/dist/_internal/components/data-display/Chart/chart-internals.js +4 -4
  21. package/dist/_internal/components/data-display/Chart/chart-renderers.js +4 -4
  22. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +11 -2
  23. package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +12 -1
  24. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +6 -6
  25. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +28 -27
  26. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +34 -33
  27. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +6 -6
  28. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +6 -6
  29. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +7 -7
  30. package/dist/_internal/components/data-display/DataViews/base-card.js +6 -6
  31. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +15 -10
  32. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +14 -9
  33. package/dist/_internal/components/data-display/DataViews/base-list-card.js +16 -11
  34. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +1 -1
  35. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +1 -1
  36. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +6 -6
  37. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +3 -3
  38. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +1 -1
  39. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +11 -10
  40. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +12 -7
  41. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +6 -6
  42. package/dist/_internal/components/data-display/DataViews/data-views-export.js +6 -6
  43. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +1 -1
  44. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +13 -12
  45. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +3 -3
  46. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +27 -26
  47. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +6 -6
  48. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +8 -8
  49. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +11 -1
  50. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +6 -6
  51. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +7 -7
  52. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +1 -1
  53. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +1 -1
  54. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +1 -1
  55. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +10 -2
  56. package/dist/_internal/components/data-display/DataViews/data-views-search.js +1 -1
  57. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +6 -6
  58. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +14 -13
  59. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +9 -9
  60. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +13 -12
  61. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +6 -6
  62. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +10 -2
  63. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +6 -6
  64. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +3 -3
  65. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +6 -6
  66. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +1 -1
  67. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +1 -1
  68. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +4 -4
  69. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +1 -1
  70. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +1 -1
  71. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +1 -1
  72. package/dist/_internal/components/data-display/Progress/Progress.js +6 -6
  73. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +4 -4
  74. package/dist/_internal/components/data-display/Progress/Progress.styles.js +5 -5
  75. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +4 -4
  76. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  77. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +4 -4
  78. package/dist/_internal/components/data-display/Table/Table.helpers.js +3 -1
  79. package/dist/_internal/components/data-display/Table/Table.js +11 -3
  80. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
  81. package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
  82. package/dist/_internal/components/data-display/index.js +15 -15
  83. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
  84. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  85. package/dist/_internal/components/feedback/index.js +3 -3
  86. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +1 -1
  87. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +1 -1
  88. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +1 -1
  89. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +1 -1
  90. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +1 -1
  91. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  92. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +1 -1
  93. package/dist/_internal/components/form/Button/Button.js +3 -3
  94. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  95. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +1 -1
  96. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +1 -1
  97. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +1 -1
  98. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +1 -1
  99. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +1 -1
  100. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +1 -1
  101. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +1 -1
  102. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +1 -1
  103. package/dist/_internal/components/form/CepField/CepField.js +1 -1
  104. package/dist/_internal/components/form/Command/Command.js +4 -4
  105. package/dist/_internal/components/form/Command/Command.styles.js +4 -4
  106. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +1 -1
  107. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +1 -1
  108. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +1 -1
  109. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +1 -1
  110. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +1 -1
  111. package/dist/_internal/components/form/Input/Input.js +1 -1
  112. package/dist/_internal/components/form/Input/Input.styles.js +1 -1
  113. package/dist/_internal/components/form/InputOTP/InputOTP.js +1 -1
  114. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +1 -1
  115. package/dist/_internal/components/form/Label/Label.js +4 -4
  116. package/dist/_internal/components/form/Label/Label.styles.js +4 -4
  117. package/dist/_internal/components/form/Menubar/Menubar.item.js +4 -4
  118. package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
  119. package/dist/_internal/components/form/Menubar/Menubar.styles.js +4 -4
  120. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +4 -4
  121. package/dist/_internal/components/form/NumberField/NumberField.js +1 -1
  122. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +1 -1
  123. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +1 -1
  124. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +1 -1
  125. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +1 -1
  126. package/dist/_internal/components/form/Select/Select.js +1 -1
  127. package/dist/_internal/components/form/Switch/Switch.js +3 -3
  128. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  129. package/dist/_internal/components/form/Switch/Switch.styles.js +3 -3
  130. package/dist/_internal/components/form/Textarea/Textarea.js +2 -2
  131. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +1 -1
  132. package/dist/_internal/components/form/Toggle/Toggle.js +1 -1
  133. package/dist/_internal/components/form/Toggle/Toggle.styles.js +1 -1
  134. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +1 -1
  135. package/dist/_internal/components/form/index.js +5 -5
  136. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +1 -1
  137. package/dist/_internal/components/form/total-form/Fields/CepField.js +1 -1
  138. package/dist/_internal/components/form/total-form/Fields/SelectField.js +1 -1
  139. package/dist/_internal/components/form/total-form/Fields/TextField.js +1 -1
  140. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +1 -1
  141. package/dist/_internal/components/form/total-form/Fields/index.js +1 -1
  142. package/dist/_internal/components/form/total-form/SubmitButton.js +3 -3
  143. package/dist/_internal/components/index.js +28 -28
  144. package/dist/_internal/components/layout/Box/Box.js +7 -7
  145. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +1 -1
  146. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +1 -1
  147. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +1 -1
  148. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +1 -1
  149. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +1 -1
  150. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +1 -1
  151. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +1 -1
  152. package/dist/_internal/components/layout/SettingCard/SettingCard.js +9 -9
  153. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +8 -8
  154. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +9 -9
  155. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
  156. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +9 -9
  157. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
  158. package/dist/_internal/components/layout/Stack/Stack.js +8 -8
  159. package/dist/_internal/components/layout/TableFilter/TableFilter.js +1 -1
  160. package/dist/_internal/components/layout/index.js +13 -13
  161. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
  162. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +4 -4
  163. package/dist/_internal/components/navigation/Pagination/Pagination.js +1 -1
  164. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +1 -1
  165. package/dist/_internal/components/navigation/Tabs/Tabs.js +1 -1
  166. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +1 -1
  167. package/dist/_internal/components/navigation/index.js +4 -4
  168. package/dist/_internal/components/typography/Heading/Heading.js +6 -6
  169. package/dist/_internal/components/typography/Heading/Heading.metrics.js +4 -4
  170. package/dist/_internal/components/typography/Heading/Heading.styles.js +5 -5
  171. package/dist/_internal/components/typography/Text/Text.js +5 -5
  172. package/dist/_internal/components/typography/Text/Text.metrics.js +4 -4
  173. package/dist/_internal/components/typography/index.js +8 -8
  174. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +4 -4
  175. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +4 -4
  176. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +4 -4
  177. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +4 -4
  178. package/dist/_internal/components/utility/index.js +4 -4
  179. package/dist/_internal/icons/Icon.js +7 -7
  180. package/dist/_internal/provider/UiProvider.js +6 -6
  181. package/dist/_internal/provider/mui-bridge.js +5 -5
  182. package/dist/_internal/provider/use-ui-theme.js +6 -6
  183. package/dist/_internal/social-login-button/social-login-button.js +9 -9
  184. package/dist/_internal/tokens/density.js +1 -1
  185. package/dist/_internal/tokens/field-height.js +1 -1
  186. package/dist/_internal/tokens/theme.js +3 -3
  187. package/dist/_internal/user-avatar/user-avatar.js +6 -6
  188. package/dist/charts.js +4 -4
  189. package/dist/{chunk-YPIVLPXF.js → chunk-33NBMNTB.js} +2 -2
  190. package/dist/{chunk-JE6GQB5J.js → chunk-4Z2HIHA5.js} +4 -4
  191. package/dist/{chunk-FHW3ATT7.js → chunk-53HQNN3C.js} +2 -2
  192. package/dist/{chunk-53O2TNSR.js → chunk-5DAVXZPY.js} +3 -3
  193. package/dist/{chunk-DH5UJD2I.js → chunk-5FHPZOYK.js} +2 -2
  194. package/dist/{chunk-NSVSC6ZC.js → chunk-5PJM772Y.js} +4 -4
  195. package/dist/{chunk-VYM2GPR6.js → chunk-5PTCT3LF.js} +2 -2
  196. package/dist/{chunk-ZH2SZ6B3.js → chunk-652PYSML.js} +6 -6
  197. package/dist/{chunk-PEOOCQ2T.js → chunk-6IRJAIS4.js} +2 -2
  198. package/dist/{chunk-PAT2BQOQ.js → chunk-6IWO7CM2.js} +2 -2
  199. package/dist/{chunk-YFODI4KT.js → chunk-6WZUZHJM.js} +8 -8
  200. package/dist/{chunk-KCDNOMMT.js → chunk-6Z6PUG4C.js} +9 -3
  201. package/dist/chunk-6Z6PUG4C.js.map +1 -0
  202. package/dist/{chunk-QEI5DC6S.js → chunk-7KJOODQB.js} +1 -1
  203. package/dist/{chunk-6ZD3FI5P.js → chunk-AOFI3GDS.js} +4 -4
  204. package/dist/{chunk-H72YKEGD.js → chunk-AOKLEE64.js} +2 -2
  205. package/dist/{chunk-RDFPM2AQ.js → chunk-BJGUDLWZ.js} +4 -4
  206. package/dist/{chunk-X66E5WSX.js → chunk-C4QKXFZN.js} +3 -3
  207. package/dist/{chunk-OJUORFGO.js → chunk-C6JUGWAU.js} +4 -4
  208. package/dist/{chunk-DLWLIPCP.js → chunk-CKFZQQ6T.js} +2 -2
  209. package/dist/{chunk-Z2NN53E5.js → chunk-DCT2PKMQ.js} +2 -2
  210. package/dist/{chunk-G6ZPQHBL.js → chunk-DSHM7VN6.js} +2 -2
  211. package/dist/{chunk-WV62BSWA.js → chunk-F5BYZNXY.js} +2 -2
  212. package/dist/{chunk-RDZGXJOD.js → chunk-F5GXWK6B.js} +2 -2
  213. package/dist/{chunk-4Z7GEO2R.js → chunk-G7RYAWPZ.js} +2 -2
  214. package/dist/{chunk-4S2LWZ7L.js → chunk-GO6XDMBB.js} +2 -2
  215. package/dist/{chunk-KHOAXZW2.js → chunk-H3GYVR7S.js} +3 -3
  216. package/dist/{chunk-XZJM6EPC.js → chunk-HUAQQ5ZL.js} +12 -2
  217. package/dist/chunk-HUAQQ5ZL.js.map +1 -0
  218. package/dist/{chunk-C6OVO6AT.js → chunk-I6MVJWUO.js} +2 -2
  219. package/dist/{chunk-4XHVGUOM.js → chunk-J2SFOLGZ.js} +2 -2
  220. package/dist/{chunk-7TE4TMS3.js → chunk-JSOJKHEI.js} +3 -3
  221. package/dist/{chunk-ZNBLGS66.js → chunk-K62RHTFB.js} +3 -3
  222. package/dist/{chunk-6N2EDWMG.js → chunk-KWU62UPM.js} +2 -2
  223. package/dist/{chunk-NHEWST3N.js → chunk-L3MRRAZM.js} +3 -2
  224. package/dist/chunk-L3MRRAZM.js.map +1 -0
  225. package/dist/{chunk-CJ45OL7L.js → chunk-M2GVHVE4.js} +2 -2
  226. package/dist/{chunk-BX7QWHKC.js → chunk-MBNXCCRG.js} +4 -4
  227. package/dist/{chunk-ZSTUKSTJ.js → chunk-MLUUF7OZ.js} +2 -2
  228. package/dist/{chunk-KW3H5FUS.js → chunk-MPYIEIBA.js} +2 -2
  229. package/dist/{chunk-DFI2RKVQ.js → chunk-MRWYKNBY.js} +2 -2
  230. package/dist/{chunk-AP4LSXRK.js → chunk-NYT3UVOH.js} +8 -8
  231. package/dist/{chunk-YWJDUJAR.js → chunk-O6IF4BZT.js} +2 -2
  232. package/dist/{chunk-3UEZ6NUI.js → chunk-OCQ6GDCF.js} +2 -2
  233. package/dist/{chunk-JAGAFEZL.js → chunk-OD3L6GX5.js} +2 -2
  234. package/dist/{chunk-RPBGUWNF.js → chunk-ON4TRXCM.js} +3 -3
  235. package/dist/{chunk-NOLSQK4J.js → chunk-PGV2FLE3.js} +2 -2
  236. package/dist/{chunk-C2TERIB4.js → chunk-QSNLIWEB.js} +2 -2
  237. package/dist/{chunk-XZY7O7JJ.js → chunk-RHKT2XW2.js} +2 -2
  238. package/dist/{chunk-4SHMSLFA.js → chunk-RRG75JJS.js} +2 -2
  239. package/dist/{chunk-6MD5QXXJ.js → chunk-RWRPF24F.js} +4 -4
  240. package/dist/{chunk-VPAOVEI2.js → chunk-SJGYMI6Y.js} +3 -3
  241. package/dist/{chunk-EQXIW5MQ.js → chunk-TCMH3FXD.js} +2 -2
  242. package/dist/{chunk-STTULW2K.js → chunk-TE3XYCX7.js} +2 -2
  243. package/dist/{chunk-TJ3334AJ.js → chunk-TMW7RBW7.js} +3 -3
  244. package/dist/{chunk-DGMDQHMI.js → chunk-U6DOF5CR.js} +14 -2
  245. package/dist/chunk-U6DOF5CR.js.map +1 -0
  246. package/dist/{chunk-3GYPZ5MI.js → chunk-UP7SSTCZ.js} +6 -6
  247. package/dist/{chunk-IWGW2E35.js → chunk-WF4XK5AS.js} +2 -2
  248. package/dist/{chunk-6REPQ352.js → chunk-WL7IG7TT.js} +2 -2
  249. package/dist/{chunk-U67ZQ6VM.js → chunk-YIWVHEPW.js} +2 -2
  250. package/dist/{chunk-DH77PLFF.js → chunk-YTVXT5TD.js} +2 -2
  251. package/dist/{chunk-MKLIMY3D.js → chunk-YZHX2HTC.js} +2 -2
  252. package/dist/{chunk-SQNQQTP7.js → chunk-Z6LTEJ7F.js} +7 -5
  253. package/dist/chunk-Z6LTEJ7F.js.map +1 -0
  254. package/dist/data-display/Alert.js +3 -3
  255. package/dist/data-display/Badge.js +4 -4
  256. package/dist/data-display/Banner.js +3 -3
  257. package/dist/data-display/CardKit.js +3 -3
  258. package/dist/data-display/Carousel.js +4 -4
  259. package/dist/data-display/Chart.js +4 -4
  260. package/dist/data-display/DataGrid.js +11 -2
  261. package/dist/data-display/DataViews.js +39 -38
  262. package/dist/data-display/DescriptionItem.js +6 -6
  263. package/dist/data-display/FleetMap.js +4 -4
  264. package/dist/data-display/MapPreview.js +1 -1
  265. package/dist/data-display/Progress.js +6 -6
  266. package/dist/data-display/Sheet.js +4 -4
  267. package/dist/data-display/Table.js +11 -3
  268. package/dist/feedback/ConfirmAction.js +3 -3
  269. package/dist/feedback/NotificationStatusNotice.js +3 -3
  270. package/dist/form/AddressAutocomplete.js +1 -1
  271. package/dist/form/Autocomplete.js +1 -1
  272. package/dist/form/Button.js +3 -3
  273. package/dist/form/CategorySelect.js +1 -1
  274. package/dist/form/CepField.js +1 -1
  275. package/dist/form/Command.js +4 -4
  276. package/dist/form/CreatableSelect.js +1 -1
  277. package/dist/form/DateRangePicker.js +1 -1
  278. package/dist/form/Input.js +1 -1
  279. package/dist/form/InputOTP.js +1 -1
  280. package/dist/form/Label.js +4 -4
  281. package/dist/form/Menubar.js +4 -4
  282. package/dist/form/NumberField.js +1 -1
  283. package/dist/form/PhoneInput.js +1 -1
  284. package/dist/form/RadioGroup.js +1 -1
  285. package/dist/form/Select.js +1 -1
  286. package/dist/form/Switch.js +3 -3
  287. package/dist/form/Textarea.js +2 -2
  288. package/dist/form/Toggle.js +1 -1
  289. package/dist/form/ToggleGroup.js +1 -1
  290. package/dist/form/total-form.js +3 -3
  291. package/dist/icons.js +7 -7
  292. package/dist/layout/Box.js +7 -7
  293. package/dist/layout/ContentToolbar.js +1 -1
  294. package/dist/layout/SettingCard.js +13 -13
  295. package/dist/layout/Stack.js +8 -8
  296. package/dist/layout/TableFilter.js +1 -1
  297. package/dist/navigation/AppHeader.js +4 -4
  298. package/dist/navigation/Pagination.js +1 -1
  299. package/dist/navigation/Tabs.js +1 -1
  300. package/dist/provider.js +7 -7
  301. package/dist/social-login-button.js +9 -9
  302. package/dist/tokens.js +15 -15
  303. package/dist/types/components/data-display/DataGrid/DataGrid.d.ts.map +1 -1
  304. package/dist/types/components/data-display/DataGrid/DataGrid.model.d.ts +19 -1
  305. package/dist/types/components/data-display/DataGrid/DataGrid.model.d.ts.map +1 -1
  306. package/dist/types/components/data-display/DataViews/data-views-layout-context.d.ts +12 -0
  307. package/dist/types/components/data-display/DataViews/data-views-layout-context.d.ts.map +1 -1
  308. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  309. package/dist/types/components/data-display/Table/Table.helpers.d.ts +10 -1
  310. package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
  311. package/dist/typography/Heading.js +6 -6
  312. package/dist/typography/Text.js +5 -5
  313. package/dist/user-avatar.js +6 -6
  314. package/dist/utility/WorkflowStep.js +4 -4
  315. package/package.json +1 -1
  316. package/src/components/data-display/DataGrid/DataGrid.model.ts +30 -1
  317. package/src/components/data-display/DataGrid/DataGrid.tsx +9 -4
  318. package/src/components/data-display/DataViews/data-views-layout-context.tsx +24 -1
  319. package/src/components/data-display/Table/Table.helpers.ts +20 -2
  320. package/src/components/data-display/Table/Table.tsx +5 -2
  321. package/dist/chunk-DGMDQHMI.js.map +0 -1
  322. package/dist/chunk-KCDNOMMT.js.map +0 -1
  323. package/dist/chunk-NHEWST3N.js.map +0 -1
  324. package/dist/chunk-SQNQQTP7.js.map +0 -1
  325. package/dist/chunk-XZJM6EPC.js.map +0 -1
  326. /package/dist/{chunk-YPIVLPXF.js.map → chunk-33NBMNTB.js.map} +0 -0
  327. /package/dist/{chunk-JE6GQB5J.js.map → chunk-4Z2HIHA5.js.map} +0 -0
  328. /package/dist/{chunk-FHW3ATT7.js.map → chunk-53HQNN3C.js.map} +0 -0
  329. /package/dist/{chunk-53O2TNSR.js.map → chunk-5DAVXZPY.js.map} +0 -0
  330. /package/dist/{chunk-DH5UJD2I.js.map → chunk-5FHPZOYK.js.map} +0 -0
  331. /package/dist/{chunk-NSVSC6ZC.js.map → chunk-5PJM772Y.js.map} +0 -0
  332. /package/dist/{chunk-VYM2GPR6.js.map → chunk-5PTCT3LF.js.map} +0 -0
  333. /package/dist/{chunk-ZH2SZ6B3.js.map → chunk-652PYSML.js.map} +0 -0
  334. /package/dist/{chunk-PEOOCQ2T.js.map → chunk-6IRJAIS4.js.map} +0 -0
  335. /package/dist/{chunk-PAT2BQOQ.js.map → chunk-6IWO7CM2.js.map} +0 -0
  336. /package/dist/{chunk-YFODI4KT.js.map → chunk-6WZUZHJM.js.map} +0 -0
  337. /package/dist/{chunk-QEI5DC6S.js.map → chunk-7KJOODQB.js.map} +0 -0
  338. /package/dist/{chunk-6ZD3FI5P.js.map → chunk-AOFI3GDS.js.map} +0 -0
  339. /package/dist/{chunk-H72YKEGD.js.map → chunk-AOKLEE64.js.map} +0 -0
  340. /package/dist/{chunk-RDFPM2AQ.js.map → chunk-BJGUDLWZ.js.map} +0 -0
  341. /package/dist/{chunk-X66E5WSX.js.map → chunk-C4QKXFZN.js.map} +0 -0
  342. /package/dist/{chunk-OJUORFGO.js.map → chunk-C6JUGWAU.js.map} +0 -0
  343. /package/dist/{chunk-DLWLIPCP.js.map → chunk-CKFZQQ6T.js.map} +0 -0
  344. /package/dist/{chunk-Z2NN53E5.js.map → chunk-DCT2PKMQ.js.map} +0 -0
  345. /package/dist/{chunk-G6ZPQHBL.js.map → chunk-DSHM7VN6.js.map} +0 -0
  346. /package/dist/{chunk-WV62BSWA.js.map → chunk-F5BYZNXY.js.map} +0 -0
  347. /package/dist/{chunk-RDZGXJOD.js.map → chunk-F5GXWK6B.js.map} +0 -0
  348. /package/dist/{chunk-4Z7GEO2R.js.map → chunk-G7RYAWPZ.js.map} +0 -0
  349. /package/dist/{chunk-4S2LWZ7L.js.map → chunk-GO6XDMBB.js.map} +0 -0
  350. /package/dist/{chunk-KHOAXZW2.js.map → chunk-H3GYVR7S.js.map} +0 -0
  351. /package/dist/{chunk-C6OVO6AT.js.map → chunk-I6MVJWUO.js.map} +0 -0
  352. /package/dist/{chunk-4XHVGUOM.js.map → chunk-J2SFOLGZ.js.map} +0 -0
  353. /package/dist/{chunk-7TE4TMS3.js.map → chunk-JSOJKHEI.js.map} +0 -0
  354. /package/dist/{chunk-ZNBLGS66.js.map → chunk-K62RHTFB.js.map} +0 -0
  355. /package/dist/{chunk-6N2EDWMG.js.map → chunk-KWU62UPM.js.map} +0 -0
  356. /package/dist/{chunk-CJ45OL7L.js.map → chunk-M2GVHVE4.js.map} +0 -0
  357. /package/dist/{chunk-BX7QWHKC.js.map → chunk-MBNXCCRG.js.map} +0 -0
  358. /package/dist/{chunk-ZSTUKSTJ.js.map → chunk-MLUUF7OZ.js.map} +0 -0
  359. /package/dist/{chunk-KW3H5FUS.js.map → chunk-MPYIEIBA.js.map} +0 -0
  360. /package/dist/{chunk-DFI2RKVQ.js.map → chunk-MRWYKNBY.js.map} +0 -0
  361. /package/dist/{chunk-AP4LSXRK.js.map → chunk-NYT3UVOH.js.map} +0 -0
  362. /package/dist/{chunk-YWJDUJAR.js.map → chunk-O6IF4BZT.js.map} +0 -0
  363. /package/dist/{chunk-3UEZ6NUI.js.map → chunk-OCQ6GDCF.js.map} +0 -0
  364. /package/dist/{chunk-JAGAFEZL.js.map → chunk-OD3L6GX5.js.map} +0 -0
  365. /package/dist/{chunk-RPBGUWNF.js.map → chunk-ON4TRXCM.js.map} +0 -0
  366. /package/dist/{chunk-NOLSQK4J.js.map → chunk-PGV2FLE3.js.map} +0 -0
  367. /package/dist/{chunk-C2TERIB4.js.map → chunk-QSNLIWEB.js.map} +0 -0
  368. /package/dist/{chunk-XZY7O7JJ.js.map → chunk-RHKT2XW2.js.map} +0 -0
  369. /package/dist/{chunk-4SHMSLFA.js.map → chunk-RRG75JJS.js.map} +0 -0
  370. /package/dist/{chunk-6MD5QXXJ.js.map → chunk-RWRPF24F.js.map} +0 -0
  371. /package/dist/{chunk-VPAOVEI2.js.map → chunk-SJGYMI6Y.js.map} +0 -0
  372. /package/dist/{chunk-EQXIW5MQ.js.map → chunk-TCMH3FXD.js.map} +0 -0
  373. /package/dist/{chunk-STTULW2K.js.map → chunk-TE3XYCX7.js.map} +0 -0
  374. /package/dist/{chunk-TJ3334AJ.js.map → chunk-TMW7RBW7.js.map} +0 -0
  375. /package/dist/{chunk-3GYPZ5MI.js.map → chunk-UP7SSTCZ.js.map} +0 -0
  376. /package/dist/{chunk-IWGW2E35.js.map → chunk-WF4XK5AS.js.map} +0 -0
  377. /package/dist/{chunk-6REPQ352.js.map → chunk-WL7IG7TT.js.map} +0 -0
  378. /package/dist/{chunk-U67ZQ6VM.js.map → chunk-YIWVHEPW.js.map} +0 -0
  379. /package/dist/{chunk-DH77PLFF.js.map → chunk-YTVXT5TD.js.map} +0 -0
  380. /package/dist/{chunk-MKLIMY3D.js.map → chunk-YZHX2HTC.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import type React from 'react';
2
- import type { DataGridProps, GridColumn, GridSort } from './DataGrid.types';
2
+ import { type DensityLevel } from '../../../tokens/density';
3
+ import type { DataGridProps, GridColumn, GridDensity, GridSort } from './DataGrid.types';
3
4
  /** Which id is being edited, or `null`. */
4
5
  export interface EditingCell {
5
6
  rowId: string | number;
@@ -13,6 +14,13 @@ export interface VisibleRange {
13
14
  /** Everything the render needs, and nothing it has to derive. */
14
15
  export interface DataGridModel<T extends Record<string, unknown>> {
15
16
  containerRef: React.RefObject<HTMLDivElement | null>;
17
+ /**
18
+ * The density this render actually used: `props.density`, else the
19
+ * theme-driven default (FUT-2769, {@link mapThemeToGridDensity}). The same
20
+ * value `rowHeight` was scaled by — read it here rather than re-deriving it,
21
+ * so the reported default and the geometry can never disagree.
22
+ */
23
+ density: GridDensity;
16
24
  /** A row's height as CSS: the design height, density applied, through `rem`. */
17
25
  rowHeight: string;
18
26
  /**
@@ -37,5 +45,15 @@ export interface DataGridModel<T extends Record<string, unknown>> {
37
45
  onToggleExpansion: (rowId: string | number) => void;
38
46
  onScroll: (event: React.UIEvent<HTMLDivElement>) => void;
39
47
  }
48
+ /**
49
+ * The theme's density level, aliased to `GridDensity` (FUT-2769 — umbrella
50
+ * Decision 7, non-breaking): `GridDensity`'s three names are not the theme's
51
+ * three names, so this is an alias table rather than a verbatim read.
52
+ * `'normal'` (the theme's own default, and what a theme with no density at
53
+ * all resolves to) maps to `'comfortable'` — today's literal default,
54
+ * unchanged — so the mapping is a no-op exactly when nothing about density
55
+ * has been said.
56
+ */
57
+ export declare function mapThemeToGridDensity(level: DensityLevel): GridDensity;
40
58
  export declare function useDataGridModel<T extends Record<string, unknown>>(props: DataGridProps<T>): DataGridModel<T>;
41
59
  //# sourceMappingURL=DataGrid.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.model.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DataGrid/DataGrid.model.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAEV,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAY1B,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,WAAW,EAAE,CAAC,EAAE,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACvC,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,iBAAiB,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC1D;AAsND,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GACtB,aAAa,CAAC,CAAC,CAAC,CAoClB"}
1
+ {"version":3,"file":"DataGrid.model.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DataGrid/DataGrid.model.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,WAAW,EAEX,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAY1B,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD;;;;;OAKG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,WAAW,EAAE,CAAC,EAAE,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACvC,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD,iBAAiB,EAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACnD,iBAAiB,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC1D;AASD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAItE;AA+MD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GACtB,aAAa,CAAC,CAAC,CAAC,CAyClB"}
@@ -1,4 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
+ import { type DensityLevel } from "../../../tokens/density";
2
3
  import { type DataViewsLayout } from "./data-views-types";
3
4
  /**
4
5
  * The DataViews layout (view type): the dense "Tabela" grid, the "Grade" of
@@ -91,6 +92,17 @@ interface LayoutAvailability {
91
92
  canUseList: boolean;
92
93
  canUseBoard: boolean;
93
94
  }
95
+ /**
96
+ * The theme's density level, aliased to `DataViewsDensity` (FUT-2769 —
97
+ * umbrella Decision 7, non-breaking): `DataViewsDensity`'s three names are not
98
+ * the theme's three names, so this is an alias table rather than a verbatim
99
+ * read. `'normal'` (the theme's own default, and what a theme with no density
100
+ * at all resolves to) maps to `'cozy'` — today's literal default, unchanged —
101
+ * so the mapping is a no-op exactly when nothing about density has been said.
102
+ * The STORED per-viewer preference still wins over this default, unchanged
103
+ * from today (below).
104
+ */
105
+ export declare function mapThemeToDataViewsDensity(level: DensityLevel): DataViewsDensity;
94
106
  interface LayoutProviderProps extends Partial<LayoutAvailability> {
95
107
  /** Which layout to show first when the user has expressed no preference. */
96
108
  defaultLayout?: DataViewsLayout;
@@ -1 +1 @@
1
- {"version":3,"file":"data-views-layout-context.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DataViews/data-views-layout-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAShG,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;GAOG;AACH,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,UAAU,oBAAoB;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7C,oEAAoE;IACpE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAwBD;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAKlE,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAIhE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAI/D,CAAC;AAEF,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAElF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAIhE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,oDAAoD;AACpD,UAAU,kBAAkB;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AA6DD,UAAU,mBAAoB,SAAQ,OAAO,CAAC,kBAAkB,CAAC;IAC/D,4EAA4E;IAC5E,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,WAAmB,EACnB,UAAkB,EAClB,WAAmB,EACnB,aAAuB,EACvB,UAAU,EACV,kBAA0B,EAC1B,QAAQ,GACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgDzC;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA8BxG"}
1
+ {"version":3,"file":"data-views-layout-context.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/DataViews/data-views-layout-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOhG,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;GAOG;AACH,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,UAAU,oBAAoB;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7C,oEAAoE;IACpE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAwBD;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAKlE,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAIhE,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAI/D,CAAC;AAEF,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAElF;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAIhE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,oDAAoD;AACpD,UAAU,kBAAkB;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAYD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,YAAY,GAAG,gBAAgB,CAIhF;AAmDD,UAAU,mBAAoB,SAAQ,OAAO,CAAC,kBAAkB,CAAC;IAC/D,4EAA4E;IAC5E,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,WAAmB,EACnB,UAAkB,EAClB,WAAmB,EACnB,aAAuB,EACvB,UAAU,EACV,kBAA0B,EAC1B,QAAQ,GACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAsDzC;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA8BxG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAAC,MAAM,eAAe,CAAC;AA4CzC,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CA+BA,CAAC;AAqBF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AAyMxF,eAAO,MAAM,KAAK,kGAiEjB,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAAC,MAAM,eAAe,CAAC;AA6CzC,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CA+BA,CAAC;AAqBF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AAyMxF,eAAO,MAAM,KAAK,kGAmEjB,CAAC"}
@@ -1,12 +1,21 @@
1
1
  import type { Theme } from '@mui/material/styles/index.js';
2
2
  import type React from 'react';
3
- import type { TableProps } from './Table.types';
3
+ import type { DensityLevel } from '../../../tokens/density';
4
+ import type { TableDensity, TableProps } from './Table.types';
4
5
  /**
5
6
  * A virtualised row's height in design px: the caller's `rowHeight`, else 52.
6
7
  * Resolved here rather than in {@link TABLE_DEFAULTS} so the one number is read
7
8
  * where it is drawn (`rem`) and where the window is positioned with it (`remPx`).
8
9
  */
9
10
  export declare const tableRowHeight: (rowHeight: number | undefined) => number;
11
+ /**
12
+ * `density`'s default (FUT-2769): the caller's own prop, else the theme's
13
+ * level — `'normal'` for a theme with no density at all (`useDensity()`'s own
14
+ * fallback) or an unnamed numeric one. `TableDensity` is a verbatim match for
15
+ * the theme's `DensityLevel`, so no alias table is needed, unlike `DataGrid`'s
16
+ * `mapThemeToGridDensity` or `DataViews`' `mapThemeToDataViewsDensity`.
17
+ */
18
+ export declare const resolveTableDensity: (explicit: TableDensity | undefined, themeLevel: DensityLevel | undefined) => TableDensity;
10
19
  /**
11
20
  * The table's one scroll container (FUT-2658): `containerHeight` tall
12
21
  * whenever it is set, or 400 when `virtualScrolling` is on and it is not,
@@ -1 +1 @@
1
- {"version":3,"file":"Table.helpers.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,GAAG,SAAS,KAAG,MAAyB,CAAC;AAQzF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,GAAG,UAAU,KAAG,KAAK,CAAC,aAAa,GAAG,SAGnE,CAAC;AAEhB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,KAAK,EACZ,cAAc,OAAO,GAAG,SAAS,KAChC,KAAK,CAAC,aAAa,GAAG,SAA4E,CAAC;AAEtG,gFAAgF;AAChF,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,GAAG,UAAU,KAAG,KAAK,CAAC,aAAa,GAAG,SAIlF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,cAAc,MAAM,GAAG,SAAS,EAChC,SAAS,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAClE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,SAC5B,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,UAAU,KAAG,MAAM,GAAG,SAIxC,CAAC;AAEhB,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,UAAU,CAgB9C,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,OAAO,CAAC,UAAU,CAGzC,CAAC;AA2D3B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACc,CAAC"}
1
+ {"version":3,"file":"Table.helpers.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,GAAG,SAAS,KAAG,MAAyB,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,YAAY,GAAG,SAAS,EAClC,YAAY,YAAY,GAAG,SAAS,KACnC,YAAkD,CAAC;AAQtD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,GAAG,UAAU,KAAG,KAAK,CAAC,aAAa,GAAG,SAGnE,CAAC;AAEhB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,KAAK,EACZ,cAAc,OAAO,GAAG,SAAS,KAChC,KAAK,CAAC,aAAa,GAAG,SAA4E,CAAC;AAEtG,gFAAgF;AAChF,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,GAAG,UAAU,KAAG,KAAK,CAAC,aAAa,GAAG,SAIlF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,cAAc,MAAM,GAAG,SAAS,EAChC,SAAS,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAClE,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,SAC5B,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,UAAU,KAAG,MAAM,GAAG,SAIxC,CAAC;AAQhB,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,UAAU,CAe9C,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,OAAO,CAAC,UAAU,CAGzC,CAAC;AA2D3B;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACc,CAAC"}
@@ -1,18 +1,18 @@
1
1
  import "../chunk-6GP2DOOO.js";
2
2
  import {
3
3
  Heading
4
- } from "../chunk-X66E5WSX.js";
5
- import "../chunk-IWGW2E35.js";
6
- import "../chunk-CJ45OL7L.js";
4
+ } from "../chunk-C4QKXFZN.js";
5
+ import "../chunk-WF4XK5AS.js";
6
+ import "../chunk-M2GVHVE4.js";
7
7
  import "../chunk-TYJR4GOF.js";
8
8
  import "../chunk-PT6TCWIW.js";
9
- import "../chunk-YFODI4KT.js";
10
- import "../chunk-VBP46YP4.js";
9
+ import "../chunk-6WZUZHJM.js";
11
10
  import "../chunk-2BYKTBDL.js";
12
11
  import "../chunk-AG66JBNH.js";
13
12
  import "../chunk-FZXKH2ZT.js";
14
- import "../chunk-26X4CZVR.js";
13
+ import "../chunk-VBP46YP4.js";
15
14
  import "../chunk-O6MJWHU5.js";
15
+ import "../chunk-26X4CZVR.js";
16
16
  import "../chunk-FQ6UW7IY.js";
17
17
  import "../chunk-6JAIFIPW.js";
18
18
  import "../chunk-N3GAFIXG.js";
@@ -1,16 +1,16 @@
1
1
  import "../chunk-VUHLNYAE.js";
2
2
  import {
3
3
  Text
4
- } from "../chunk-MKLIMY3D.js";
5
- import "../chunk-PAT2BQOQ.js";
4
+ } from "../chunk-YZHX2HTC.js";
5
+ import "../chunk-6IWO7CM2.js";
6
6
  import "../chunk-TYJR4GOF.js";
7
- import "../chunk-YFODI4KT.js";
8
- import "../chunk-VBP46YP4.js";
7
+ import "../chunk-6WZUZHJM.js";
9
8
  import "../chunk-2BYKTBDL.js";
10
9
  import "../chunk-AG66JBNH.js";
11
10
  import "../chunk-FZXKH2ZT.js";
12
- import "../chunk-26X4CZVR.js";
11
+ import "../chunk-VBP46YP4.js";
13
12
  import "../chunk-O6MJWHU5.js";
13
+ import "../chunk-26X4CZVR.js";
14
14
  import "../chunk-6JAIFIPW.js";
15
15
  import "../chunk-YKCAJ2TN.js";
16
16
  import "../chunk-PZ5AY32C.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  UserAvatar,
3
3
  UserMenu
4
- } from "./chunk-YWJDUJAR.js";
4
+ } from "./chunk-O6IF4BZT.js";
5
5
  import "./chunk-UDQSIRAP.js";
6
6
  import "./chunk-NYFGFELX.js";
7
7
  import "./chunk-3ZVUNSFF.js";
@@ -19,20 +19,20 @@ import "./chunk-K6LNHHSH.js";
19
19
  import "./chunk-ZKWVCSAB.js";
20
20
  import "./chunk-LN46DSMF.js";
21
21
  import "./chunk-TAMIZE4Q.js";
22
- import "./chunk-MKLIMY3D.js";
23
- import "./chunk-PAT2BQOQ.js";
22
+ import "./chunk-YZHX2HTC.js";
23
+ import "./chunk-6IWO7CM2.js";
24
24
  import "./chunk-TYJR4GOF.js";
25
25
  import "./chunk-M47ZOUGF.js";
26
26
  import "./chunk-7FDU3FIN.js";
27
27
  import "./chunk-EPEJMTCQ.js";
28
28
  import "./chunk-GDN2LUTZ.js";
29
- import "./chunk-YFODI4KT.js";
30
- import "./chunk-VBP46YP4.js";
29
+ import "./chunk-6WZUZHJM.js";
31
30
  import "./chunk-2BYKTBDL.js";
32
31
  import "./chunk-AG66JBNH.js";
33
32
  import "./chunk-FZXKH2ZT.js";
34
- import "./chunk-26X4CZVR.js";
33
+ import "./chunk-VBP46YP4.js";
35
34
  import "./chunk-O6MJWHU5.js";
35
+ import "./chunk-26X4CZVR.js";
36
36
  import "./chunk-FQ6UW7IY.js";
37
37
  import "./chunk-6JAIFIPW.js";
38
38
  import "./chunk-N3GAFIXG.js";
@@ -6,20 +6,20 @@ import "../chunk-7OO3BELX.js";
6
6
  import "../chunk-KJID4PRD.js";
7
7
  import "../chunk-RXNIOPOA.js";
8
8
  import "../chunk-ZSTSISM6.js";
9
- import "../chunk-DJKVSUXH.js";
10
9
  import "../chunk-7ZPUN7TV.js";
10
+ import "../chunk-DJKVSUXH.js";
11
11
  import "../chunk-PT6TCWIW.js";
12
12
  import "../chunk-M47ZOUGF.js";
13
13
  import "../chunk-7FDU3FIN.js";
14
14
  import "../chunk-EPEJMTCQ.js";
15
15
  import "../chunk-GDN2LUTZ.js";
16
- import "../chunk-YFODI4KT.js";
17
- import "../chunk-VBP46YP4.js";
16
+ import "../chunk-6WZUZHJM.js";
18
17
  import "../chunk-2BYKTBDL.js";
19
18
  import "../chunk-AG66JBNH.js";
20
19
  import "../chunk-FZXKH2ZT.js";
21
- import "../chunk-26X4CZVR.js";
20
+ import "../chunk-VBP46YP4.js";
22
21
  import "../chunk-O6MJWHU5.js";
22
+ import "../chunk-26X4CZVR.js";
23
23
  import "../chunk-FQ6UW7IY.js";
24
24
  import "../chunk-6JAIFIPW.js";
25
25
  import "../chunk-N3GAFIXG.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.42.0",
3
+ "version": "6.43.0",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -15,11 +15,13 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
15
15
  import type React from 'react';
16
16
 
17
17
  import { rem, remPx } from '../../../tokens/relative';
18
+ import { useDensity, type DensityLevel } from '../../../tokens/density';
18
19
 
19
20
  import { processRows } from './DataGrid.rows';
20
21
  import type {
21
22
  DataGridProps,
22
23
  GridColumn,
24
+ GridDensity,
23
25
  GridFilter,
24
26
  GridSort,
25
27
  SortDirection,
@@ -50,6 +52,13 @@ export interface VisibleRange {
50
52
  /** Everything the render needs, and nothing it has to derive. */
51
53
  export interface DataGridModel<T extends Record<string, unknown>> {
52
54
  containerRef: React.RefObject<HTMLDivElement | null>;
55
+ /**
56
+ * The density this render actually used: `props.density`, else the
57
+ * theme-driven default (FUT-2769, {@link mapThemeToGridDensity}). The same
58
+ * value `rowHeight` was scaled by — read it here rather than re-deriving it,
59
+ * so the reported default and the geometry can never disagree.
60
+ */
61
+ density: GridDensity;
53
62
  /** A row's height as CSS: the design height, density applied, through `rem`. */
54
63
  rowHeight: string;
55
64
  /**
@@ -82,6 +91,21 @@ function densityHeight(base: number, density: DataGridProps['density']): number
82
91
  return base;
83
92
  }
84
93
 
94
+ /**
95
+ * The theme's density level, aliased to `GridDensity` (FUT-2769 — umbrella
96
+ * Decision 7, non-breaking): `GridDensity`'s three names are not the theme's
97
+ * three names, so this is an alias table rather than a verbatim read.
98
+ * `'normal'` (the theme's own default, and what a theme with no density at
99
+ * all resolves to) maps to `'comfortable'` — today's literal default,
100
+ * unchanged — so the mapping is a no-op exactly when nothing about density
101
+ * has been said.
102
+ */
103
+ export function mapThemeToGridDensity(level: DensityLevel): GridDensity {
104
+ if (level === 'compact') return 'compact';
105
+ if (level === 'comfortable') return 'spacious';
106
+ return 'comfortable';
107
+ }
108
+
85
109
  /** The rows this render should show, with every client-mode step resolved. */
86
110
  function useProcessedRows<T extends Record<string, unknown>>(
87
111
  props: DataGridProps<T>,
@@ -292,11 +316,15 @@ export function useDataGridModel<T extends Record<string, unknown>>(
292
316
  ): DataGridModel<T> {
293
317
  const { columns } = props;
294
318
  const theme = useTheme();
319
+ const themeDensity = useDensity();
295
320
  const containerRef = useRef<HTMLDivElement>(null);
296
321
  const [editingCell, setEditingCell] = useState<EditingCell | null>(null);
297
322
  const { sortBy, filters, setInternalSortBy } = useSortAndFilter(props);
323
+ // An explicit `density` prop wins; otherwise the theme's own level, aliased
324
+ // to this grid's three names (FUT-2769).
325
+ const density = props.density ?? mapThemeToGridDensity(themeDensity.level ?? 'normal');
298
326
  // 52 design px unless the caller says; the density scales it, then the type scale does.
299
- const designRowHeight = densityHeight(props.rowHeight ?? 52, props.density);
327
+ const designRowHeight = densityHeight(props.rowHeight ?? 52, density);
300
328
  const rowPitch = remPx(theme, designRowHeight);
301
329
  const columnMap = useMemo(
302
330
  () => new Map(columns.map((column) => [column.id, column])),
@@ -311,6 +339,7 @@ export function useDataGridModel<T extends Record<string, unknown>>(
311
339
 
312
340
  return {
313
341
  containerRef,
342
+ density,
314
343
  rowHeight: rem(theme, designRowHeight),
315
344
  rowPitch,
316
345
  visibleColumns,
@@ -19,7 +19,7 @@ import type React from 'react';
19
19
  import { GridBody, GridHeader } from './DataGrid.body';
20
20
  import { useDataGridModel } from './DataGrid.model';
21
21
  import { DataGridEmpty, DataGridError, DataGridLoading } from './DataGrid.states';
22
- import type { DataGridProps } from './DataGrid.types';
22
+ import type { DataGridProps, GridDensity } from './DataGrid.types';
23
23
 
24
24
  /**
25
25
  * The chrome every render needs, with the defaults resolved ONCE.
@@ -28,7 +28,10 @@ import type { DataGridProps } from './DataGrid.types';
28
28
  * a dozen branches: the gate counted them, correctly, as complexity the render
29
29
  * did not need to carry.
30
30
  */
31
- function resolveChrome<T extends Record<string, unknown>>(props: DataGridProps<T>): {
31
+ function resolveChrome<T extends Record<string, unknown>>(
32
+ props: DataGridProps<T>,
33
+ density: GridDensity,
34
+ ): {
32
35
  dataAttrs: Record<string, unknown>;
33
36
  placeholder: {
34
37
  dataTestId?: string;
@@ -43,7 +46,9 @@ function resolveChrome<T extends Record<string, unknown>>(props: DataGridProps<T
43
46
  return {
44
47
  dataAttrs: {
45
48
  'data-ui': 'datagrid',
46
- 'data-density': props.density ?? 'comfortable',
49
+ // The SAME resolved density the row-height geometry used (FUT-2769) —
50
+ // not re-derived here, so this attribute can never disagree with it.
51
+ 'data-density': density,
47
52
  'data-size-mode': props.sizeMode ?? 'auto',
48
53
  'data-virtual-rows': props.virtualizeRows ?? true,
49
54
  'data-virtual-cols': props.virtualizeColumns ?? false,
@@ -65,7 +70,7 @@ export const DataGrid = <T extends Record<string, unknown> = Record<string, unkn
65
70
  props: DataGridProps<T>,
66
71
  ): React.JSX.Element => {
67
72
  const model = useDataGridModel(props);
68
- const { dataAttrs, placeholder } = resolveChrome(props);
73
+ const { dataAttrs, placeholder } = resolveChrome(props, model.density);
69
74
 
70
75
  if (props.loading) return <DataGridLoading {...placeholder} />;
71
76
  if (props.error) return <DataGridError {...placeholder} error={props.error} />;
@@ -7,6 +7,7 @@ import GridViewOutlinedIcon from "@mui/icons-material/GridViewOutlined";
7
7
  import { Slider } from "../../form/Slider";
8
8
  import { Box } from "../../../mui/Box";
9
9
  import { sxRem } from "../../../tokens/relative";
10
+ import { useDensity, type DensityLevel } from "../../../tokens/density";
10
11
 
11
12
  import { useDataViewsCopy } from "./data-views-copy-context";
12
13
  import { DATA_VIEWS_LAYOUTS, type DataViewsLayout } from "./data-views-types";
@@ -166,6 +167,22 @@ function isDensity(value: unknown): value is DataViewsDensity {
166
167
  return DENSITIES.includes(value as DataViewsDensity);
167
168
  }
168
169
 
170
+ /**
171
+ * The theme's density level, aliased to `DataViewsDensity` (FUT-2769 —
172
+ * umbrella Decision 7, non-breaking): `DataViewsDensity`'s three names are not
173
+ * the theme's three names, so this is an alias table rather than a verbatim
174
+ * read. `'normal'` (the theme's own default, and what a theme with no density
175
+ * at all resolves to) maps to `'cozy'` — today's literal default, unchanged —
176
+ * so the mapping is a no-op exactly when nothing about density has been said.
177
+ * The STORED per-viewer preference still wins over this default, unchanged
178
+ * from today (below).
179
+ */
180
+ export function mapThemeToDataViewsDensity(level: DensityLevel): DataViewsDensity {
181
+ if (level === 'compact') return 'compact';
182
+ if (level === 'comfortable') return 'comfortable';
183
+ return 'cozy';
184
+ }
185
+
169
186
  /** The remembered density, or undefined (no window, no value, junk). */
170
187
  function readStoredDensity(): DataViewsDensity | undefined {
171
188
  try {
@@ -258,6 +275,10 @@ export function DataViewsLayoutProvider({
258
275
  children,
259
276
  }: LayoutProviderProps): React.JSX.Element {
260
277
  const availability = { canUseCards, canUseList, canUseBoard };
278
+ // Read once, outside the lazy initializer below: a hook cannot be called
279
+ // from inside one (FUT-2769 — the theme is only a fallback when nothing is
280
+ // stored, same precedence as before this ticket).
281
+ const themeDensity = useDensity();
261
282
  const [layout, setLayoutState] = useState<DataViewsLayout>(() =>
262
283
  pinLayout(
263
284
  viewLayout ?? (ignoreStoredLayout ? undefined : readStoredLayout()) ?? defaultLayout,
@@ -265,7 +286,9 @@ export function DataViewsLayoutProvider({
265
286
  ),
266
287
  );
267
288
  const [density, setDensityState] = useState<DataViewsDensity>(
268
- () => (ignoreStoredLayout ? undefined : readStoredDensity()) ?? "cozy",
289
+ () =>
290
+ (ignoreStoredLayout ? undefined : readStoredDensity()) ??
291
+ mapThemeToDataViewsDensity(themeDensity.level ?? "normal"),
269
292
  );
270
293
  const [zoom, setZoom] = useState(DEFAULT_ZOOM);
271
294
  // A newly applied view carrying a layout switches to it (its reference-change
@@ -3,8 +3,9 @@ import type { Theme } from '@mui/material/styles/index.js';
3
3
  import type React from 'react';
4
4
 
5
5
  import { rem } from '../../../tokens/relative';
6
+ import type { DensityLevel } from '../../../tokens/density';
6
7
 
7
- import type { TableProps } from './Table.types';
8
+ import type { TableDensity, TableProps } from './Table.types';
8
9
 
9
10
  /**
10
11
  * A virtualised row's height in design px: the caller's `rowHeight`, else 52.
@@ -13,6 +14,18 @@ import type { TableProps } from './Table.types';
13
14
  */
14
15
  export const tableRowHeight = (rowHeight: number | undefined): number => rowHeight ?? 52;
15
16
 
17
+ /**
18
+ * `density`'s default (FUT-2769): the caller's own prop, else the theme's
19
+ * level — `'normal'` for a theme with no density at all (`useDensity()`'s own
20
+ * fallback) or an unnamed numeric one. `TableDensity` is a verbatim match for
21
+ * the theme's `DensityLevel`, so no alias table is needed, unlike `DataGrid`'s
22
+ * `mapThemeToGridDensity` or `DataViews`' `mapThemeToDataViewsDensity`.
23
+ */
24
+ export const resolveTableDensity = (
25
+ explicit: TableDensity | undefined,
26
+ themeLevel: DensityLevel | undefined,
27
+ ): TableDensity => explicit ?? themeLevel ?? 'normal';
28
+
16
29
  /** The scroll box's height: a number is design px, 400 unless the caller says otherwise. */
17
30
  const scrollHeight = (theme: Theme, containerHeight: number | string | undefined): string => {
18
31
  const box = containerHeight || 400;
@@ -71,6 +84,12 @@ export const virtualHeight = (p: TableProps): number | undefined =>
71
84
  ? p.containerHeight
72
85
  : undefined;
73
86
 
87
+ // `density` is NOT here (FUT-2769): `TableDensity` is a verbatim match for
88
+ // the theme's `DensityLevel`, so `Table.tsx` resolves it itself —
89
+ // `props.density ?? (useDensity().level ?? 'normal')` — reading the theme
90
+ // requires a hook, which this module-level constant cannot call. At
91
+ // `theme.density` unset, or its level `'normal'`, that reproduces this
92
+ // object's OTHER defaults' shape exactly: today's literal `'normal'`.
74
93
  export const TABLE_DEFAULTS: Partial<TableProps> = {
75
94
  variant: 'default',
76
95
  stripeColor: 'neutral',
@@ -78,7 +97,6 @@ export const TABLE_DEFAULTS: Partial<TableProps> = {
78
97
  pulse: false,
79
98
  hoverable: false,
80
99
  loading: false,
81
- density: 'normal',
82
100
  stickyHeader: false,
83
101
  selectable: false,
84
102
  selectedRows: [],
@@ -24,6 +24,7 @@ import {
24
24
  containerStyle,
25
25
  definedProps,
26
26
  headerRefFor,
27
+ resolveTableDensity,
27
28
  scrollerRadiusStyle,
28
29
  tableDomProps,
29
30
  tableRowHeight,
@@ -32,9 +33,9 @@ import {
32
33
  import { useTableSelection, useVirtualScrolling } from './Table.hooks';
33
34
  import { EnhancedTableBody, EnhancedTableHeader } from './TableParts';
34
35
  import { EmptyRow, NoDataPlaceholder } from './TableStates';
35
- import {
36
- tableStyles } from './Table.styles';
36
+ import { tableStyles } from './Table.styles';
37
37
  import { rem } from '../../../tokens/relative';
38
+ import { useDensity } from '../../../tokens/density';
38
39
 
39
40
  // Helper function to get stripe color from theme
40
41
  const StyledTable = styled(MuiTable, {
@@ -329,7 +330,9 @@ const TableEmptyState: React.FC<{
329
330
 
330
331
  export const Table = React.forwardRef<globalThis.HTMLTableElement, TableProps>(
331
332
  (tableProps, ref) => {
333
+ const themeDensity = useDensity(); // FUT-2769 — density's default; see resolveTableDensity
332
334
  const resolved = { ...TABLE_DEFAULTS, ...definedProps(tableProps) } as TableProps;
335
+ resolved.density = resolveTableDensity(resolved.density, themeDensity.level);
333
336
  const {
334
337
  columns,
335
338
  data,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/DataGrid/DataGrid.model.ts"],"sourcesContent":["/**\n * The DataGrid's STATE, in one hook.\n *\n * The component used to hold all of it inline, which made its body 700 lines\n * long and put the row pipeline, the virtualization window and the JSX in one\n * scope where any of them could reach any other. Split out, each piece is a\n * hook with named inputs and the render is left with nothing to do but render.\n *\n * Controlled/uncontrolled is resolved in ONE place per feature: a caller that\n * passes `sorting.sortBy` owns the sort, and a caller that does not gets the\n * internal state — the component never holds a second, divergent copy.\n */\nimport { useTheme } from '@mui/material/styles/index.js';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type React from 'react';\n\nimport { rem, remPx } from '../../../tokens/relative';\n\nimport { processRows } from './DataGrid.rows';\nimport type {\n DataGridProps,\n GridColumn,\n GridFilter,\n GridSort,\n SortDirection,\n} from './DataGrid.types';\n\nconst DEFAULT_PAGE_SIZE = 50;\n/** Rows rendered on either side of the window, so a fast scroll stays filled. */\nconst OVERSCAN_COUNT = 20;\n/** Below this many rows, virtualization costs more than it saves. */\nconst VIRTUALIZATION_THRESHOLD = 100;\n/** The initial (and reset) window size, before a scroll has measured anything. */\nconst INITIAL_WINDOW = 50;\n/** Re-window only past this much drift, so a scroll is not one setState per pixel. */\nconst WINDOW_DRIFT = 5;\n\n/** Which id is being edited, or `null`. */\nexport interface EditingCell {\n rowId: string | number;\n colId: string;\n}\n\n/** The visible slice of a virtualized body. */\nexport interface VisibleRange {\n start: number;\n end: number;\n}\n\n/** Everything the render needs, and nothing it has to derive. */\nexport interface DataGridModel<T extends Record<string, unknown>> {\n containerRef: React.RefObject<HTMLDivElement | null>;\n /** A row's height as CSS: the design height, density applied, through `rem`. */\n rowHeight: string;\n /**\n * The same height in px (`remPx`) — what the window divides `scrollTop` by.\n * One design number drawn two ways, so the rows and the window never disagree.\n */\n rowPitch: number;\n visibleColumns: GridColumn<T>[];\n processedRows: T[];\n visibleRows: T[];\n visibleRange: VisibleRange;\n virtualized: boolean;\n sortBy: readonly GridSort[];\n selectedRowIds: Array<string | number>;\n selectedRowIdsSet: ReadonlySet<string | number>;\n expandedRowIdsSet: ReadonlySet<string | number>;\n editingCell: EditingCell | null;\n setEditingCell: (cell: EditingCell | null) => void;\n setSelectedRowIds: (ids: Array<string | number>) => void;\n onSort: (columnId: string) => void;\n onToggleRow: (rowId: string | number, isSelected: boolean) => void;\n onToggleExpansion: (rowId: string | number) => void;\n onScroll: (event: React.UIEvent<HTMLDivElement>) => void;\n}\n\n/** The row height a density implies, in design px. */\nfunction densityHeight(base: number, density: DataGridProps['density']): number {\n if (density === 'compact') return Math.max(base * 0.8, 32);\n if (density === 'spacious') return base * 1.2;\n return base;\n}\n\n/** The rows this render should show, with every client-mode step resolved. */\nfunction useProcessedRows<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n columnMap: ReadonlyMap<string, GridColumn<T>>,\n sortBy: readonly GridSort[],\n filters: readonly GridFilter[],\n): T[] {\n const { rows, filtering = {}, sorting = {}, pagination, virtualizeRows = true } = props;\n const pageIndex = pagination?.pageIndex ?? 0;\n const pageSize = pagination?.pageSize ?? DEFAULT_PAGE_SIZE;\n return useMemo(\n () =>\n processRows({\n rows,\n columnMap,\n filters,\n sortBy,\n needsFiltering: filtering.mode === 'client' && filters.length > 0,\n needsSorting: sorting.mode === 'client' && sortBy.length > 0,\n // Virtualization already slices; doing both would page a page.\n needsPagination: pagination?.mode === 'client' && !virtualizeRows,\n pageIndex,\n pageSize,\n }),\n [\n rows,\n columnMap,\n filters,\n sortBy,\n filtering.mode,\n sorting.mode,\n pagination?.mode,\n virtualizeRows,\n pageIndex,\n pageSize,\n ],\n );\n}\n\n/**\n * The virtualization window and the scroll handler that moves it. `rowPitch` is\n * px, like the `scrollTop` and `clientHeight` it is divided into.\n *\n * Throttled through `requestAnimationFrame`, and only committed once the window\n * has drifted meaningfully — a `setState` per scroll event re-renders every\n * visible row for a movement the eye cannot see.\n */\nfunction useRowWindow(\n rowCount: number,\n rowPitch: number,\n enabled: boolean,\n): { range: VisibleRange; onScroll: (event: React.UIEvent<HTMLDivElement>) => void } {\n const [range, setRange] = useState<VisibleRange>({ start: 0, end: INITIAL_WINDOW });\n const rafRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (rowCount < range.end) setRange({ start: 0, end: Math.min(INITIAL_WINDOW, rowCount) });\n }, [rowCount, range.end]);\n\n useEffect(\n () => () => {\n if (rafRef.current !== null) window.cancelAnimationFrame(rafRef.current);\n },\n [],\n );\n\n const onScroll = useCallback(\n (event: React.UIEvent<HTMLDivElement>) => {\n if (!enabled) return;\n const { scrollTop, clientHeight } = event.currentTarget;\n if (rafRef.current !== null) window.cancelAnimationFrame(rafRef.current);\n rafRef.current = window.requestAnimationFrame(() => {\n const first = Math.floor(scrollTop / rowPitch);\n const visible = Math.ceil(clientHeight / rowPitch);\n const start = Math.max(0, first - OVERSCAN_COUNT);\n const end = Math.min(first + visible + OVERSCAN_COUNT, rowCount);\n setRange((current) =>\n Math.abs(start - current.start) > WINDOW_DRIFT ||\n Math.abs(end - current.end) > WINDOW_DRIFT\n ? { start, end }\n : current,\n );\n rafRef.current = null;\n });\n },\n [enabled, rowPitch, rowCount],\n );\n\n return { range, onScroll };\n}\n\n/** The next `sortBy` for a header press: asc → desc → unsorted. */\nfunction nextSortBy(current: readonly GridSort[], columnId: string): GridSort[] {\n const existing = current.find((sort) => sort.id === columnId);\n let dir: SortDirection = 'asc';\n if (existing?.dir === 'asc') dir = 'desc';\n else if (existing?.dir === 'desc') dir = null;\n return dir ? [{ id: columnId, dir }] : current.filter((sort) => sort.id !== columnId);\n}\n\n/** Selection + expansion, each resolved once against its controlled prop. */\nfunction useRowFlags<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n): Pick<\n DataGridModel<T>,\n | 'selectedRowIds'\n | 'selectedRowIdsSet'\n | 'expandedRowIdsSet'\n | 'setSelectedRowIds'\n | 'onToggleRow'\n | 'onToggleExpansion'\n> {\n const { selection = { mode: 'none' }, expansion } = props;\n const [internalSelected, setInternalSelected] = useState(selection.defaultSelectedRowIds ?? []);\n const [internalExpanded, setInternalExpanded] = useState(expansion?.defaultExpandedRowIds ?? []);\n const selectedRowIds = selection.selectedRowIds ?? internalSelected;\n const expandedRowIds = expansion?.expandedRowIds ?? internalExpanded;\n\n const commitSelected = useCallback(\n (ids: Array<string | number>) => {\n if (selection.onChangeSelected) selection.onChangeSelected(ids);\n else setInternalSelected(ids);\n },\n [selection],\n );\n\n return {\n selectedRowIds,\n selectedRowIdsSet: useMemo(() => new Set(selectedRowIds), [selectedRowIds]),\n expandedRowIdsSet: useMemo(() => new Set(expandedRowIds), [expandedRowIds]),\n setSelectedRowIds: commitSelected,\n onToggleRow: (rowId, isSelected) => {\n if (selection.mode === 'single') commitSelected(isSelected ? [rowId] : []);\n else if (selection.mode === 'multi') {\n commitSelected(\n isSelected\n ? [...selectedRowIds, rowId]\n : selectedRowIds.filter((id) => id !== rowId),\n );\n }\n },\n onToggleExpansion: (rowId) => {\n if (!expansion) return;\n const next = expandedRowIds.includes(rowId)\n ? expandedRowIds.filter((id) => id !== rowId)\n : [...expandedRowIds, rowId];\n if (expansion.onChangeExpanded) expansion.onChangeExpanded(next);\n else setInternalExpanded(next);\n },\n };\n}\n\n/**\n * A header press, routed to whoever owns the sort: the server (which must\n * re-query — sorting the current page locally would reorder one page of a\n * dataset and call it sorted), the caller's `onChangeSortBy`, or internal state.\n */\nfunction useSortHandler<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n sortBy: readonly GridSort[],\n filters: readonly GridFilter[],\n setInternalSortBy: (next: GridSort[]) => void,\n): (columnId: string) => void {\n const { sorting = {}, pagination, onRequestData } = props;\n return useCallback(\n (columnId: string) => {\n const next = nextSortBy(sortBy, columnId);\n if (sorting.mode === 'server' && onRequestData) {\n onRequestData({\n pageIndex: pagination?.pageIndex ?? 0,\n pageSize: pagination?.pageSize ?? DEFAULT_PAGE_SIZE,\n sortBy: next,\n filters: [...filters],\n });\n return;\n }\n if (sorting.onChangeSortBy) sorting.onChangeSortBy(next);\n else setInternalSortBy(next);\n },\n [sortBy, sorting, onRequestData, pagination, filters, setInternalSortBy],\n );\n}\n\n/**\n * Sort and filter, each resolved ONCE against its controlled prop: a caller\n * that passes `sorting.sortBy` owns the sort, and one that does not gets the\n * internal state. The grid never holds a second, divergent copy.\n */\nfunction useSortAndFilter<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n): {\n sortBy: readonly GridSort[];\n filters: readonly GridFilter[];\n setInternalSortBy: (next: GridSort[]) => void;\n} {\n const { sorting = {}, filtering = {} } = props;\n const [internalSortBy, setInternalSortBy] = useState<GridSort[]>(sorting.defaultSortBy ?? []);\n const [internalFilters] = useState<GridFilter[]>(filtering.defaultFilters ?? []);\n return {\n sortBy: sorting.sortBy ?? internalSortBy,\n filters: filtering.filters ?? internalFilters,\n setInternalSortBy,\n };\n}\n\nexport function useDataGridModel<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n): DataGridModel<T> {\n const { columns } = props;\n const theme = useTheme();\n const containerRef = useRef<HTMLDivElement>(null);\n const [editingCell, setEditingCell] = useState<EditingCell | null>(null);\n const { sortBy, filters, setInternalSortBy } = useSortAndFilter(props);\n // 52 design px unless the caller says; the density scales it, then the type scale does.\n const designRowHeight = densityHeight(props.rowHeight ?? 52, props.density);\n const rowPitch = remPx(theme, designRowHeight);\n const columnMap = useMemo(\n () => new Map(columns.map((column) => [column.id, column])),\n [columns],\n );\n const visibleColumns = useMemo(() => columns.filter((column) => !column.hidden), [columns]);\n const processedRows = useProcessedRows(props, columnMap, sortBy, filters);\n const virtualized =\n (props.virtualizeRows ?? true) && processedRows.length > VIRTUALIZATION_THRESHOLD;\n const { range, onScroll } = useRowWindow(processedRows.length, rowPitch, virtualized);\n const onSort = useSortHandler(props, sortBy, filters, setInternalSortBy);\n\n return {\n containerRef,\n rowHeight: rem(theme, designRowHeight),\n rowPitch,\n visibleColumns,\n processedRows,\n visibleRows: virtualized ? processedRows.slice(range.start, range.end) : processedRows,\n visibleRange: range,\n virtualized,\n sortBy,\n editingCell,\n setEditingCell,\n onSort,\n onScroll,\n ...useRowFlags(props),\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/Table/Table.tsx"],"sourcesContent":["import MoreVertIcon from '@mui/icons-material/MoreVert';\nimport Box from '@mui/material/Box/index.js';\nimport FormControlLabel from '@mui/material/FormControlLabel/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Skeleton from '@mui/material/Skeleton/index.js';\nimport Switch from '@mui/material/Switch/index.js';\nimport MuiTable from '@mui/material/Table/index.js';\nimport TableBody from '@mui/material/TableBody/index.js';\nimport TableCell from '@mui/material/TableCell/index.js';\nimport TableContainer from '@mui/material/TableContainer/index.js';\nimport TableRow from '@mui/material/TableRow/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type {\n ColumnConfig,\n TableDensity,\n TableProps,\n TableStripeColor} from './Table.types';\nimport {\n TABLE_DEFAULTS,\n containerStyle,\n definedProps,\n headerRefFor,\n scrollerRadiusStyle,\n tableDomProps,\n tableRowHeight,\n virtualHeight,\n} from './Table.helpers';\nimport { useTableSelection, useVirtualScrolling } from './Table.hooks';\nimport { EnhancedTableBody, EnhancedTableHeader } from './TableParts';\nimport { EmptyRow, NoDataPlaceholder } from './TableStates';\nimport {\n tableStyles } from './Table.styles';\nimport { rem } from '../../../tokens/relative';\n\n// Helper function to get stripe color from theme\nconst StyledTable = styled(MuiTable, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'glow', 'pulse', 'hoverable', 'density', 'stickyHeader', 'stripeColor', 'virtualised'].includes(prop as string) })<{\n customVariant?: string;\n glow?: boolean;\n pulse?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n stickyHeader?: boolean;\n stripeColor?: TableStripeColor;\n virtualised?: boolean;\n}>(({ theme, customVariant, glow, pulse, hoverable, density, stickyHeader, stripeColor = 'neutral', virtualised }) => {\n return tableStyles({\n theme,\n customVariant,\n glow,\n pulse,\n hoverable,\n density,\n stickyHeader,\n stripeColor,\n virtualised });\n});\n\n// Virtual Scrolling Hook\nconst TableShell: React.FC<{\n innerRef: React.Ref<globalThis.HTMLTableElement>;\n variant?: string;\n stripeColor?: TableStripeColor;\n glow?: boolean;\n pulse?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n stickyHeader?: boolean;\n header: React.ReactNode;\n rest: Record<string, unknown>;\n children: React.ReactNode;\n}> = ({\n innerRef,\n variant,\n stripeColor,\n glow,\n pulse,\n hoverable,\n density,\n stickyHeader,\n header,\n rest,\n children }) => (\n // The loading and empty shells are not scrollers (no `containerHeight`), so\n // they get only the rounded clip `stickyHeader` moves off the `<table>`,\n // never a height (FUT-2677).\n <TableContainer style={scrollerRadiusStyle(useTheme(), stickyHeader)}>\n <StyledTable\n ref={innerRef}\n customVariant={variant}\n stripeColor={stripeColor}\n glow={glow}\n pulse={pulse}\n hoverable={hoverable}\n density={density}\n stickyHeader={stickyHeader}\n {...rest}\n >\n {header}\n {children}\n </StyledTable>\n </TableContainer>\n);\n\nconst SKELETON_ROW_COUNT = 5;\n\nconst LoadingSkeletonRows: React.FC<{ columns?: ColumnConfig[] }> = ({ columns }) => {\n const theme = useTheme();\n return (\n <>\n {Array.from({ length: SKELETON_ROW_COUNT }, (_, index) => (\n <TableRow key={index}>\n {columns?.map((column) => (\n <TableCell key={column.key}>\n <Skeleton height={rem(theme, 20)} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n );\n};\n\nexport type TableShellProps = Omit<React.ComponentProps<typeof TableShell>, 'children'>;\n\ntype Selection = ReturnType<typeof useTableSelection>;\n\ninterface RendererProps {\n resolved: TableProps;\n selection: Selection;\n innerRef: React.Ref<globalThis.HTMLTableElement>;\n rest: Record<string, unknown>;\n}\n\n// The column-visibility control, shown only when responsive mode has actually\n// hidden something on a narrow viewport.\nconst ColumnToggleMenu: React.FC<{\n columns: ColumnConfig[];\n hiddenColumns: number[];\n anchor: HTMLElement | null;\n setAnchor: (element: HTMLElement | null) => void;\n setHiddenColumns: (next: number[]) => void;\n}> = ({ columns, hiddenColumns, anchor, setAnchor, setHiddenColumns }) => (\n <Box position=\"absolute\" top={8} right={8}>\n <IconButton onClick={(event) => setAnchor(event.currentTarget)} size=\"small\">\n <MoreVertIcon />\n </IconButton>\n <Menu anchorEl={anchor} open={Boolean(anchor)} onClose={() => setAnchor(null)}>\n {columns.map((column, index) => (\n <MenuItem key={column.key}>\n <FormControlLabel\n control={\n <Switch\n checked={!hiddenColumns.includes(index)}\n onChange={(event) =>\n setHiddenColumns(\n event.target.checked\n ? hiddenColumns.filter((i: number) => i !== index)\n : [...hiddenColumns, index],\n )\n }\n size=\"small\"\n />\n }\n label={column.label}\n />\n </MenuItem>\n ))}\n </Menu>\n </Box>\n);\n\n// The populated table. Local because StyledTable cannot cross a module\n// boundary (TS2742).\nconst columnsFor = (resolved: TableProps, selection: Selection): ColumnConfig[] =>\n (resolved.responsive ? selection.visibleColumns : resolved.columns) ?? [];\n\n// The toggle only earns its place when responsive mode has actually hidden\n// something on a narrow viewport.\nconst showsColumnToggle = (resolved: TableProps, selection: Selection): boolean =>\n Boolean(\n resolved.responsive &&\n selection.isMobile &&\n resolved.showColumnToggle &&\n selection.hiddenColumns.length > 0,\n );\n\n// The virtual window lives here, with the one scroller whose offset drives it;\n// the header's ref lets it subtract the height the `<thead>` pushes the body down.\nconst AdvancedTable: React.FC<RendererProps> = ({ resolved: p, selection, innerRef, rest }) => {\n const theme = useTheme();\n const finalColumns = columnsFor(p, selection);\n const showToggle = showsColumnToggle(p, selection);\n const headRef = React.useRef<globalThis.HTMLTableSectionElement>(null);\n const windowHeight = virtualHeight(p);\n const { visibleItems, handleScroll } = useVirtualScrolling(\n p.data ?? [],\n tableRowHeight(p.rowHeight) || 40,\n windowHeight ?? 400,\n p.overscan,\n headerRefFor(windowHeight, headRef),\n );\n\n return (\n <Box position=\"relative\">\n <TableContainer\n style={containerStyle(theme, p)}\n onScroll={windowHeight ? handleScroll : undefined}\n >\n <StyledTable\n ref={innerRef}\n customVariant={p.variant}\n stripeColor={p.stripeColor}\n glow={p.glow}\n pulse={p.pulse}\n hoverable={p.hoverable}\n density={p.density}\n stickyHeader={p.stickyHeader}\n virtualised={Boolean(windowHeight)}\n {...rest}\n >\n <EnhancedTableHeader\n columns={finalColumns}\n data={p.data ?? []}\n sortable={p.sortable}\n sortConfig={p.sortConfig}\n onSortChange={p.onSortChange}\n selectable={p.selectable}\n selectedRows={p.selectedRows}\n onSelectAll={selection.handleSelectAll}\n density={p.density}\n stickyHeader={p.stickyHeader}\n headRef={headRef}\n />\n <EnhancedTableBody\n data={p.data ?? []}\n columns={finalColumns}\n selectedRows={p.selectedRows}\n onRowClick={p.onRowClick}\n onRowFocus={p.onRowFocus}\n onRowBlur={p.onRowBlur}\n onSelectionChange={selection.handleSelectionChange}\n rowKeyExtractor={p.rowKeyExtractor}\n density={p.density}\n selectable={p.selectable}\n hoverable={p.hoverable}\n renderRow={p.renderRow}\n renderCell={p.renderCell}\n virtualWindow={windowHeight ? visibleItems : undefined}\n rowHeight={p.rowHeight}\n />\n </StyledTable>\n </TableContainer>\n\n {showToggle && (\n <ColumnToggleMenu\n columns={p.columns ?? []}\n hiddenColumns={selection.hiddenColumns}\n anchor={selection.columnMenuAnchor}\n setAnchor={selection.setColumnMenuAnchor}\n setHiddenColumns={selection.setHiddenColumns}\n />\n )}\n </Box>\n );\n};\n\n// The loading and empty states render the same shell as the populated table, so\n// they share TableShell rather than repeating it three times.\nconst buildShell = ({\n resolved,\n selection,\n innerRef,\n rest,\n finalColumns }: RendererProps & { finalColumns?: ColumnConfig[] }) => ({\n innerRef,\n variant: resolved.variant,\n stripeColor: resolved.stripeColor,\n glow: resolved.glow,\n pulse: resolved.pulse,\n hoverable: resolved.hoverable,\n density: resolved.density,\n stickyHeader: resolved.stickyHeader,\n header: resolved.columns ? (\n <EnhancedTableHeader\n columns={finalColumns ?? []}\n data={[]}\n sortable={resolved.sortable}\n sortConfig={resolved.sortConfig}\n onSortChange={resolved.onSortChange}\n selectable={resolved.selectable}\n selectedRows={resolved.selectedRows}\n onSelectAll={selection.handleSelectAll}\n density={resolved.density}\n stickyHeader={resolved.stickyHeader}\n />\n ) : null,\n rest: rest as Record<string, unknown> });\n\nconst TableLoadingState: React.FC<{\n shell: TableShellProps;\n loadingComponent?: React.ReactNode;\n columns?: ColumnConfig[];\n}> = ({ shell, loadingComponent, columns }) => (\n <TableShell {...shell}>\n <TableBody data-testid=\"table-loading\">\n {loadingComponent || <LoadingSkeletonRows columns={columns} />}\n </TableBody>\n </TableShell>\n);\n\nconst TableEmptyState: React.FC<{\n shell: TableShellProps;\n emptyStateComponent?: React.ReactNode;\n emptyText: string;\n colSpan: number;\n}> = ({ shell, emptyStateComponent, emptyText, colSpan }) => (\n <TableShell {...shell}>\n <EmptyRow colSpan={colSpan}>\n {emptyStateComponent || <NoDataPlaceholder emptyText={emptyText} />}\n </EmptyRow>\n </TableShell>\n);\n\nexport const Table = React.forwardRef<globalThis.HTMLTableElement, TableProps>(\n (tableProps, ref) => {\n const resolved = { ...TABLE_DEFAULTS, ...definedProps(tableProps) } as TableProps;\n const {\n columns,\n data,\n responsive,\n loading,\n loadingComponent,\n emptyStateComponent,\n emptyText,\n children,\n } = resolved;\n\n const selection = useTableSelection({\n columns,\n data,\n responsive,\n columnPriorities: resolved.columnPriorities,\n selectedRows: resolved.selectedRows ?? [],\n rowKeyExtractor: resolved.rowKeyExtractor,\n onSelectionChange: resolved.onSelectionChange });\n\n // Only MUI's and the DOM's own props reach the `<table>` (FUT-2658).\n const rest = tableDomProps(tableProps);\n const renderer: RendererProps = { resolved, selection, innerRef: ref, rest };\n const finalColumns = responsive ? selection.visibleColumns : columns;\n const shell = buildShell({ ...renderer, finalColumns });\n\n if (loading) {\n return (\n <TableLoadingState shell={shell} loadingComponent={loadingComponent} columns={columns} />\n );\n }\n\n if (data && data.length === 0) {\n return (\n <TableEmptyState\n shell={shell}\n emptyStateComponent={emptyStateComponent}\n emptyText={emptyText}\n colSpan={finalColumns?.length || 1}\n />\n );\n }\n\n if (columns && data) return <AdvancedTable {...renderer} />;\n\n // Basic table (backward compatibility)\n return (\n <StyledTable\n ref={ref}\n customVariant={resolved.variant}\n stripeColor={resolved.stripeColor}\n glow={resolved.glow}\n pulse={resolved.pulse}\n hoverable={resolved.hoverable}\n density={resolved.density}\n stickyHeader={resolved.stickyHeader}\n {...rest}\n >\n {children}\n </StyledTable>\n );\n },\n);\n\nTable.displayName = 'Table';"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/Table/Table.helpers.ts"],"sourcesContent":["import type { TableProps as MuiTableProps } from '@mui/material/Table/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport type React from 'react';\n\nimport { rem } from '../../../tokens/relative';\n\nimport type { TableProps } from './Table.types';\n\n/**\n * A virtualised row's height in design px: the caller's `rowHeight`, else 52.\n * Resolved here rather than in {@link TABLE_DEFAULTS} so the one number is read\n * where it is drawn (`rem`) and where the window is positioned with it (`remPx`).\n */\nexport const tableRowHeight = (rowHeight: number | undefined): number => rowHeight ?? 52;\n\n/** The scroll box's height: a number is design px, 400 unless the caller says otherwise. */\nconst scrollHeight = (theme: Theme, containerHeight: number | string | undefined): string => {\n const box = containerHeight || 400;\n return typeof box === 'number' ? rem(theme, box) : box;\n};\n\n/**\n * The table's one scroll container (FUT-2658): `containerHeight` tall\n * whenever it is set, or 400 when `virtualScrolling` is on and it is not,\n * holding the header and the body. `containerHeight` sizes the scroller with\n * or without `virtualScrolling` (FUT-2677) — no consumer relies on the old\n * virtual-only gate, and `stickyHeader` needs this box to stick inside.\n * Inline, so the height it was given reads back off the element. A\n * `containerHeight` of 0 counts as unset: a zero-height scroller shows nothing.\n */\nexport const scrollerStyle = (theme: Theme, p: TableProps): React.CSSProperties | undefined =>\n p.virtualScrolling || p.containerHeight\n ? { height: scrollHeight(theme, p.containerHeight), overflow: 'auto' }\n : undefined;\n\n/**\n * With `stickyHeader`, the scroller takes over the rounded clip the `<table>`\n * gives up (`tableStyles`, FUT-2677) — the caller's container owns it on the\n * basic (children) path, and the loading/empty shells get it too, so their\n * corners do not change between states.\n */\nexport const scrollerRadiusStyle = (\n theme: Theme,\n stickyHeader: boolean | undefined,\n): React.CSSProperties | undefined => (stickyHeader ? { borderRadius: theme.spacing(1) } : undefined);\n\n/** `scrollerStyle` and, with `stickyHeader`, the rounded clip it takes over. */\nexport const containerStyle = (theme: Theme, p: TableProps): React.CSSProperties | undefined => {\n const scroller = scrollerStyle(theme, p);\n const radius = scrollerRadiusStyle(theme, p.stickyHeader);\n return scroller || radius ? { ...scroller, ...radius } : undefined;\n};\n\n/**\n * Only a virtualised table needs its header measured — a plain one never\n * reads `scroll.headerPx`, so it gets no `ResizeObserver` either (FUT-2678).\n */\nexport const headerRefFor = (\n windowHeight: number | undefined,\n headRef: React.RefObject<globalThis.HTMLTableSectionElement | null>,\n): React.RefObject<globalThis.HTMLTableSectionElement | null> | undefined =>\n windowHeight ? headRef : undefined;\n\n/**\n * The window's height in design px when the body is virtualised — only a\n * numeric `containerHeight` virtualises; a string sizes the scroller alone.\n */\nexport const virtualHeight = (p: TableProps): number | undefined =>\n p.virtualScrolling && typeof p.containerHeight === 'number' && p.containerHeight > 0 &&\n tableRowHeight(p.rowHeight) > 0\n ? p.containerHeight\n : undefined;\n\nexport const TABLE_DEFAULTS: Partial<TableProps> = {\n variant: 'default',\n stripeColor: 'neutral',\n glow: false,\n pulse: false,\n hoverable: false,\n loading: false,\n density: 'normal',\n stickyHeader: false,\n selectable: false,\n selectedRows: [],\n sortable: false,\n virtualScrolling: false,\n overscan: 5,\n responsive: false,\n showColumnToggle: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default as a destructuring default would. Eighteen separate\n// destructuring defaults were most of this component's branch count.\nexport const definedProps = (props: TableProps): Partial<TableProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<TableProps>;\n\n// The container + styled table + optional header, shared by the loading, empty\n// and populated renders.\n\n/** A key `Table` declares on top of MUI's own `TableProps`. */\ntype TableOwnKey = Exclude<keyof TableProps, keyof MuiTableProps>;\n\n/**\n * Every key {@link TableOwnKey} names. None is an HTML attribute: each is read\n * by the table and drawn by its parts, so none may reach the `<table>`\n * (FUT-2658). A `Record` over the key union makes the list exhaustive — a prop\n * added to `Table.types.ts` does not compile until it is named here.\n */\nconst TABLE_OWN_KEYS: Record<TableOwnKey, true> = {\n emptyText: true,\n variant: true,\n stripeColor: true,\n glow: true,\n pulse: true,\n hoverable: true,\n loading: true,\n onRowClick: true,\n onRowFocus: true,\n onRowBlur: true,\n density: true,\n selectable: true,\n selectedRows: true,\n onSelectionChange: true,\n rowKeyExtractor: true,\n sortable: true,\n sortConfig: true,\n onSortChange: true,\n filterable: true,\n filterConfig: true,\n onFilterChange: true,\n columns: true,\n data: true,\n virtualScrolling: true,\n rowHeight: true,\n overscan: true,\n responsive: true,\n columnPriorities: true,\n responsiveBreakpoints: true,\n showColumnToggle: true,\n containerHeight: true,\n loadingComponent: true,\n emptyStateComponent: true,\n keyboardNavigation: true,\n renderRow: true,\n renderCell: true,\n draggableRows: true,\n onRowsReorder: true,\n fixedColumns: true,\n rowStyleConfig: true,\n};\n\nconst NOT_FORWARDED = new Set<string>([...Object.keys(TABLE_OWN_KEYS), 'children']);\n\n/**\n * What the caller passed that is MUI's or the DOM's — `className`, `id`,\n * `style`, `aria-*`, `data-*`, DOM handlers, `sx`, `size`, `padding`,\n * `component` — for `MuiTable` to spread onto the `<table>`. `children` is\n * placed by the table itself.\n */\nexport const tableDomProps = (props: TableProps): Record<string, unknown> =>\n Object.fromEntries(Object.entries(props).filter(([key]) => !NOT_FORWARDED.has(key)));\n"],"mappings":";;;;;AAaO,IAAM,iBAAiB,CAAC,cAA0C,aAAa;AAGtF,IAAM,eAAe,CAAC,OAAc,oBAAyD;AAC3F,QAAM,MAAM,mBAAmB;AAC/B,SAAO,OAAO,QAAQ,WAAW,IAAI,OAAO,GAAG,IAAI;AACrD;AAWO,IAAM,gBAAgB,CAAC,OAAc,MAC1C,EAAE,oBAAoB,EAAE,kBACpB,EAAE,QAAQ,aAAa,OAAO,EAAE,eAAe,GAAG,UAAU,OAAO,IACnE;AAQC,IAAM,sBAAsB,CACjC,OACA,iBACqC,eAAe,EAAE,cAAc,MAAM,QAAQ,CAAC,EAAE,IAAI;AAGpF,IAAM,iBAAiB,CAAC,OAAc,MAAmD;AAC9F,QAAM,WAAW,cAAc,OAAO,CAAC;AACvC,QAAM,SAAS,oBAAoB,OAAO,EAAE,YAAY;AACxD,SAAO,YAAY,SAAS,EAAE,GAAG,UAAU,GAAG,OAAO,IAAI;AAC3D;AAMO,IAAM,eAAe,CAC1B,cACA,YAEA,eAAe,UAAU;AAMpB,IAAM,gBAAgB,CAAC,MAC5B,EAAE,oBAAoB,OAAO,EAAE,oBAAoB,YAAY,EAAE,kBAAkB,KACnF,eAAe,EAAE,SAAS,IAAI,IAC1B,EAAE,kBACF;AAEC,IAAM,iBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc,CAAC;AAAA,EACf,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,kBAAkB;AACpB;AAKO,IAAM,eAAe,CAAC,UAC3B,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AACjE;AAcF,IAAM,iBAA4C;AAAA,EAChD,WAAW;AAAA,EACX,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgB;AAClB;AAEA,IAAM,gBAAgB,oBAAI,IAAY,CAAC,GAAG,OAAO,KAAK,cAAc,GAAG,UAAU,CAAC;AAQ3E,IAAM,gBAAgB,CAAC,UAC5B,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;","names":[]}