@12-apps/ui 6.31.0 → 6.33.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 (874) hide show
  1. package/components-guidelines.md +69 -2
  2. package/dist/_internal/components/data-display/Alert/Alert.js +5 -4
  3. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -2
  4. package/dist/_internal/components/data-display/Alert/Alert.styles.js +4 -3
  5. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +6 -5
  7. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +5 -4
  8. package/dist/_internal/components/data-display/Badge/Badge.animations.js +3 -2
  9. package/dist/_internal/components/data-display/Badge/Badge.js +6 -5
  10. package/dist/_internal/components/data-display/Badge/Badge.metrics.js +3 -2
  11. package/dist/_internal/components/data-display/Badge/Badge.styles.js +4 -3
  12. package/dist/_internal/components/data-display/Badge/Badge.variants.js +3 -2
  13. package/dist/_internal/components/data-display/Badge/BadgeContent.js +5 -4
  14. package/dist/_internal/components/data-display/Banner/Banner.js +3 -2
  15. package/dist/_internal/components/data-display/Banner/Banner.styles.js +3 -2
  16. package/dist/_internal/components/data-display/CardKit/CardKebab.js +9 -5
  17. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +6 -5
  18. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +13 -9
  19. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +9 -5
  20. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +10 -5
  21. package/dist/_internal/components/data-display/Carousel/Carousel.js +13 -8
  22. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +9 -4
  23. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +9 -4
  24. package/dist/_internal/components/data-display/Chart/Chart.js +13 -8
  25. package/dist/_internal/components/data-display/Chart/SpecChart.js +16 -11
  26. package/dist/_internal/components/data-display/Chart/chart-context.js +10 -5
  27. package/dist/_internal/components/data-display/Chart/chart-internals.js +9 -4
  28. package/dist/_internal/components/data-display/Chart/chart-renderers.js +12 -7
  29. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  30. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  31. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +6 -5
  32. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +69 -67
  33. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +86 -84
  34. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +11 -7
  35. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +12 -8
  36. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +19 -17
  37. package/dist/_internal/components/data-display/DataViews/base-card.js +8 -7
  38. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +11 -10
  39. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +5 -4
  40. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +10 -9
  41. package/dist/_internal/components/data-display/DataViews/base-list-card.js +16 -15
  42. package/dist/_internal/components/data-display/DataViews/card-surface.js +3 -2
  43. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +6 -1
  44. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +22 -20
  45. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +6 -5
  46. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +10 -6
  47. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +6 -1
  48. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +16 -12
  49. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +8 -7
  50. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +11 -7
  51. package/dist/_internal/components/data-display/DataViews/data-views-export.js +11 -7
  52. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +29 -27
  53. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +19 -15
  54. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +9 -5
  55. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +65 -63
  56. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +6 -5
  57. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +38 -36
  58. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  59. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +21 -17
  60. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +24 -20
  61. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +6 -1
  62. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +11 -4
  63. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +10 -5
  64. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  65. package/dist/_internal/components/data-display/DataViews/data-views-search.js +6 -1
  66. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +11 -7
  67. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +27 -23
  68. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +31 -29
  69. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +26 -22
  70. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +11 -7
  71. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  72. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +6 -5
  73. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +13 -9
  74. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  75. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +6 -5
  76. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +21 -16
  77. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +17 -12
  78. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +27 -22
  79. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +3 -3
  80. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
  81. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +7 -7
  82. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
  83. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
  84. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
  85. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  86. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +8 -3
  87. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  88. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +16 -11
  89. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +6 -1
  90. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  91. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  92. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  93. package/dist/_internal/components/data-display/Progress/Progress.js +6 -5
  94. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +4 -3
  95. package/dist/_internal/components/data-display/Progress/Progress.styles.js +5 -4
  96. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +8 -3
  97. package/dist/_internal/components/data-display/Sheet/Sheet.js +10 -5
  98. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +9 -4
  99. package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
  100. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  101. package/dist/_internal/components/data-display/index.js +81 -76
  102. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +9 -5
  103. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +11 -7
  104. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  105. package/dist/_internal/components/feedback/index.js +14 -10
  106. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +3 -3
  107. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +12 -10
  108. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +8 -6
  109. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +6 -4
  110. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +6 -4
  111. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +5 -3
  112. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +7 -2
  113. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +6 -1
  114. package/dist/_internal/components/form/Button/Button.js +8 -4
  115. package/dist/_internal/components/form/Button/Button.styles.js +8 -3
  116. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  117. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  118. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  119. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +10 -8
  120. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +6 -4
  121. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +6 -4
  122. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +7 -5
  123. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +6 -4
  124. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +14 -12
  125. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +5 -3
  126. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +6 -4
  127. package/dist/_internal/components/form/CepField/CepField.js +9 -7
  128. package/dist/_internal/components/form/Checkbox/Checkbox.js +4 -3
  129. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +4 -4
  130. package/dist/_internal/components/form/Command/Command.js +11 -6
  131. package/dist/_internal/components/form/Command/Command.styles.js +9 -4
  132. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +5 -3
  133. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +8 -3
  134. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +15 -10
  135. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +7 -2
  136. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +8 -3
  137. package/dist/_internal/components/form/Input/Input.js +8 -6
  138. package/dist/_internal/components/form/Input/Input.metrics.js +3 -2
  139. package/dist/_internal/components/form/Input/Input.styles.js +7 -5
  140. package/dist/_internal/components/form/InputOTP/InputOTP.js +7 -5
  141. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +5 -3
  142. package/dist/_internal/components/form/Label/Label.js +10 -5
  143. package/dist/_internal/components/form/Label/Label.styles.js +9 -4
  144. package/dist/_internal/components/form/Menubar/Menubar.item.js +10 -5
  145. package/dist/_internal/components/form/Menubar/Menubar.js +13 -8
  146. package/dist/_internal/components/form/Menubar/Menubar.styles.js +9 -4
  147. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +11 -6
  148. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  149. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +7 -5
  150. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +8 -6
  151. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +5 -3
  152. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +6 -4
  153. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +3 -3
  154. package/dist/_internal/components/form/Select/Select.js +7 -5
  155. package/dist/_internal/components/form/Select/Select.metrics.js +3 -2
  156. package/dist/_internal/components/form/Switch/Switch.js +7 -6
  157. package/dist/_internal/components/form/Switch/Switch.parts.js +5 -4
  158. package/dist/_internal/components/form/Switch/Switch.styles.js +4 -3
  159. package/dist/_internal/components/form/Textarea/Textarea.js +5 -3
  160. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +13 -6
  161. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  162. package/dist/_internal/components/form/Toggle/Toggle.js +6 -4
  163. package/dist/_internal/components/form/Toggle/Toggle.styles.js +5 -3
  164. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +6 -1
  165. package/dist/_internal/components/form/index.js +67 -64
  166. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +15 -13
  167. package/dist/_internal/components/form/total-form/Fields/CepField.js +10 -8
  168. package/dist/_internal/components/form/total-form/Fields/SelectField.js +8 -6
  169. package/dist/_internal/components/form/total-form/Fields/TextField.js +9 -7
  170. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +7 -2
  171. package/dist/_internal/components/form/total-form/Fields/index.js +31 -29
  172. package/dist/_internal/components/form/total-form/SubmitButton.js +9 -5
  173. package/dist/_internal/components/index.js +179 -176
  174. package/dist/_internal/components/layout/Box/Box.js +11 -6
  175. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +6 -1
  176. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +6 -1
  177. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +7 -2
  178. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +6 -1
  179. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +8 -1
  180. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +6 -1
  181. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +6 -1
  182. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +3 -3
  183. package/dist/_internal/components/layout/Skeleton/Skeleton.js +2 -2
  184. package/dist/_internal/components/layout/Stack/Stack.js +12 -7
  185. package/dist/_internal/components/layout/TableFilter/TableFilter.js +6 -1
  186. package/dist/_internal/components/layout/index.js +24 -19
  187. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +13 -8
  188. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +9 -4
  189. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  190. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +3 -3
  191. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +5 -5
  192. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  193. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +3 -3
  194. package/dist/_internal/components/navigation/Pagination/Pagination.js +10 -3
  195. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +8 -1
  196. package/dist/_internal/components/navigation/index.js +25 -20
  197. package/dist/_internal/components/typography/Heading/Heading.js +6 -5
  198. package/dist/_internal/components/typography/Heading/Heading.metrics.js +4 -3
  199. package/dist/_internal/components/typography/Heading/Heading.styles.js +5 -4
  200. package/dist/_internal/components/typography/Paragraph/Paragraph.js +4 -3
  201. package/dist/_internal/components/typography/Text/Text.js +5 -4
  202. package/dist/_internal/components/typography/Text/Text.metrics.js +4 -3
  203. package/dist/_internal/components/typography/index.js +9 -8
  204. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  205. package/dist/_internal/components/utility/index.js +2 -2
  206. package/dist/_internal/icons/Icon.js +11 -6
  207. package/dist/_internal/provider/UiProvider.js +10 -5
  208. package/dist/_internal/provider/mui-bridge.js +9 -4
  209. package/dist/_internal/provider/use-ui-theme.js +10 -5
  210. package/dist/_internal/social-login-button/social-login-button.js +14 -10
  211. package/dist/_internal/tokens/field-height.core.js +20 -0
  212. package/dist/_internal/tokens/field-height.core.js.map +1 -0
  213. package/dist/_internal/tokens/field-height.js +37 -0
  214. package/dist/_internal/tokens/field-height.js.map +1 -0
  215. package/dist/_internal/tokens/relative.js +16 -0
  216. package/dist/_internal/tokens/relative.js.map +1 -0
  217. package/dist/_internal/tokens/theme.js +3 -2
  218. package/dist/_internal/user-avatar/user-avatar.js +14 -10
  219. package/dist/charts.js +25 -20
  220. package/dist/{chunk-P7FQUGED.js → chunk-23FCBIUN.js} +8 -8
  221. package/dist/{chunk-JHOBW7OD.js → chunk-2F4YEGYG.js} +4 -4
  222. package/dist/chunk-2F4YEGYG.js.map +1 -0
  223. package/dist/{chunk-GOKMLXZH.js → chunk-2SKNSQCP.js} +2 -2
  224. package/dist/{chunk-JVMNE5G4.js → chunk-2X5OQDPH.js} +5 -1
  225. package/dist/chunk-2X5OQDPH.js.map +1 -0
  226. package/dist/{chunk-L6UTYFAB.js → chunk-3E3JYKUK.js} +12 -3
  227. package/dist/chunk-3E3JYKUK.js.map +1 -0
  228. package/dist/{chunk-BKP7YW3Y.js → chunk-3IYB3XY2.js} +2 -2
  229. package/dist/{chunk-URK67BAE.js → chunk-3SJZP7KH.js} +5 -5
  230. package/dist/{chunk-4ETQRBZC.js → chunk-46UPILLK.js} +4 -4
  231. package/dist/{chunk-SSJHEV5Z.js → chunk-4BEQADWC.js} +2 -2
  232. package/dist/{chunk-OP6F3NXX.js → chunk-4IVOHL32.js} +2 -2
  233. package/dist/{chunk-NFJUBPIN.js → chunk-4LMY5I5E.js} +2 -2
  234. package/dist/{chunk-ZOUWHGV3.js → chunk-4MGFUPQT.js} +4 -4
  235. package/dist/{chunk-32MTYYGC.js → chunk-4PIKOJZ4.js} +2 -2
  236. package/dist/{chunk-RMB4RTTM.js → chunk-4V7FNB7R.js} +10 -10
  237. package/dist/{chunk-OFMDFN3U.js → chunk-4YMIQ5DM.js} +2 -2
  238. package/dist/{chunk-CJMU3G2J.js → chunk-56MKBXSH.js} +6 -6
  239. package/dist/{chunk-ATBT4RJZ.js → chunk-57C636A6.js} +3 -3
  240. package/dist/{chunk-UHWHTNUS.js → chunk-5BW7NCM5.js} +4 -4
  241. package/dist/{chunk-LG6DHNRD.js → chunk-5FA5S2YN.js} +2 -2
  242. package/dist/{chunk-IQFUV3BA.js → chunk-5RHMLOIA.js} +2 -2
  243. package/dist/{chunk-HFBME3C5.js → chunk-5SCZZFZR.js} +7 -7
  244. package/dist/{chunk-XMDH3MRV.js → chunk-5UWSDTZV.js} +12 -6
  245. package/dist/chunk-5UWSDTZV.js.map +1 -0
  246. package/dist/{chunk-QKDFD4VT.js → chunk-62NFZR52.js} +4 -4
  247. package/dist/{chunk-3PT3SBJ7.js → chunk-65JHGT5F.js} +2 -2
  248. package/dist/{chunk-H7ZN2GW7.js → chunk-67N6TH6E.js} +2 -2
  249. package/dist/{chunk-INH2BDHV.js → chunk-6ANWFGLL.js} +9 -9
  250. package/dist/{chunk-Q5BSNHN7.js → chunk-6M33XQLZ.js} +2 -2
  251. package/dist/{chunk-IPS55KWK.js → chunk-6M7CMILP.js} +2 -2
  252. package/dist/{chunk-X2R7QG5I.js → chunk-6MDBMCFK.js} +2 -2
  253. package/dist/{chunk-PCONTSJJ.js → chunk-6V7D6GRX.js} +11 -11
  254. package/dist/{chunk-DTKMBI7B.js → chunk-6YLAVHV4.js} +4 -4
  255. package/dist/{chunk-BWSYSSF3.js → chunk-7A3G4W52.js} +3 -3
  256. package/dist/{chunk-RXSGHPCR.js → chunk-7FOOLP5H.js} +4 -4
  257. package/dist/{chunk-NJ6D37KV.js → chunk-7FWXG2KF.js} +2 -2
  258. package/dist/{chunk-APMEXS3Y.js → chunk-7N4V3ARN.js} +2 -2
  259. package/dist/{chunk-OIFBBDYX.js → chunk-7TSQNYQO.js} +2 -2
  260. package/dist/{chunk-YD77RANW.js → chunk-7VN7LFBA.js} +5 -5
  261. package/dist/{chunk-CKW267ZK.js → chunk-AJVYJZHI.js} +4 -4
  262. package/dist/{chunk-EZOVSZ5B.js → chunk-ANNDLY3M.js} +4 -4
  263. package/dist/{chunk-J2RRZZXC.js → chunk-APT5L7V5.js} +2 -2
  264. package/dist/{chunk-ZVTJGWIV.js → chunk-AYRHW4DX.js} +2 -2
  265. package/dist/{chunk-NLUZGT4U.js → chunk-AZ4LLAAJ.js} +3 -3
  266. package/dist/{chunk-IRSI3BFF.js → chunk-B64PPHUR.js} +9 -1
  267. package/dist/chunk-B64PPHUR.js.map +1 -0
  268. package/dist/{chunk-7DNQHMDO.js → chunk-B6IURHSZ.js} +4 -4
  269. package/dist/{chunk-USPQZQBF.js → chunk-BIIAMH47.js} +7 -4
  270. package/dist/chunk-BIIAMH47.js.map +1 -0
  271. package/dist/{chunk-6VZYQC7T.js → chunk-BM4CGQED.js} +6 -6
  272. package/dist/{chunk-JOPTI47I.js → chunk-BM4ZPBBT.js} +3 -3
  273. package/dist/{chunk-VGSEI7PQ.js → chunk-BTIBFR5L.js} +2 -2
  274. package/dist/{chunk-6SXZ7CF2.js → chunk-BTVIHTAL.js} +5 -2
  275. package/dist/chunk-BTVIHTAL.js.map +1 -0
  276. package/dist/{chunk-YXQ2NJHF.js → chunk-C423YJGN.js} +6 -6
  277. package/dist/{chunk-DV42HAVP.js → chunk-CDNJOA3N.js} +21 -6
  278. package/dist/chunk-CDNJOA3N.js.map +1 -0
  279. package/dist/chunk-CGO452DC.js +90 -0
  280. package/dist/chunk-CGO452DC.js.map +1 -0
  281. package/dist/{chunk-E6D2Y5EK.js → chunk-CMN26J5Y.js} +2 -2
  282. package/dist/{chunk-6SNRPCSK.js → chunk-CR4KC2K5.js} +2 -2
  283. package/dist/{chunk-4WT4PV4M.js → chunk-CZ5ZL63A.js} +2 -2
  284. package/dist/{chunk-BPYPUEM5.js → chunk-CZJLWCEG.js} +2 -2
  285. package/dist/{chunk-XEUSTU7K.js → chunk-DIWC6AQL.js} +6 -6
  286. package/dist/{chunk-LWAOL4BG.js → chunk-DO3UNZAU.js} +2 -2
  287. package/dist/{chunk-GUROYOKQ.js → chunk-EAE5Z5HL.js} +2 -2
  288. package/dist/{chunk-EYRSUVBC.js → chunk-ECZXTIDR.js} +2 -2
  289. package/dist/{chunk-55E7GLVT.js → chunk-EDJDASXE.js} +3 -3
  290. package/dist/{chunk-26ORCF6J.js → chunk-EEAQBPOW.js} +2 -2
  291. package/dist/{chunk-RRDL7AGQ.js → chunk-EKSSKQUW.js} +6 -2
  292. package/dist/chunk-EKSSKQUW.js.map +1 -0
  293. package/dist/{chunk-DWZ7FLA7.js → chunk-FATRMNVN.js} +5 -5
  294. package/dist/{chunk-C4NRFERD.js → chunk-FTCCYWF4.js} +2 -2
  295. package/dist/{chunk-MSKEFXXV.js → chunk-FYFIND6O.js} +13 -5
  296. package/dist/chunk-FYFIND6O.js.map +1 -0
  297. package/dist/{chunk-NR2HXHBR.js → chunk-G73SDZ3T.js} +2 -2
  298. package/dist/{chunk-F65LT7XV.js → chunk-GCWF5AQE.js} +2 -2
  299. package/dist/{chunk-X4GALW6I.js → chunk-GJKBWVU2.js} +2 -2
  300. package/dist/{chunk-SHQWIDD5.js → chunk-GJQYM3PM.js} +4 -4
  301. package/dist/{chunk-VNEEXUWA.js → chunk-GT7C6TSM.js} +3 -3
  302. package/dist/{chunk-OHKEQ7QJ.js → chunk-GXEB6MJA.js} +2 -2
  303. package/dist/{chunk-QNUWSXF2.js → chunk-H57ZS6W2.js} +3 -3
  304. package/dist/{chunk-IASDP44E.js → chunk-HR7YTBR7.js} +4 -4
  305. package/dist/{chunk-EFEZWG4C.js → chunk-IBWVEARQ.js} +9 -2
  306. package/dist/chunk-IBWVEARQ.js.map +1 -0
  307. package/dist/{chunk-SZZLABMO.js → chunk-IDO4EV7T.js} +3 -3
  308. package/dist/{chunk-SAIKHWH7.js → chunk-IFAEKIT2.js} +10 -10
  309. package/dist/{chunk-QP3KK4KO.js → chunk-IGO5DC7D.js} +10 -10
  310. package/dist/{chunk-ORIFMVN4.js → chunk-IM76SSXI.js} +3 -3
  311. package/dist/{chunk-EATFKTO3.js → chunk-IOEF32HX.js} +3 -3
  312. package/dist/{chunk-G3WUOPWE.js → chunk-IZBDSPTW.js} +2 -2
  313. package/dist/{chunk-RRO2EOJB.js → chunk-JB67KPGM.js} +4 -4
  314. package/dist/{chunk-RIA34EUT.js → chunk-JDY37EML.js} +3 -3
  315. package/dist/{chunk-5ZOJLYD2.js → chunk-JE6RZ5L6.js} +4 -4
  316. package/dist/{chunk-SMUZRLFZ.js → chunk-JGOXXKPY.js} +2 -2
  317. package/dist/{chunk-VYMULXCJ.js → chunk-JLWAYBOP.js} +5 -2
  318. package/dist/chunk-JLWAYBOP.js.map +1 -0
  319. package/dist/{chunk-7U36V4CU.js → chunk-JO5GSRYQ.js} +4 -4
  320. package/dist/{chunk-DHQ6ASUD.js → chunk-JPNPXNFH.js} +4 -4
  321. package/dist/{chunk-XVM4ZIRE.js → chunk-JPXG7IFW.js} +6 -4
  322. package/dist/chunk-JPXG7IFW.js.map +1 -0
  323. package/dist/{chunk-D5YGDCMP.js → chunk-JRHZZTVV.js} +19 -19
  324. package/dist/{chunk-DVEYD27F.js → chunk-JXNT5TUP.js} +2 -2
  325. package/dist/{chunk-4DUHJIR2.js → chunk-JYETSTOQ.js} +2 -2
  326. package/dist/{chunk-FC74EAW4.js → chunk-JZJOAGBG.js} +4 -4
  327. package/dist/{chunk-GLPHRHIT.js → chunk-K2XK45HG.js} +7 -7
  328. package/dist/{chunk-CEA4QA63.js → chunk-KAPKMVKR.js} +2 -3
  329. package/dist/{chunk-CEA4QA63.js.map → chunk-KAPKMVKR.js.map} +1 -1
  330. package/dist/{chunk-SGV7QGYQ.js → chunk-KBOTNPYL.js} +6 -6
  331. package/dist/{chunk-JUHPNTDA.js → chunk-KCBAPMLH.js} +13 -6
  332. package/dist/chunk-KCBAPMLH.js.map +1 -0
  333. package/dist/{chunk-7YTLJUBX.js → chunk-KJHQYPKT.js} +2 -2
  334. package/dist/{chunk-V3RVRZAU.js → chunk-KMUSTQA6.js} +2 -2
  335. package/dist/{chunk-HSVNFMXY.js → chunk-LB2G6SD6.js} +8 -8
  336. package/dist/{chunk-6PSAPCTE.js → chunk-LE7IHEU4.js} +2 -2
  337. package/dist/{chunk-ETSKBOXN.js → chunk-LGLHU55A.js} +7 -5
  338. package/dist/chunk-LGLHU55A.js.map +1 -0
  339. package/dist/{chunk-67L5CMXP.js → chunk-LLR42S6B.js} +6 -6
  340. package/dist/{chunk-RWIBPIPD.js → chunk-LNOYDMFD.js} +6 -6
  341. package/dist/{chunk-SFAP5EH5.js → chunk-LUMF63BM.js} +4 -4
  342. package/dist/{chunk-XPPEUGHG.js → chunk-LVRH5CGR.js} +5 -5
  343. package/dist/{chunk-WVJI3Z4P.js → chunk-LWLVWM34.js} +2 -2
  344. package/dist/{chunk-RFZU5BTG.js → chunk-LYSSO6WC.js} +4 -4
  345. package/dist/{chunk-IAVAZ36T.js → chunk-LZHXF66R.js} +4 -4
  346. package/dist/{chunk-CIVLXOLG.js → chunk-MDR4WJOV.js} +2 -2
  347. package/dist/{chunk-EJJRJYB5.js → chunk-MG73KW54.js} +6 -6
  348. package/dist/{chunk-BDVJ65GR.js → chunk-MMPJ2MCE.js} +6 -3
  349. package/dist/chunk-MMPJ2MCE.js.map +1 -0
  350. package/dist/{chunk-4EL5ZSZ3.js → chunk-MQZDTGGJ.js} +8 -5
  351. package/dist/chunk-MQZDTGGJ.js.map +1 -0
  352. package/dist/{chunk-BB2IVF76.js → chunk-MVXFMIVZ.js} +7 -4
  353. package/dist/chunk-MVXFMIVZ.js.map +1 -0
  354. package/dist/{chunk-G5G4Q7G6.js → chunk-MYYGXSXF.js} +9 -6
  355. package/dist/chunk-MYYGXSXF.js.map +1 -0
  356. package/dist/{chunk-MYUZPUXQ.js → chunk-N74IYYRU.js} +3 -3
  357. package/dist/{chunk-272OV2KZ.js → chunk-NFGVP3HN.js} +15 -9
  358. package/dist/chunk-NFGVP3HN.js.map +1 -0
  359. package/dist/{chunk-3BAFJMBH.js → chunk-NKIAP6ZL.js} +4 -4
  360. package/dist/{chunk-65IHPI4S.js → chunk-NMX3JAAB.js} +5 -4
  361. package/dist/chunk-NMX3JAAB.js.map +1 -0
  362. package/dist/{chunk-D6P5PSHU.js → chunk-NNAACCN2.js} +2 -2
  363. package/dist/{chunk-CATLG2RT.js → chunk-NU3EQX2L.js} +3 -3
  364. package/dist/{chunk-H35CQ6DF.js → chunk-OFVYNUYV.js} +3 -3
  365. package/dist/{chunk-WONCE5GB.js → chunk-OGPOTZAU.js} +18 -10
  366. package/dist/chunk-OGPOTZAU.js.map +1 -0
  367. package/dist/{chunk-HZAPN7XD.js → chunk-OZAP2BEP.js} +5 -2
  368. package/dist/chunk-OZAP2BEP.js.map +1 -0
  369. package/dist/{chunk-2YOQLBEX.js → chunk-OZZNC4YU.js} +3 -3
  370. package/dist/{chunk-Q544QEIN.js → chunk-P3L42CBB.js} +15 -9
  371. package/dist/chunk-P3L42CBB.js.map +1 -0
  372. package/dist/{chunk-C2ZNAQMO.js → chunk-PCRKQ2M7.js} +4 -4
  373. package/dist/{chunk-BRAF4MFO.js → chunk-PE4ZW3IA.js} +9 -5
  374. package/dist/chunk-PE4ZW3IA.js.map +1 -0
  375. package/dist/{chunk-35GWNOLB.js → chunk-PH5XJGKJ.js} +2 -2
  376. package/dist/{chunk-PEMZ2ABQ.js → chunk-PI5G6N6Q.js} +4 -4
  377. package/dist/{chunk-ETU4LNU7.js → chunk-PLEZDLVU.js} +3 -3
  378. package/dist/{chunk-QPMLACIK.js → chunk-PPTF5X7K.js} +6 -6
  379. package/dist/{chunk-AGYGNNOM.js → chunk-PQECNGDE.js} +2 -2
  380. package/dist/{chunk-IPE5FFFD.js → chunk-PUBPZOQJ.js} +2 -2
  381. package/dist/chunk-PZBK3F52.js +31 -0
  382. package/dist/chunk-PZBK3F52.js.map +1 -0
  383. package/dist/{chunk-4LDRYLE2.js → chunk-QNHNFU7G.js} +5 -5
  384. package/dist/{chunk-EN5Q5RPQ.js → chunk-QRUCR4YZ.js} +17 -5
  385. package/dist/chunk-QRUCR4YZ.js.map +1 -0
  386. package/dist/{chunk-2N2KNXTF.js → chunk-QWCMLOYC.js} +2 -2
  387. package/dist/{chunk-WBKWIFXA.js → chunk-QYNCPS5W.js} +6 -6
  388. package/dist/{chunk-5YOFMMK3.js → chunk-R2G4MVPY.js} +2 -2
  389. package/dist/{chunk-MCAXIKQD.js → chunk-R5XB2SCN.js} +3 -3
  390. package/dist/{chunk-RCI6KVN6.js → chunk-R67J6JKT.js} +5 -5
  391. package/dist/{chunk-GOWBYHYW.js → chunk-R6SBP5M5.js} +4 -4
  392. package/dist/{chunk-GKGA2ZCW.js → chunk-RAWQMBX6.js} +2 -2
  393. package/dist/{chunk-6BGS5FND.js → chunk-RGKGBYT2.js} +3 -3
  394. package/dist/{chunk-A5FIYKAN.js → chunk-RGMSTQ2J.js} +2 -2
  395. package/dist/{chunk-R7KR5FYJ.js → chunk-RJXRZW66.js} +2 -2
  396. package/dist/{chunk-BRUJC7OG.js → chunk-RPMAWM6F.js} +3 -3
  397. package/dist/{chunk-WHLVMQNF.js → chunk-RQ5HZDBV.js} +4 -4
  398. package/dist/chunk-RQ5HZDBV.js.map +1 -0
  399. package/dist/{chunk-UEJQQVP2.js → chunk-RRX6ZTNX.js} +4 -4
  400. package/dist/{chunk-OL7UQMBI.js → chunk-RUEKY3VR.js} +2 -2
  401. package/dist/{chunk-RDFPH47Y.js → chunk-SGGDMTKP.js} +11 -7
  402. package/dist/chunk-SGGDMTKP.js.map +1 -0
  403. package/dist/{chunk-BHXFPZAA.js → chunk-SLODUPES.js} +16 -10
  404. package/dist/chunk-SLODUPES.js.map +1 -0
  405. package/dist/{chunk-TLY2QMU5.js → chunk-SVFA75FO.js} +3 -3
  406. package/dist/{chunk-R4SOPN6K.js → chunk-SVXHKIGJ.js} +12 -5
  407. package/dist/chunk-SVXHKIGJ.js.map +1 -0
  408. package/dist/{chunk-WI6GD4MV.js → chunk-TBRAZK3Y.js} +12 -12
  409. package/dist/{chunk-DBXGRZBJ.js → chunk-THM3HCMU.js} +5 -5
  410. package/dist/{chunk-5UGXAAZG.js → chunk-TJT4NSFN.js} +2 -2
  411. package/dist/{chunk-5EQFAFR3.js → chunk-TK36COCP.js} +2 -2
  412. package/dist/{chunk-P4BZ7YE6.js → chunk-TTVKL3RD.js} +2 -2
  413. package/dist/{chunk-MRGPVPQC.js → chunk-TUYN6XZI.js} +10 -10
  414. package/dist/{chunk-BGYLL467.js → chunk-TXHJX2NG.js} +4 -4
  415. package/dist/{chunk-VUFMV5Q5.js → chunk-U3PPLAFB.js} +2 -2
  416. package/dist/{chunk-WVQ47UTI.js → chunk-UEWIIYGA.js} +2 -2
  417. package/dist/{chunk-SDSAQ5YS.js → chunk-UJE7IKQ4.js} +2 -2
  418. package/dist/{chunk-DX36KZUV.js → chunk-UMQN3BVV.js} +4 -4
  419. package/dist/{chunk-WCLWFN3F.js → chunk-URWNRC2P.js} +10 -10
  420. package/dist/{chunk-PS3EJLOC.js → chunk-VDZQJBAV.js} +4 -4
  421. package/dist/chunk-VDZQJBAV.js.map +1 -0
  422. package/dist/{chunk-D7Q42CRZ.js → chunk-VECWMANF.js} +10 -6
  423. package/dist/chunk-VECWMANF.js.map +1 -0
  424. package/dist/{chunk-Y2CSBXQT.js → chunk-VF2XC76U.js} +2 -2
  425. package/dist/{chunk-KJYD5OJ4.js → chunk-VLVMJDGD.js} +2 -2
  426. package/dist/{chunk-O7SE4PYT.js → chunk-VNHLYDTX.js} +12 -6
  427. package/dist/chunk-VNHLYDTX.js.map +1 -0
  428. package/dist/{chunk-V6YZ3PL5.js → chunk-VQBINZB7.js} +2 -2
  429. package/dist/{chunk-2SWQ6HIK.js → chunk-W3FAKT3D.js} +4 -4
  430. package/dist/{chunk-AFZUPCBK.js → chunk-W7HSGZGW.js} +7 -7
  431. package/dist/{chunk-DF2FFYZ7.js → chunk-WJH743NG.js} +10 -10
  432. package/dist/{chunk-F22WT7UX.js → chunk-X2QLWUND.js} +2 -2
  433. package/dist/{chunk-ZCNCQGWK.js → chunk-X4XYUNRL.js} +2 -2
  434. package/dist/{chunk-F73D4EMA.js → chunk-XCP5L665.js} +1 -1
  435. package/dist/chunk-XCP5L665.js.map +1 -0
  436. package/dist/{chunk-RQFBLYYH.js → chunk-XI2BXMBX.js} +2 -2
  437. package/dist/{chunk-HEWJJ4VE.js → chunk-XLZBZSES.js} +6 -3
  438. package/dist/chunk-XLZBZSES.js.map +1 -0
  439. package/dist/{chunk-UCTJJYVC.js → chunk-XPOQZI5X.js} +6 -6
  440. package/dist/{chunk-CPA2YRVZ.js → chunk-XYXTEGIM.js} +2 -2
  441. package/dist/{chunk-GEZYZ446.js → chunk-Y3IGYWGN.js} +27 -5
  442. package/dist/chunk-Y3IGYWGN.js.map +1 -0
  443. package/dist/{chunk-6SK3MTYJ.js → chunk-Y5UCOBQN.js} +4 -4
  444. package/dist/{chunk-3ZGQSWHJ.js → chunk-Y6JDIPV7.js} +4 -4
  445. package/dist/{chunk-I2IZ53QS.js → chunk-Y7ZS724A.js} +2 -2
  446. package/dist/{chunk-O6DRUOUF.js → chunk-YESTO24O.js} +2 -2
  447. package/dist/{chunk-GLWW2XCP.js → chunk-YJ4HM25H.js} +2 -2
  448. package/dist/chunk-YKCAJ2TN.js +47 -0
  449. package/dist/chunk-YKCAJ2TN.js.map +1 -0
  450. package/dist/{chunk-DORPR2YP.js → chunk-ZA4U5GDU.js} +2 -2
  451. package/dist/{chunk-2DFH74T4.js → chunk-ZB6BX4GO.js} +2 -2
  452. package/dist/{chunk-7AR2R7TV.js → chunk-ZDWU52DJ.js} +4 -4
  453. package/dist/{chunk-H2RHA73H.js → chunk-ZNJ4RLZT.js} +10 -10
  454. package/dist/{chunk-M7E66OSC.js → chunk-ZPIMPOHV.js} +4 -4
  455. package/dist/data-display/Alert.js +5 -4
  456. package/dist/data-display/AsyncStateContainer.js +4 -4
  457. package/dist/data-display/Avatar.js +6 -5
  458. package/dist/data-display/Badge.js +6 -5
  459. package/dist/data-display/Banner.js +3 -2
  460. package/dist/data-display/CardKit.js +19 -15
  461. package/dist/data-display/Carousel.js +13 -8
  462. package/dist/data-display/Chart.js +25 -20
  463. package/dist/data-display/DataGrid.js +2 -2
  464. package/dist/data-display/DataViews.js +108 -106
  465. package/dist/data-display/DescriptionItem.js +6 -5
  466. package/dist/data-display/FleetMap.js +27 -22
  467. package/dist/data-display/LazyImage.js +3 -3
  468. package/dist/data-display/Lightbox.js +7 -7
  469. package/dist/data-display/LoadingState.js +3 -3
  470. package/dist/data-display/MapPreview.js +16 -11
  471. package/dist/data-display/Progress.js +6 -5
  472. package/dist/data-display/Sheet.js +10 -5
  473. package/dist/data-display/StatCard.js +3 -3
  474. package/dist/data-display/Table.js +3 -3
  475. package/dist/feedback/ConfirmAction.js +9 -5
  476. package/dist/feedback/NotificationStatusNotice.js +11 -7
  477. package/dist/feedback/TutorialOverlay.js +2 -2
  478. package/dist/form/AddressAutocomplete.js +12 -10
  479. package/dist/form/Autocomplete.js +7 -2
  480. package/dist/form/Button.js +8 -4
  481. package/dist/form/Calendar.js +4 -4
  482. package/dist/form/CategorySelect.js +14 -12
  483. package/dist/form/CepField.js +9 -7
  484. package/dist/form/Checkbox.js +4 -3
  485. package/dist/form/CodeEditor.js +4 -4
  486. package/dist/form/Command.js +11 -6
  487. package/dist/form/CreatableSelect.js +5 -3
  488. package/dist/form/DateRangePicker.js +17 -12
  489. package/dist/form/Input.js +8 -6
  490. package/dist/form/InputOTP.js +7 -5
  491. package/dist/form/Label.js +10 -5
  492. package/dist/form/Menubar.js +13 -8
  493. package/dist/form/PhoneInput.js +7 -5
  494. package/dist/form/RadioGroup.js +8 -6
  495. package/dist/form/RichTextEditor.js +3 -3
  496. package/dist/form/Select.js +7 -5
  497. package/dist/form/Switch.js +7 -6
  498. package/dist/form/Textarea.js +5 -3
  499. package/dist/form/Toggle.js +6 -4
  500. package/dist/form/ToggleGroup.js +6 -1
  501. package/dist/form/total-form.js +38 -36
  502. package/dist/icons.js +11 -6
  503. package/dist/layout/Box.js +11 -6
  504. package/dist/layout/ContentToolbar.js +18 -13
  505. package/dist/layout/ScrollArea.js +3 -3
  506. package/dist/layout/Skeleton.js +2 -2
  507. package/dist/layout/Stack.js +12 -7
  508. package/dist/layout/TableFilter.js +6 -1
  509. package/dist/native/chunks/{chunk-UKROAIPA.js → chunk-335WGKE6.js} +35 -48
  510. package/dist/native/chunks/chunk-335WGKE6.js.map +1 -0
  511. package/dist/native/chunks/{chunk-LB65S6C7.js → chunk-4KWFRDI2.js} +3 -3
  512. package/dist/native/chunks/{chunk-S5SLTMPB.js → chunk-5IASLIBI.js} +2 -2
  513. package/dist/native/chunks/{chunk-IVNAQJY6.js → chunk-GUBTMR2K.js} +2 -2
  514. package/dist/native/chunks/chunk-IMGBBIMT.js +46 -0
  515. package/dist/native/chunks/chunk-IMGBBIMT.js.map +1 -0
  516. package/dist/native/chunks/{chunk-T3TYQMAH.js → chunk-KIG4KY4W.js} +18 -13
  517. package/dist/native/chunks/chunk-KIG4KY4W.js.map +1 -0
  518. package/dist/native/chunks/{chunk-VAD5YVIZ.js → chunk-OI57L6WL.js} +5 -5
  519. package/dist/native/chunks/{chunk-V72V2Q45.js → chunk-R5XVZRDD.js} +28 -1
  520. package/dist/native/chunks/chunk-R5XVZRDD.js.map +1 -0
  521. package/dist/native/chunks/{chunk-7UEJ2FMQ.js → chunk-X6RQGKGF.js} +2 -2
  522. package/dist/native/data-display/Alert.js +3 -3
  523. package/dist/native/data-display/Avatar.js +3 -3
  524. package/dist/native/data-display/Badge.js +3 -3
  525. package/dist/native/data-display/Chip.js +3 -3
  526. package/dist/native/data-display/EmptyState.js +6 -5
  527. package/dist/native/data-display/ErrorState.js +5 -4
  528. package/dist/native/data-display/ErrorState.js.map +1 -1
  529. package/dist/native/data-display/FleetMap.js +7 -6
  530. package/dist/native/data-display/FleetMap.js.map +1 -1
  531. package/dist/native/data-display/LoadingState.js +2 -2
  532. package/dist/native/data-display/Progress.js +2 -2
  533. package/dist/native/feedback/Dialog.js +3 -3
  534. package/dist/native/form/Button.js +4 -3
  535. package/dist/native/form/Checkbox.js +3 -3
  536. package/dist/native/form/Input.js +7 -3
  537. package/dist/native/form/Input.js.map +1 -1
  538. package/dist/native/form/Select.js +27 -14
  539. package/dist/native/form/Select.js.map +1 -1
  540. package/dist/native/form/Switch.js +2 -2
  541. package/dist/native/icons.js +3 -3
  542. package/dist/native/layout/Box.js +3 -3
  543. package/dist/native/layout/Card.js +2 -2
  544. package/dist/native/layout/Container.js +2 -2
  545. package/dist/native/layout/Skeleton.js +3 -3
  546. package/dist/native/layout/Spacer.js +2 -2
  547. package/dist/native/layout/Stack.js +3 -3
  548. package/dist/native/provider.js +2 -2
  549. package/dist/native/tokens.js +11 -1
  550. package/dist/native/typography/Heading.js +2 -2
  551. package/dist/native/typography/Paragraph.js +2 -2
  552. package/dist/native/typography/Text.js +2 -2
  553. package/dist/navigation/AppHeader.js +14 -9
  554. package/dist/navigation/CommandPalette.js +3 -3
  555. package/dist/navigation/NavigationMenu.js +5 -5
  556. package/dist/navigation/Pagination.js +10 -3
  557. package/dist/provider.js +11 -6
  558. package/dist/social-login-button.js +14 -10
  559. package/dist/tokens.js +52 -10
  560. package/dist/types/components/data-display/DataViews/data-views-bar-controls.d.ts.map +1 -1
  561. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  562. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  563. package/dist/types/components/data-display/DataViews/data-views-search.d.ts.map +1 -1
  564. package/dist/types/components/data-display/LazyImage/LazyImage.hooks.d.ts +1 -1
  565. package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts.map +1 -1
  566. package/dist/types/components/form/AddressAutocomplete/AddressTextField.d.ts.map +1 -1
  567. package/dist/types/components/form/Button/Button.styles.d.ts +9 -2
  568. package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
  569. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
  570. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts +3 -4
  571. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
  572. package/dist/types/components/form/CreatableSelect/CreatableSelect.d.ts.map +1 -1
  573. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  574. package/dist/types/components/form/Input/Input.metrics.d.ts +26 -16
  575. package/dist/types/components/form/Input/Input.metrics.d.ts.map +1 -1
  576. package/dist/types/components/form/Input/Input.styles.d.ts +2 -1
  577. package/dist/types/components/form/Input/Input.styles.d.ts.map +1 -1
  578. package/dist/types/components/form/InputOTP/InputOTP.styles.d.ts.map +1 -1
  579. package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
  580. package/dist/types/components/form/RadioGroup/RadioGroup.styles.d.ts.map +1 -1
  581. package/dist/types/components/form/Select/Select.d.ts.map +1 -1
  582. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  583. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
  584. package/dist/types/components/form/Toggle/Toggle.styles.d.ts.map +1 -1
  585. package/dist/types/components/form/ToggleGroup/ToggleGroup.d.ts.map +1 -1
  586. package/dist/types/components/form/total-form/Fields/ToggleField.d.ts.map +1 -1
  587. package/dist/types/components/form/total-form/SubmitButton.d.ts.map +1 -1
  588. package/dist/types/components/layout/ContentToolbar/ColumnsMenu.d.ts.map +1 -1
  589. package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts.map +1 -1
  590. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
  591. package/dist/types/components/layout/ContentToolbar/MultiSelectTriggers.d.ts.map +1 -1
  592. package/dist/types/components/layout/ContentToolbar/SavedViewsMenu.d.ts.map +1 -1
  593. package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
  594. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
  595. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  596. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
  597. package/dist/types/provider/mui-bridge.d.ts.map +1 -1
  598. package/dist/types/tokens/field-height.core.d.ts +49 -0
  599. package/dist/types/tokens/field-height.core.d.ts.map +1 -0
  600. package/dist/types/tokens/field-height.d.ts +58 -0
  601. package/dist/types/tokens/field-height.d.ts.map +1 -0
  602. package/dist/types/tokens/relative.d.ts +55 -0
  603. package/dist/types/tokens/relative.d.ts.map +1 -0
  604. package/dist/types/tokens/scales.d.ts +2 -0
  605. package/dist/types/tokens/scales.d.ts.map +1 -1
  606. package/dist/types/tokens/theme.d.ts +8 -0
  607. package/dist/types/tokens/theme.d.ts.map +1 -1
  608. package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
  609. package/dist/types-native/components/form/Input/Input.look.native.d.ts +2 -2
  610. package/dist/types-native/components/form/Input/Input.metrics.d.ts +26 -16
  611. package/dist/types-native/components/form/Input/Input.metrics.d.ts.map +1 -1
  612. package/dist/types-native/components/form/Input/Input.native.d.ts.map +1 -1
  613. package/dist/types-native/components/form/Select/Select.native.d.ts +2 -2
  614. package/dist/types-native/components/form/Select/Select.native.d.ts.map +1 -1
  615. package/dist/types-native/components/form/field-pulse.native.d.ts +3 -1
  616. package/dist/types-native/components/form/field-pulse.native.d.ts.map +1 -1
  617. package/dist/types-native/tokens/field-height.core.d.ts +49 -0
  618. package/dist/types-native/tokens/field-height.core.d.ts.map +1 -0
  619. package/dist/types-native/tokens/index.native.d.ts +1 -0
  620. package/dist/types-native/tokens/index.native.d.ts.map +1 -1
  621. package/dist/types-native/tokens/theme.d.ts +8 -0
  622. package/dist/types-native/tokens/theme.d.ts.map +1 -1
  623. package/dist/typography/Heading.js +6 -5
  624. package/dist/typography/Paragraph.js +4 -3
  625. package/dist/typography/Text.js +5 -4
  626. package/dist/user-avatar.js +14 -10
  627. package/dist/utility/InstallPrompt.js +2 -2
  628. package/package.json +1 -1
  629. package/src/components/data-display/DataViews/data-views-bar-controls.tsx +3 -2
  630. package/src/components/data-display/DataViews/data-views-day-input.tsx +2 -2
  631. package/src/components/data-display/DataViews/data-views-more-fields.tsx +4 -1
  632. package/src/components/data-display/DataViews/data-views-number-input.tsx +2 -2
  633. package/src/components/data-display/DataViews/data-views-range-pill.tsx +6 -3
  634. package/src/components/data-display/DataViews/data-views-search.tsx +6 -2
  635. package/src/components/data-display/MapPreview/MapSearchBar.tsx +2 -0
  636. package/src/components/form/AddressAutocomplete/AddressTextField.tsx +4 -2
  637. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +2 -2
  638. package/src/components/form/Button/Button.native.tsx +17 -4
  639. package/src/components/form/Button/Button.styles.ts +21 -5
  640. package/src/components/form/CategorySelect/CategoryPanelHead.tsx +3 -3
  641. package/src/components/form/CategorySelect/CategorySelect.styles.ts +5 -5
  642. package/src/components/form/CreatableSelect/CreatableSelect.tsx +2 -1
  643. package/src/components/form/Input/Input.look.native.ts +5 -5
  644. package/src/components/form/Input/Input.metrics.ts +53 -18
  645. package/src/components/form/Input/Input.native.tsx +2 -0
  646. package/src/components/form/Input/Input.styles.ts +4 -2
  647. package/src/components/form/Input/Input.tsx +9 -3
  648. package/src/components/form/InputOTP/InputOTP.styles.ts +12 -8
  649. package/src/components/form/PhoneInput/PhoneInput.tsx +4 -2
  650. package/src/components/form/RadioGroup/RadioGroup.styles.ts +10 -1
  651. package/src/components/form/Select/Select.native.tsx +34 -8
  652. package/src/components/form/Select/Select.tsx +13 -7
  653. package/src/components/form/Textarea/Textarea.tsx +5 -2
  654. package/src/components/form/Textarea/TextareaRichEditor.tsx +8 -3
  655. package/src/components/form/Toggle/Toggle.styles.ts +7 -3
  656. package/src/components/form/ToggleGroup/ToggleGroup.tsx +5 -0
  657. package/src/components/form/field-pulse.native.tsx +6 -3
  658. package/src/components/form/total-form/Fields/ToggleField.tsx +0 -2
  659. package/src/components/form/total-form/SubmitButton.tsx +4 -9
  660. package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +3 -2
  661. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +2 -1
  662. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +2 -0
  663. package/src/components/layout/ContentToolbar/MultiSelectTriggers.tsx +7 -5
  664. package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +3 -1
  665. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +2 -1
  666. package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -1
  667. package/src/components/layout/TableFilter/TableFilter.tsx +3 -2
  668. package/src/components/navigation/Pagination/PaginationParts.tsx +2 -2
  669. package/src/provider/mui-bridge.ts +6 -2
  670. package/src/tokens/field-height.core.ts +70 -0
  671. package/src/tokens/field-height.ts +152 -0
  672. package/src/tokens/index.native.ts +7 -0
  673. package/src/tokens/relative.ts +107 -0
  674. package/src/tokens/scales.ts +16 -0
  675. package/src/tokens/theme.ts +10 -0
  676. package/dist/chunk-272OV2KZ.js.map +0 -1
  677. package/dist/chunk-4EL5ZSZ3.js.map +0 -1
  678. package/dist/chunk-65IHPI4S.js.map +0 -1
  679. package/dist/chunk-6SXZ7CF2.js.map +0 -1
  680. package/dist/chunk-BB2IVF76.js.map +0 -1
  681. package/dist/chunk-BDVJ65GR.js.map +0 -1
  682. package/dist/chunk-BHXFPZAA.js.map +0 -1
  683. package/dist/chunk-BRAF4MFO.js.map +0 -1
  684. package/dist/chunk-D7Q42CRZ.js.map +0 -1
  685. package/dist/chunk-DV42HAVP.js.map +0 -1
  686. package/dist/chunk-EFEZWG4C.js.map +0 -1
  687. package/dist/chunk-EN5Q5RPQ.js.map +0 -1
  688. package/dist/chunk-ETSKBOXN.js.map +0 -1
  689. package/dist/chunk-F73D4EMA.js.map +0 -1
  690. package/dist/chunk-G5G4Q7G6.js.map +0 -1
  691. package/dist/chunk-GEZYZ446.js.map +0 -1
  692. package/dist/chunk-HEWJJ4VE.js.map +0 -1
  693. package/dist/chunk-HZAPN7XD.js.map +0 -1
  694. package/dist/chunk-IRSI3BFF.js.map +0 -1
  695. package/dist/chunk-JHOBW7OD.js.map +0 -1
  696. package/dist/chunk-JUHPNTDA.js.map +0 -1
  697. package/dist/chunk-JVMNE5G4.js.map +0 -1
  698. package/dist/chunk-L6UTYFAB.js.map +0 -1
  699. package/dist/chunk-MSKEFXXV.js.map +0 -1
  700. package/dist/chunk-O7SE4PYT.js.map +0 -1
  701. package/dist/chunk-PS3EJLOC.js.map +0 -1
  702. package/dist/chunk-Q544QEIN.js.map +0 -1
  703. package/dist/chunk-R4SOPN6K.js.map +0 -1
  704. package/dist/chunk-RDFPH47Y.js.map +0 -1
  705. package/dist/chunk-RRDL7AGQ.js.map +0 -1
  706. package/dist/chunk-USPQZQBF.js.map +0 -1
  707. package/dist/chunk-VYMULXCJ.js.map +0 -1
  708. package/dist/chunk-WHLVMQNF.js.map +0 -1
  709. package/dist/chunk-WONCE5GB.js.map +0 -1
  710. package/dist/chunk-XMDH3MRV.js.map +0 -1
  711. package/dist/chunk-XVM4ZIRE.js.map +0 -1
  712. package/dist/native/chunks/chunk-T3TYQMAH.js.map +0 -1
  713. package/dist/native/chunks/chunk-UKROAIPA.js.map +0 -1
  714. package/dist/native/chunks/chunk-V72V2Q45.js.map +0 -1
  715. /package/dist/{chunk-P7FQUGED.js.map → chunk-23FCBIUN.js.map} +0 -0
  716. /package/dist/{chunk-GOKMLXZH.js.map → chunk-2SKNSQCP.js.map} +0 -0
  717. /package/dist/{chunk-BKP7YW3Y.js.map → chunk-3IYB3XY2.js.map} +0 -0
  718. /package/dist/{chunk-URK67BAE.js.map → chunk-3SJZP7KH.js.map} +0 -0
  719. /package/dist/{chunk-4ETQRBZC.js.map → chunk-46UPILLK.js.map} +0 -0
  720. /package/dist/{chunk-SSJHEV5Z.js.map → chunk-4BEQADWC.js.map} +0 -0
  721. /package/dist/{chunk-OP6F3NXX.js.map → chunk-4IVOHL32.js.map} +0 -0
  722. /package/dist/{chunk-NFJUBPIN.js.map → chunk-4LMY5I5E.js.map} +0 -0
  723. /package/dist/{chunk-ZOUWHGV3.js.map → chunk-4MGFUPQT.js.map} +0 -0
  724. /package/dist/{chunk-32MTYYGC.js.map → chunk-4PIKOJZ4.js.map} +0 -0
  725. /package/dist/{chunk-RMB4RTTM.js.map → chunk-4V7FNB7R.js.map} +0 -0
  726. /package/dist/{chunk-OFMDFN3U.js.map → chunk-4YMIQ5DM.js.map} +0 -0
  727. /package/dist/{chunk-CJMU3G2J.js.map → chunk-56MKBXSH.js.map} +0 -0
  728. /package/dist/{chunk-ATBT4RJZ.js.map → chunk-57C636A6.js.map} +0 -0
  729. /package/dist/{chunk-UHWHTNUS.js.map → chunk-5BW7NCM5.js.map} +0 -0
  730. /package/dist/{chunk-LG6DHNRD.js.map → chunk-5FA5S2YN.js.map} +0 -0
  731. /package/dist/{chunk-IQFUV3BA.js.map → chunk-5RHMLOIA.js.map} +0 -0
  732. /package/dist/{chunk-HFBME3C5.js.map → chunk-5SCZZFZR.js.map} +0 -0
  733. /package/dist/{chunk-QKDFD4VT.js.map → chunk-62NFZR52.js.map} +0 -0
  734. /package/dist/{chunk-3PT3SBJ7.js.map → chunk-65JHGT5F.js.map} +0 -0
  735. /package/dist/{chunk-H7ZN2GW7.js.map → chunk-67N6TH6E.js.map} +0 -0
  736. /package/dist/{chunk-INH2BDHV.js.map → chunk-6ANWFGLL.js.map} +0 -0
  737. /package/dist/{chunk-Q5BSNHN7.js.map → chunk-6M33XQLZ.js.map} +0 -0
  738. /package/dist/{chunk-IPS55KWK.js.map → chunk-6M7CMILP.js.map} +0 -0
  739. /package/dist/{chunk-X2R7QG5I.js.map → chunk-6MDBMCFK.js.map} +0 -0
  740. /package/dist/{chunk-PCONTSJJ.js.map → chunk-6V7D6GRX.js.map} +0 -0
  741. /package/dist/{chunk-DTKMBI7B.js.map → chunk-6YLAVHV4.js.map} +0 -0
  742. /package/dist/{chunk-BWSYSSF3.js.map → chunk-7A3G4W52.js.map} +0 -0
  743. /package/dist/{chunk-RXSGHPCR.js.map → chunk-7FOOLP5H.js.map} +0 -0
  744. /package/dist/{chunk-NJ6D37KV.js.map → chunk-7FWXG2KF.js.map} +0 -0
  745. /package/dist/{chunk-APMEXS3Y.js.map → chunk-7N4V3ARN.js.map} +0 -0
  746. /package/dist/{chunk-OIFBBDYX.js.map → chunk-7TSQNYQO.js.map} +0 -0
  747. /package/dist/{chunk-YD77RANW.js.map → chunk-7VN7LFBA.js.map} +0 -0
  748. /package/dist/{chunk-CKW267ZK.js.map → chunk-AJVYJZHI.js.map} +0 -0
  749. /package/dist/{chunk-EZOVSZ5B.js.map → chunk-ANNDLY3M.js.map} +0 -0
  750. /package/dist/{chunk-J2RRZZXC.js.map → chunk-APT5L7V5.js.map} +0 -0
  751. /package/dist/{chunk-ZVTJGWIV.js.map → chunk-AYRHW4DX.js.map} +0 -0
  752. /package/dist/{chunk-NLUZGT4U.js.map → chunk-AZ4LLAAJ.js.map} +0 -0
  753. /package/dist/{chunk-7DNQHMDO.js.map → chunk-B6IURHSZ.js.map} +0 -0
  754. /package/dist/{chunk-6VZYQC7T.js.map → chunk-BM4CGQED.js.map} +0 -0
  755. /package/dist/{chunk-JOPTI47I.js.map → chunk-BM4ZPBBT.js.map} +0 -0
  756. /package/dist/{chunk-VGSEI7PQ.js.map → chunk-BTIBFR5L.js.map} +0 -0
  757. /package/dist/{chunk-YXQ2NJHF.js.map → chunk-C423YJGN.js.map} +0 -0
  758. /package/dist/{chunk-E6D2Y5EK.js.map → chunk-CMN26J5Y.js.map} +0 -0
  759. /package/dist/{chunk-6SNRPCSK.js.map → chunk-CR4KC2K5.js.map} +0 -0
  760. /package/dist/{chunk-4WT4PV4M.js.map → chunk-CZ5ZL63A.js.map} +0 -0
  761. /package/dist/{chunk-BPYPUEM5.js.map → chunk-CZJLWCEG.js.map} +0 -0
  762. /package/dist/{chunk-XEUSTU7K.js.map → chunk-DIWC6AQL.js.map} +0 -0
  763. /package/dist/{chunk-LWAOL4BG.js.map → chunk-DO3UNZAU.js.map} +0 -0
  764. /package/dist/{chunk-GUROYOKQ.js.map → chunk-EAE5Z5HL.js.map} +0 -0
  765. /package/dist/{chunk-EYRSUVBC.js.map → chunk-ECZXTIDR.js.map} +0 -0
  766. /package/dist/{chunk-55E7GLVT.js.map → chunk-EDJDASXE.js.map} +0 -0
  767. /package/dist/{chunk-26ORCF6J.js.map → chunk-EEAQBPOW.js.map} +0 -0
  768. /package/dist/{chunk-DWZ7FLA7.js.map → chunk-FATRMNVN.js.map} +0 -0
  769. /package/dist/{chunk-C4NRFERD.js.map → chunk-FTCCYWF4.js.map} +0 -0
  770. /package/dist/{chunk-NR2HXHBR.js.map → chunk-G73SDZ3T.js.map} +0 -0
  771. /package/dist/{chunk-F65LT7XV.js.map → chunk-GCWF5AQE.js.map} +0 -0
  772. /package/dist/{chunk-X4GALW6I.js.map → chunk-GJKBWVU2.js.map} +0 -0
  773. /package/dist/{chunk-SHQWIDD5.js.map → chunk-GJQYM3PM.js.map} +0 -0
  774. /package/dist/{chunk-VNEEXUWA.js.map → chunk-GT7C6TSM.js.map} +0 -0
  775. /package/dist/{chunk-OHKEQ7QJ.js.map → chunk-GXEB6MJA.js.map} +0 -0
  776. /package/dist/{chunk-QNUWSXF2.js.map → chunk-H57ZS6W2.js.map} +0 -0
  777. /package/dist/{chunk-IASDP44E.js.map → chunk-HR7YTBR7.js.map} +0 -0
  778. /package/dist/{chunk-SZZLABMO.js.map → chunk-IDO4EV7T.js.map} +0 -0
  779. /package/dist/{chunk-SAIKHWH7.js.map → chunk-IFAEKIT2.js.map} +0 -0
  780. /package/dist/{chunk-QP3KK4KO.js.map → chunk-IGO5DC7D.js.map} +0 -0
  781. /package/dist/{chunk-ORIFMVN4.js.map → chunk-IM76SSXI.js.map} +0 -0
  782. /package/dist/{chunk-EATFKTO3.js.map → chunk-IOEF32HX.js.map} +0 -0
  783. /package/dist/{chunk-G3WUOPWE.js.map → chunk-IZBDSPTW.js.map} +0 -0
  784. /package/dist/{chunk-RRO2EOJB.js.map → chunk-JB67KPGM.js.map} +0 -0
  785. /package/dist/{chunk-RIA34EUT.js.map → chunk-JDY37EML.js.map} +0 -0
  786. /package/dist/{chunk-5ZOJLYD2.js.map → chunk-JE6RZ5L6.js.map} +0 -0
  787. /package/dist/{chunk-SMUZRLFZ.js.map → chunk-JGOXXKPY.js.map} +0 -0
  788. /package/dist/{chunk-7U36V4CU.js.map → chunk-JO5GSRYQ.js.map} +0 -0
  789. /package/dist/{chunk-DHQ6ASUD.js.map → chunk-JPNPXNFH.js.map} +0 -0
  790. /package/dist/{chunk-D5YGDCMP.js.map → chunk-JRHZZTVV.js.map} +0 -0
  791. /package/dist/{chunk-DVEYD27F.js.map → chunk-JXNT5TUP.js.map} +0 -0
  792. /package/dist/{chunk-4DUHJIR2.js.map → chunk-JYETSTOQ.js.map} +0 -0
  793. /package/dist/{chunk-FC74EAW4.js.map → chunk-JZJOAGBG.js.map} +0 -0
  794. /package/dist/{chunk-GLPHRHIT.js.map → chunk-K2XK45HG.js.map} +0 -0
  795. /package/dist/{chunk-SGV7QGYQ.js.map → chunk-KBOTNPYL.js.map} +0 -0
  796. /package/dist/{chunk-7YTLJUBX.js.map → chunk-KJHQYPKT.js.map} +0 -0
  797. /package/dist/{chunk-V3RVRZAU.js.map → chunk-KMUSTQA6.js.map} +0 -0
  798. /package/dist/{chunk-HSVNFMXY.js.map → chunk-LB2G6SD6.js.map} +0 -0
  799. /package/dist/{chunk-6PSAPCTE.js.map → chunk-LE7IHEU4.js.map} +0 -0
  800. /package/dist/{chunk-67L5CMXP.js.map → chunk-LLR42S6B.js.map} +0 -0
  801. /package/dist/{chunk-RWIBPIPD.js.map → chunk-LNOYDMFD.js.map} +0 -0
  802. /package/dist/{chunk-SFAP5EH5.js.map → chunk-LUMF63BM.js.map} +0 -0
  803. /package/dist/{chunk-XPPEUGHG.js.map → chunk-LVRH5CGR.js.map} +0 -0
  804. /package/dist/{chunk-WVJI3Z4P.js.map → chunk-LWLVWM34.js.map} +0 -0
  805. /package/dist/{chunk-RFZU5BTG.js.map → chunk-LYSSO6WC.js.map} +0 -0
  806. /package/dist/{chunk-IAVAZ36T.js.map → chunk-LZHXF66R.js.map} +0 -0
  807. /package/dist/{chunk-CIVLXOLG.js.map → chunk-MDR4WJOV.js.map} +0 -0
  808. /package/dist/{chunk-EJJRJYB5.js.map → chunk-MG73KW54.js.map} +0 -0
  809. /package/dist/{chunk-MYUZPUXQ.js.map → chunk-N74IYYRU.js.map} +0 -0
  810. /package/dist/{chunk-3BAFJMBH.js.map → chunk-NKIAP6ZL.js.map} +0 -0
  811. /package/dist/{chunk-D6P5PSHU.js.map → chunk-NNAACCN2.js.map} +0 -0
  812. /package/dist/{chunk-CATLG2RT.js.map → chunk-NU3EQX2L.js.map} +0 -0
  813. /package/dist/{chunk-H35CQ6DF.js.map → chunk-OFVYNUYV.js.map} +0 -0
  814. /package/dist/{chunk-2YOQLBEX.js.map → chunk-OZZNC4YU.js.map} +0 -0
  815. /package/dist/{chunk-C2ZNAQMO.js.map → chunk-PCRKQ2M7.js.map} +0 -0
  816. /package/dist/{chunk-35GWNOLB.js.map → chunk-PH5XJGKJ.js.map} +0 -0
  817. /package/dist/{chunk-PEMZ2ABQ.js.map → chunk-PI5G6N6Q.js.map} +0 -0
  818. /package/dist/{chunk-ETU4LNU7.js.map → chunk-PLEZDLVU.js.map} +0 -0
  819. /package/dist/{chunk-QPMLACIK.js.map → chunk-PPTF5X7K.js.map} +0 -0
  820. /package/dist/{chunk-AGYGNNOM.js.map → chunk-PQECNGDE.js.map} +0 -0
  821. /package/dist/{chunk-IPE5FFFD.js.map → chunk-PUBPZOQJ.js.map} +0 -0
  822. /package/dist/{chunk-4LDRYLE2.js.map → chunk-QNHNFU7G.js.map} +0 -0
  823. /package/dist/{chunk-2N2KNXTF.js.map → chunk-QWCMLOYC.js.map} +0 -0
  824. /package/dist/{chunk-WBKWIFXA.js.map → chunk-QYNCPS5W.js.map} +0 -0
  825. /package/dist/{chunk-5YOFMMK3.js.map → chunk-R2G4MVPY.js.map} +0 -0
  826. /package/dist/{chunk-MCAXIKQD.js.map → chunk-R5XB2SCN.js.map} +0 -0
  827. /package/dist/{chunk-RCI6KVN6.js.map → chunk-R67J6JKT.js.map} +0 -0
  828. /package/dist/{chunk-GOWBYHYW.js.map → chunk-R6SBP5M5.js.map} +0 -0
  829. /package/dist/{chunk-GKGA2ZCW.js.map → chunk-RAWQMBX6.js.map} +0 -0
  830. /package/dist/{chunk-6BGS5FND.js.map → chunk-RGKGBYT2.js.map} +0 -0
  831. /package/dist/{chunk-A5FIYKAN.js.map → chunk-RGMSTQ2J.js.map} +0 -0
  832. /package/dist/{chunk-R7KR5FYJ.js.map → chunk-RJXRZW66.js.map} +0 -0
  833. /package/dist/{chunk-BRUJC7OG.js.map → chunk-RPMAWM6F.js.map} +0 -0
  834. /package/dist/{chunk-UEJQQVP2.js.map → chunk-RRX6ZTNX.js.map} +0 -0
  835. /package/dist/{chunk-OL7UQMBI.js.map → chunk-RUEKY3VR.js.map} +0 -0
  836. /package/dist/{chunk-TLY2QMU5.js.map → chunk-SVFA75FO.js.map} +0 -0
  837. /package/dist/{chunk-WI6GD4MV.js.map → chunk-TBRAZK3Y.js.map} +0 -0
  838. /package/dist/{chunk-DBXGRZBJ.js.map → chunk-THM3HCMU.js.map} +0 -0
  839. /package/dist/{chunk-5UGXAAZG.js.map → chunk-TJT4NSFN.js.map} +0 -0
  840. /package/dist/{chunk-5EQFAFR3.js.map → chunk-TK36COCP.js.map} +0 -0
  841. /package/dist/{chunk-P4BZ7YE6.js.map → chunk-TTVKL3RD.js.map} +0 -0
  842. /package/dist/{chunk-MRGPVPQC.js.map → chunk-TUYN6XZI.js.map} +0 -0
  843. /package/dist/{chunk-BGYLL467.js.map → chunk-TXHJX2NG.js.map} +0 -0
  844. /package/dist/{chunk-VUFMV5Q5.js.map → chunk-U3PPLAFB.js.map} +0 -0
  845. /package/dist/{chunk-WVQ47UTI.js.map → chunk-UEWIIYGA.js.map} +0 -0
  846. /package/dist/{chunk-SDSAQ5YS.js.map → chunk-UJE7IKQ4.js.map} +0 -0
  847. /package/dist/{chunk-DX36KZUV.js.map → chunk-UMQN3BVV.js.map} +0 -0
  848. /package/dist/{chunk-WCLWFN3F.js.map → chunk-URWNRC2P.js.map} +0 -0
  849. /package/dist/{chunk-Y2CSBXQT.js.map → chunk-VF2XC76U.js.map} +0 -0
  850. /package/dist/{chunk-KJYD5OJ4.js.map → chunk-VLVMJDGD.js.map} +0 -0
  851. /package/dist/{chunk-V6YZ3PL5.js.map → chunk-VQBINZB7.js.map} +0 -0
  852. /package/dist/{chunk-2SWQ6HIK.js.map → chunk-W3FAKT3D.js.map} +0 -0
  853. /package/dist/{chunk-AFZUPCBK.js.map → chunk-W7HSGZGW.js.map} +0 -0
  854. /package/dist/{chunk-DF2FFYZ7.js.map → chunk-WJH743NG.js.map} +0 -0
  855. /package/dist/{chunk-F22WT7UX.js.map → chunk-X2QLWUND.js.map} +0 -0
  856. /package/dist/{chunk-ZCNCQGWK.js.map → chunk-X4XYUNRL.js.map} +0 -0
  857. /package/dist/{chunk-RQFBLYYH.js.map → chunk-XI2BXMBX.js.map} +0 -0
  858. /package/dist/{chunk-UCTJJYVC.js.map → chunk-XPOQZI5X.js.map} +0 -0
  859. /package/dist/{chunk-CPA2YRVZ.js.map → chunk-XYXTEGIM.js.map} +0 -0
  860. /package/dist/{chunk-6SK3MTYJ.js.map → chunk-Y5UCOBQN.js.map} +0 -0
  861. /package/dist/{chunk-3ZGQSWHJ.js.map → chunk-Y6JDIPV7.js.map} +0 -0
  862. /package/dist/{chunk-I2IZ53QS.js.map → chunk-Y7ZS724A.js.map} +0 -0
  863. /package/dist/{chunk-O6DRUOUF.js.map → chunk-YESTO24O.js.map} +0 -0
  864. /package/dist/{chunk-GLWW2XCP.js.map → chunk-YJ4HM25H.js.map} +0 -0
  865. /package/dist/{chunk-DORPR2YP.js.map → chunk-ZA4U5GDU.js.map} +0 -0
  866. /package/dist/{chunk-2DFH74T4.js.map → chunk-ZB6BX4GO.js.map} +0 -0
  867. /package/dist/{chunk-7AR2R7TV.js.map → chunk-ZDWU52DJ.js.map} +0 -0
  868. /package/dist/{chunk-H2RHA73H.js.map → chunk-ZNJ4RLZT.js.map} +0 -0
  869. /package/dist/{chunk-M7E66OSC.js.map → chunk-ZPIMPOHV.js.map} +0 -0
  870. /package/dist/native/chunks/{chunk-LB65S6C7.js.map → chunk-4KWFRDI2.js.map} +0 -0
  871. /package/dist/native/chunks/{chunk-S5SLTMPB.js.map → chunk-5IASLIBI.js.map} +0 -0
  872. /package/dist/native/chunks/{chunk-IVNAQJY6.js.map → chunk-GUBTMR2K.js.map} +0 -0
  873. /package/dist/native/chunks/{chunk-VAD5YVIZ.js.map → chunk-OI57L6WL.js.map} +0 -0
  874. /package/dist/native/chunks/{chunk-7UEJ2FMQ.js.map → chunk-X6RQGKGF.js.map} +0 -0
@@ -8,6 +8,7 @@ import type { FC } from 'react';
8
8
  import React from 'react';
9
9
 
10
10
  import { scaleFor } from './Pagination.helpers';
11
+ import { asFieldSize, fieldTextFieldStyles } from '../../../tokens/field-height';
11
12
 
12
13
  // Kept module-local: styled() components cannot be exported across a module
13
14
  // boundary here without tripping TS2742.
@@ -47,7 +48,7 @@ export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
47
48
  <Typography variant="body2" color="text.secondary">
48
49
  {pageSizeLabel}
49
50
  </Typography>
50
- <FormControl size="small" sx={{ minWidth: 80 }}>
51
+ <FormControl size="small" sx={(theme) => ({ minWidth: 80, ...fieldTextFieldStyles(theme, asFieldSize(size)) })}>
51
52
  <Select
52
53
  value={value}
53
54
  onChange={(event) => onChange(event.target.value as number)}
@@ -56,7 +57,6 @@ export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
56
57
  sx={{
57
58
  '& .MuiSelect-select': {
58
59
  fontSize: scaleFor(size, ['0.875rem', '1rem', '1.125rem']),
59
- py: scaleFor(size, [0.5, 1, 1.5]),
60
60
  },
61
61
  }}
62
62
  >
@@ -1,7 +1,9 @@
1
1
  import type { PaletteColor, Theme, ThemeOptions } from '@mui/material/styles/index.js';
2
2
 
3
3
  import { cssLengthToPx, cssTrackingToEm } from '../tokens/css-units';
4
- import { fieldRadius, fieldRadiusOverrides } from '../tokens/field-radius';
4
+ import { resolveFieldHeight } from '../tokens/field-height.core';
5
+ import { fieldOverrides } from '../tokens/field-height';
6
+ import { fieldRadius } from '../tokens/field-radius';
5
7
  import { accentFor } from '../tokens/scales';
6
8
  import {
7
9
  FONT_WEIGHTS,
@@ -99,6 +101,7 @@ export function uiThemeFromMui(theme: Theme): UiTheme {
99
101
  spacing: (units: number) => units * unit,
100
102
  spacingUnit: unit,
101
103
  radius: { sm: md / 2, md, lg: md * 2, xl: md * 4, full: 9999, field: fieldRadius(theme) },
104
+ fieldHeight: resolveFieldHeight(theme.fieldHeight),
102
105
  typography: {
103
106
  fontFamily: theme.typography.fontFamily ?? WEB_FONT_FAMILY,
104
107
  monospaceFontFamily: WEB_MONOSPACE_FONT_FAMILY,
@@ -136,7 +139,8 @@ export function muiThemeOptionsFrom(ui: UiTheme): ThemeOptions {
136
139
  },
137
140
  shape: { borderRadius: ui.radius.md },
138
141
  fieldRadius: ui.radius.field,
139
- components: fieldRadiusOverrides(ui.radius.field),
142
+ fieldHeight: ui.fieldHeight,
143
+ components: fieldOverrides(ui.radius.field, ui.fieldHeight),
140
144
  spacing: ui.spacingUnit,
141
145
  typography: { fontFamily: ui.typography.fontFamily ?? WEB_FONT_FAMILY },
142
146
  zIndex: { ...ui.zIndex },
@@ -0,0 +1,70 @@
1
+ import type { SizeValue } from './vocabulary';
2
+
3
+ /**
4
+ * THE ONE HEIGHT EVERY FIELD IS DRAWN AT, WITH NO RENDERER BEHIND IT.
5
+ *
6
+ * A filter row used to stand at three heights — a 40px search box, 34px filter
7
+ * pills, 38px category and "Mais" triggers — and a form's default field was
8
+ * 56px beside a 44px button (FUT-2555). A field's height is one decision, so it
9
+ * is one token, the same way its corner is (`./field-radius.core.ts`).
10
+ *
11
+ * It is a multiple of the DEFAULT FONT SIZE — `rem` on the web, the body size on
12
+ * native — not a pixel count, so a field grows with the type it holds: a reader
13
+ * who raises the browser's base size gets taller fields with it instead of text
14
+ * crammed into a fixed box.
15
+ *
16
+ * The web reader and the theme channel are in `./field-height.ts`.
17
+ */
18
+
19
+ /**
20
+ * The standard field height, in multiples of the default font size.
21
+ *
22
+ * 2.5 — 40px at the 16px default: what MUI's small outlined field has always
23
+ * drawn (the filter row's search box), and the 40px touch-target floor the
24
+ * product already holds its controls to.
25
+ */
26
+ export const DEFAULT_FIELD_HEIGHT = 2.5;
27
+
28
+ /** The px (dp) the default font size stands for — `1rem`, the body size. */
29
+ export const FIELD_HEIGHT_FONT_PX = 16;
30
+
31
+ /**
32
+ * How each step of the size scale relates to the standard height.
33
+ *
34
+ * `sm` and `md` ARE the standard: they were the two everyday densities (a 40px
35
+ * small field, a 56px medium one, a 36px and a 44px button), and a row mixing
36
+ * them is exactly what this token ends. `xs` is the compact step; `lg` and `xl`
37
+ * the roomy ones. All of them stay multiples of the font size.
38
+ */
39
+ export const FIELD_HEIGHT_SCALE: Record<SizeValue, number> = {
40
+ xs: 0.8,
41
+ sm: 1,
42
+ md: 1,
43
+ lg: 1.2,
44
+ xl: 1.4,
45
+ };
46
+
47
+ /** A usable standard height: the given one when it is a positive number, the default otherwise. */
48
+ export function resolveFieldHeight(height: unknown): number {
49
+ return typeof height === 'number' && Number.isFinite(height) && height > 0 ? height : DEFAULT_FIELD_HEIGHT;
50
+ }
51
+
52
+ /** A field's height for a size, in multiples of the default font size (`rem`). */
53
+ export function fieldHeightRem(height: number, size: SizeValue = 'md'): number {
54
+ // Rounded to 1/10000rem: `3 * 0.8` is 2.4000000000000004 in floating point,
55
+ // and that would be the CSS every field of the step is written with.
56
+ return Math.round(resolveFieldHeight(height) * FIELD_HEIGHT_SCALE[size] * 10_000) / 10_000;
57
+ }
58
+
59
+ /** A field's height for a size in px (dp) — what the native renderer lays out. */
60
+ export function fieldHeightPx(height: number, size: SizeValue = 'md'): number {
61
+ return fieldHeightRem(height, size) * FIELD_HEIGHT_FONT_PX;
62
+ }
63
+
64
+ /**
65
+ * THE ONE RESTING BORDER EVERY FIELD DRAWS: this width, in `fieldEdge`'s colour
66
+ * (`./field-edge.core.ts`, the tone of the theme's hairline that clears the 3:1
67
+ * non-text contrast floor). A variant that draws a different edge on purpose —
68
+ * `glass`, `gradient`, `underline`, a coloured outline button — keeps it.
69
+ */
70
+ export const FIELD_BORDER_WIDTH = 1;
@@ -0,0 +1,152 @@
1
+ import type { Components, CSSObject, Theme } from '@mui/material/styles/index.js';
2
+
3
+ import { fieldEdge } from './field-edge';
4
+ import { fieldRadiusOverrides, fieldRootStyles } from './field-radius';
5
+ import {
6
+ DEFAULT_FIELD_HEIGHT,
7
+ FIELD_BORDER_WIDTH,
8
+ FIELD_HEIGHT_SCALE,
9
+ fieldHeightRem,
10
+ resolveFieldHeight,
11
+ } from './field-height.core';
12
+
13
+ import type { SizeValue } from './vocabulary';
14
+
15
+ /**
16
+ * THE FIELD HEIGHT AND BORDER ON THE WEB: the theme channel, the readers, and
17
+ * the styles that put a MUI text field or select on them.
18
+ *
19
+ * The argument for one height is in `./field-height.core.ts`. It is a top-level
20
+ * theme key for the reason `fieldRadius` is (`./field-radius.ts`): MUI types
21
+ * `shape` in `@mui/system`, which this package does not depend on.
22
+ */
23
+
24
+ export {
25
+ DEFAULT_FIELD_HEIGHT,
26
+ FIELD_BORDER_WIDTH,
27
+ FIELD_HEIGHT_SCALE,
28
+ fieldHeightPx,
29
+ fieldHeightRem,
30
+ } from './field-height.core';
31
+
32
+ declare module '@mui/material/styles' {
33
+ interface Theme {
34
+ /** The standard field height, in multiples of the default font size. See `@12-apps/ui/tokens`' `fieldHeight`. */
35
+ fieldHeight?: number;
36
+ }
37
+ interface ThemeOptions {
38
+ /** The standard field height, in multiples of the default font size. Defaults to {@link DEFAULT_FIELD_HEIGHT}. */
39
+ fieldHeight?: number;
40
+ }
41
+ }
42
+
43
+ /** A component's own size string as a step of the field scale — `md` when it is not one. */
44
+ export function asFieldSize(size: string | undefined): SizeValue {
45
+ return size !== undefined && size in FIELD_HEIGHT_SCALE ? (size as SizeValue) : 'md';
46
+ }
47
+
48
+ /** A field's height for a size, as CSS — `2.5rem` for the default. */
49
+ export function fieldHeight(theme: Theme, size: SizeValue = 'md'): string {
50
+ return `${fieldHeightRem(resolveFieldHeight(theme.fieldHeight), size)}rem`;
51
+ }
52
+
53
+ /** The resting border every field draws: 1px in {@link fieldEdge}'s colour. */
54
+ export function fieldBorder(theme: Theme, surface?: string): string {
55
+ return `${FIELD_BORDER_WIDTH}px solid ${fieldEdge(theme, surface)}`;
56
+ }
57
+
58
+ /**
59
+ * The vertical padding that makes a one-line box `height` tall around MUI's
60
+ * `1.4375em` line — in `em`, so it is measured against the field's own type.
61
+ */
62
+ const verticalInset = (height: string): string => `calc((${height} - 1.4375em) / 2)`;
63
+
64
+ /**
65
+ * A MUI `TextField` / `Select` / `Autocomplete` (outlined, one line) at the
66
+ * field height for `size`: the root's own vertical padding goes, the input
67
+ * takes the inset, and the resting label sits on the new centre line.
68
+ *
69
+ * Multiline fields are left alone — their height is their content's — and so
70
+ * are `filled` and `standard`, whose label sits inside the box and which draw
71
+ * their own heights as variants.
72
+ */
73
+ export function fieldControlStyles(theme: Theme, size: SizeValue = 'md'): CSSObject {
74
+ const inset = verticalInset(fieldHeight(theme, size));
75
+ return {
76
+ '& .MuiOutlinedInput-root:not(.MuiInputBase-multiline)': {
77
+ paddingTop: 0,
78
+ paddingBottom: 0,
79
+ '& .MuiOutlinedInput-input, & .MuiSelect-select': { paddingTop: inset, paddingBottom: inset },
80
+ // A select's display box inherits the ROOT's line height as an absolute
81
+ // length, so at a smaller font (0.875rem) it outgrew the inset measured in
82
+ // its own `em` — 42.88px in a 40px row. Its line follows its own type now.
83
+ '& .MuiSelect-select': { lineHeight: '1.4375em' },
84
+ },
85
+ '& .MuiInputLabel-outlined:not(.MuiInputLabel-shrink)': {
86
+ transform: `translate(14px, ${inset}) scale(1)`,
87
+ },
88
+ };
89
+ }
90
+
91
+ /**
92
+ * The notched outline's resting colour, as a MUI style-override callback. One
93
+ * function, not one per call: two themes built from the same options must
94
+ * compare equal, and a fresh closure each time would make them differ.
95
+ */
96
+ const restingEdge = ({ theme }: { theme: Theme }): CSSObject => ({ borderColor: fieldEdge(theme) });
97
+
98
+ /**
99
+ * MUI component overrides that put MUI's OWN outlined fields on the standard
100
+ * height and the one resting border — for a host's bare `TextField` / `Select`,
101
+ * the way `fieldRadiusOverrides` rounds them. Every size MUI has maps to the standard:
102
+ * a host that wants another density asks this package's fields for a `size`.
103
+ */
104
+ export function fieldHeightOverrides(height: number = DEFAULT_FIELD_HEIGHT): Components<Theme> {
105
+ const inset = verticalInset(`${fieldHeightRem(height)}rem`);
106
+ return {
107
+ MuiOutlinedInput: {
108
+ styleOverrides: {
109
+ input: { '&:not(.MuiInputBase-inputMultiline)': { paddingTop: inset, paddingBottom: inset } },
110
+ // The one resting border; MUI's hover, focus and error rules outrank it.
111
+ notchedOutline: restingEdge,
112
+ },
113
+ },
114
+ MuiInputLabel: {
115
+ styleOverrides: {
116
+ outlined: { '&:not(.MuiInputLabel-shrink)': { transform: `translate(14px, ${inset}) scale(1)` } },
117
+ },
118
+ },
119
+ };
120
+ }
121
+
122
+ /**
123
+ * Both field overrides — the corner and the height — merged per component.
124
+ * They meet on `MuiOutlinedInput` (`root` from the radius, `input` from the
125
+ * height), so a plain spread would lose one of them.
126
+ */
127
+ export function fieldOverrides(radius: number | undefined, height: number | undefined): Components<Theme> {
128
+ type Entry = { styleOverrides?: Record<string, unknown> };
129
+ const corner = fieldRadiusOverrides(radius) as Record<string, Entry>;
130
+ const tall = fieldHeightOverrides(height) as Record<string, Entry>;
131
+ const names = new Set([...Object.keys(corner), ...Object.keys(tall)]);
132
+ return Object.fromEntries(
133
+ [...names].map((name) => [
134
+ name,
135
+ { styleOverrides: { ...corner[name]?.styleOverrides, ...tall[name]?.styleOverrides } },
136
+ ]),
137
+ ) as Components<Theme>;
138
+ }
139
+
140
+ /**
141
+ * THE field standard on a MUI `TextField` / `Select` / `Autocomplete`, for a
142
+ * composite that renders MUI's own: the field radius, the field height for
143
+ * `size`, and the one resting border ({@link fieldEdge}). MUI's own hover,
144
+ * focus and error borders outrank the resting one, so they still show.
145
+ */
146
+ export function fieldTextFieldStyles(theme: Theme, size: SizeValue = 'md'): CSSObject {
147
+ return {
148
+ ...fieldRootStyles(theme),
149
+ ...fieldControlStyles(theme, size),
150
+ '& .MuiOutlinedInput-notchedOutline': { borderColor: fieldEdge(theme) },
151
+ };
152
+ }
@@ -8,3 +8,10 @@ export * from './vocabulary';
8
8
  export * from './theme';
9
9
  export * from './color';
10
10
  export { DEFAULT_FIELD_RADIUS } from './field-radius.core';
11
+ export {
12
+ DEFAULT_FIELD_HEIGHT,
13
+ FIELD_BORDER_WIDTH,
14
+ FIELD_HEIGHT_SCALE,
15
+ fieldHeightPx,
16
+ fieldHeightRem,
17
+ } from './field-height.core';
@@ -0,0 +1,107 @@
1
+ import type { Theme } from '@mui/material/styles/index.js';
2
+
3
+ /**
4
+ * THE ONE WAY A COMPONENT WRITES A SIZE (FUT-2585).
5
+ *
6
+ * A density mode — a compact admin, a roomy kiosk — is one decision taken in
7
+ * the theme, and it only works if every size a component draws is RELATIVE to
8
+ * something the theme owns. Before this file the package said the same number
9
+ * four ways: `'14px'`, `'0.875rem'`, `fontSize: 14` and `px(14)` from a
10
+ * `*.metrics.ts` table, and none of the four moved with the theme. The audit
11
+ * that opened FUT-2585 counted 1,269 `NNpx` literals, 246 hand-typed `rem`
12
+ * literals and 24 reads of `theme.typography`.
13
+ *
14
+ * So there is one vocabulary: the px a design was drawn at, handed to the
15
+ * theme's own type scale. `rem(theme, 14)` is `theme.typography.pxToRem(14)` —
16
+ * `0.875rem` at MUI's defaults, which is what the origin host's theme
17
+ * runs on, so converting a literal changes nothing on screen. A host that sets
18
+ * `typography.fontSize` scales every size written through it (MUI multiplies
19
+ * by `fontSize / 14`), and so does a reader who raises the browser's base font
20
+ * — the rule the field height already follows (`./field-height.core.ts`).
21
+ * `htmlFontSize` is not a knob: it DECLARES what the root already is. Values
22
+ * that are relative another way stay so — `sx` spacing units and
23
+ * `theme.spacing()` follow the spacing unit — so a density mode sets the type
24
+ * scale, the spacing unit and `fieldHeight` together.
25
+ *
26
+ * Everything goes through it — font sizes, heights, widths, padding, offsets,
27
+ * radii, shadow offsets, blurs and keyframe distances — because a density mode
28
+ * that shrinks the box but not its shadow, or the text but not the gap beside
29
+ * it, is visibly half-applied. The one literal left is the 1px hairline
30
+ * border, which must stay one device pixel (`FIELD_BORDER_WIDTH`).
31
+ *
32
+ * `scripts/ui-tokens-gate.mjs` refuses a raw size or colour in a component, so
33
+ * this is enforced rather than hoped for.
34
+ */
35
+
36
+ /** A size drawn at `px` in the design, as rem through the theme's type scale. */
37
+ export function rem(theme: Theme, px: number): string {
38
+ return theme.typography.pxToRem(px);
39
+ }
40
+
41
+ /**
42
+ * {@link rem} as an `sx` value: `sx={{ width: sxRem(40) }}`.
43
+ *
44
+ * `sx` reads a NUMBER on `width` as pixels and on `padding` as spacing units,
45
+ * so a bare number there is never density-safe; a theme callback is.
46
+ */
47
+ export function sxRem(px: number): (theme: Theme) => string {
48
+ return (theme) => rem(theme, px);
49
+ }
50
+
51
+ /** A length list (`'0 8px 32px'`-shaped) with every entry through {@link rem}. */
52
+ export function rems(theme: Theme, ...px: number[]): string {
53
+ return px.map((value) => (value === 0 ? '0' : rem(theme, value))).join(' ');
54
+ }
55
+
56
+ const FALLBACK_ROOT_PX = 16;
57
+ let rootPxCache: number | null = null;
58
+ let watchingRoot = false;
59
+
60
+ /** Forget the measured root font size — for a test, or a host that changes it at runtime. */
61
+ export function resetRootFontCache(): void {
62
+ rootPxCache = null;
63
+ }
64
+
65
+ /**
66
+ * Drop the cache whenever the root's own style or class changes (a host
67
+ * toggling `html { font-size }` for a density) or the window resizes (a
68
+ * viewport-relative root). A browser-setting change is not observable from the
69
+ * page; it takes a reload, as it does for everything else measured in px.
70
+ */
71
+ function watchRoot(): void {
72
+ if (watchingRoot || typeof MutationObserver === 'undefined') return;
73
+ watchingRoot = true;
74
+ new MutationObserver(resetRootFontCache).observe(document.documentElement, {
75
+ attributes: true,
76
+ attributeFilter: ['style', 'class'],
77
+ });
78
+ if (typeof window !== 'undefined') window.addEventListener('resize', resetRootFontCache);
79
+ }
80
+
81
+ /**
82
+ * The document's root font size in px — what `1rem` actually renders at.
83
+ * Without a document (server render) it is the theme's declared
84
+ * `htmlFontSize`; a failed measurement is not cached, so a later call can
85
+ * still measure.
86
+ */
87
+ function rootFontPx(theme: Theme): number {
88
+ if (rootPxCache !== null) return rootPxCache;
89
+ const fallback = theme.typography.htmlFontSize ?? FALLBACK_ROOT_PX;
90
+ if (typeof document === 'undefined' || typeof getComputedStyle !== 'function') return fallback;
91
+ const measured = Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
92
+ if (!(Number.isFinite(measured) && measured > 0)) return fallback;
93
+ rootPxCache = measured;
94
+ watchRoot();
95
+ return measured;
96
+ }
97
+
98
+ /**
99
+ * The pixels `rem(theme, px)` renders at, for layout that is computed in
100
+ * JavaScript — a virtualiser's row height, an overflow cost table, a cell size.
101
+ *
102
+ * CSS and JS have to agree: a virtualiser that still assumes 52px rows while
103
+ * the rows it positions have shrunk to 45 leaves a gap under every one of them.
104
+ */
105
+ export function remPx(theme: Theme, px: number): number {
106
+ return Number.parseFloat(rem(theme, px)) * rootFontPx(theme);
107
+ }
@@ -14,7 +14,23 @@ export { headingMetrics } from './typography';
14
14
  // host can build a `UiTheme` from the same module path a native one does.
15
15
  export * from './theme';
16
16
  export * from './color';
17
+ // The relative-size vocabulary every component writes its sizes in (FUT-2585).
18
+ export { rem, rems, remPx, resetRootFontCache, sxRem } from './relative';
17
19
  export { DEFAULT_FIELD_RADIUS, fieldRadius, fieldRadiusOverrides, fieldRadiusPx, fieldRootStyles } from './field-radius';
20
+ export {
21
+ asFieldSize,
22
+ DEFAULT_FIELD_HEIGHT,
23
+ FIELD_BORDER_WIDTH,
24
+ FIELD_HEIGHT_SCALE,
25
+ fieldBorder,
26
+ fieldControlStyles,
27
+ fieldHeight,
28
+ fieldHeightOverrides,
29
+ fieldHeightPx,
30
+ fieldHeightRem,
31
+ fieldOverrides,
32
+ fieldTextFieldStyles,
33
+ } from './field-height';
18
34
 
19
35
  export interface Accent {
20
36
  main: string;
@@ -8,6 +8,7 @@ import { contrastText, DARK_TEXT_PRIMARY, inkOver } from './ink-over';
8
8
  */
9
9
  export { contrastText, inkOver };
10
10
  import { cssLengthToPx, cssTrackingToEm } from './css-units';
11
+ import { resolveFieldHeight } from './field-height.core';
11
12
  import { DEFAULT_FIELD_RADIUS } from './field-radius.core';
12
13
  import { HEADING_SCALE, type HeadingLevel } from './heading-scale';
13
14
 
@@ -113,6 +114,12 @@ export interface UiTheme {
113
114
  * with (see `./field-radius.core`), MUI's `theme.fieldRadius` on the web.
114
115
  */
115
116
  radius: { sm: number; md: number; lg: number; xl: number; full: number; field: number };
117
+ /**
118
+ * The standard field height, in multiples of the default font size — MUI's
119
+ * `theme.fieldHeight` on the web. `fieldHeightPx(theme.fieldHeight, size)`
120
+ * (`./field-height.core`) is the dp a field of `size` lays out at.
121
+ */
122
+ fieldHeight: number;
116
123
  typography: UiTypography;
117
124
  zIndex: { appBar: number; drawer: number; modal: number; snackbar: number; tooltip: number };
118
125
  }
@@ -135,6 +142,8 @@ export interface UiThemeOptions {
135
142
  spacingUnit?: number;
136
143
  /** The radius every field is drawn with, in dp. Defaults to {@link DEFAULT_FIELD_RADIUS}. */
137
144
  fieldRadius?: number;
145
+ /** The standard field height, in multiples of the default font size. Defaults to 2.5. */
146
+ fieldHeight?: number;
138
147
  }
139
148
 
140
149
  const ROOT_FONT_PX = 16;
@@ -319,6 +328,7 @@ export function createUiTheme(options: UiThemeOptions = {}): UiTheme {
319
328
  spacing: (units: number) => units * spacingUnit,
320
329
  spacingUnit,
321
330
  radius: { sm: 2, md: 4, lg: 8, xl: 16, full: 9999, field: options.fieldRadius ?? DEFAULT_FIELD_RADIUS },
331
+ fieldHeight: resolveFieldHeight(options.fieldHeight),
322
332
  typography: {
323
333
  fontFamily: options.typography?.fontFamily,
324
334
  monospaceFontFamily: options.typography?.monospaceFontFamily,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/InputOTP/InputOTP.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadius } from '../../../tokens/field-radius';\n\ninterface ColorPalette {\n main: string;\n dark?: string;\n light?: string;\n contrastText?: string;\n}\n\n/** `neutral` is not a MUI palette entry, so it is built from the grey ramp. */\nconst neutralPalette = (theme: Theme): ColorPalette => ({\n main: theme.palette.grey[700],\n dark: theme.palette.grey[800],\n light: theme.palette.grey[500],\n contrastText: '#fff',\n});\n\n/** `danger` is this component's name for the error palette. */\nconst namedPalette = (theme: Theme, color: string): ColorPalette => {\n const colorMap: Record<string, ColorPalette> = {\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n success: theme.palette.success,\n warning: theme.palette.warning,\n info: theme.palette.info,\n danger: theme.palette.error,\n };\n\n return colorMap[color] || theme.palette.primary;\n};\n\nconst getColorFromTheme = (theme: Theme, color: string): ColorPalette => {\n if (color === 'neutral') {\n return neutralPalette(theme);\n }\n\n const palette = namedPalette(theme, color);\n const { primary } = theme.palette;\n\n return {\n main: palette.main || primary.main,\n dark: palette.dark || palette.main || primary.dark,\n light: palette.light || palette.main || primary.light,\n contrastText: palette.contrastText || '#fff',\n };\n};\n\ntype SizeKey = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Each slot is a square, so width and height always match. */\nconst SIZES: Record<SizeKey, { side: string; fontSize: string }> = {\n xs: { side: '32px', fontSize: '0.75rem' },\n sm: { side: '40px', fontSize: '0.875rem' },\n md: { side: '48px', fontSize: '1rem' },\n lg: { side: '56px', fontSize: '1.125rem' },\n xl: { side: '64px', fontSize: '1.25rem' },\n};\n\nexport interface OtpSlotFlags {\n customColor?: string;\n customSize?: string;\n glass?: boolean;\n gradient?: boolean;\n}\n\nexport const otpSlotSx = (theme: Theme, flags: OtpSlotFlags): CSSObject => {\n const { customColor = 'primary', customSize = 'md', glass, gradient } = flags;\n const palette = getColorFromTheme(theme, customColor);\n const { side, fontSize } = SIZES[customSize as SizeKey] ?? SIZES.md;\n\n return {\n width: side,\n height: side,\n '& .MuiOutlinedInput-root': {\n width: side,\n height: side,\n fontSize,\n fontWeight: 600,\n textAlign: 'center',\n borderRadius: fieldRadius(theme),\n ...(glass && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n '& fieldset': { border: `1px solid ${fieldEdge(theme)}` },\n }),\n ...(gradient && {\n '&.Mui-focused fieldset': {\n background: `linear-gradient(135deg, ${palette.main}, ${palette.light})`,\n borderWidth: '2px',\n },\n }),\n '& input': { textAlign: 'center', padding: 0, fontWeight: 'inherit' },\n '&:hover fieldset': { borderColor: palette.main },\n '&.Mui-focused fieldset': { borderColor: palette.main, borderWidth: '2px' },\n },\n };\n};\n"],"mappings":";;;;;;;;AAAA,SAAS,aAAa;AActB,IAAM,iBAAiB,CAAC,WAAgC;AAAA,EACtD,MAAM,MAAM,QAAQ,KAAK,GAAG;AAAA,EAC5B,MAAM,MAAM,QAAQ,KAAK,GAAG;AAAA,EAC5B,OAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,EAC7B,cAAc;AAChB;AAGA,IAAM,eAAe,CAAC,OAAc,UAAgC;AAClE,QAAM,WAAyC;AAAA,IAC7C,SAAS,MAAM,QAAQ;AAAA,IACvB,WAAW,MAAM,QAAQ;AAAA,IACzB,SAAS,MAAM,QAAQ;AAAA,IACvB,SAAS,MAAM,QAAQ;AAAA,IACvB,MAAM,MAAM,QAAQ;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,EACxB;AAEA,SAAO,SAAS,KAAK,KAAK,MAAM,QAAQ;AAC1C;AAEA,IAAM,oBAAoB,CAAC,OAAc,UAAgC;AACvE,MAAI,UAAU,WAAW;AACvB,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,QAAM,UAAU,aAAa,OAAO,KAAK;AACzC,QAAM,EAAE,QAAQ,IAAI,MAAM;AAE1B,SAAO;AAAA,IACL,MAAM,QAAQ,QAAQ,QAAQ;AAAA,IAC9B,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,IAC9C,OAAO,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAAA,IAChD,cAAc,QAAQ,gBAAgB;AAAA,EACxC;AACF;AAKA,IAAM,QAA6D;AAAA,EACjE,IAAI,EAAE,MAAM,QAAQ,UAAU,UAAU;AAAA,EACxC,IAAI,EAAE,MAAM,QAAQ,UAAU,WAAW;AAAA,EACzC,IAAI,EAAE,MAAM,QAAQ,UAAU,OAAO;AAAA,EACrC,IAAI,EAAE,MAAM,QAAQ,UAAU,WAAW;AAAA,EACzC,IAAI,EAAE,MAAM,QAAQ,UAAU,UAAU;AAC1C;AASO,IAAM,YAAY,CAAC,OAAc,UAAmC;AACzE,QAAM,EAAE,cAAc,WAAW,aAAa,MAAM,OAAO,SAAS,IAAI;AACxE,QAAM,UAAU,kBAAkB,OAAO,WAAW;AACpD,QAAM,EAAE,MAAM,SAAS,IAAI,MAAM,UAAqB,KAAK,MAAM;AAEjE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,4BAA4B;AAAA,MAC1B,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc,YAAY,KAAK;AAAA,MAC/B,GAAI,SAAS;AAAA,QACX,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,QAC1D,gBAAgB;AAAA,QAChB,cAAc,EAAE,QAAQ,aAAa,UAAU,KAAK,CAAC,GAAG;AAAA,MAC1D;AAAA,MACA,GAAI,YAAY;AAAA,QACd,0BAA0B;AAAA,UACxB,YAAY,2BAA2B,QAAQ,IAAI,KAAK,QAAQ,KAAK;AAAA,UACrE,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,WAAW,EAAE,WAAW,UAAU,SAAS,GAAG,YAAY,UAAU;AAAA,MACpE,oBAAoB,EAAE,aAAa,QAAQ,KAAK;AAAA,MAChD,0BAA0B,EAAE,aAAa,QAAQ,MAAM,aAAa,MAAM;AAAA,IAC5E;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CategorySelect/CategoryPanelHead.tsx"],"sourcesContent":["'use client';\n\nimport type { CategorySelectCopy } from '../../../copy';\nimport Box from '@mui/material/Box/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\n\nimport { SearchGlyph } from './CategoryIcons';\nimport {\n chipSx,\n chipWrapSx,\n panelHeadSx,\n pinnedLabelSx,\n pinnedSx,\n} from './CategorySelect.styles';\nimport type { CategorySelectionChip } from './CategorySelect.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\ninterface PanelHeadProps {\n query: string;\n placeholder: string;\n sheet: boolean;\n /** Quick actions belong to multi-select only; single-select has nothing to bulk-do. */\n quickActions?: React.ReactNode;\n onQueryChange: (next: string) => void;\n searchInputRef: React.RefObject<HTMLInputElement | null>;\n dataTestId: string;\n copy: CategorySelectCopy;\n}\n\nconst searchFieldSx = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n '& input': {\n width: '100%',\n height: 36,\n padding: '0 30px 0 32px',\n fontSize: 13,\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: fieldRadiusPx,\n background: 'background.paper',\n color: 'text.primary',\n '&:focus': {\n outline: 'none',\n borderColor: 'primary.main',\n boxShadow: (theme: { palette: { primary: { main: string } } }) =>\n `0 0 0 3px ${theme.palette.primary.main}26`,\n },\n },\n} as const;\n\nconst clearButtonSx = {\n position: 'absolute',\n right: 7,\n width: 20,\n height: 20,\n border: 0,\n background: 'action.selected',\n color: 'text.secondary',\n borderRadius: '50%',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n fontSize: 12,\n padding: 0,\n lineHeight: 1,\n} as const;\n\n/** Search field, its clear affordance, and the optional quick-action row. */\nexport function CategoryPanelHead({\n query,\n placeholder,\n sheet,\n quickActions,\n onQueryChange,\n searchInputRef,\n dataTestId,\n copy,\n}: PanelHeadProps): React.JSX.Element {\n return (\n <Box sx={(theme) => panelHeadSx(theme, sheet)}>\n <Box sx={searchFieldSx}>\n <SearchGlyph\n style={{\n position: 'absolute',\n left: 10,\n width: 15,\n height: 15,\n opacity: 0.55,\n pointerEvents: 'none',\n }}\n />\n <InputBase\n inputRef={searchInputRef}\n value={query}\n placeholder={placeholder}\n autoComplete=\"off\"\n inputProps={{ 'aria-label': placeholder, 'data-testid': `${dataTestId}-search` }}\n onChange={(event) => onQueryChange(event.target.value)}\n sx={{ width: '100%' }}\n />\n {query.length > 0 && (\n <Box\n component=\"button\"\n type=\"button\"\n aria-label={copy.search.clear}\n data-testid={`${dataTestId}-search-clear`}\n sx={clearButtonSx}\n onClick={() => onQueryChange('')}\n >\n ×\n </Box>\n )}\n </Box>\n {quickActions && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n marginTop: '8px',\n fontSize: 12,\n }}\n >\n {quickActions}\n </Box>\n )}\n </Box>\n );\n}\n\ninterface PinnedTrayProps {\n chips: CategorySelectionChip[];\n onRemove: (chipId: string) => void;\n dataTestId: string;\n copy: CategorySelectCopy;\n}\n\n/**\n * The selected categories, pinned above the list.\n *\n * Pinned rather than left in place because a selection made at the bottom of a\n * ten-category tree scrolls out of sight the moment you look for the next one —\n * and a search hides it entirely. Here it survives both.\n */\nexport function CategoryPinnedTray({\n chips,\n onRemove,\n dataTestId,\n copy,\n}: PinnedTrayProps): React.JSX.Element | null {\n if (chips.length === 0) return null;\n return (\n <Box sx={pinnedSx} data-testid={`${dataTestId}-pinned`}>\n <Box sx={pinnedLabelSx}>{copy.search.pinnedLabel(chips.length)}</Box>\n <Box sx={chipWrapSx}>\n {chips.map((chip) => (\n <Box component=\"span\" key={chip.id} sx={chipSx}>\n {chip.label}\n <button\n type=\"button\"\n aria-label={copy.search.removeChip(chip.label)}\n data-testid={`${dataTestId}-unpin-${chip.id}`}\n onClick={() => onRemove(chip.id)}\n >\n ×\n </button>\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/TableFilter/TableFilter.tsx"],"sourcesContent":["'use client';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport FormControlLabel from '@mui/material/FormControlLabel/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport Link from '@mui/material/Link/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useRef, useState } from 'react';\n\nimport { TableFilterContext, useTableFilterContext } from './TableFilterContext';\nimport type {\n TableFilterCheckboxFieldProps,\n TableFilterKeywordProps,\n TableFilterLayoutProps,\n TableFilterMainProps,\n TableFilterPanelProps,\n TableFilterProps,\n TableFilterRangeFieldProps,\n TableFilterSectionProps,\n} from './TableFilter.types';\nimport { fieldRootStyles } from '../../../tokens/field-radius';\n\nconst PANEL_WIDTH = 280;\n\n/**\n * Compound filter-panel system, MUI port of the reference `TableFilter`. Provides\n * open/close state; `Panel` slides in from the right beside `Main` (no overlap).\n *\n * @example\n * ```tsx\n * <TableFilter open={open} onOpenChange={setOpen} hasActiveFilters={n > 0}>\n * <TableFilter.Layout>\n * <TableFilter.Main>{table}</TableFilter.Main>\n * <TableFilter.Panel onClearAll={clearAll}>\n * <TableFilter.Keyword value={q} onChange={setQ} />\n * <TableFilter.Section title=\"Attributes\">\n * <TableFilter.CheckboxField label=\"Category\" options={cats} selected={sel} onToggle={toggle} />\n * <TableFilter.RangeField label=\"Price\" unit=\"R$\" value={price} onChange={setPrice} />\n * </TableFilter.Section>\n * </TableFilter.Panel>\n * </TableFilter.Layout>\n * </TableFilter>\n * ```\n */\nexport function TableFilter({\n children,\n open,\n onOpenChange,\n hasActiveFilters = false,\n copy,\n}: TableFilterProps): React.JSX.Element {\n return (\n <TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters, copy }}>\n {children}\n </TableFilterContext.Provider>\n );\n}\nTableFilter.displayName = 'TableFilter';\n\nconst TableFilterLayout = ({ children, className }: TableFilterLayoutProps): React.JSX.Element => {\n const { open } = useTableFilterContext();\n return (\n <Box\n className={className}\n sx={{\n display: 'flex',\n minHeight: 0,\n minWidth: 0,\n flex: 1,\n alignItems: 'stretch',\n overflow: 'hidden',\n gap: open ? 2 : 0,\n }}\n >\n {children}\n </Box>\n );\n};\nTableFilterLayout.displayName = 'TableFilter.Layout';\n\nconst TableFilterMain = ({ children, className }: TableFilterMainProps): React.JSX.Element => (\n <Box className={className} sx={{ minWidth: 0, flex: 1, overflowY: 'auto', overflowX: 'hidden' }}>\n {children}\n </Box>\n);\nTableFilterMain.displayName = 'TableFilter.Main';\n\nconst TableFilterPanel = ({\n children,\n onClearAll,\n ariaLabel = 'Filters',\n clearTestId,\n}: TableFilterPanelProps): React.JSX.Element => {\n const { open, copy } = useTableFilterContext();\n return (\n <Box\n component=\"aside\"\n aria-label={ariaLabel}\n aria-hidden={!open}\n sx={{\n display: 'flex',\n minHeight: 0,\n flexShrink: 0,\n flexDirection: 'column',\n alignSelf: 'stretch',\n overflow: 'hidden',\n bgcolor: 'background.paper',\n width: open ? PANEL_WIDTH : 0,\n borderLeft: open ? 1 : 0,\n borderColor: 'divider',\n transition: 'width 300ms ease-in-out',\n '@media (prefers-reduced-motion: reduce)': { transition: 'none' },\n }}\n >\n <Box\n sx={{\n display: 'flex',\n minHeight: 0,\n flex: 1,\n flexDirection: 'column',\n overflowY: 'auto',\n overflowX: 'hidden',\n visibility: open ? 'visible' : 'hidden',\n opacity: open ? 1 : 0,\n pointerEvents: open ? 'auto' : 'none',\n transition: 'opacity 200ms ease-out',\n }}\n >\n <Box sx={{ boxSizing: 'border-box', display: 'flex', width: '100%', minWidth: 0, flexDirection: 'column', gap: 2.5, p: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\n <Link\n component=\"button\"\n type=\"button\"\n underline=\"hover\"\n data-testid={clearTestId}\n onClick={onClearAll}\n sx={{ fontSize: '0.75rem', color: 'text.secondary' }}\n >\n {copy.clearAllFilters}\n </Link>\n </Box>\n {children}\n </Box>\n </Box>\n </Box>\n );\n};\nTableFilterPanel.displayName = 'TableFilter.Panel';\n\nconst TableFilterKeyword = ({\n value,\n onChange,\n placeholder = 'Press Enter to filter',\n label = 'Filter by keyword',\n testId,\n}: TableFilterKeywordProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const [draft, setDraft] = useState(value);\n const prevValue = useRef(value);\n if (prevValue.current !== value) {\n prevValue.current = value;\n if (draft !== value) setDraft(value);\n }\n\n const commit = (): void => {\n if (draft !== value) onChange(draft);\n };\n const clearKeyword = (): void => {\n setDraft('');\n if (value !== '') onChange('');\n };\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Typography component=\"label\" sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>\n {label}\n </Typography>\n <TextField\n size=\"small\"\n sx={fieldRootStyles}\n name=\"keyword\"\n placeholder={placeholder}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n commit();\n }}\n inputProps={{ 'aria-label': label, 'data-testid': testId }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n </InputAdornment>\n ),\n endAdornment:\n draft !== '' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label={copy.clearKeyword}\n data-testid={testId ? `${testId}-clear` : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onClick={clearKeyword}\n >\n <CloseIcon sx={{ fontSize: 16 }} />\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n />\n </Box>\n );\n};\nTableFilterKeyword.displayName = 'TableFilter.Keyword';\n\nconst TableFilterSection = ({ title, children }: TableFilterSectionProps): React.JSX.Element => (\n <Box>\n <Divider sx={{ mb: 2.5 }} />\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <Typography component=\"h2\" sx={{ fontSize: '0.875rem', fontWeight: 600, color: 'text.primary' }}>\n {title}\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>{children}</Box>\n </Box>\n </Box>\n);\nTableFilterSection.displayName = 'TableFilter.Section';\n\nfunction TableFilterCheckboxField<TValue extends string = string>({\n label,\n options,\n selected,\n onToggle,\n testId,\n}: TableFilterCheckboxFieldProps<TValue>): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>{label}</Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n {options.map((option) => {\n const checked = selected.has(option.value);\n return (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n size=\"small\"\n checked={checked}\n onChange={(event) => onToggle(option.value, event.target.checked)}\n data-testid={testId ? `${testId}-${option.value}` : undefined}\n sx={{ py: 0.25 }}\n />\n }\n label={\n <Box component=\"span\" sx={{ fontSize: '0.875rem' }}>\n {option.label}\n {option.count != null && (\n <Box component=\"span\" sx={{ color: 'text.secondary' }}>\n {' '}\n ({option.count})\n </Box>\n )}\n </Box>\n }\n sx={{ ml: -0.5, mr: 0 }}\n />\n );\n })}\n </Box>\n </Box>\n );\n}\nTableFilterCheckboxField.displayName = 'TableFilter.CheckboxField';\n\nfunction parseBound(text: string): number | undefined {\n if (text.trim() === '') return undefined;\n const parsed = Number(text);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/** One numeric bound input (min or max) for {@link TableFilterRangeField}. */\nfunction RangeBound({\n bound,\n error,\n placeholder,\n step,\n ariaLabel,\n testId,\n onChange,\n}: {\n bound: number | undefined;\n error: boolean;\n placeholder: string;\n step?: number;\n ariaLabel: string;\n testId?: string;\n onChange: (next: number | undefined) => void;\n}): React.JSX.Element {\n return (\n <TextField\n size=\"small\"\n type=\"number\"\n error={error}\n placeholder={placeholder}\n value={bound != null ? String(bound) : ''}\n onChange={(event) => onChange(parseBound(event.target.value))}\n inputProps={{ step, 'aria-label': ariaLabel, 'data-testid': testId }}\n />\n );\n}\n\n/** Inverted range: both ends set and max < min (surfaced to the user as an error). */\nconst isRangeInverted = (value: { min?: number; max?: number }): boolean =>\n value.min != null && value.max != null && value.max < value.min;\n\nconst TableFilterRangeField = ({\n label,\n value,\n onChange,\n unit,\n step,\n minPlaceholder,\n maxPlaceholder,\n invalidLabel,\n testId,\n}: TableFilterRangeFieldProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const invalid = isRangeInverted(value);\n // A field may override any of the three; unset, they come from the root's\n // table. Neither path reaches an English literal in this package.\n const minText = minPlaceholder ?? copy.rangeMin;\n const maxText = maxPlaceholder ?? copy.rangeMax;\n const invalidText = invalidLabel ?? copy.invalidRange;\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>\n {label}\n {unit ? ` (${unit})` : ''}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <RangeBound\n bound={value.min}\n error={invalid}\n placeholder={minText}\n step={step}\n ariaLabel={`${label} ${minText}`}\n testId={testId ? `${testId}-min` : undefined}\n onChange={(min) => onChange({ ...value, min })}\n />\n <Typography component=\"span\" sx={{ color: 'text.secondary' }}>\n –\n </Typography>\n <RangeBound\n bound={value.max}\n error={invalid}\n placeholder={maxText}\n step={step}\n ariaLabel={`${label} ${maxText}`}\n testId={testId ? `${testId}-max` : undefined}\n onChange={(max) => onChange({ ...value, max })}\n />\n </Box>\n {invalid && (\n <Typography\n role=\"alert\"\n data-testid={testId ? `${testId}-error` : undefined}\n sx={{ fontSize: '0.7rem', color: 'error.main' }}\n >\n {invalidText}\n </Typography>\n )}\n </Box>\n );\n};\nTableFilterRangeField.displayName = 'TableFilter.RangeField';\n\nTableFilter.Layout = TableFilterLayout;\nTableFilter.Main = TableFilterMain;\nTableFilter.Panel = TableFilterPanel;\nTableFilter.Keyword = TableFilterKeyword;\nTableFilter.Section = TableFilterSection;\nTableFilter.CheckboxField = TableFilterCheckboxField;\nTableFilter.RangeField = TableFilterRangeField;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/ContentToolbar/ViewSelector.tsx"],"sourcesContent":["'use client';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport GridIcon from '@mui/icons-material/GridViewOutlined';\nimport ListIcon from '@mui/icons-material/FormatListBulletedRounded';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Slider from '@mui/material/Slider/index.js';\n// `SvgIconComponent` is declared inline in @mui/icons-material's barrel and has\n// no module of its own, so the deep-import equivalent is its own definition:\n// `type SvgIconComponent = typeof SvgIcon`.\nimport type SvgIcon from '@mui/material/SvgIcon/index.js';\nimport React, { useState } from 'react';\n\nimport type { ViewMode, ViewSelectorProps } from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\nconst VIEW_OPTIONS: { value: ViewMode; label: string; icon: typeof SvgIcon }[] = [\n { value: 'grid', label: 'Grid View', icon: GridIcon },\n { value: 'list', label: 'List View', icon: ListIcon },\n];\n\n/**\n * View selector: a grid/list dropdown plus a card-size zoom slider (grid mode\n * only). Faithful MUI port of the reference toolbar's view control.\n */\nexport function ViewSelector({\n viewMode,\n onViewModeChange,\n zoom,\n onZoomChange,\n cardSizeLabel,\n}: ViewSelectorProps): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const activeOption = VIEW_OPTIONS.find((option) => option.value === viewMode) ?? VIEW_OPTIONS[0]!;\n const ActiveIcon = activeOption.icon;\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n {viewMode === 'grid' && (\n <Box sx={{ width: 96, display: 'flex', alignItems: 'center' }}>\n <Slider\n data-testid=\"resize-card-slider\"\n aria-label={cardSizeLabel}\n value={zoom[0] ?? 0}\n onChange={(_, value) => onZoomChange([value as number])}\n min={0}\n max={100}\n step={1}\n size=\"small\"\n />\n </Box>\n )}\n\n <Button\n data-testid=\"view-mode-btn\"\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n aria-label={activeOption.label}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{ minWidth: 0, height: 32, px: 1, gap: 1, borderRadius: fieldRadiusPx, color: 'text.secondary' }}\n >\n <ActiveIcon sx={{ fontSize: 16 }} />\n <ChevronDownIcon sx={{ fontSize: 14 }} />\n </Button>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 180 } } }}\n >\n {VIEW_OPTIONS.map((option) => {\n const OptionIcon = option.icon;\n const selected = viewMode === option.value;\n return (\n <MenuItem\n key={option.value}\n data-testid={`view-mode-${option.value}`}\n onClick={() => {\n onViewModeChange(option.value);\n setAnchorEl(null);\n }}\n sx={{ gap: 1.5 }}\n >\n <ListItemText>{option.label}</ListItemText>\n <OptionIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n <ListItemIcon sx={{ minWidth: 'auto !important' }}>\n <CheckIcon sx={{ fontSize: 16, color: selected ? 'text.primary' : 'transparent' }} />\n </ListItemIcon>\n </MenuItem>\n );\n })}\n </Menu>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/Pagination/PaginationParts.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport FormControl from '@mui/material/FormControl/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Select from '@mui/material/Select/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { scaleFor } from './Pagination.helpers';\n\n// Kept module-local: styled() components cannot be exported across a module\n// boundary here without tripping TS2742.\nconst ItemsPerPageContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n}));\n\nconst PageInfoContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n}));\n\nexport interface ItemsPerPageSelectProps {\n /** The label in front of the select. REQUIRED — it was `\"Show:\"`. */\n pageSizeLabel: string;\n value: number;\n options: number[];\n size: string;\n disabled: boolean;\n testId: string;\n onChange: (value: number) => void;\n}\n\nexport const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({\n pageSizeLabel,\n value,\n options,\n size,\n disabled,\n testId,\n onChange,\n}) => (\n <ItemsPerPageContainer>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {pageSizeLabel}\n </Typography>\n <FormControl size=\"small\" sx={{ minWidth: 80 }}>\n <Select\n value={value}\n onChange={(event) => onChange(event.target.value as number)}\n disabled={disabled}\n data-testid={testId}\n sx={{\n '& .MuiSelect-select': {\n fontSize: scaleFor(size, ['0.875rem', '1rem', '1.125rem']),\n py: scaleFor(size, [0.5, 1, 1.5]),\n },\n }}\n >\n {options.map((option) => (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </ItemsPerPageContainer>\n);\n\nexport const PageInfo: FC<{ size: string; testId: string; children: React.ReactNode }> = ({\n size,\n testId,\n children,\n}) => (\n <PageInfoContainer>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n fontSize={scaleFor(size, ['0.75rem', '0.875rem', '1rem'])}\n data-testid={testId}\n >\n {children}\n </Typography>\n </PageInfoContainer>\n);\n"],"mappings":";;;;;AAAA,OAAO,SAAS;AAChB,OAAO,iBAAiB;AACxB,OAAO,cAAc;AACrB,OAAO,YAAY;AACnB,OAAO,gBAAgB;AACvB,SAAS,cAAc;AAwCrB,SACE,KADF;AAhCF,IAAM,wBAAwB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACxD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,IAAM,oBAAoB,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACpD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAaK,IAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE,qBAAC,yBACC;AAAA,sBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,yBACH;AAAA,EACA,oBAAC,eAAY,MAAK,SAAQ,IAAI,EAAE,UAAU,GAAG,GAC3C;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAe;AAAA,MAC1D;AAAA,MACA,eAAa;AAAA,MACb,IAAI;AAAA,QACF,uBAAuB;AAAA,UACrB,UAAU,SAAS,MAAM,CAAC,YAAY,QAAQ,UAAU,CAAC;AAAA,UACzD,IAAI,SAAS,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,MAEC,kBAAQ,IAAI,CAAC,WACZ,oBAAC,YAAsB,OAAO,QAC3B,oBADY,MAEf,CACD;AAAA;AAAA,EACH,GACF;AAAA,GACF;AAGK,IAAM,WAA4E,CAAC;AAAA,EACxF;AAAA,EACA;AAAA,EACA;AACF,MACE,oBAAC,qBACC;AAAA,EAAC;AAAA;AAAA,IACC,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,UAAU,SAAS,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC;AAAA,IACxD,eAAa;AAAA,IAEZ;AAAA;AACH,GACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/ContentToolbar/ColumnsMenu.tsx"],"sourcesContent":["'use client';\n\nimport ColumnsIcon from '@mui/icons-material/ViewColumnRounded';\nimport Box from '@mui/material/Box/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport ListSubheader from '@mui/material/ListSubheader/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport React, { useState } from 'react';\n\nimport type { ColumnVisibilityOption, ColumnsMenuProps } from './ContentToolbar.types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\n/** One column checkbox row; toggling never closes the menu. */\nfunction ColumnRow({\n option,\n onToggle,\n testId,\n}: {\n option: ColumnVisibilityOption;\n onToggle: (id: string, visible: boolean) => void;\n testId?: string;\n}): React.JSX.Element {\n return (\n <MenuItem\n data-testid={testId}\n onClick={() => onToggle(option.id, !option.visible)}\n disabled={option.locked}\n sx={{ gap: 1 }}\n >\n <Checkbox\n checked={option.visible}\n size=\"small\"\n disableRipple\n sx={{ p: 0, pointerEvents: 'none' }}\n tabIndex={-1}\n />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, textAlign: 'left' }}>\n {option.label}\n </Box>\n </MenuItem>\n );\n}\n\n/**\n * Stateless column-visibility selector: a neutral icon button (matching\n * {@link FilterTrigger}/{@link SortByDropdown}) opening a checkbox list of the\n * hideable columns. Purely presentational — the caller owns the visibility state\n * and is notified via `onToggle`. The menu stays open while toggling so several\n * columns can be flipped at once.\n */\nexport function ColumnsMenu({\n columns,\n onToggle,\n title = 'Columns',\n ariaLabel = 'Toggle columns',\n 'data-testid': testId,\n}: ColumnsMenuProps): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const close = (): void => setAnchorEl(null);\n\n return (\n <>\n <IconButton\n size=\"small\"\n data-testid={testId}\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{\n width: 32,\n height: 32,\n borderRadius: fieldRadiusPx,\n color: 'text.secondary',\n bgcolor: open ? 'action.selected' : 'transparent',\n }}\n >\n <ColumnsIcon sx={{ fontSize: 16 }} />\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 200 } } }}\n >\n <ListSubheader sx={{ px: 1.5, py: 0.75, fontSize: '0.75rem', fontWeight: 600, color: 'text.primary', lineHeight: 1.5 }}>\n {title}\n </ListSubheader>\n {columns.map((option) => (\n <ColumnRow\n key={option.id}\n option={option}\n onToggle={onToggle}\n testId={testId ? `${testId}-${option.id}` : undefined}\n />\n ))}\n </Menu>\n </>\n );\n}\n"],"mappings":";;;;;AAEA,OAAO,iBAAiB;AACxB,OAAO,SAAS;AAChB,OAAO,cAAc;AACrB,OAAO,gBAAgB;AACvB,OAAO,mBAAmB;AAC1B,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,SAAgB,gBAAgB;AAgB5B,SAuCA,UAjCE,KANF;AAVJ,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,GAIsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,SAAS,MAAM,SAAS,OAAO,IAAI,CAAC,OAAO,OAAO;AAAA,MAClD,UAAU,OAAO;AAAA,MACjB,IAAI,EAAE,KAAK,EAAE;AAAA,MAEb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,OAAO;AAAA,YAChB,MAAK;AAAA,YACL,eAAa;AAAA,YACb,IAAI,EAAE,GAAG,GAAG,eAAe,OAAO;AAAA,YAClC,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,oBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,OAAO,GACjE,iBAAO,OACV;AAAA;AAAA;AAAA,EACF;AAEJ;AASO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,eAAe;AACjB,GAAwC;AACtC,QAAM,CAAC,UAAU,WAAW,IAAI,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,QAAQ,MAAY,YAAY,IAAI;AAE1C,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,eAAa;AAAA,QACb,cAAY;AAAA,QACZ,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,SAAS,CAAC,UAAU,YAAY,MAAM,aAAa;AAAA,QACnD,IAAI;AAAA,UACF,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO;AAAA,UACP,SAAS,OAAO,oBAAoB;AAAA,QACtC;AAAA,QAEA,8BAAC,eAAY,IAAI,EAAE,UAAU,GAAG,GAAG;AAAA;AAAA,IACrC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,cAAc,EAAE,UAAU,UAAU,YAAY,QAAQ;AAAA,QACxD,iBAAiB,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,QACxD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE;AAAA,QAE9C;AAAA,8BAAC,iBAAc,IAAI,EAAE,IAAI,KAAK,IAAI,MAAM,UAAU,WAAW,YAAY,KAAK,OAAO,gBAAgB,YAAY,IAAI,GAClH,iBACH;AAAA,UACC,QAAQ,IAAI,CAAC,WACZ;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA,QAAQ,SAAS,GAAG,MAAM,IAAI,OAAO,EAAE,KAAK;AAAA;AAAA,YAHvC,OAAO;AAAA,UAId,CACD;AAAA;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/DataViews/data-views-range-pill.tsx"],"sourcesContent":["'use client';\n\n/**\n * A range filter as a PILL in the inline filter bar — the same affordance the\n * multi-select facets use, so \"Data\" and \"Valor\" sit in the filter row beside\n * \"Pagamento\"/\"Situação\"/\"Método\" instead of floating above the grid.\n *\n * Before this the inline bar rendered pills only, and `rangeFields` had a\n * surface on the slide-in panel alone — which `inlineFilters` REPLACES on a wide\n * screen. So a range filter was invisible on exactly the screens that use it,\n * and a page wanting one had to hang its own inputs outside the grid, outside\n * `DataViewState`, and outside the grid's \"Limpar filtros\" (FUT-668).\n */\nimport CloseIcon from '@mui/icons-material/Close';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { TableFilter } from '../../layout/TableFilter';\nimport { DayBoundInput } from './data-views-day-input';\nimport { NumberBoundInput } from './data-views-number-input';\nimport { RangePresets } from './data-views-preset-chips';\nimport { presetsFor } from './data-views-range-presets';\nimport {\n isRangeInverted,\n isRangeSet,\n numericRange,\n rangeChipLabel,\n} from './data-views-range-values';\nimport type { RangeFieldConfig, RangeValue } from './data-views-types';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\n\n\n\n/**\n * One end of the range. A day keeps its `AAAA-MM-DD` string verbatim (the form\n * both the field and the backend speak) and is typed through the masked\n * `dd/mm/aaaa` field rather than a native date input — see\n * {@link DayBoundInput} for why. A number parses, and an unparseable/blank\n * entry CLEARS the bound rather than writing `NaN`.\n */\nfunction BoundField<T extends Record<string, unknown>>({\n field,\n label,\n value,\n onChange,\n testId,\n}: {\n field: RangeFieldConfig<T>;\n label: string;\n value: number | string | undefined;\n onChange: (bound: number | string | undefined) => void;\n testId: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n if (field.kind === 'day') {\n return (\n <DayBoundInput\n mask={copy.filters.dayMask}\n label={label}\n value={value == null ? undefined : String(value)}\n onChange={onChange}\n testId={testId}\n />\n );\n }\n return (\n <NumberBoundInput\n label={label}\n value={value}\n unit={field.unit}\n onChange={onChange}\n testId={testId}\n />\n );\n}\n\n\n/**\n * The `De`/`Até` pair for a range — shared by the pill's popover and the\n * slide-in panel's day fields, so the two surfaces cannot drift on what a bound\n * accepts or how it clears.\n */\nexport function RangeBounds<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n testId,\n}: {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n testId: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const inverted = isRangeInverted(value);\n return (\n <Box data-testid={`${testId}-panel`}>\n {/* Above the inputs, not below: the presets are the answer for most\n merchants, and the two date pickers are the escape hatch. */}\n <Box sx={{ '&:not(:empty)': { mb: 1.5 } }}>\n <RangePresets presets={presetsFor(field, copy)} value={value} onChange={onChange} testId={testId} />\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5 }}>\n <BoundField\n field={field}\n label={copy.filters.rangeStart}\n value={value.min}\n onChange={(min) => onChange({ ...value, min })}\n testId={`${testId}-min`}\n />\n <BoundField\n field={field}\n label={copy.filters.rangeEnd}\n value={value.max}\n onChange={(max) => onChange({ ...value, max })}\n testId={`${testId}-max`}\n />\n </Box>\n {inverted && (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inverted`}\n sx={{ mt: 0.75, fontSize: '0.75rem', color: 'error.main' }}\n >\n {copy.filters.rangeInvalid}\n </Typography>\n )}\n {/* BOTH days are in the result. Saying so is FUT-668's other half: the\n bounds compare as ISO strings precisely so `até` keeps its whole day,\n and nothing on screen would otherwise tell the merchant that. */}\n {field.kind === 'day' && !inverted && (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inclusive`}\n sx={{ mt: 0.75, fontSize: '0.75rem', color: 'text.disabled' }}\n >\n {copy.filters.rangeInclusiveNote}\n </Typography>\n )}\n </Box>\n );\n}\n\n/**\n * The pill + its popover. Bounds commit on change (the list is server-driven, so\n * each edit is a query) and the popover stays open, which is what lets a\n * merchant set \"de\" and then \"até\" without re-opening it.\n */\n/** An applied range clears from the pill itself — re-opening to empty two fields is three gestures for one intent. */\nfunction ClearAffordance({\n label,\n onClear,\n testId,\n}: {\n label: string;\n onClear: () => void;\n testId: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const clear = (event: React.SyntheticEvent): void => {\n event.stopPropagation();\n onClear();\n };\n return (\n <Box\n component=\"span\"\n role=\"button\"\n tabIndex={0}\n aria-label={copy.filters.clearRange(label)}\n data-testid={testId}\n onClick={clear}\n onKeyDown={(event: React.KeyboardEvent) => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n clear(event);\n }}\n sx={{ display: 'inline-flex', borderRadius: 999, p: 0.125, '&:hover': { bgcolor: 'action.selected' } }}\n >\n <CloseIcon sx={{ fontSize: 14 }} />\n </Box>\n );\n}\n\n/** The pill button: its label carries the applied window, and its tone the state. */\nfunction RangeTrigger<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n onOpen,\n open,\n testId,\n}: {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n onOpen: (anchor: HTMLElement) => void;\n open: boolean;\n testId: string;\n}): React.JSX.Element {\n const active = isRangeSet(value);\n const inverted = isRangeInverted(value);\n // An INVERTED window gets its own tone rather than the ordinary \"applied\"\n // one: it is applied, and it matches nothing, and those are different states.\n const tone = inverted ? 'error.main' : active ? 'primary.main' : 'divider';\n return (\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n size=\"small\"\n data-testid={testId}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={(event) => onOpen(event.currentTarget)}\n // ✕ FIRST, chevron LAST — the same shape as every other pill. It used to\n // replace the chevron at the end, so a range pill and a multi-select pill\n // put the clear in different places, and an applied range lost the\n // affordance that says it opens.\n startIcon={\n active ? (\n <ClearAffordance label={field.label} onClear={() => onChange({})} testId={`${testId}-clear-inline`} />\n ) : undefined\n }\n endIcon={<ChevronDownIcon sx={{ fontSize: 16 }} />}\n sx={{\n borderRadius: fieldRadiusPx,\n height: 34,\n px: 1.5,\n maxWidth: 280,\n color: inverted ? 'error.main' : 'text.primary',\n fontWeight: 600,\n fontSize: '0.8125rem',\n textTransform: 'none',\n whiteSpace: 'nowrap',\n borderColor: tone,\n bgcolor: active ? 'action.selected' : 'background.paper',\n '&:hover': {\n borderColor: active ? tone : 'text.primary',\n bgcolor: active ? 'action.selected' : 'action.hover',\n },\n }}\n >\n {/* The applied bounds, in the label — a pill reading only \"Valor\" hides\n the very thing that is narrowing the list. */}\n <Box component=\"span\" sx={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {active ? rangeChipLabel(field, value) : field.label}\n </Box>\n </Button>\n );\n}\n\nexport function RangePill<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n onOpenChange,\n testIdPrefix,\n}: {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n /** So a measured toolbar can hold still while this is open. */\n onOpenChange?: (open: boolean) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const active = isRangeSet(value);\n const testId = `${testIdPrefix}-range-${field.id}`;\n return (\n <>\n <RangeTrigger\n field={field}\n value={value}\n onChange={onChange}\n onOpen={(element) => {\n setAnchor(element);\n onOpenChange?.(true);\n }}\n open={Boolean(anchor)}\n testId={testId}\n />\n <Popover\n open={Boolean(anchor)}\n anchorEl={anchor}\n onClose={() => {\n setAnchor(null);\n onOpenChange?.(false);\n }}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{ paper: { sx: { p: 2, mt: 0.5 } } }}\n >\n <RangeBounds field={field} value={value} onChange={onChange} testId={testId} />\n {/* An inverted window is not an error the merchant must fix before the\n list responds — it simply matches nothing, and saying so beats an\n empty grid with no explanation (FUT-668). */}\n {active && (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2, mt: 1.5 }}>\n <Typography component=\"span\" sx={{ fontSize: '0.75rem', color: 'text.secondary' }}>\n {rangeChipLabel(field, value)}\n </Typography>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => onChange({})}\n data-testid={`${testId}-clear`}\n sx={{ textTransform: 'none' }}\n >\n {copy.filters.clear}\n </Button>\n </Box>\n )}\n </Popover>\n </>\n );\n}\n\n\n/**\n * One range on the SLIDE-IN panel (and the narrow-screen modal): the numeric\n * control the panel already had, or — for a day range, which that control cannot\n * express — the same `De`/`Até` pair the pill's popover uses.\n */\nexport function PanelRangeField<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n testId,\n}: {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n testId: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n if (field.kind === \"day\") {\n return (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\n <Typography component=\"span\" sx={{ fontSize: \"0.75rem\", fontWeight: 500, color: \"text.secondary\" }}>\n {field.label}\n </Typography>\n <RangeBounds field={field} value={value} onChange={onChange} testId={testId} />\n </Box>\n );\n }\n return (\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\n <TableFilter.RangeField\n label={field.label}\n unit={field.unit}\n value={numericRange(value)}\n onChange={(range) => onChange(range)}\n testId={testId}\n />\n {/* Below the numeric control here, unlike the pill's popover: this one\n renders its own label, and chips above it would separate the label\n from the field it names. */}\n <RangePresets presets={presetsFor(field, copy)} value={value} onChange={onChange} testId={testId} />\n </Box>\n );\n}\n"],"mappings":"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","names":[]}