@12-apps/ui 6.39.20 → 6.41.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 (923) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +43 -5
  3. package/components-guidelines.md +110 -0
  4. package/dist/_internal/components/data-display/Alert/Alert.js +3 -2
  5. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -2
  6. package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -2
  7. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  8. package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
  9. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  10. package/dist/_internal/components/data-display/Badge/Badge.js +10 -8
  11. package/dist/_internal/components/data-display/Badge/Badge.styles.js +8 -6
  12. package/dist/_internal/components/data-display/Badge/BadgeContent.js +9 -7
  13. package/dist/_internal/components/data-display/Banner/Banner.js +3 -2
  14. package/dist/_internal/components/data-display/Banner/Banner.styles.js +3 -2
  15. package/dist/_internal/components/data-display/CardKit/CardKebab.js +9 -8
  16. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -2
  17. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +13 -12
  18. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +13 -12
  19. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +9 -7
  20. package/dist/_internal/components/data-display/Carousel/Carousel.js +13 -11
  21. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +8 -6
  22. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +8 -6
  23. package/dist/_internal/components/data-display/Chart/Chart.js +12 -10
  24. package/dist/_internal/components/data-display/Chart/SpecChart.js +15 -13
  25. package/dist/_internal/components/data-display/Chart/chart-context.js +9 -7
  26. package/dist/_internal/components/data-display/Chart/chart-internals.js +8 -6
  27. package/dist/_internal/components/data-display/Chart/chart-renderers.js +11 -9
  28. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  29. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -3
  30. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +6 -5
  31. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +70 -69
  32. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +87 -86
  33. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +13 -12
  34. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +17 -16
  35. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +17 -16
  36. package/dist/_internal/components/data-display/DataViews/base-card.js +7 -6
  37. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +11 -10
  38. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +10 -9
  39. package/dist/_internal/components/data-display/DataViews/base-list-card.js +15 -14
  40. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +4 -4
  41. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +20 -20
  42. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +6 -5
  43. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +10 -9
  44. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +4 -4
  45. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +16 -15
  46. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +8 -7
  47. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +11 -10
  48. package/dist/_internal/components/data-display/DataViews/data-views-export.js +11 -10
  49. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +26 -26
  50. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +20 -19
  51. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +9 -8
  52. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +66 -65
  53. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +6 -5
  54. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +37 -36
  55. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  56. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +20 -19
  57. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +24 -23
  58. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +4 -4
  59. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +6 -6
  60. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +8 -8
  61. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  62. package/dist/_internal/components/data-display/DataViews/data-views-search.js +4 -4
  63. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +11 -10
  64. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +27 -26
  65. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +30 -29
  66. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +26 -25
  67. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +11 -10
  68. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  69. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +6 -5
  70. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +13 -12
  71. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +3 -3
  72. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +6 -5
  73. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  74. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +15 -15
  75. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +14 -14
  76. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  77. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +23 -21
  78. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  79. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
  80. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  81. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +5 -5
  82. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  83. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +13 -13
  84. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +4 -4
  85. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  86. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  87. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  88. package/dist/_internal/components/data-display/Progress/Progress.js +6 -5
  89. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +4 -3
  90. package/dist/_internal/components/data-display/Progress/Progress.styles.js +5 -4
  91. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
  92. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +7 -5
  93. package/dist/_internal/components/data-display/Sheet/Sheet.js +9 -7
  94. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +8 -6
  95. package/dist/_internal/components/data-display/Table/Table.js +5 -5
  96. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
  97. package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
  98. package/dist/_internal/components/data-display/index.js +77 -75
  99. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
  100. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +11 -10
  101. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
  102. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  103. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  104. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +9 -8
  105. package/dist/_internal/components/feedback/index.js +19 -18
  106. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +10 -10
  107. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +7 -7
  108. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +5 -5
  109. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +5 -5
  110. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +4 -4
  111. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +5 -5
  112. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +4 -4
  113. package/dist/_internal/components/form/Button/Button.js +8 -7
  114. package/dist/_internal/components/form/Button/Button.styles.js +6 -5
  115. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  116. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  117. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  118. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +10 -10
  119. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +5 -5
  120. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +5 -5
  121. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +7 -7
  122. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +6 -6
  123. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +12 -12
  124. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +4 -4
  125. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +5 -5
  126. package/dist/_internal/components/form/CepField/CepField.js +7 -7
  127. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
  128. package/dist/_internal/components/form/Command/Command.js +9 -7
  129. package/dist/_internal/components/form/Command/Command.styles.js +8 -6
  130. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +4 -4
  131. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +6 -6
  132. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +13 -13
  133. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +5 -5
  134. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +6 -6
  135. package/dist/_internal/components/form/Input/Input.js +6 -6
  136. package/dist/_internal/components/form/Input/Input.metrics.js +2 -2
  137. package/dist/_internal/components/form/Input/Input.styles.js +5 -5
  138. package/dist/_internal/components/form/InputOTP/InputOTP.js +5 -5
  139. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +4 -4
  140. package/dist/_internal/components/form/Label/Label.js +9 -7
  141. package/dist/_internal/components/form/Label/Label.styles.js +8 -6
  142. package/dist/_internal/components/form/Menubar/Menubar.item.js +9 -7
  143. package/dist/_internal/components/form/Menubar/Menubar.js +11 -9
  144. package/dist/_internal/components/form/Menubar/Menubar.styles.js +8 -6
  145. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +10 -8
  146. package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
  147. package/dist/_internal/components/form/NumberField/NumberField.js +28 -0
  148. package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
  149. package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
  150. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +4 -4
  151. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +6 -6
  152. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +4 -4
  153. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +5 -5
  154. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  155. package/dist/_internal/components/form/Select/Select.js +5 -5
  156. package/dist/_internal/components/form/Select/Select.metrics.js +2 -2
  157. package/dist/_internal/components/form/Switch/Switch.js +3 -2
  158. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -2
  159. package/dist/_internal/components/form/Switch/Switch.styles.js +3 -2
  160. package/dist/_internal/components/form/Textarea/Textarea.js +4 -4
  161. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +5 -5
  162. package/dist/_internal/components/form/Toggle/Toggle.js +5 -5
  163. package/dist/_internal/components/form/Toggle/Toggle.styles.js +4 -4
  164. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +4 -4
  165. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  166. package/dist/_internal/components/form/index.js +72 -64
  167. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +13 -13
  168. package/dist/_internal/components/form/total-form/Fields/CepField.js +8 -8
  169. package/dist/_internal/components/form/total-form/Fields/SelectField.js +6 -6
  170. package/dist/_internal/components/form/total-form/Fields/TextField.js +7 -7
  171. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +5 -5
  172. package/dist/_internal/components/form/total-form/Fields/index.js +27 -27
  173. package/dist/_internal/components/form/total-form/SubmitButton.js +9 -8
  174. package/dist/_internal/components/index.js +244 -203
  175. package/dist/_internal/components/layout/Box/Box.js +10 -8
  176. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +4 -4
  177. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +4 -4
  178. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +5 -5
  179. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +4 -4
  180. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +4 -4
  181. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +4 -4
  182. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +4 -4
  183. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +2 -2
  184. package/dist/_internal/components/layout/Separator/Separator.js +3 -3
  185. package/dist/_internal/components/layout/Separator/Separator.styles.js +2 -2
  186. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
  187. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
  188. package/dist/_internal/components/layout/SettingCard/SettingCard.js +54 -0
  189. package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
  190. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
  191. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
  192. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +59 -0
  193. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
  194. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +37 -0
  195. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
  196. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
  197. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
  198. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +56 -0
  199. package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
  200. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
  201. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
  202. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +65 -0
  203. package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
  204. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +63 -0
  205. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
  206. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +65 -0
  207. package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
  208. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +6 -6
  209. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +4 -4
  210. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  211. package/dist/_internal/components/layout/Stack/Stack.js +11 -9
  212. package/dist/_internal/components/layout/TableFilter/TableFilter.js +4 -4
  213. package/dist/_internal/components/layout/index.js +87 -25
  214. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +15 -13
  215. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +8 -6
  216. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  217. package/dist/_internal/components/navigation/Pagination/Pagination.js +5 -5
  218. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +4 -4
  219. package/dist/_internal/components/navigation/Tabs/Tabs.js +5 -5
  220. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +4 -4
  221. package/dist/_internal/components/navigation/index.js +33 -31
  222. package/dist/_internal/components/typography/Heading/Heading.js +6 -5
  223. package/dist/_internal/components/typography/Heading/Heading.metrics.js +4 -3
  224. package/dist/_internal/components/typography/Heading/Heading.styles.js +5 -4
  225. package/dist/_internal/components/typography/Text/Text.js +5 -4
  226. package/dist/_internal/components/typography/Text/Text.metrics.js +4 -3
  227. package/dist/_internal/components/typography/index.js +12 -11
  228. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  229. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +7 -5
  230. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +7 -5
  231. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +7 -5
  232. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +7 -5
  233. package/dist/_internal/components/utility/index.js +20 -18
  234. package/dist/_internal/en-US.data-display.js +2 -2
  235. package/dist/_internal/en-US.layout.js +5 -1
  236. package/dist/_internal/icons/Icon.js +10 -8
  237. package/dist/_internal/provider/UiProvider.js +9 -7
  238. package/dist/_internal/provider/mui-bridge.js +8 -6
  239. package/dist/_internal/provider/use-ui-theme.js +9 -7
  240. package/dist/_internal/pt-BR.data-display.js +2 -2
  241. package/dist/_internal/pt-BR.layout.js +5 -1
  242. package/dist/_internal/social-login-button/social-login-button.js +16 -15
  243. package/dist/_internal/tokens/density.core.js +18 -0
  244. package/dist/_internal/tokens/density.core.js.map +1 -0
  245. package/dist/_internal/tokens/density.js +31 -0
  246. package/dist/_internal/tokens/density.js.map +1 -0
  247. package/dist/_internal/tokens/field-height.core.js +1 -1
  248. package/dist/_internal/tokens/field-height.js +7 -5
  249. package/dist/_internal/tokens/theme.js +3 -2
  250. package/dist/_internal/user-avatar/user-avatar.js +14 -13
  251. package/dist/charts.js +24 -22
  252. package/dist/chunk-2GTORM5E.js +1 -0
  253. package/dist/chunk-2GTORM5E.js.map +1 -0
  254. package/dist/{chunk-DFCQQN6P.js → chunk-2LKWJV65.js} +5 -5
  255. package/dist/{chunk-HVXIOIM5.js → chunk-2MLS6KU4.js} +2 -2
  256. package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
  257. package/dist/chunk-33L26P4J.js +27 -0
  258. package/dist/chunk-33L26P4J.js.map +1 -0
  259. package/dist/{chunk-IASDP44E.js → chunk-3AOOI2NR.js} +6 -6
  260. package/dist/{chunk-TCV3N44E.js → chunk-3CLBGHTL.js} +2 -2
  261. package/dist/{chunk-KKN4LLVE.js → chunk-3CUWQXTG.js} +3 -3
  262. package/dist/{chunk-QXSW3CNN.js → chunk-3CYTVX4T.js} +5 -5
  263. package/dist/chunk-3DO5AJCG.js +117 -0
  264. package/dist/chunk-3DO5AJCG.js.map +1 -0
  265. package/dist/{chunk-I5ZVCY2N.js → chunk-3EPA2A4M.js} +8 -8
  266. package/dist/{chunk-DRSY37PB.js → chunk-3MJHHPRW.js} +2 -2
  267. package/dist/{chunk-NLYNRE7L.js → chunk-3RUCLKAK.js} +4 -4
  268. package/dist/chunk-3U7WKBMH.js +27 -0
  269. package/dist/chunk-3U7WKBMH.js.map +1 -0
  270. package/dist/{chunk-36JKV7CA.js → chunk-3UEZ6NUI.js} +3 -3
  271. package/dist/{chunk-EYZ6QBTV.js → chunk-3XS37SQT.js} +3 -3
  272. package/dist/{chunk-BSUG4KMP.js → chunk-44USLRMT.js} +11 -11
  273. package/dist/{chunk-DJYL2LC6.js → chunk-44Z72DDM.js} +2 -2
  274. package/dist/{chunk-4WCDMCIS.js → chunk-4CHYMTBT.js} +4 -4
  275. package/dist/{chunk-2LIRGFEK.js → chunk-4GN2RLYL.js} +2 -2
  276. package/dist/{chunk-HN3PZTUK.js → chunk-4MKVGSHX.js} +5 -5
  277. package/dist/{chunk-BRM3T4LQ.js → chunk-4S2LWZ7L.js} +5 -5
  278. package/dist/{chunk-OQRG34VG.js → chunk-4SHMSLFA.js} +2 -2
  279. package/dist/{chunk-62UAI62O.js → chunk-4UVFPORR.js} +5 -5
  280. package/dist/{chunk-YTINPQKU.js → chunk-4XHVGUOM.js} +2 -2
  281. package/dist/{chunk-7DK6YVJU.js → chunk-4Z7GEO2R.js} +2 -2
  282. package/dist/{chunk-A2TANYNR.js → chunk-53O2TNSR.js} +6 -6
  283. package/dist/{chunk-T6EKPFKZ.js → chunk-54HTXJJ2.js} +2 -2
  284. package/dist/{chunk-OHZU4IT3.js → chunk-5B7BTLN4.js} +2 -2
  285. package/dist/{chunk-K5V6TCYB.js → chunk-5ETBB2DG.js} +4 -4
  286. package/dist/{chunk-5752357K.js → chunk-5KGABAQB.js} +4 -4
  287. package/dist/{chunk-JKIKHWD2.js → chunk-5NT2M2JI.js} +4 -4
  288. package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
  289. package/dist/{chunk-7EH4D6FU.js → chunk-6H4TPEMO.js} +2 -2
  290. package/dist/{chunk-WB6ZU3B3.js → chunk-6JGATEOF.js} +6 -6
  291. package/dist/{chunk-TU5A2CV7.js → chunk-6L2FKTBO.js} +7 -7
  292. package/dist/{chunk-ME3WYPYK.js → chunk-6MD5QXXJ.js} +5 -5
  293. package/dist/{chunk-HQZRI7UX.js → chunk-6N2EDWMG.js} +4 -4
  294. package/dist/{chunk-H224XFFD.js → chunk-6REPQ352.js} +2 -2
  295. package/dist/{chunk-YZ2DMP23.js → chunk-6TPYT3UC.js} +5 -5
  296. package/dist/{chunk-I4MRBEWU.js → chunk-6ZD3FI5P.js} +11 -11
  297. package/dist/{chunk-PWZHCBG3.js → chunk-72FPUWD6.js} +2 -2
  298. package/dist/{chunk-VRPREI27.js → chunk-72S2RGWD.js} +2 -2
  299. package/dist/{chunk-OAW6GCS3.js → chunk-77BKKPCI.js} +3 -3
  300. package/dist/{chunk-67O4GPJJ.js → chunk-7FEXRMJE.js} +2 -2
  301. package/dist/{chunk-KN5J3NEZ.js → chunk-7KKMZJFT.js} +2 -2
  302. package/dist/{chunk-KJDBY2KN.js → chunk-7LILFS72.js} +2 -2
  303. package/dist/{chunk-SLDSWQVE.js → chunk-7TE4TMS3.js} +5 -5
  304. package/dist/{chunk-AG3DY5TH.js → chunk-ADSA76T7.js} +2 -2
  305. package/dist/chunk-AEMD6JHZ.js +1 -0
  306. package/dist/chunk-AEMD6JHZ.js.map +1 -0
  307. package/dist/{chunk-BKASAYQL.js → chunk-ALOUJ3CE.js} +8 -8
  308. package/dist/{chunk-VY2BMSHN.js → chunk-ANYOSBNA.js} +2 -2
  309. package/dist/{chunk-LNHYBA4B.js → chunk-AWG2AJHX.js} +5 -5
  310. package/dist/{chunk-7X7ZHJHM.js → chunk-B3QWQG62.js} +2 -2
  311. package/dist/{chunk-2S752BIJ.js → chunk-BA6Z52QN.js} +2 -2
  312. package/dist/{chunk-X4F32GUB.js → chunk-BM4KKGL7.js} +2 -2
  313. package/dist/chunk-BOWS4U6W.js +1 -0
  314. package/dist/chunk-BOWS4U6W.js.map +1 -0
  315. package/dist/{chunk-4T6UIYJB.js → chunk-BVSSEOLI.js} +2 -2
  316. package/dist/{chunk-3UABIEP3.js → chunk-C2TERIB4.js} +2 -2
  317. package/dist/{chunk-TEEJ4GNY.js → chunk-C6OVO6AT.js} +2 -2
  318. package/dist/{chunk-CYZZHWNK.js → chunk-CJ45OL7L.js} +2 -2
  319. package/dist/{chunk-N7LPVR7P.js → chunk-CKHFYTIX.js} +4 -4
  320. package/dist/{chunk-PA3AA55Q.js → chunk-CLK67TNH.js} +2 -2
  321. package/dist/{chunk-MQ277OLB.js → chunk-CM2Q7IH3.js} +5 -5
  322. package/dist/{chunk-ZXSWXE6U.js → chunk-CMFJQH6A.js} +5 -5
  323. package/dist/{chunk-NOKN4HRK.js → chunk-CMLIWUBW.js} +4 -4
  324. package/dist/{chunk-EA2UNEL6.js → chunk-CNR5RFKC.js} +2 -2
  325. package/dist/{chunk-P52LYD6S.js → chunk-DFI2RKVQ.js} +2 -2
  326. package/dist/{chunk-37USSARD.js → chunk-DH5UJD2I.js} +4 -4
  327. package/dist/{chunk-PCLKFR27.js → chunk-DH6SL3SY.js} +8 -8
  328. package/dist/chunk-DJKVSUXH.js +35 -0
  329. package/dist/chunk-DJKVSUXH.js.map +1 -0
  330. package/dist/{chunk-S6JHTEV4.js → chunk-DLWLIPCP.js} +3 -3
  331. package/dist/{chunk-KN4ZE2XZ.js → chunk-EIII4QU4.js} +19 -19
  332. package/dist/{chunk-L566FMDD.js → chunk-EO5IEWFI.js} +6 -6
  333. package/dist/{chunk-VY6L74JQ.js → chunk-EQXIW5MQ.js} +4 -4
  334. package/dist/{chunk-MWPXKZ7O.js → chunk-ERY6D2OV.js} +4 -4
  335. package/dist/{chunk-6PU3JYVY.js → chunk-F3AYISXT.js} +4 -4
  336. package/dist/{chunk-GY4NBSCN.js → chunk-FDMQ7H22.js} +2 -2
  337. package/dist/{chunk-IBGP3VSR.js → chunk-FHW3ATT7.js} +2 -2
  338. package/dist/{chunk-WL6N33AB.js → chunk-FIO55AKI.js} +4 -4
  339. package/dist/{chunk-5CQNBMLK.js → chunk-FTQBVZ7V.js} +4 -4
  340. package/dist/{chunk-J5UZB6Y6.js → chunk-FXWXBEOZ.js} +2 -2
  341. package/dist/{chunk-IGGXKT5B.js → chunk-G2WERTWZ.js} +2 -2
  342. package/dist/{chunk-DF4QODJ6.js → chunk-G4TKMUOL.js} +6 -6
  343. package/dist/{chunk-WY5PBZ7Q.js → chunk-G6ZPQHBL.js} +2 -2
  344. package/dist/{chunk-JYR6VV4Y.js → chunk-G7XHJPLO.js} +5 -5
  345. package/dist/{chunk-IQJCLFF4.js → chunk-GANW7FXQ.js} +2 -2
  346. package/dist/{chunk-3LSIFHQK.js → chunk-GE2CCITY.js} +2 -2
  347. package/dist/{chunk-G3XLFQ2Z.js → chunk-GG62LKA3.js} +6 -6
  348. package/dist/{chunk-YQCRQHVU.js → chunk-GI63FQEJ.js} +4 -4
  349. package/dist/{chunk-7ICK5MXV.js → chunk-GJFAI3J5.js} +10 -10
  350. package/dist/{chunk-2JNHWKQK.js → chunk-GPHURU2K.js} +12 -12
  351. package/dist/{chunk-5FAI25JQ.js → chunk-H72YKEGD.js} +3 -3
  352. package/dist/chunk-HALFOXSZ.js +1 -0
  353. package/dist/chunk-HALFOXSZ.js.map +1 -0
  354. package/dist/{chunk-J3XFUCCR.js → chunk-HKBJZX3C.js} +12 -12
  355. package/dist/{chunk-M4QXG5JP.js → chunk-HQWJUHR4.js} +4 -4
  356. package/dist/chunk-IC7GHPMK.js +22 -0
  357. package/dist/chunk-IC7GHPMK.js.map +1 -0
  358. package/dist/{chunk-4BNV5AAI.js → chunk-ITFFA3H2.js} +3 -3
  359. package/dist/{chunk-RB3X6CEE.js → chunk-IWGW2E35.js} +2 -2
  360. package/dist/{chunk-O25SH2MA.js → chunk-J6KLT7HP.js} +7 -7
  361. package/dist/{chunk-CRG24BGI.js → chunk-JAGAFEZL.js} +2 -2
  362. package/dist/{chunk-RDCHT2WN.js → chunk-JE5GEWTG.js} +5 -5
  363. package/dist/{chunk-FLDLUAHW.js → chunk-JE6GQB5J.js} +4 -4
  364. package/dist/{chunk-N23GCN5U.js → chunk-JFLFZLOA.js} +5 -5
  365. package/dist/{chunk-35443PF6.js → chunk-JIRZ27RI.js} +2 -2
  366. package/dist/{chunk-5MW7OYBM.js → chunk-JSGVYOMN.js} +2 -2
  367. package/dist/{chunk-RNIU447I.js → chunk-JU3FRRO2.js} +2 -2
  368. package/dist/{chunk-WOAXKWAB.js → chunk-K4A3JDYQ.js} +2 -2
  369. package/dist/{chunk-HM2JJNUE.js → chunk-K6LNHHSH.js} +5 -5
  370. package/dist/{chunk-NR5TW4AH.js → chunk-K7MQP2KT.js} +3 -3
  371. package/dist/{chunk-2OWKL4CC.js → chunk-KCDNOMMT.js} +9 -9
  372. package/dist/{chunk-O2DLEAUP.js → chunk-KHOAXZW2.js} +4 -4
  373. package/dist/{chunk-W5TI46QN.js → chunk-KQZGUHYZ.js} +3 -3
  374. package/dist/{chunk-2K7WPHI3.js → chunk-KW3H5FUS.js} +2 -2
  375. package/dist/{chunk-7D2C4LK2.js → chunk-LCWGNDTH.js} +4 -4
  376. package/dist/{chunk-FNRPQE2D.js → chunk-LF3EVXMF.js} +2 -2
  377. package/dist/{chunk-MCJRHF7Z.js → chunk-LGCRL7DK.js} +10 -10
  378. package/dist/{chunk-JK5UJM4Y.js → chunk-LODMNSLR.js} +9 -9
  379. package/dist/{chunk-CGO452DC.js → chunk-M47ZOUGF.js} +13 -10
  380. package/dist/{chunk-CGO452DC.js.map → chunk-M47ZOUGF.js.map} +1 -1
  381. package/dist/{chunk-YUXDVW62.js → chunk-M65ZNPLO.js} +2 -2
  382. package/dist/{chunk-URHX4FAQ.js → chunk-MKLIMY3D.js} +2 -2
  383. package/dist/{chunk-2FM5SUQV.js → chunk-MM5XSAVE.js} +2 -2
  384. package/dist/{chunk-LXT3X33C.js → chunk-NCB4GBRL.js} +2 -2
  385. package/dist/{chunk-FNO5TWBJ.js → chunk-NCEQWEXT.js} +4 -4
  386. package/dist/{chunk-FWPFCK4D.js → chunk-NDHDBOUH.js} +4 -4
  387. package/dist/{chunk-WRCLYSTX.js → chunk-NFGIA2ZV.js} +2 -2
  388. package/dist/{chunk-VPPIODKX.js → chunk-NQ7NMCRI.js} +2 -2
  389. package/dist/{chunk-YMTZN54Q.js → chunk-NRSVI23L.js} +2 -2
  390. package/dist/{chunk-2622YFM6.js → chunk-NSVSC6ZC.js} +6 -6
  391. package/dist/{chunk-Z43N7ASP.js → chunk-NU55QUMO.js} +2 -2
  392. package/dist/{chunk-66O55OZI.js → chunk-NYFGFELX.js} +2 -2
  393. package/dist/{chunk-PZBK3F52.js → chunk-O6MJWHU5.js} +3 -3
  394. package/dist/chunk-O6MJWHU5.js.map +1 -0
  395. package/dist/chunk-OJUORFGO.js +87 -0
  396. package/dist/chunk-OJUORFGO.js.map +1 -0
  397. package/dist/{chunk-JXECOCNA.js → chunk-P6Q2O3TU.js} +2 -2
  398. package/dist/{chunk-RTEY5COP.js → chunk-PAICZOL5.js} +4 -4
  399. package/dist/{chunk-ZN6YATOG.js → chunk-PAT2BQOQ.js} +2 -2
  400. package/dist/chunk-PEOOCQ2T.js +140 -0
  401. package/dist/chunk-PEOOCQ2T.js.map +1 -0
  402. package/dist/chunk-PGGGKYWG.js +1 -0
  403. package/dist/chunk-PGGGKYWG.js.map +1 -0
  404. package/dist/{chunk-TZBOWSAM.js → chunk-PICOOZLX.js} +6 -6
  405. package/dist/{chunk-JJJM75XF.js → chunk-PNDYAIKM.js} +2 -2
  406. package/dist/{chunk-EJYJLVPK.js → chunk-PRLYYKMG.js} +3 -3
  407. package/dist/{chunk-4GB46HLK.js → chunk-PTONBPZL.js} +2 -2
  408. package/dist/chunk-Q4JWWTL4.js +36 -0
  409. package/dist/chunk-Q4JWWTL4.js.map +1 -0
  410. package/dist/{chunk-FNG33MKA.js → chunk-QDELBNL3.js} +2 -2
  411. package/dist/{chunk-DSF4VT7L.js → chunk-QEI5DC6S.js} +6 -6
  412. package/dist/chunk-QGUNUXTT.js +1 -0
  413. package/dist/chunk-QGUNUXTT.js.map +1 -0
  414. package/dist/{chunk-VJ2BNJ5M.js → chunk-QMELMQPA.js} +4 -4
  415. package/dist/{chunk-HDJQDMHB.js → chunk-QMHS6ZDI.js} +2 -2
  416. package/dist/{chunk-2WVHZIWP.js → chunk-QSRZOXQI.js} +2 -2
  417. package/dist/{chunk-C3LZ3OGJ.js → chunk-R2FUQV24.js} +2 -2
  418. package/dist/{chunk-GOWBYHYW.js → chunk-R6SBP5M5.js} +4 -4
  419. package/dist/{chunk-HWSS6C7C.js → chunk-RDFPM2AQ.js} +8 -8
  420. package/dist/chunk-RDZGXJOD.js +74 -0
  421. package/dist/chunk-RDZGXJOD.js.map +1 -0
  422. package/dist/chunk-RN7UJI7S.js +1 -0
  423. package/dist/chunk-RN7UJI7S.js.map +1 -0
  424. package/dist/chunk-RPBGUWNF.js +168 -0
  425. package/dist/chunk-RPBGUWNF.js.map +1 -0
  426. package/dist/{chunk-4RPFI474.js → chunk-RSDYS5B3.js} +6 -6
  427. package/dist/{chunk-X53F33KA.js → chunk-RWXYND4H.js} +2 -2
  428. package/dist/{chunk-4NPPO63U.js → chunk-RZ2VZ7SL.js} +5 -5
  429. package/dist/{chunk-ORRI6FMN.js → chunk-S4IXC2V3.js} +3 -3
  430. package/dist/chunk-SALQ65SM.js +118 -0
  431. package/dist/chunk-SALQ65SM.js.map +1 -0
  432. package/dist/{chunk-MXCIUKTQ.js → chunk-SDBBJ6FG.js} +4 -4
  433. package/dist/{chunk-JRJCBDGN.js → chunk-SDKOOVEX.js} +6 -4
  434. package/dist/{chunk-JRJCBDGN.js.map → chunk-SDKOOVEX.js.map} +1 -1
  435. package/dist/{chunk-UMNXSQ7I.js → chunk-SNBAMWI5.js} +2 -2
  436. package/dist/{chunk-LP3JCXER.js → chunk-SNW5MJ6I.js} +2 -2
  437. package/dist/{chunk-5OBGW3FG.js → chunk-STTULW2K.js} +2 -2
  438. package/dist/{chunk-3CTQZDSD.js → chunk-TCNTIGMY.js} +4 -4
  439. package/dist/{chunk-Y6C4MYZE.js → chunk-TNQDSTIA.js} +7 -7
  440. package/dist/{chunk-6RLCBNDV.js → chunk-TPVSHO75.js} +7 -7
  441. package/dist/{chunk-BUPDBEBA.js → chunk-TTJTMDLI.js} +2 -2
  442. package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
  443. package/dist/chunk-U67ZQ6VM.js +82 -0
  444. package/dist/chunk-U67ZQ6VM.js.map +1 -0
  445. package/dist/{chunk-MLQYIJTO.js → chunk-U6W2RY3Z.js} +5 -5
  446. package/dist/{chunk-4WF6ZLIW.js → chunk-UGPRBJWB.js} +8 -8
  447. package/dist/chunk-VBP46YP4.js +42 -0
  448. package/dist/chunk-VBP46YP4.js.map +1 -0
  449. package/dist/{chunk-Y6G4I42P.js → chunk-VEEG4UXZ.js} +2 -2
  450. package/dist/{chunk-IRD45DRW.js → chunk-VOJBLBXE.js} +3 -3
  451. package/dist/{chunk-KHPL2J3B.js → chunk-VPAOVEI2.js} +3 -3
  452. package/dist/{chunk-DYGWKZ7T.js → chunk-VWJEM2ER.js} +3 -3
  453. package/dist/{chunk-FERUQ7OB.js → chunk-VYA4QWQL.js} +2 -2
  454. package/dist/chunk-VYM2GPR6.js +47 -0
  455. package/dist/chunk-VYM2GPR6.js.map +1 -0
  456. package/dist/{chunk-UKX3MPB7.js → chunk-VYV3JOV5.js} +2 -2
  457. package/dist/{chunk-B7CNP5HW.js → chunk-WV62BSWA.js} +2 -2
  458. package/dist/chunk-X3C3VTYS.js +85 -0
  459. package/dist/chunk-X3C3VTYS.js.map +1 -0
  460. package/dist/{chunk-IWEUSZY3.js → chunk-X66E5WSX.js} +3 -3
  461. package/dist/{chunk-OJ2XR3WH.js → chunk-XB7HYOMM.js} +2 -2
  462. package/dist/{chunk-H6AWKLOV.js → chunk-XBLFK2FL.js} +2 -2
  463. package/dist/{chunk-5HDYTTE7.js → chunk-XHA2NXLD.js} +2 -2
  464. package/dist/chunk-XJQNSMGA.js +10 -0
  465. package/dist/chunk-XJQNSMGA.js.map +1 -0
  466. package/dist/{chunk-F4KYBBTY.js → chunk-XLXMJ6X2.js} +3 -3
  467. package/dist/{chunk-SCZABICW.js → chunk-XO4ZUHVH.js} +2 -2
  468. package/dist/{chunk-PARTZ7XI.js → chunk-XP522FFM.js} +2 -2
  469. package/dist/{chunk-MBHWVRV5.js → chunk-XVZG52CM.js} +8 -8
  470. package/dist/{chunk-TGXCG62P.js → chunk-XXL4PM4M.js} +2 -2
  471. package/dist/{chunk-YKEO6UHN.js → chunk-XZJM6EPC.js} +4 -4
  472. package/dist/{chunk-YTY7TD7S.js → chunk-XZY7O7JJ.js} +5 -5
  473. package/dist/{chunk-WZNTZX5N.js → chunk-Y2UXX5IQ.js} +4 -4
  474. package/dist/{chunk-BLW6KLDR.js → chunk-YFODI4KT.js} +11 -4
  475. package/dist/chunk-YFODI4KT.js.map +1 -0
  476. package/dist/{chunk-QOLIBVGS.js → chunk-YGYQC7MT.js} +4 -4
  477. package/dist/{chunk-THMT3G3L.js → chunk-YLXQWYOG.js} +7 -7
  478. package/dist/{chunk-M4KVKQRN.js → chunk-YPIVLPXF.js} +3 -3
  479. package/dist/{chunk-57FZM6GH.js → chunk-YRUX7XMQ.js} +2 -2
  480. package/dist/{chunk-M2Q5CLPU.js → chunk-YTXZUTLF.js} +4 -4
  481. package/dist/{chunk-ZWCYSAI5.js → chunk-YWJDUJAR.js} +4 -4
  482. package/dist/{chunk-S36NC22G.js → chunk-Z2NN53E5.js} +2 -2
  483. package/dist/{chunk-GC56IWIZ.js → chunk-Z4DKVLYG.js} +9 -9
  484. package/dist/{chunk-U4QUDFPJ.js → chunk-Z4O3F6KU.js} +4 -4
  485. package/dist/{chunk-JC22FNFA.js → chunk-Z6T5SXST.js} +5 -5
  486. package/dist/{chunk-TXEN3QJ4.js → chunk-ZC5HDBQO.js} +2 -2
  487. package/dist/{chunk-LEHMWJNZ.js → chunk-ZEYUSS3W.js} +5 -5
  488. package/dist/{chunk-JH5BKA3Y.js → chunk-ZH2SZ6B3.js} +26 -8
  489. package/dist/chunk-ZH2SZ6B3.js.map +1 -0
  490. package/dist/{chunk-4WNFOBTH.js → chunk-ZKWVCSAB.js} +2 -2
  491. package/dist/{chunk-GEB4WSZH.js → chunk-ZNBLGS66.js} +3 -3
  492. package/dist/{chunk-TCAQOUIB.js → chunk-ZSTSISM6.js} +1 -1
  493. package/dist/chunk-ZSTSISM6.js.map +1 -0
  494. package/dist/data-display/Alert.js +3 -2
  495. package/dist/data-display/AsyncStateContainer.js +3 -3
  496. package/dist/data-display/Avatar.js +3 -3
  497. package/dist/data-display/Badge.js +10 -8
  498. package/dist/data-display/Banner.js +3 -2
  499. package/dist/data-display/CardKit.js +17 -16
  500. package/dist/data-display/Carousel.js +13 -11
  501. package/dist/data-display/Chart.js +24 -22
  502. package/dist/data-display/Chip.js +1 -0
  503. package/dist/data-display/DataGrid.js +3 -3
  504. package/dist/data-display/DataViews.js +107 -106
  505. package/dist/data-display/DescriptionItem.js +6 -5
  506. package/dist/data-display/EmptyState.js +2 -2
  507. package/dist/data-display/FleetMap.js +23 -21
  508. package/dist/data-display/InteractiveTooltip.js +2 -2
  509. package/dist/data-display/Lightbox.js +6 -6
  510. package/dist/data-display/MapPreview.js +13 -13
  511. package/dist/data-display/Progress.js +6 -5
  512. package/dist/data-display/SectionOnboarding.js +3 -3
  513. package/dist/data-display/Sheet.js +9 -7
  514. package/dist/data-display/Table.js +5 -5
  515. package/dist/en-US.js +15 -11
  516. package/dist/feedback/ConfirmAction.js +14 -13
  517. package/dist/feedback/Dialog.js +2 -2
  518. package/dist/feedback/Modal.js +2 -2
  519. package/dist/feedback/NotificationStatusNotice.js +9 -8
  520. package/dist/form/AddressAutocomplete.js +10 -10
  521. package/dist/form/Autocomplete.js +5 -5
  522. package/dist/form/Button.js +8 -7
  523. package/dist/form/Calendar.js +4 -4
  524. package/dist/form/CategorySelect.js +12 -12
  525. package/dist/form/CepField.js +7 -7
  526. package/dist/form/CodeEditor.js +4 -4
  527. package/dist/form/Command.js +9 -7
  528. package/dist/form/CreatableSelect.js +4 -4
  529. package/dist/form/DateRangePicker.js +13 -13
  530. package/dist/form/Input.js +6 -6
  531. package/dist/form/InputOTP.js +5 -5
  532. package/dist/form/Label.js +9 -7
  533. package/dist/form/Menubar.js +11 -9
  534. package/dist/form/NumberField.js +29 -0
  535. package/dist/form/NumberField.js.map +1 -0
  536. package/dist/form/PhoneInput.js +4 -4
  537. package/dist/form/RadioGroup.js +6 -6
  538. package/dist/form/RichTextEditor.js +2 -2
  539. package/dist/form/Select.js +5 -5
  540. package/dist/form/Switch.js +3 -2
  541. package/dist/form/Textarea.js +4 -4
  542. package/dist/form/Toggle.js +5 -5
  543. package/dist/form/ToggleGroup.js +4 -4
  544. package/dist/form/UploadButton.js +2 -2
  545. package/dist/form/total-form.js +31 -30
  546. package/dist/icons.js +11 -8
  547. package/dist/layout/Box.js +10 -8
  548. package/dist/layout/Collapsible.js +1 -0
  549. package/dist/layout/ContentToolbar.js +12 -12
  550. package/dist/layout/ScrollArea.js +2 -2
  551. package/dist/layout/Separator.js +3 -3
  552. package/dist/layout/SettingCard.js +80 -0
  553. package/dist/layout/SettingCard.js.map +1 -0
  554. package/dist/layout/SettingsLayout.js +7 -7
  555. package/dist/layout/Stack.js +11 -9
  556. package/dist/layout/TableFilter.js +4 -4
  557. package/dist/locales.js +37 -23
  558. package/dist/locales.js.map +1 -1
  559. package/dist/native/chunks/{chunk-ONXKFA5Z.js → chunk-A2QNZ4VK.js} +4 -4
  560. package/dist/native/chunks/{chunk-X6RQGKGF.js → chunk-BST5DUUD.js} +2 -2
  561. package/dist/native/chunks/{chunk-GUBTMR2K.js → chunk-EDYZEMVD.js} +2 -2
  562. package/dist/native/chunks/{chunk-SZF56GVJ.js → chunk-LECBJD35.js} +3 -3
  563. package/dist/native/chunks/{chunk-JBYDLWQA.js → chunk-MTRRGDBQ.js} +5 -5
  564. package/dist/native/chunks/{chunk-IMGBBIMT.js → chunk-PN7C2BEY.js} +2 -2
  565. package/dist/native/chunks/{chunk-R5XVZRDD.js → chunk-RADD26LG.js} +46 -5
  566. package/dist/native/chunks/chunk-RADD26LG.js.map +1 -0
  567. package/dist/native/chunks/{chunk-4ZAULIDG.js → chunk-S4F364X4.js} +3 -3
  568. package/dist/native/chunks/{chunk-5IASLIBI.js → chunk-VJFKRXY2.js} +2 -2
  569. package/dist/native/data-display/Alert.js +3 -3
  570. package/dist/native/data-display/Avatar.js +3 -3
  571. package/dist/native/data-display/Badge.js +3 -3
  572. package/dist/native/data-display/Chip.js +3 -3
  573. package/dist/native/data-display/EmptyState.js +6 -6
  574. package/dist/native/data-display/ErrorState.js +5 -5
  575. package/dist/native/data-display/FleetMap.js +7 -7
  576. package/dist/native/data-display/LoadingState.js +2 -2
  577. package/dist/native/data-display/Progress.js +2 -2
  578. package/dist/native/feedback/Dialog.js +3 -3
  579. package/dist/native/form/Button.js +4 -4
  580. package/dist/native/form/Checkbox.js +3 -3
  581. package/dist/native/form/Input.js +4 -4
  582. package/dist/native/form/Select.js +5 -5
  583. package/dist/native/form/Switch.js +2 -2
  584. package/dist/native/icons.js +3 -3
  585. package/dist/native/layout/Box.js +3 -3
  586. package/dist/native/layout/Card.js +2 -2
  587. package/dist/native/layout/Container.js +2 -2
  588. package/dist/native/layout/Skeleton.js +3 -3
  589. package/dist/native/layout/Spacer.js +2 -2
  590. package/dist/native/layout/Stack.js +3 -3
  591. package/dist/native/provider.js +2 -2
  592. package/dist/native/tokens.js +15 -3
  593. package/dist/native/typography/Heading.js +2 -2
  594. package/dist/native/typography/Paragraph.js +2 -2
  595. package/dist/native/typography/Text.js +2 -2
  596. package/dist/navigation/AppHeader.js +18 -16
  597. package/dist/navigation/CommandPalette.js +3 -3
  598. package/dist/navigation/Pagination.js +5 -5
  599. package/dist/navigation/Tabs.js +5 -5
  600. package/dist/provider.js +10 -8
  601. package/dist/pt-BR.js +12 -8
  602. package/dist/social-login-button.js +16 -15
  603. package/dist/tokens.js +30 -8
  604. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  605. package/dist/types/components/form/Input/Input.types.d.ts +10 -0
  606. package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
  607. package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
  608. package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
  609. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
  610. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
  611. package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
  612. package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
  613. package/dist/types/components/form/NumberField/index.d.ts +3 -0
  614. package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
  615. package/dist/types/components/form/index.d.ts +1 -0
  616. package/dist/types/components/form/index.d.ts.map +1 -1
  617. package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
  618. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
  619. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
  620. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
  621. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
  622. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
  623. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
  624. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
  625. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
  626. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
  627. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
  628. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
  629. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
  630. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
  631. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
  632. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
  633. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
  634. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
  635. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
  636. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
  637. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
  638. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
  639. package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
  640. package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
  641. package/dist/types/components/layout/index.d.ts +1 -0
  642. package/dist/types/components/layout/index.d.ts.map +1 -1
  643. package/dist/types/copy/layout.d.ts +27 -0
  644. package/dist/types/copy/layout.d.ts.map +1 -1
  645. package/dist/types/en-US.layout.d.ts +3 -1
  646. package/dist/types/en-US.layout.d.ts.map +1 -1
  647. package/dist/types/locales.d.ts +3 -1
  648. package/dist/types/locales.d.ts.map +1 -1
  649. package/dist/types/provider/mui-bridge.d.ts.map +1 -1
  650. package/dist/types/pt-BR.layout.d.ts +3 -1
  651. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  652. package/dist/types/tokens/density.core.d.ts +73 -0
  653. package/dist/types/tokens/density.core.d.ts.map +1 -0
  654. package/dist/types/tokens/density.d.ts +95 -0
  655. package/dist/types/tokens/density.d.ts.map +1 -0
  656. package/dist/types/tokens/field-height.core.d.ts +7 -2
  657. package/dist/types/tokens/field-height.core.d.ts.map +1 -1
  658. package/dist/types/tokens/field-height.d.ts +9 -0
  659. package/dist/types/tokens/field-height.d.ts.map +1 -1
  660. package/dist/types/tokens/scales.d.ts +2 -1
  661. package/dist/types/tokens/scales.d.ts.map +1 -1
  662. package/dist/types/tokens/theme.d.ts +30 -0
  663. package/dist/types/tokens/theme.d.ts.map +1 -1
  664. package/dist/types-native/tokens/density.core.d.ts +73 -0
  665. package/dist/types-native/tokens/density.core.d.ts.map +1 -0
  666. package/dist/types-native/tokens/field-height.core.d.ts +7 -2
  667. package/dist/types-native/tokens/field-height.core.d.ts.map +1 -1
  668. package/dist/types-native/tokens/index.native.d.ts +1 -0
  669. package/dist/types-native/tokens/index.native.d.ts.map +1 -1
  670. package/dist/types-native/tokens/theme.d.ts +30 -0
  671. package/dist/types-native/tokens/theme.d.ts.map +1 -1
  672. package/dist/typography/Heading.js +6 -5
  673. package/dist/typography/Text.js +5 -4
  674. package/dist/user-avatar.js +14 -13
  675. package/dist/utility/InstallPrompt.js +2 -2
  676. package/dist/utility/WorkflowStep.js +7 -5
  677. package/package.json +9 -1
  678. package/src/components/form/Input/Input.tsx +2 -0
  679. package/src/components/form/Input/Input.types.ts +10 -0
  680. package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
  681. package/src/components/form/NumberField/NumberField.md +86 -0
  682. package/src/components/form/NumberField/NumberField.tsx +88 -0
  683. package/src/components/form/NumberField/NumberField.types.ts +43 -0
  684. package/src/components/form/NumberField/index.ts +2 -0
  685. package/src/components/form/NumberField/tests.md +51 -0
  686. package/src/components/form/NumberField/track.md +42 -0
  687. package/src/components/form/index.ts +1 -0
  688. package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
  689. package/src/components/layout/SettingCard/SettingCard.md +121 -0
  690. package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
  691. package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
  692. package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
  693. package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
  694. package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
  695. package/src/components/layout/SettingCard/SettingGrid.md +65 -0
  696. package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
  697. package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
  698. package/src/components/layout/SettingCard/SettingGroup.md +81 -0
  699. package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
  700. package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
  701. package/src/components/layout/SettingCard/SettingToggle.md +61 -0
  702. package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
  703. package/src/components/layout/SettingCard/index.ts +18 -0
  704. package/src/components/layout/SettingCard/tests.md +68 -0
  705. package/src/components/layout/SettingCard/track.md +54 -0
  706. package/src/components/layout/index.ts +1 -0
  707. package/src/copy/layout.ts +29 -0
  708. package/src/en-US.layout.ts +16 -0
  709. package/src/locales.ts +10 -0
  710. package/src/provider/mui-bridge.ts +17 -3
  711. package/src/pt-BR.layout.ts +16 -0
  712. package/src/tokens/density.core.ts +118 -0
  713. package/src/tokens/density.ts +134 -0
  714. package/src/tokens/field-height.core.ts +8 -3
  715. package/src/tokens/field-height.ts +19 -8
  716. package/src/tokens/index.native.ts +11 -0
  717. package/src/tokens/scales.ts +15 -0
  718. package/src/tokens/theme.ts +43 -2
  719. package/dist/chunk-A7RIZOAL.js +0 -13
  720. package/dist/chunk-A7RIZOAL.js.map +0 -1
  721. package/dist/chunk-BLW6KLDR.js.map +0 -1
  722. package/dist/chunk-BY3JEK5T.js +0 -1
  723. package/dist/chunk-FZJ2FTGE.js +0 -1
  724. package/dist/chunk-GRHECKHU.js +0 -13
  725. package/dist/chunk-GRHECKHU.js.map +0 -1
  726. package/dist/chunk-JH5BKA3Y.js.map +0 -1
  727. package/dist/chunk-PZBK3F52.js.map +0 -1
  728. package/dist/chunk-TCAQOUIB.js.map +0 -1
  729. package/dist/native/chunks/chunk-R5XVZRDD.js.map +0 -1
  730. /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
  731. /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
  732. /package/dist/{chunk-DFCQQN6P.js.map → chunk-2LKWJV65.js.map} +0 -0
  733. /package/dist/{chunk-HVXIOIM5.js.map → chunk-2MLS6KU4.js.map} +0 -0
  734. /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
  735. /package/dist/{chunk-IASDP44E.js.map → chunk-3AOOI2NR.js.map} +0 -0
  736. /package/dist/{chunk-TCV3N44E.js.map → chunk-3CLBGHTL.js.map} +0 -0
  737. /package/dist/{chunk-KKN4LLVE.js.map → chunk-3CUWQXTG.js.map} +0 -0
  738. /package/dist/{chunk-QXSW3CNN.js.map → chunk-3CYTVX4T.js.map} +0 -0
  739. /package/dist/{chunk-I5ZVCY2N.js.map → chunk-3EPA2A4M.js.map} +0 -0
  740. /package/dist/{chunk-DRSY37PB.js.map → chunk-3MJHHPRW.js.map} +0 -0
  741. /package/dist/{chunk-NLYNRE7L.js.map → chunk-3RUCLKAK.js.map} +0 -0
  742. /package/dist/{chunk-36JKV7CA.js.map → chunk-3UEZ6NUI.js.map} +0 -0
  743. /package/dist/{chunk-EYZ6QBTV.js.map → chunk-3XS37SQT.js.map} +0 -0
  744. /package/dist/{chunk-BSUG4KMP.js.map → chunk-44USLRMT.js.map} +0 -0
  745. /package/dist/{chunk-DJYL2LC6.js.map → chunk-44Z72DDM.js.map} +0 -0
  746. /package/dist/{chunk-4WCDMCIS.js.map → chunk-4CHYMTBT.js.map} +0 -0
  747. /package/dist/{chunk-2LIRGFEK.js.map → chunk-4GN2RLYL.js.map} +0 -0
  748. /package/dist/{chunk-HN3PZTUK.js.map → chunk-4MKVGSHX.js.map} +0 -0
  749. /package/dist/{chunk-BRM3T4LQ.js.map → chunk-4S2LWZ7L.js.map} +0 -0
  750. /package/dist/{chunk-OQRG34VG.js.map → chunk-4SHMSLFA.js.map} +0 -0
  751. /package/dist/{chunk-62UAI62O.js.map → chunk-4UVFPORR.js.map} +0 -0
  752. /package/dist/{chunk-YTINPQKU.js.map → chunk-4XHVGUOM.js.map} +0 -0
  753. /package/dist/{chunk-7DK6YVJU.js.map → chunk-4Z7GEO2R.js.map} +0 -0
  754. /package/dist/{chunk-A2TANYNR.js.map → chunk-53O2TNSR.js.map} +0 -0
  755. /package/dist/{chunk-T6EKPFKZ.js.map → chunk-54HTXJJ2.js.map} +0 -0
  756. /package/dist/{chunk-OHZU4IT3.js.map → chunk-5B7BTLN4.js.map} +0 -0
  757. /package/dist/{chunk-K5V6TCYB.js.map → chunk-5ETBB2DG.js.map} +0 -0
  758. /package/dist/{chunk-5752357K.js.map → chunk-5KGABAQB.js.map} +0 -0
  759. /package/dist/{chunk-JKIKHWD2.js.map → chunk-5NT2M2JI.js.map} +0 -0
  760. /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  761. /package/dist/{chunk-7EH4D6FU.js.map → chunk-6H4TPEMO.js.map} +0 -0
  762. /package/dist/{chunk-WB6ZU3B3.js.map → chunk-6JGATEOF.js.map} +0 -0
  763. /package/dist/{chunk-TU5A2CV7.js.map → chunk-6L2FKTBO.js.map} +0 -0
  764. /package/dist/{chunk-ME3WYPYK.js.map → chunk-6MD5QXXJ.js.map} +0 -0
  765. /package/dist/{chunk-HQZRI7UX.js.map → chunk-6N2EDWMG.js.map} +0 -0
  766. /package/dist/{chunk-H224XFFD.js.map → chunk-6REPQ352.js.map} +0 -0
  767. /package/dist/{chunk-YZ2DMP23.js.map → chunk-6TPYT3UC.js.map} +0 -0
  768. /package/dist/{chunk-I4MRBEWU.js.map → chunk-6ZD3FI5P.js.map} +0 -0
  769. /package/dist/{chunk-PWZHCBG3.js.map → chunk-72FPUWD6.js.map} +0 -0
  770. /package/dist/{chunk-VRPREI27.js.map → chunk-72S2RGWD.js.map} +0 -0
  771. /package/dist/{chunk-OAW6GCS3.js.map → chunk-77BKKPCI.js.map} +0 -0
  772. /package/dist/{chunk-67O4GPJJ.js.map → chunk-7FEXRMJE.js.map} +0 -0
  773. /package/dist/{chunk-KN5J3NEZ.js.map → chunk-7KKMZJFT.js.map} +0 -0
  774. /package/dist/{chunk-KJDBY2KN.js.map → chunk-7LILFS72.js.map} +0 -0
  775. /package/dist/{chunk-SLDSWQVE.js.map → chunk-7TE4TMS3.js.map} +0 -0
  776. /package/dist/{chunk-AG3DY5TH.js.map → chunk-ADSA76T7.js.map} +0 -0
  777. /package/dist/{chunk-BKASAYQL.js.map → chunk-ALOUJ3CE.js.map} +0 -0
  778. /package/dist/{chunk-VY2BMSHN.js.map → chunk-ANYOSBNA.js.map} +0 -0
  779. /package/dist/{chunk-LNHYBA4B.js.map → chunk-AWG2AJHX.js.map} +0 -0
  780. /package/dist/{chunk-7X7ZHJHM.js.map → chunk-B3QWQG62.js.map} +0 -0
  781. /package/dist/{chunk-2S752BIJ.js.map → chunk-BA6Z52QN.js.map} +0 -0
  782. /package/dist/{chunk-X4F32GUB.js.map → chunk-BM4KKGL7.js.map} +0 -0
  783. /package/dist/{chunk-4T6UIYJB.js.map → chunk-BVSSEOLI.js.map} +0 -0
  784. /package/dist/{chunk-3UABIEP3.js.map → chunk-C2TERIB4.js.map} +0 -0
  785. /package/dist/{chunk-TEEJ4GNY.js.map → chunk-C6OVO6AT.js.map} +0 -0
  786. /package/dist/{chunk-CYZZHWNK.js.map → chunk-CJ45OL7L.js.map} +0 -0
  787. /package/dist/{chunk-N7LPVR7P.js.map → chunk-CKHFYTIX.js.map} +0 -0
  788. /package/dist/{chunk-PA3AA55Q.js.map → chunk-CLK67TNH.js.map} +0 -0
  789. /package/dist/{chunk-MQ277OLB.js.map → chunk-CM2Q7IH3.js.map} +0 -0
  790. /package/dist/{chunk-ZXSWXE6U.js.map → chunk-CMFJQH6A.js.map} +0 -0
  791. /package/dist/{chunk-NOKN4HRK.js.map → chunk-CMLIWUBW.js.map} +0 -0
  792. /package/dist/{chunk-EA2UNEL6.js.map → chunk-CNR5RFKC.js.map} +0 -0
  793. /package/dist/{chunk-P52LYD6S.js.map → chunk-DFI2RKVQ.js.map} +0 -0
  794. /package/dist/{chunk-37USSARD.js.map → chunk-DH5UJD2I.js.map} +0 -0
  795. /package/dist/{chunk-PCLKFR27.js.map → chunk-DH6SL3SY.js.map} +0 -0
  796. /package/dist/{chunk-S6JHTEV4.js.map → chunk-DLWLIPCP.js.map} +0 -0
  797. /package/dist/{chunk-KN4ZE2XZ.js.map → chunk-EIII4QU4.js.map} +0 -0
  798. /package/dist/{chunk-L566FMDD.js.map → chunk-EO5IEWFI.js.map} +0 -0
  799. /package/dist/{chunk-VY6L74JQ.js.map → chunk-EQXIW5MQ.js.map} +0 -0
  800. /package/dist/{chunk-MWPXKZ7O.js.map → chunk-ERY6D2OV.js.map} +0 -0
  801. /package/dist/{chunk-6PU3JYVY.js.map → chunk-F3AYISXT.js.map} +0 -0
  802. /package/dist/{chunk-GY4NBSCN.js.map → chunk-FDMQ7H22.js.map} +0 -0
  803. /package/dist/{chunk-IBGP3VSR.js.map → chunk-FHW3ATT7.js.map} +0 -0
  804. /package/dist/{chunk-WL6N33AB.js.map → chunk-FIO55AKI.js.map} +0 -0
  805. /package/dist/{chunk-5CQNBMLK.js.map → chunk-FTQBVZ7V.js.map} +0 -0
  806. /package/dist/{chunk-J5UZB6Y6.js.map → chunk-FXWXBEOZ.js.map} +0 -0
  807. /package/dist/{chunk-IGGXKT5B.js.map → chunk-G2WERTWZ.js.map} +0 -0
  808. /package/dist/{chunk-DF4QODJ6.js.map → chunk-G4TKMUOL.js.map} +0 -0
  809. /package/dist/{chunk-WY5PBZ7Q.js.map → chunk-G6ZPQHBL.js.map} +0 -0
  810. /package/dist/{chunk-JYR6VV4Y.js.map → chunk-G7XHJPLO.js.map} +0 -0
  811. /package/dist/{chunk-IQJCLFF4.js.map → chunk-GANW7FXQ.js.map} +0 -0
  812. /package/dist/{chunk-3LSIFHQK.js.map → chunk-GE2CCITY.js.map} +0 -0
  813. /package/dist/{chunk-G3XLFQ2Z.js.map → chunk-GG62LKA3.js.map} +0 -0
  814. /package/dist/{chunk-YQCRQHVU.js.map → chunk-GI63FQEJ.js.map} +0 -0
  815. /package/dist/{chunk-7ICK5MXV.js.map → chunk-GJFAI3J5.js.map} +0 -0
  816. /package/dist/{chunk-2JNHWKQK.js.map → chunk-GPHURU2K.js.map} +0 -0
  817. /package/dist/{chunk-5FAI25JQ.js.map → chunk-H72YKEGD.js.map} +0 -0
  818. /package/dist/{chunk-J3XFUCCR.js.map → chunk-HKBJZX3C.js.map} +0 -0
  819. /package/dist/{chunk-M4QXG5JP.js.map → chunk-HQWJUHR4.js.map} +0 -0
  820. /package/dist/{chunk-4BNV5AAI.js.map → chunk-ITFFA3H2.js.map} +0 -0
  821. /package/dist/{chunk-RB3X6CEE.js.map → chunk-IWGW2E35.js.map} +0 -0
  822. /package/dist/{chunk-O25SH2MA.js.map → chunk-J6KLT7HP.js.map} +0 -0
  823. /package/dist/{chunk-CRG24BGI.js.map → chunk-JAGAFEZL.js.map} +0 -0
  824. /package/dist/{chunk-RDCHT2WN.js.map → chunk-JE5GEWTG.js.map} +0 -0
  825. /package/dist/{chunk-FLDLUAHW.js.map → chunk-JE6GQB5J.js.map} +0 -0
  826. /package/dist/{chunk-N23GCN5U.js.map → chunk-JFLFZLOA.js.map} +0 -0
  827. /package/dist/{chunk-35443PF6.js.map → chunk-JIRZ27RI.js.map} +0 -0
  828. /package/dist/{chunk-5MW7OYBM.js.map → chunk-JSGVYOMN.js.map} +0 -0
  829. /package/dist/{chunk-RNIU447I.js.map → chunk-JU3FRRO2.js.map} +0 -0
  830. /package/dist/{chunk-WOAXKWAB.js.map → chunk-K4A3JDYQ.js.map} +0 -0
  831. /package/dist/{chunk-HM2JJNUE.js.map → chunk-K6LNHHSH.js.map} +0 -0
  832. /package/dist/{chunk-NR5TW4AH.js.map → chunk-K7MQP2KT.js.map} +0 -0
  833. /package/dist/{chunk-2OWKL4CC.js.map → chunk-KCDNOMMT.js.map} +0 -0
  834. /package/dist/{chunk-O2DLEAUP.js.map → chunk-KHOAXZW2.js.map} +0 -0
  835. /package/dist/{chunk-W5TI46QN.js.map → chunk-KQZGUHYZ.js.map} +0 -0
  836. /package/dist/{chunk-2K7WPHI3.js.map → chunk-KW3H5FUS.js.map} +0 -0
  837. /package/dist/{chunk-7D2C4LK2.js.map → chunk-LCWGNDTH.js.map} +0 -0
  838. /package/dist/{chunk-FNRPQE2D.js.map → chunk-LF3EVXMF.js.map} +0 -0
  839. /package/dist/{chunk-MCJRHF7Z.js.map → chunk-LGCRL7DK.js.map} +0 -0
  840. /package/dist/{chunk-JK5UJM4Y.js.map → chunk-LODMNSLR.js.map} +0 -0
  841. /package/dist/{chunk-YUXDVW62.js.map → chunk-M65ZNPLO.js.map} +0 -0
  842. /package/dist/{chunk-URHX4FAQ.js.map → chunk-MKLIMY3D.js.map} +0 -0
  843. /package/dist/{chunk-2FM5SUQV.js.map → chunk-MM5XSAVE.js.map} +0 -0
  844. /package/dist/{chunk-LXT3X33C.js.map → chunk-NCB4GBRL.js.map} +0 -0
  845. /package/dist/{chunk-FNO5TWBJ.js.map → chunk-NCEQWEXT.js.map} +0 -0
  846. /package/dist/{chunk-FWPFCK4D.js.map → chunk-NDHDBOUH.js.map} +0 -0
  847. /package/dist/{chunk-WRCLYSTX.js.map → chunk-NFGIA2ZV.js.map} +0 -0
  848. /package/dist/{chunk-VPPIODKX.js.map → chunk-NQ7NMCRI.js.map} +0 -0
  849. /package/dist/{chunk-YMTZN54Q.js.map → chunk-NRSVI23L.js.map} +0 -0
  850. /package/dist/{chunk-2622YFM6.js.map → chunk-NSVSC6ZC.js.map} +0 -0
  851. /package/dist/{chunk-Z43N7ASP.js.map → chunk-NU55QUMO.js.map} +0 -0
  852. /package/dist/{chunk-66O55OZI.js.map → chunk-NYFGFELX.js.map} +0 -0
  853. /package/dist/{chunk-JXECOCNA.js.map → chunk-P6Q2O3TU.js.map} +0 -0
  854. /package/dist/{chunk-RTEY5COP.js.map → chunk-PAICZOL5.js.map} +0 -0
  855. /package/dist/{chunk-ZN6YATOG.js.map → chunk-PAT2BQOQ.js.map} +0 -0
  856. /package/dist/{chunk-TZBOWSAM.js.map → chunk-PICOOZLX.js.map} +0 -0
  857. /package/dist/{chunk-JJJM75XF.js.map → chunk-PNDYAIKM.js.map} +0 -0
  858. /package/dist/{chunk-EJYJLVPK.js.map → chunk-PRLYYKMG.js.map} +0 -0
  859. /package/dist/{chunk-4GB46HLK.js.map → chunk-PTONBPZL.js.map} +0 -0
  860. /package/dist/{chunk-FNG33MKA.js.map → chunk-QDELBNL3.js.map} +0 -0
  861. /package/dist/{chunk-DSF4VT7L.js.map → chunk-QEI5DC6S.js.map} +0 -0
  862. /package/dist/{chunk-VJ2BNJ5M.js.map → chunk-QMELMQPA.js.map} +0 -0
  863. /package/dist/{chunk-HDJQDMHB.js.map → chunk-QMHS6ZDI.js.map} +0 -0
  864. /package/dist/{chunk-2WVHZIWP.js.map → chunk-QSRZOXQI.js.map} +0 -0
  865. /package/dist/{chunk-C3LZ3OGJ.js.map → chunk-R2FUQV24.js.map} +0 -0
  866. /package/dist/{chunk-GOWBYHYW.js.map → chunk-R6SBP5M5.js.map} +0 -0
  867. /package/dist/{chunk-HWSS6C7C.js.map → chunk-RDFPM2AQ.js.map} +0 -0
  868. /package/dist/{chunk-4RPFI474.js.map → chunk-RSDYS5B3.js.map} +0 -0
  869. /package/dist/{chunk-X53F33KA.js.map → chunk-RWXYND4H.js.map} +0 -0
  870. /package/dist/{chunk-4NPPO63U.js.map → chunk-RZ2VZ7SL.js.map} +0 -0
  871. /package/dist/{chunk-ORRI6FMN.js.map → chunk-S4IXC2V3.js.map} +0 -0
  872. /package/dist/{chunk-MXCIUKTQ.js.map → chunk-SDBBJ6FG.js.map} +0 -0
  873. /package/dist/{chunk-UMNXSQ7I.js.map → chunk-SNBAMWI5.js.map} +0 -0
  874. /package/dist/{chunk-LP3JCXER.js.map → chunk-SNW5MJ6I.js.map} +0 -0
  875. /package/dist/{chunk-5OBGW3FG.js.map → chunk-STTULW2K.js.map} +0 -0
  876. /package/dist/{chunk-3CTQZDSD.js.map → chunk-TCNTIGMY.js.map} +0 -0
  877. /package/dist/{chunk-Y6C4MYZE.js.map → chunk-TNQDSTIA.js.map} +0 -0
  878. /package/dist/{chunk-6RLCBNDV.js.map → chunk-TPVSHO75.js.map} +0 -0
  879. /package/dist/{chunk-BUPDBEBA.js.map → chunk-TTJTMDLI.js.map} +0 -0
  880. /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
  881. /package/dist/{chunk-MLQYIJTO.js.map → chunk-U6W2RY3Z.js.map} +0 -0
  882. /package/dist/{chunk-4WF6ZLIW.js.map → chunk-UGPRBJWB.js.map} +0 -0
  883. /package/dist/{chunk-Y6G4I42P.js.map → chunk-VEEG4UXZ.js.map} +0 -0
  884. /package/dist/{chunk-IRD45DRW.js.map → chunk-VOJBLBXE.js.map} +0 -0
  885. /package/dist/{chunk-KHPL2J3B.js.map → chunk-VPAOVEI2.js.map} +0 -0
  886. /package/dist/{chunk-DYGWKZ7T.js.map → chunk-VWJEM2ER.js.map} +0 -0
  887. /package/dist/{chunk-FERUQ7OB.js.map → chunk-VYA4QWQL.js.map} +0 -0
  888. /package/dist/{chunk-UKX3MPB7.js.map → chunk-VYV3JOV5.js.map} +0 -0
  889. /package/dist/{chunk-B7CNP5HW.js.map → chunk-WV62BSWA.js.map} +0 -0
  890. /package/dist/{chunk-IWEUSZY3.js.map → chunk-X66E5WSX.js.map} +0 -0
  891. /package/dist/{chunk-OJ2XR3WH.js.map → chunk-XB7HYOMM.js.map} +0 -0
  892. /package/dist/{chunk-H6AWKLOV.js.map → chunk-XBLFK2FL.js.map} +0 -0
  893. /package/dist/{chunk-5HDYTTE7.js.map → chunk-XHA2NXLD.js.map} +0 -0
  894. /package/dist/{chunk-F4KYBBTY.js.map → chunk-XLXMJ6X2.js.map} +0 -0
  895. /package/dist/{chunk-SCZABICW.js.map → chunk-XO4ZUHVH.js.map} +0 -0
  896. /package/dist/{chunk-PARTZ7XI.js.map → chunk-XP522FFM.js.map} +0 -0
  897. /package/dist/{chunk-MBHWVRV5.js.map → chunk-XVZG52CM.js.map} +0 -0
  898. /package/dist/{chunk-TGXCG62P.js.map → chunk-XXL4PM4M.js.map} +0 -0
  899. /package/dist/{chunk-YKEO6UHN.js.map → chunk-XZJM6EPC.js.map} +0 -0
  900. /package/dist/{chunk-YTY7TD7S.js.map → chunk-XZY7O7JJ.js.map} +0 -0
  901. /package/dist/{chunk-WZNTZX5N.js.map → chunk-Y2UXX5IQ.js.map} +0 -0
  902. /package/dist/{chunk-QOLIBVGS.js.map → chunk-YGYQC7MT.js.map} +0 -0
  903. /package/dist/{chunk-THMT3G3L.js.map → chunk-YLXQWYOG.js.map} +0 -0
  904. /package/dist/{chunk-M4KVKQRN.js.map → chunk-YPIVLPXF.js.map} +0 -0
  905. /package/dist/{chunk-57FZM6GH.js.map → chunk-YRUX7XMQ.js.map} +0 -0
  906. /package/dist/{chunk-M2Q5CLPU.js.map → chunk-YTXZUTLF.js.map} +0 -0
  907. /package/dist/{chunk-ZWCYSAI5.js.map → chunk-YWJDUJAR.js.map} +0 -0
  908. /package/dist/{chunk-S36NC22G.js.map → chunk-Z2NN53E5.js.map} +0 -0
  909. /package/dist/{chunk-GC56IWIZ.js.map → chunk-Z4DKVLYG.js.map} +0 -0
  910. /package/dist/{chunk-U4QUDFPJ.js.map → chunk-Z4O3F6KU.js.map} +0 -0
  911. /package/dist/{chunk-JC22FNFA.js.map → chunk-Z6T5SXST.js.map} +0 -0
  912. /package/dist/{chunk-TXEN3QJ4.js.map → chunk-ZC5HDBQO.js.map} +0 -0
  913. /package/dist/{chunk-LEHMWJNZ.js.map → chunk-ZEYUSS3W.js.map} +0 -0
  914. /package/dist/{chunk-4WNFOBTH.js.map → chunk-ZKWVCSAB.js.map} +0 -0
  915. /package/dist/{chunk-GEB4WSZH.js.map → chunk-ZNBLGS66.js.map} +0 -0
  916. /package/dist/native/chunks/{chunk-ONXKFA5Z.js.map → chunk-A2QNZ4VK.js.map} +0 -0
  917. /package/dist/native/chunks/{chunk-X6RQGKGF.js.map → chunk-BST5DUUD.js.map} +0 -0
  918. /package/dist/native/chunks/{chunk-GUBTMR2K.js.map → chunk-EDYZEMVD.js.map} +0 -0
  919. /package/dist/native/chunks/{chunk-SZF56GVJ.js.map → chunk-LECBJD35.js.map} +0 -0
  920. /package/dist/native/chunks/{chunk-JBYDLWQA.js.map → chunk-MTRRGDBQ.js.map} +0 -0
  921. /package/dist/native/chunks/{chunk-IMGBBIMT.js.map → chunk-PN7C2BEY.js.map} +0 -0
  922. /package/dist/native/chunks/{chunk-4ZAULIDG.js.map → chunk-S4F364X4.js.map} +0 -0
  923. /package/dist/native/chunks/{chunk-5IASLIBI.js.map → chunk-VJFKRXY2.js.map} +0 -0
@@ -0,0 +1,86 @@
1
+ # NumberField
2
+
3
+ ## Purpose
4
+
5
+ A **digits-only** numeric input whose value is a `number | null`. For the
6
+ counts, durations and limits settings forms are full of — "prepare in 15 min",
7
+ "keep for 30 days" — where a plain text input lets letters in and a
8
+ `type="number"` field brings scroll-wheel surprises, `e`, `-` and a value that is
9
+ a string.
10
+
11
+ - `inputMode="numeric"` on the `<input>` itself, so a phone opens its number pad.
12
+ - A non-digit keystroke never reaches the field; a paste keeps only its digits
13
+ (`"1.500 min"` → `1500`).
14
+ - `suffix` — the unit — is drawn **inside** the field's border, at its end.
15
+ - ArrowUp / ArrowDown move by `step`, never past `min` / `max`.
16
+ - An empty field is `null`. Never `0`, never `NaN`: "cleared" and "zero" stay
17
+ two different answers.
18
+
19
+ Built on [`Input`](../Input/Input.md), so it takes the field radius, height,
20
+ border, variants and sizes like every other field.
21
+
22
+ ## Usage
23
+
24
+ ```tsx
25
+ import { NumberField } from '@12-apps/ui/form/NumberField';
26
+
27
+ const [minutes, setMinutes] = useState<number | null>(15);
28
+
29
+ <NumberField
30
+ label="Preparation time"
31
+ value={minutes}
32
+ onChange={setMinutes}
33
+ min={1}
34
+ max={120}
35
+ step={5}
36
+ suffix="min"
37
+ helperText="Between 1 and 120"
38
+ />
39
+ ```
40
+
41
+ ## Props
42
+
43
+ Everything [`Input`](../Input/Input.md) takes (`label`, `helperText`, `error`,
44
+ `size`, `variant`, `disabled`, `placeholder`, `data-testid`, …), except the ones
45
+ this field owns (`value`, `onChange`, `type`, `inputMode`, `pattern`, `min`,
46
+ `max`, `step`, `endAdornment`, `maxLength`), plus:
47
+
48
+ | prop | type | default | effect |
49
+ |---|---|---|---|
50
+ | `value` | `number \| null` | **required** | The value. `null` renders an empty field. |
51
+ | `onChange` | `(value: number \| null) => void` | **required** | Every edit, as a number, or `null` once cleared. Not called when an edit leaves the number unchanged. |
52
+ | `min` | `number` | — | Where ArrowDown stops, where an empty field's first arrow press lands, and what a blur raises a smaller value to. |
53
+ | `max` | `number` | — | Where ArrowUp stops, and what a blur lowers a larger value to. |
54
+ | `step` | `number` | `1` | How far one arrow press moves. |
55
+ | `suffix` | `ReactNode` | — | The unit, inside the field's border. Also read as part of the field's description. |
56
+
57
+ ## Behaviour notes
58
+
59
+ - **Bounds apply to arrows at once, to typing on blur.** Typing `5` on the way to
60
+ `50` must not snap to a minimum of `10` under the reader's fingers; the blur
61
+ brings an out-of-range value back inside.
62
+ - **Digits only means non-negative integers.** There is no minus sign and no
63
+ decimal separator; a field that needs either is not this one.
64
+ - **At most fifteen digits** — the longest run that is always a safe integer, so
65
+ a pasted serial number never becomes a rounded float.
66
+ - From empty, either arrow lands on `min` (or `0`): the first press says "give me
67
+ a number", and the floor is the one both directions agree on.
68
+ - A caller's `onKeyDown` runs first; calling `preventDefault()` in it cancels the
69
+ field's own handling of that key.
70
+
71
+ ## Accessibility
72
+
73
+ - `role="spinbutton"` with `aria-valuenow`, `aria-valuemin` and `aria-valuemax`
74
+ — the arrow keys make it one, and a screen reader then says so, and says where
75
+ in the range the value sits.
76
+ - The suffix has an id and is in the input's `aria-describedby` (after the
77
+ helper text), so "15" is announced with its unit.
78
+ - `inputMode="numeric"` and `pattern="[0-9]*"` bring up the numeric keypad on
79
+ iOS and Android.
80
+
81
+ ## Best practices
82
+
83
+ - Put the unit in `suffix`, not in the label: "Preparation time" + `min` reads
84
+ better than "Preparation time (min)", and the unit stays next to the number.
85
+ - Store `null` as "not set" on the host side. Coercing it to `0` is how a
86
+ cleared field ends up submitting a value nobody chose.
@@ -0,0 +1,88 @@
1
+ import React, { useCallback, useId } from 'react';
2
+
3
+ import { Input } from '../Input';
4
+
5
+ import { clamp, formatValue, isRefusedKey, parseDigits, stepValue } from './NumberField.helpers';
6
+ import type { NumberFieldProps } from './NumberField.types';
7
+
8
+ /**
9
+ * A digits-only number input whose value is a `number | null`.
10
+ *
11
+ * - `inputMode="numeric"` on the `<input>` itself, so a phone opens its number
12
+ * pad (the attribute does nothing anywhere else — see `Input.types.ts`).
13
+ * - A non-digit keystroke never reaches the field, and a paste keeps only its
14
+ * digits: `"1.500 min"` pastes as `1500`.
15
+ * - `suffix` is drawn inside the field's border, and read as its description.
16
+ * - ArrowUp / ArrowDown move by `step`, never past `min` / `max`. Typing may go
17
+ * out of bounds for a moment (typing `5` on the way to `50` must not snap to a
18
+ * minimum of 10); the blur brings it back inside.
19
+ * - Clearing the field reports `null`, not `0` and not `NaN`.
20
+ *
21
+ * `role="spinbutton"` with `aria-valuenow` / `-min` / `-max`, because that is
22
+ * what the arrow keys make it — a screen reader then says so, and says where
23
+ * in the range the value sits.
24
+ */
25
+ export const NumberField = React.forwardRef<HTMLInputElement, NumberFieldProps>(function NumberField(
26
+ props,
27
+ ref,
28
+ ) {
29
+ const {
30
+ value, onChange, min, max, step = 1, suffix, onKeyDown, onBlur, inputProps, id: idProp,
31
+ 'aria-describedby': callerDescribedBy, ...rest
32
+ } = props;
33
+ const generated = useId();
34
+ const id = idProp ?? `number-field-${generated}`;
35
+ const suffixId = `${id}-suffix`;
36
+
37
+ const commit = useCallback(
38
+ (next: number | null) => {
39
+ if (next !== value) onChange(next);
40
+ },
41
+ [value, onChange],
42
+ );
43
+
44
+ const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
45
+ onKeyDown?.(event);
46
+ if (event.defaultPrevented) return;
47
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
48
+ event.preventDefault();
49
+ commit(stepValue(value, event.key === 'ArrowUp' ? 1 : -1, step, { min, max }));
50
+ } else if (isRefusedKey(event)) {
51
+ event.preventDefault();
52
+ }
53
+ };
54
+
55
+ const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {
56
+ if (value !== null) commit(clamp(value, { min, max }));
57
+ onBlur?.(event);
58
+ };
59
+
60
+ const describedBy = [callerDescribedBy, suffix != null ? suffixId : undefined].filter(Boolean).join(' ');
61
+
62
+ return (
63
+ <Input
64
+ ref={ref}
65
+ {...rest}
66
+ id={id}
67
+ type="text"
68
+ autoComplete="off"
69
+ value={formatValue(value)}
70
+ onChange={(event) => commit(parseDigits(event.target.value))}
71
+ onBlur={handleBlur}
72
+ aria-describedby={describedBy || undefined}
73
+ endAdornment={suffix != null ? <span id={suffixId}>{suffix}</span> : undefined}
74
+ inputProps={{
75
+ ...inputProps,
76
+ inputMode: 'numeric',
77
+ pattern: '[0-9]*',
78
+ role: 'spinbutton',
79
+ 'aria-valuenow': value ?? undefined,
80
+ 'aria-valuemin': min,
81
+ 'aria-valuemax': max,
82
+ onKeyDown: handleKeyDown,
83
+ }}
84
+ />
85
+ );
86
+ });
87
+
88
+ NumberField.displayName = 'NumberField';
@@ -0,0 +1,43 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ import type { InputProps } from '../Input/Input.types';
4
+
5
+ /**
6
+ * What `NumberField` takes over from `Input`: the value and its change are
7
+ * numbers here, not strings, and the element's type, keyboard and trailing
8
+ * slot are the field's own.
9
+ */
10
+ type OwnedInputProps =
11
+ | 'value'
12
+ | 'defaultValue'
13
+ | 'onChange'
14
+ | 'type'
15
+ | 'inputMode'
16
+ | 'pattern'
17
+ | 'min'
18
+ | 'max'
19
+ | 'step'
20
+ | 'endAdornment'
21
+ | 'maxLength';
22
+
23
+ export interface NumberFieldProps extends Omit<InputProps, OwnedInputProps> {
24
+ /** The value. `null` is an empty field — never `0`, never `NaN`. */
25
+ value: number | null;
26
+ /** Every edit, as the number it now reads, or `null` once cleared. */
27
+ onChange: (value: number | null) => void;
28
+ /**
29
+ * The lowest value ArrowDown reaches, and what a blur raises a smaller one
30
+ * to. Digits only, so the field never holds a negative number whatever this
31
+ * says.
32
+ */
33
+ min?: number;
34
+ /** The highest value ArrowUp reaches, and what a blur lowers a larger one to. */
35
+ max?: number;
36
+ /** How far one ArrowUp / ArrowDown moves the value. Defaults to 1. */
37
+ step?: number;
38
+ /**
39
+ * The unit, drawn INSIDE the field's border at its end — "min", "%", "kg".
40
+ * Also read to screen readers as part of the field's description.
41
+ */
42
+ suffix?: ReactNode;
43
+ }
@@ -0,0 +1,2 @@
1
+ export { NumberField } from './NumberField';
2
+ export type { NumberFieldProps } from './NumberField.types';
@@ -0,0 +1,51 @@
1
+ # NumberField Test Status Tracking
2
+
3
+ ## Test Files Status
4
+
5
+ - [x] NumberField.test.stories.tsx created
6
+ - [x] `__tests__/NumberField.test.tsx` (Vitest: helpers + component)
7
+ - [x] Core categories implemented (interaction, keyboard, screen reader, visual/layout, edge cases)
8
+
9
+ ## Storybook Tests Status
10
+
11
+ ### Test Results
12
+
13
+ | Test Name | Status | Pass/Fail | Notes |
14
+ | -------------------------------- | ------ | --------- | ------------------------------------------------------- |
15
+ | Typing keeps digits only | PASS | Pass | `1a2-3.e` lands as `123` |
16
+ | Paste keeps digits only | PASS | Pass | `1.500 min` reports `1500` |
17
+ | Arrows step within bounds | PASS | Pass | step 5, clamped to 5–20; `aria-valuenow` follows |
18
+ | Clearing reports null | PASS | Pass | reported value is `null`, input empty |
19
+ | Blur clamps typed value | PASS | Pass | typed `5` with min 10 becomes `10` on blur |
20
+ | Suffix inside the border | PASS | Pass | suffix rect inside `.MuiInputBase-root`, right of input |
21
+ | Numeric spinbutton | PASS | Pass | `inputmode`, `aria-value*`, suffix in describedby |
22
+
23
+ Legend: Pending | Running | PASS | FAIL
24
+
25
+ ## Static Stories Status
26
+
27
+ - [x] Default story
28
+ - [x] WithSuffix, WithBounds
29
+ - [x] Empty state story (`null`)
30
+ - [x] Error state story
31
+ - [x] Disabled state story
32
+ - [x] Sizes
33
+ - [x] Edge cases (fifteen digits, long suffix)
34
+
35
+ ## Lint Status
36
+
37
+ - [x] No lint errors
38
+ - [x] No warnings
39
+
40
+ ## TypeCheck Status
41
+
42
+ - [x] No type errors
43
+ - [x] All props properly typed
44
+
45
+ ## Overall Component Status
46
+
47
+ - [x] All tests passing
48
+ - [x] Lint clean
49
+ - [x] TypeCheck clean
50
+ - [x] Stories working
51
+ - [ ] Ready for production (pending review)
@@ -0,0 +1,42 @@
1
+ # NumberField
2
+
3
+ A digits-only numeric input over `Input` whose value is `number | null` (`null`
4
+ is an empty field). `inputMode="numeric"` on the `<input>`, non-digit keystrokes
5
+ refused and pastes reduced to their digits, a `suffix` drawn inside the field,
6
+ and ArrowUp / ArrowDown stepping by `step` within `min` / `max`. Built for the
7
+ `layout/SettingCard` family's forms (FUT-2823) but independent of it.
8
+
9
+ ## Props
10
+
11
+ - **value** — the number, or `null` for an empty field.
12
+ - **onChange** — every edit as a number, or `null` once cleared.
13
+ - **min** — floor for arrows and for the blur clamp.
14
+ - **max** — ceiling for arrows and for the blur clamp.
15
+ - **step** — how far one arrow press moves (default 1).
16
+ - **suffix** — the unit, inside the field border, read as its description.
17
+ - Everything else `Input` takes, minus the props this field owns.
18
+
19
+ ## Lint
20
+
21
+ - Clean (`pnpm lint:files src/components/form/NumberField`), including the
22
+ complexity and flakiness gates.
23
+
24
+ ## Type Errors
25
+
26
+ - None (`pnpm typecheck`, `tsc -p tsconfig.stories.json`).
27
+
28
+ ## Testing Scenarios
29
+
30
+ - Digits-only typing and paste; `null` on clear; arrow stepping and clamping;
31
+ blur clamp; suffix geometry; spinbutton ARIA; caller `onKeyDown` precedence.
32
+
33
+ ## Storybook Tests List
34
+
35
+ - Form/NumberField/Tests → 7 interaction stories.
36
+
37
+ ## Current
38
+
39
+ - 2026-09-26 16:40 BRT — v1 shipped with `Input` gaining a merged `inputProps`
40
+ pass-through (an attribute `Input` does not recognise otherwise lands on the
41
+ text field's root `<div>`). Remaining TODO: none for v1; a host adoption
42
+ follows in the origin host.
@@ -13,6 +13,7 @@ export * from './Input';
13
13
  export * from './InputOTP';
14
14
  export * from './Label';
15
15
  export * from './Menubar';
16
+ export * from './NumberField';
16
17
  export * from './PasswordStrength';
17
18
  export * from './PhoneInput';
18
19
  export * from './RadioGroup';
@@ -0,0 +1,191 @@
1
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react';
2
+
3
+ import { focusFirstTabbable } from '../../feedback/Dialog/Dialog.focus';
4
+
5
+ import type { SettingCardProps, SettingErrorFormatter, SettingSaveResult } from './SettingCard.types';
6
+
7
+ /** The sentence a rejected save shows: the host's, else the copy's fallback. */
8
+ export function saveErrorMessage(
9
+ error: unknown,
10
+ formatError: SettingErrorFormatter | undefined,
11
+ fallback: string,
12
+ ): string {
13
+ return formatError?.(error) ?? fallback;
14
+ }
15
+
16
+ /**
17
+ * Open state that is controlled when `open` is passed and uncontrolled
18
+ * otherwise — the shape MUI's own `useControlled` has, without its dev-only
19
+ * warnings reaching into this package's surface.
20
+ */
21
+ export function useControllableOpen(
22
+ open: boolean | undefined,
23
+ defaultOpen: boolean,
24
+ onOpenChange: ((open: boolean) => void) | undefined,
25
+ ): [boolean, (next: boolean) => void] {
26
+ const [inner, setInner] = useState(defaultOpen);
27
+ const controlled = open !== undefined;
28
+ const value = controlled ? open : inner;
29
+
30
+ const setOpen = useCallback(
31
+ (next: boolean) => {
32
+ if (!controlled) setInner(next);
33
+ onOpenChange?.(next);
34
+ },
35
+ [controlled, onOpenChange],
36
+ );
37
+
38
+ return [value, setOpen];
39
+ }
40
+
41
+ /**
42
+ * Runs a save that may or may not be async and reports how it went.
43
+ *
44
+ * `Promise.resolve().then(save)` rather than `await save()`: it also catches a
45
+ * handler that throws SYNCHRONOUSLY, which an `await` inside `try` would too —
46
+ * but it keeps the pending state visible for one tick even when the handler
47
+ * returns nothing, so a save never "succeeds" in the middle of the click that
48
+ * started it. A sequence id drops the outcome of a run the card has since
49
+ * abandoned (closed, or started again).
50
+ */
51
+ export function useSaveRunner(formatError: SettingErrorFormatter | undefined, fallback: string) {
52
+ const [saving, setSaving] = useState(false);
53
+ const [error, setError] = useState<string | null>(null);
54
+ const seq = useRef(0);
55
+
56
+ useEffect(
57
+ () => () => {
58
+ // Unmounted: whatever is still in flight has nobody left to report to.
59
+ seq.current += 1;
60
+ },
61
+ [],
62
+ );
63
+
64
+ const run = useCallback(
65
+ async (save: () => SettingSaveResult): Promise<boolean> => {
66
+ const mine = (seq.current += 1);
67
+ setSaving(true);
68
+ setError(null);
69
+ try {
70
+ await Promise.resolve().then(save);
71
+ if (seq.current !== mine) return false;
72
+ setSaving(false);
73
+ return true;
74
+ } catch (cause) {
75
+ if (seq.current !== mine) return false;
76
+ setSaving(false);
77
+ setError(saveErrorMessage(cause, formatError, fallback));
78
+ return false;
79
+ }
80
+ },
81
+ [formatError, fallback],
82
+ );
83
+
84
+ const reset = useCallback(() => {
85
+ seq.current += 1;
86
+ setSaving(false);
87
+ setError(null);
88
+ }, []);
89
+
90
+ return { saving, error, run, reset };
91
+ }
92
+
93
+ /**
94
+ * A switch that saves the moment it flips.
95
+ *
96
+ * It shows the flip at once (`pending`) and holds it while the save runs; a
97
+ * success hands back to the host's `checked`, which by then says the same
98
+ * thing, and a failure drops `pending` so the switch returns to what is
99
+ * actually saved. A flip while one is in flight is ignored rather than queued:
100
+ * two racing writes of a boolean have no right answer.
101
+ */
102
+ export function useAsyncSwitch(options: {
103
+ checked: boolean;
104
+ onChange: (checked: boolean) => SettingSaveResult;
105
+ formatError: SettingErrorFormatter | undefined;
106
+ fallback: string;
107
+ }) {
108
+ const { checked, onChange, formatError, fallback } = options;
109
+ const [pending, setPending] = useState<boolean | null>(null);
110
+ const { saving, error, run } = useSaveRunner(formatError, fallback);
111
+
112
+ const flip = useCallback(
113
+ async (next: boolean) => {
114
+ if (saving) return;
115
+ setPending(next);
116
+ await run(() => onChange(next));
117
+ setPending(null);
118
+ },
119
+ [saving, run, onChange],
120
+ );
121
+
122
+ return { shown: pending ?? checked, saving, error, flip };
123
+ }
124
+
125
+ /**
126
+ * Focus follows the card: into it when it opens, back to the trigger when it
127
+ * closes.
128
+ *
129
+ * Inward, it is the Dialog's own rule (`focusFirstTabbable`, FUT-2696): the
130
+ * first tabbable descendant, and a caller's `autoFocus` keeps winning. The
131
+ * card is NOT a trap — it is inline, the rest of the page is still there, and
132
+ * locking Tab inside it would strand a keyboard user who wants to leave
133
+ * mid-edit. What it owes them is the round trip: the Edit trigger unmounts
134
+ * while the card is open, so without the return focus would fall to <body>
135
+ * and the reader would start again from the top of the page.
136
+ *
137
+ * Only a TRANSITION moves focus: a card mounted open (or closed) leaves focus
138
+ * where the page put it.
139
+ */
140
+ export function useFocusHandoff(
141
+ open: boolean,
142
+ body: RefObject<HTMLElement | null>,
143
+ trigger: RefObject<HTMLElement | null>,
144
+ ): void {
145
+ const previous = useRef(open);
146
+
147
+ useLayoutEffect(() => {
148
+ if (previous.current === open) return;
149
+ previous.current = open;
150
+ if (open && body.current) focusFirstTabbable(body.current);
151
+ if (!open) trigger.current?.focus();
152
+ }, [open, body, trigger]);
153
+ }
154
+
155
+ /**
156
+ * Everything an editable card DOES, apart from how it looks: its open state,
157
+ * the save and its outcome, Cancel, and where focus goes.
158
+ */
159
+ export function useSettingCard(props: SettingCardProps) {
160
+ const { copy, onSave, onCancel, open: openProp, defaultOpen = false, onOpenChange, formatError } = props;
161
+ const disabled = props.disabled ?? false;
162
+ const saveDisabled = props.saveDisabled ?? false;
163
+ const [open, setOpen] = useControllableOpen(openProp, defaultOpen, onOpenChange);
164
+ const { saving, error, run, reset } = useSaveRunner(formatError, copy.saveFailed);
165
+ const bodyRef = useRef<HTMLDivElement>(null);
166
+ const editRef = useRef<HTMLButtonElement>(null);
167
+ useFocusHandoff(open, bodyRef, editRef);
168
+
169
+ // However the card closed — Cancel, a save, or a controlling host — the
170
+ // next opening starts without the last one's error.
171
+ useEffect(() => {
172
+ if (!open) reset();
173
+ }, [open, reset]);
174
+
175
+ const openCard = useCallback(() => setOpen(true), [setOpen]);
176
+
177
+ const cancel = useCallback(() => {
178
+ if (saving) return;
179
+ setOpen(false);
180
+ onCancel?.();
181
+ }, [saving, setOpen, onCancel]);
182
+
183
+ const save = useCallback(() => {
184
+ if (saving || saveDisabled) return;
185
+ void run(onSave).then((saved) => {
186
+ if (saved) setOpen(false);
187
+ });
188
+ }, [saving, saveDisabled, run, onSave, setOpen]);
189
+
190
+ return { open, disabled, saveDisabled, saving, error, bodyRef, editRef, openCard, cancel, save };
191
+ }
@@ -0,0 +1,121 @@
1
+ # SettingCard
2
+
3
+ ## Purpose
4
+
5
+ One setting, summarised while closed and edited **in place**. A settings screen
6
+ built from these reads as a list of answers ("Sign out after 30 minutes") with
7
+ one Edit each, instead of a wall of open forms.
8
+
9
+ - **Closed:** title, a status pill, a one-line summary, and Edit.
10
+ - **Open:** Edit opens the card where it is — no dialog, no route change —
11
+ around the host's form (`children`), a collapsible "learn more" disclosure and
12
+ Cancel / Save.
13
+
14
+ The card knows nothing about what it edits. The form, the draft and the save
15
+ are the host's; the card owns the open/closed state, the save's pending and
16
+ failed states, and focus.
17
+
18
+ Part of the `layout/SettingCard` family, with
19
+ [`SettingToggle`](./SettingToggle.md), [`SettingGroup`](./SettingGroup.md) and
20
+ [`SettingGrid`](./SettingGrid.md).
21
+
22
+ ## Usage
23
+
24
+ ```tsx
25
+ import { SettingCard } from '@12-apps/ui/layout/SettingCard';
26
+ import { NumberField } from '@12-apps/ui/form/NumberField';
27
+ import { useLocaleCopy } from '@12-apps/i18n/react';
28
+ import { SETTING_CARD_COPY } from '@12-apps/ui/locales';
29
+
30
+ const copy = useLocaleCopy(SETTING_CARD_COPY);
31
+ const [draft, setDraft] = useState<number | null>(saved);
32
+
33
+ <SettingCard
34
+ copy={copy}
35
+ title="Session timeout"
36
+ summary={`Sign out after ${saved} minutes`}
37
+ status={{ label: 'On', color: 'success' }}
38
+ learnMore="A shorter timeout protects shared devices."
39
+ onCancel={() => setDraft(saved)}
40
+ onSave={() => api.saveTimeout(draft)} // may return a promise
41
+ >
42
+ <NumberField label="Minutes" value={draft} onChange={setDraft} min={5} max={240} suffix="min" />
43
+ </SettingCard>
44
+ ```
45
+
46
+ ## Props
47
+
48
+ | prop | type | default | effect |
49
+ |---|---|---|---|
50
+ | `copy` | `SettingCardCopy` | **required** | Edit / Cancel / Save / Saving / Learn more / the fallback error. No shipped default — pass `EN_US_SETTING_CARD_COPY`, `PT_BR_SETTING_CARD_COPY`, or `SETTING_CARD_COPY` through `useLocaleCopy`. |
51
+ | `title` | `string` | **required** | The setting's name. A heading, and the accessible name of the card's region. |
52
+ | `onSave` | `() => void \| Promise<unknown>` | **required** | Persist the draft. See *Saving* below. |
53
+ | `children` | `ReactNode` | **required** | The form. Rendered only while open. |
54
+ | `summary` | `ReactNode` | — | The one line a closed card shows. Ends in an ellipsis rather than wrapping. |
55
+ | `status` | `{ label: string; color?: ColorValue }` | — | The pill beside the title. `label` is always shown, so colour never carries the meaning alone. |
56
+ | `learnMore` | `ReactNode` | — | Longer explanation behind a disclosure in the open card. Omit for no disclosure. |
57
+ | `onCancel` | `() => void` | — | The card closed without saving. Reset the host's draft here. |
58
+ | `open` / `defaultOpen` / `onOpenChange` | | uncontrolled, closed | Controlled or uncontrolled open state. `onOpenChange` hears Edit, Cancel, Escape and a successful save. |
59
+ | `disabled` | `boolean` | `false` | Disables Edit. |
60
+ | `saveDisabled` | `boolean` | `false` | Disables Save — for a draft the host knows is invalid. |
61
+ | `formatError` | `(error: unknown) => string \| undefined` | — | The sentence to show for a rejected save. `undefined` falls back to `copy.saveFailed`. |
62
+ | `headingLevel` | `'h2' … 'h6'` | `'h3'` | Where the title sits in the page outline. |
63
+ | `icon` | `ReactNode` | — | A decorative glyph before the title. |
64
+ | `dataTestId` | `string` | — | Root test id; parts derive `-edit`, `-save`, `-cancel`, `-summary`, `-status`, `-error`, `-saving`, `-body`, `-learn-more`, `-title`. |
65
+ | `className`, `sx` | | | Styling hooks on the root `<section>`. |
66
+
67
+ ## Saving
68
+
69
+ - **Pending.** While the promise `onSave` returned is pending, Save shows a
70
+ spinner and `copy.saving`, the card is `aria-busy`, Cancel is disabled and
71
+ further presses of Save are ignored — `onSave` runs once.
72
+ - **Resolved.** The card closes and focus returns to Edit. Update `summary` from
73
+ the saved value in the same handler.
74
+ - **Rejected** (or `onSave` throws). The card **stays open**, the draft is
75
+ untouched, and the error appears in a `role="alert"` line that Save is
76
+ described by. The card never prints `error.message` by itself — that string
77
+ is written for a developer; map it with `formatError`.
78
+
79
+ Save is `aria-disabled`, not `disabled`, while pending: a disabled button drops
80
+ the focus it holds, and a keyboard user whose save then failed would be sent
81
+ back to the top of the page.
82
+
83
+ ## Cancelling
84
+
85
+ Cancel (or Escape inside the open card) closes the card and calls `onCancel`.
86
+ `children` unmount on close, so any **uncontrolled** state inside the form is
87
+ discarded by construction; a controlled draft is the host's to reset in
88
+ `onCancel`, as in the example above.
89
+
90
+ ## In a grid
91
+
92
+ An open card sets `grid-column: 1 / -1` on itself and carries
93
+ `data-setting-card-open`, so inside a [`SettingGrid`](./SettingGrid.md) — or any
94
+ CSS grid — its form gets the whole row. `height: 100%` lets it match the other
95
+ cards in its row while closed.
96
+
97
+ ## Accessibility
98
+
99
+ - The root is a `<section>` labelled by the title; the title is a real heading
100
+ (`headingLevel`).
101
+ - Edit's accessible name is `copy.edit` **plus the title** ("Edit Session
102
+ timeout"), so a grid of cards is not a list of identical buttons.
103
+ - **Focus round trip.** Opening moves focus to the first tabbable element in the
104
+ form — the rule `Dialog` uses (`focusFirstTabbable`, FUT-2696), so a field's
105
+ own `autoFocus` still wins. Closing, by any path, returns focus to Edit. A
106
+ card mounted open does not take focus.
107
+ - **No focus trap.** The card is inline and the page around it stays usable; a
108
+ trap would strand a keyboard user who wants to leave mid-edit. Escape
109
+ cancels.
110
+ - The "learn more" trigger owns `aria-expanded` / `aria-controls`; the region is
111
+ kept mounted so `aria-controls` always resolves.
112
+ - The save failure is `role="alert"`, announced without moving focus.
113
+
114
+ ## Best practices
115
+
116
+ - Keep `summary` to the current **value** in words, not a description of the
117
+ setting — the title already says what it is.
118
+ - Use `status` for a state that changes how the summary reads ("Off",
119
+ "Managed by your organisation"); skip it when the summary says it all.
120
+ - A setting that is a single on/off is a [`SettingToggle`](./SettingToggle.md),
121
+ not a card with a switch inside.
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The setting-card family's lengths, in design px. The web reads every one
3
+ * through `rem(theme, n)`, so they scale with the host's type scale.
4
+ */
5
+ export const SETTING_CARD = {
6
+ /** Between the icon and the title. */
7
+ iconGap: 12,
8
+ /** The spinner beside a switch while its flip is saving. */
9
+ spinnerSize: 16,
10
+ /** How far a group's dependent rows sit in from its main switch. */
11
+ groupIndent: 24,
12
+ /** The rule down the left of a group's dependent rows. */
13
+ groupRuleWidth: 2,
14
+ /** The narrowest a grid column gets by default. */
15
+ gridMinColumnWidth: 320,
16
+ } as const;
17
+
18
+ /** The grid's default gap, in theme SPACING units (not px): what `sx`'s `gap: 2` means. */
19
+ export const SETTING_GRID_GAP_UNITS = 2;
20
+
21
+ /** How faded a group's dependent rows are while the main switch is off. */
22
+ export const SETTING_GROUP_INACTIVE_OPACITY = 0.5;