@12-apps/ui 6.30.1 → 6.30.3

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 (661) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +43 -5
  3. package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
  4. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +2 -2
  5. package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -3
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -5
  7. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +3 -3
  8. package/dist/_internal/components/data-display/Badge/Badge.animations.js +2 -2
  9. package/dist/_internal/components/data-display/Badge/Badge.js +6 -6
  10. package/dist/_internal/components/data-display/Badge/Badge.metrics.js +2 -2
  11. package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
  12. package/dist/_internal/components/data-display/Badge/Badge.variants.js +2 -2
  13. package/dist/_internal/components/data-display/Badge/BadgeContent.js +4 -4
  14. package/dist/_internal/components/data-display/Banner/Banner.js +2 -2
  15. package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -2
  16. package/dist/_internal/components/data-display/CardKit/CardKebab.js +6 -6
  17. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
  18. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +11 -11
  19. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -7
  20. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +2 -2
  21. package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
  22. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
  23. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +2 -2
  24. package/dist/_internal/components/data-display/Chart/Chart.js +6 -6
  25. package/dist/_internal/components/data-display/Chart/SpecChart.js +9 -9
  26. package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
  27. package/dist/_internal/components/data-display/Chart/chart-internals.js +2 -2
  28. package/dist/_internal/components/data-display/Chart/chart-renderers.js +5 -5
  29. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +5 -5
  30. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +52 -52
  31. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +68 -68
  32. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +8 -8
  33. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +10 -10
  34. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +13 -13
  35. package/dist/_internal/components/data-display/DataViews/base-card.js +7 -7
  36. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +10 -10
  37. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +4 -4
  38. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +9 -9
  39. package/dist/_internal/components/data-display/DataViews/base-list-card.js +14 -14
  40. package/dist/_internal/components/data-display/DataViews/card-surface.js +2 -2
  41. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +11 -11
  42. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +5 -5
  43. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +7 -7
  44. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +13 -13
  45. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +7 -7
  46. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +8 -8
  47. package/dist/_internal/components/data-display/DataViews/data-views-export.js +8 -8
  48. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  49. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +14 -14
  50. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +6 -6
  51. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +49 -49
  52. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +5 -5
  53. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +21 -21
  54. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  55. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +29 -6
  56. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +33 -10
  57. package/dist/_internal/components/data-display/DataViews/data-views-overflow.js +1 -1
  58. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  59. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  60. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +8 -8
  61. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +18 -18
  62. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +20 -20
  63. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +17 -17
  64. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +8 -8
  65. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  66. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +5 -5
  67. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +9 -9
  68. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  69. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +5 -5
  70. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -11
  71. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -10
  72. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  73. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +15 -15
  74. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  75. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  76. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  77. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  78. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  79. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -9
  80. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  81. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  82. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  83. package/dist/_internal/components/data-display/Progress/Progress.js +5 -5
  84. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +3 -3
  85. package/dist/_internal/components/data-display/Progress/Progress.styles.js +4 -4
  86. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
  87. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  88. package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
  89. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +2 -2
  90. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  91. package/dist/_internal/components/data-display/index.js +57 -57
  92. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
  93. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  94. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +8 -8
  95. package/dist/_internal/components/feedback/index.js +14 -14
  96. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  97. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -3
  98. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  99. package/dist/_internal/components/form/Button/Button.js +5 -5
  100. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  101. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  102. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  103. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  104. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  105. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  106. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  107. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  108. package/dist/_internal/components/form/CepField/CepField.js +2 -2
  109. package/dist/_internal/components/form/Checkbox/Checkbox.js +3 -3
  110. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
  111. package/dist/_internal/components/form/Command/Command.js +2 -2
  112. package/dist/_internal/components/form/Command/Command.styles.js +2 -2
  113. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
  114. package/dist/_internal/components/form/Input/Input.js +1 -1
  115. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  116. package/dist/_internal/components/form/Label/Label.js +2 -2
  117. package/dist/_internal/components/form/Label/Label.styles.js +2 -2
  118. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  119. package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
  120. package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
  121. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
  122. package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
  123. package/dist/_internal/components/form/NumberField/NumberField.js +21 -0
  124. package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
  125. package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
  126. package/dist/_internal/components/form/Switch/Switch.js +5 -5
  127. package/dist/_internal/components/form/Switch/Switch.parts.js +4 -4
  128. package/dist/_internal/components/form/Switch/Switch.styles.js +3 -3
  129. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  130. package/dist/_internal/components/form/index.js +47 -41
  131. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  132. package/dist/_internal/components/form/total-form/Fields/CepField.js +3 -3
  133. package/dist/_internal/components/form/total-form/Fields/TextField.js +2 -2
  134. package/dist/_internal/components/form/total-form/Fields/index.js +20 -20
  135. package/dist/_internal/components/form/total-form/SubmitButton.js +6 -6
  136. package/dist/_internal/components/index.js +194 -153
  137. package/dist/_internal/components/layout/Box/Box.js +5 -5
  138. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +1 -1
  139. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js +8 -0
  140. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js.map +1 -0
  141. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
  142. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
  143. package/dist/_internal/components/layout/SettingCard/SettingCard.js +44 -0
  144. package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
  145. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
  146. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
  147. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +49 -0
  148. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
  149. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js +8 -0
  150. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js.map +1 -0
  151. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +35 -0
  152. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
  153. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
  154. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
  155. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +46 -0
  156. package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
  157. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
  158. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
  159. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +55 -0
  160. package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
  161. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +53 -0
  162. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
  163. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +55 -0
  164. package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
  165. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +3 -3
  166. package/dist/_internal/components/layout/Stack/Stack.js +6 -6
  167. package/dist/_internal/components/layout/index.js +74 -12
  168. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +9 -9
  169. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  170. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  171. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  172. package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
  173. package/dist/_internal/components/navigation/index.js +26 -26
  174. package/dist/_internal/components/typography/Heading/Heading.js +5 -5
  175. package/dist/_internal/components/typography/Heading/Heading.metrics.js +3 -3
  176. package/dist/_internal/components/typography/Heading/Heading.styles.js +4 -4
  177. package/dist/_internal/components/typography/Paragraph/Paragraph.js +3 -3
  178. package/dist/_internal/components/typography/Text/Text.js +4 -4
  179. package/dist/_internal/components/typography/Text/Text.metrics.js +3 -3
  180. package/dist/_internal/components/typography/index.js +11 -11
  181. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +3 -3
  182. package/dist/_internal/components/utility/InstallPrompt/usePwaInstall.js +2 -2
  183. package/dist/_internal/components/utility/index.js +15 -15
  184. package/dist/_internal/en-US.data-display.js +2 -2
  185. package/dist/_internal/en-US.layout.js +5 -1
  186. package/dist/_internal/icons/Icon.js +6 -6
  187. package/dist/_internal/provider/UiProvider.js +4 -4
  188. package/dist/_internal/provider/mui-bridge.js +3 -3
  189. package/dist/_internal/provider/use-ui-theme.js +4 -4
  190. package/dist/_internal/pt-BR.data-display.js +2 -2
  191. package/dist/_internal/pt-BR.layout.js +5 -1
  192. package/dist/_internal/social-login-button/social-login-button.js +11 -11
  193. package/dist/_internal/tokens/theme.js +2 -2
  194. package/dist/_internal/user-avatar/user-avatar.js +11 -11
  195. package/dist/charts.js +15 -15
  196. package/dist/{chunk-TSEWUY4V.js → chunk-23LZNANO.js} +2 -2
  197. package/dist/{chunk-K2EHH7TC.js → chunk-2CJXYSOE.js} +7 -7
  198. package/dist/{chunk-HGJHZ5PE.js → chunk-2DHVWNTO.js} +7 -7
  199. package/dist/{chunk-K2JH7QPR.js → chunk-2F2HPQNQ.js} +3 -3
  200. package/dist/chunk-2GTORM5E.js +1 -0
  201. package/dist/chunk-2GTORM5E.js.map +1 -0
  202. package/dist/{chunk-C5YBXQTK.js → chunk-2QJKWH7Q.js} +3 -3
  203. package/dist/{chunk-W3FAKT3D.js → chunk-2SWQ6HIK.js} +4 -4
  204. package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
  205. package/dist/chunk-33L26P4J.js +27 -0
  206. package/dist/chunk-33L26P4J.js.map +1 -0
  207. package/dist/{chunk-3PUOLOEP.js → chunk-37L6O266.js} +2 -2
  208. package/dist/{chunk-EVXFEXBS.js → chunk-3ELEPGCP.js} +2 -2
  209. package/dist/{chunk-RVGG5YJY.js → chunk-3HJLJFLA.js} +2 -2
  210. package/dist/chunk-3U7WKBMH.js +27 -0
  211. package/dist/chunk-3U7WKBMH.js.map +1 -0
  212. package/dist/{chunk-VESIQYBF.js → chunk-3ZTC2VEO.js} +9 -9
  213. package/dist/{chunk-46UPILLK.js → chunk-4ETQRBZC.js} +4 -4
  214. package/dist/chunk-4HDP2PZD.js +9 -0
  215. package/dist/chunk-4HDP2PZD.js.map +1 -0
  216. package/dist/{chunk-PFZAUMJA.js → chunk-4JGBWPG7.js} +2 -2
  217. package/dist/{chunk-7IKWIWWV.js → chunk-53LG7IT4.js} +11 -11
  218. package/dist/{chunk-S2GDYA6R.js → chunk-5GMHJ7Y5.js} +5 -5
  219. package/dist/{chunk-IABE56TG.js → chunk-5ZOJLYD2.js} +4 -4
  220. package/dist/{chunk-XXE6NTJB.js → chunk-5ZXVYKHU.js} +10 -5
  221. package/dist/chunk-5ZXVYKHU.js.map +1 -0
  222. package/dist/{chunk-4XVH6IWN.js → chunk-66KAONOC.js} +3 -3
  223. package/dist/{chunk-4MXFPDKL.js → chunk-6CAP4STN.js} +4 -4
  224. package/dist/{chunk-C5EFVSBN.js → chunk-6HJLYSBM.js} +2 -2
  225. package/dist/{chunk-CASZGBCA.js → chunk-6P3CRSAW.js} +5 -5
  226. package/dist/chunk-6PPF5WEN.js +30 -0
  227. package/dist/chunk-6PPF5WEN.js.map +1 -0
  228. package/dist/{chunk-Y5UCOBQN.js → chunk-6SK3MTYJ.js} +4 -4
  229. package/dist/{chunk-JQL4GG5L.js → chunk-6VMTF23F.js} +5 -5
  230. package/dist/{chunk-EPRA5QLB.js → chunk-6XUZDJZY.js} +2 -2
  231. package/dist/{chunk-B6IURHSZ.js → chunk-7DNQHMDO.js} +4 -4
  232. package/dist/{chunk-SLMA4UQS.js → chunk-A3TISECJ.js} +3 -3
  233. package/dist/{chunk-FVPN4YKW.js → chunk-ABSHD35E.js} +3 -3
  234. package/dist/chunk-AEMD6JHZ.js +1 -0
  235. package/dist/chunk-AEMD6JHZ.js.map +1 -0
  236. package/dist/{chunk-PQECNGDE.js → chunk-AGYGNNOM.js} +2 -2
  237. package/dist/{chunk-SUTNQG7E.js → chunk-ALU3BH37.js} +4 -4
  238. package/dist/{chunk-MGPA6KTM.js → chunk-AMFP64L3.js} +2 -2
  239. package/dist/{chunk-VEGT5PAD.js → chunk-BAISDZ3L.js} +21 -21
  240. package/dist/chunk-BOWS4U6W.js +1 -0
  241. package/dist/chunk-BOWS4U6W.js.map +1 -0
  242. package/dist/{chunk-CZJLWCEG.js → chunk-BPYPUEM5.js} +2 -2
  243. package/dist/{chunk-3MALHTZQ.js → chunk-C4J7PVVI.js} +3 -3
  244. package/dist/{chunk-7OZBOS75.js → chunk-CK2NTT4S.js} +6 -6
  245. package/dist/{chunk-Q5NAZ7TW.js → chunk-CSGUSHAO.js} +4 -4
  246. package/dist/{chunk-YTYROOLY.js → chunk-D22EGB3T.js} +3 -3
  247. package/dist/{chunk-VNGYJXAU.js → chunk-DBV6DDQI.js} +2 -2
  248. package/dist/{chunk-6PKVHFCK.js → chunk-DCRNBKMY.js} +9 -9
  249. package/dist/{chunk-PMS3H3OO.js → chunk-DF2FFYZ7.js} +4 -4
  250. package/dist/chunk-DG2A4DQU.js +118 -0
  251. package/dist/chunk-DG2A4DQU.js.map +1 -0
  252. package/dist/{chunk-RBGOGTT2.js → chunk-DWZ7FLA7.js} +4 -4
  253. package/dist/{chunk-237NDIT2.js → chunk-E3O72LBJ.js} +2 -2
  254. package/dist/{chunk-OH3YGJT5.js → chunk-EMNGIYH6.js} +5 -5
  255. package/dist/{chunk-XFUNJYFT.js → chunk-EPNUVSNK.js} +7 -7
  256. package/dist/{chunk-35UG2QDB.js → chunk-EUEUZI4L.js} +2 -2
  257. package/dist/{chunk-KUJLZFDW.js → chunk-FCG5YR6T.js} +3 -3
  258. package/dist/{chunk-2UBFDRL7.js → chunk-FCTURAZF.js} +2 -2
  259. package/dist/{chunk-UC6A6ASM.js → chunk-FFQKUTO6.js} +2 -2
  260. package/dist/{chunk-J3ZP6EUS.js → chunk-FNIHELAR.js} +2 -2
  261. package/dist/{chunk-SQV3HPTZ.js → chunk-G76H5PEM.js} +4 -4
  262. package/dist/{chunk-FLIMEQUA.js → chunk-GBX5ACPF.js} +5 -5
  263. package/dist/{chunk-22ZJH7RY.js → chunk-GN26LHNJ.js} +2 -2
  264. package/dist/{chunk-5KFZGB5U.js → chunk-GS7ESED2.js} +2 -2
  265. package/dist/{chunk-FGUK3D54.js → chunk-GZHZ7OTY.js} +3 -3
  266. package/dist/chunk-HALFOXSZ.js +1 -0
  267. package/dist/chunk-HALFOXSZ.js.map +1 -0
  268. package/dist/{chunk-BLBOYCOV.js → chunk-HKV4MQ2W.js} +5 -5
  269. package/dist/{chunk-K4JRHQMI.js → chunk-HMJM6DKA.js} +3 -3
  270. package/dist/{chunk-ZWIDQEJ4.js → chunk-HT7DWIR4.js} +5 -5
  271. package/dist/{chunk-UVD5NFRF.js → chunk-I3PGXMVJ.js} +2 -2
  272. package/dist/{chunk-Z52HVR4J.js → chunk-I4IPGIRF.js} +2 -2
  273. package/dist/{chunk-HR7YTBR7.js → chunk-IASDP44E.js} +4 -4
  274. package/dist/chunk-IAVQXQ3V.js +82 -0
  275. package/dist/chunk-IAVQXQ3V.js.map +1 -0
  276. package/dist/chunk-IC7GHPMK.js +22 -0
  277. package/dist/chunk-IC7GHPMK.js.map +1 -0
  278. package/dist/{chunk-VKH7AENA.js → chunk-IFNJWH55.js} +2 -2
  279. package/dist/{chunk-PUBPZOQJ.js → chunk-IPE5FFFD.js} +2 -2
  280. package/dist/{chunk-HP2ODXNA.js → chunk-IPS55KWK.js} +2 -2
  281. package/dist/{chunk-BILJU2DX.js → chunk-JFOATIMF.js} +5 -5
  282. package/dist/{chunk-MCBG6R5A.js → chunk-JH77UDWB.js} +3 -3
  283. package/dist/{chunk-XYDW5RQB.js → chunk-JTJR63WI.js} +2 -2
  284. package/dist/{chunk-IVVOIDE5.js → chunk-KHVKQPQ5.js} +3 -3
  285. package/dist/chunk-KRR6KK5J.js +117 -0
  286. package/dist/chunk-KRR6KK5J.js.map +1 -0
  287. package/dist/{chunk-T5WNNEP5.js → chunk-KVCS6IEI.js} +2 -2
  288. package/dist/{chunk-HZ6L7WXE.js → chunk-LGOIBC2C.js} +7 -7
  289. package/dist/chunk-LGPQVKHC.js +47 -0
  290. package/dist/chunk-LGPQVKHC.js.map +1 -0
  291. package/dist/{chunk-BKAB4KZK.js → chunk-LKAKYP42.js} +5 -5
  292. package/dist/{chunk-ZPIMPOHV.js → chunk-M7E66OSC.js} +4 -4
  293. package/dist/{chunk-VVXA7T2M.js → chunk-MG6XC5SK.js} +2 -2
  294. package/dist/{chunk-554SVTCN.js → chunk-MKZNP32D.js} +4 -4
  295. package/dist/chunk-MPRZDEKY.js +168 -0
  296. package/dist/chunk-MPRZDEKY.js.map +1 -0
  297. package/dist/{chunk-MSS6IU5X.js → chunk-N6V6BFKD.js} +3 -3
  298. package/dist/{chunk-OLQDB346.js → chunk-NH4XD62U.js} +2 -2
  299. package/dist/{chunk-GH2DC7PS.js → chunk-NPN7JTRM.js} +4 -4
  300. package/dist/{chunk-AIBNBWQU.js → chunk-NR7LSYLM.js} +2 -2
  301. package/dist/{chunk-3XLDTVLC.js → chunk-NU2HND2Y.js} +5 -5
  302. package/dist/{chunk-T2VO32Z2.js → chunk-OG5LJPI3.js} +2 -2
  303. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  304. package/dist/{chunk-URVNHKM2.js → chunk-ON7PRAAC.js} +6 -6
  305. package/dist/{chunk-EZMCWRXO.js → chunk-OTMJBGJA.js} +24 -26
  306. package/dist/chunk-OTMJBGJA.js.map +1 -0
  307. package/dist/{chunk-3TFUAKWJ.js → chunk-OVOSDXFM.js} +2 -2
  308. package/dist/{chunk-SONWG2RT.js → chunk-OW4UEIXA.js} +5 -5
  309. package/dist/{chunk-23FCBIUN.js → chunk-P7FQUGED.js} +8 -8
  310. package/dist/{chunk-V7F53GEO.js → chunk-P7IVAMAU.js} +7 -7
  311. package/dist/{chunk-JYF3HT7M.js → chunk-PD6JRCUT.js} +8 -8
  312. package/dist/chunk-PGGGKYWG.js +1 -0
  313. package/dist/chunk-PGGGKYWG.js.map +1 -0
  314. package/dist/{chunk-B474PL5O.js → chunk-PKFFJAQ6.js} +2 -2
  315. package/dist/{chunk-EUKYQXYU.js → chunk-PLDVEJPR.js} +2 -2
  316. package/dist/{chunk-HT4B2DJU.js → chunk-PZEC5CQA.js} +4 -4
  317. package/dist/chunk-Q4JWWTL4.js +36 -0
  318. package/dist/chunk-Q4JWWTL4.js.map +1 -0
  319. package/dist/chunk-Q6FUSSLK.js +140 -0
  320. package/dist/chunk-Q6FUSSLK.js.map +1 -0
  321. package/dist/{chunk-6FUOUUYO.js → chunk-Q6STVEYJ.js} +4 -4
  322. package/dist/{chunk-6IKX5IIX.js → chunk-Q75SJ35X.js} +5 -5
  323. package/dist/{chunk-WC5XYWTE.js → chunk-QGJBNVC2.js} +2 -2
  324. package/dist/chunk-QGUNUXTT.js +1 -0
  325. package/dist/chunk-QGUNUXTT.js.map +1 -0
  326. package/dist/{chunk-KFZT3PHA.js → chunk-QHJ7FTZK.js} +4 -4
  327. package/dist/{chunk-NUB4T3RQ.js → chunk-QJ6KWJJH.js} +2 -2
  328. package/dist/chunk-R6XVOUNC.js +85 -0
  329. package/dist/chunk-R6XVOUNC.js.map +1 -0
  330. package/dist/{chunk-CZPU5TW3.js → chunk-RFZU5BTG.js} +2 -2
  331. package/dist/chunk-RH4QT7YT.js +74 -0
  332. package/dist/chunk-RH4QT7YT.js.map +1 -0
  333. package/dist/{chunk-JGV66VUK.js → chunk-RLCMVSJZ.js} +2 -2
  334. package/dist/chunk-RN7UJI7S.js +1 -0
  335. package/dist/chunk-RN7UJI7S.js.map +1 -0
  336. package/dist/{chunk-JB67KPGM.js → chunk-RRO2EOJB.js} +4 -4
  337. package/dist/{chunk-JJ3VR7WX.js → chunk-RZLWW3KC.js} +2 -2
  338. package/dist/{chunk-MZQTHSLN.js → chunk-S7HRED4D.js} +2 -2
  339. package/dist/{chunk-EXJBPKGW.js → chunk-SHDIZSN5.js} +5 -5
  340. package/dist/{chunk-GJQYM3PM.js → chunk-SHQWIDD5.js} +4 -4
  341. package/dist/{chunk-L6TCIZFR.js → chunk-SUAGBFYJ.js} +3 -3
  342. package/dist/{chunk-K5V3KCFI.js → chunk-SVBR3GWG.js} +6 -6
  343. package/dist/{chunk-DAPK3ADA.js → chunk-TC3EPGGJ.js} +4 -4
  344. package/dist/{chunk-DEE6IPGI.js → chunk-TJXNVREN.js} +2 -2
  345. package/dist/{chunk-WREIYOXN.js → chunk-TLMLEC4F.js} +7 -7
  346. package/dist/{chunk-57ZSQB5V.js → chunk-TLRTLYVT.js} +2 -2
  347. package/dist/{chunk-DUWF5LUK.js → chunk-TNCCCLLO.js} +4 -4
  348. package/dist/{chunk-TQ6FPOPD.js → chunk-TPKSOHB5.js} +5 -2
  349. package/dist/{chunk-TQ6FPOPD.js.map → chunk-TPKSOHB5.js.map} +1 -1
  350. package/dist/{chunk-JPVDZXXX.js → chunk-U5RQBHRY.js} +2 -2
  351. package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
  352. package/dist/chunk-V32X24SH.js +87 -0
  353. package/dist/chunk-V32X24SH.js.map +1 -0
  354. package/dist/{chunk-J4W4TQPC.js → chunk-V5P5Q6HM.js} +6 -6
  355. package/dist/{chunk-DQOLW4B5.js → chunk-VBMV2W4K.js} +3 -3
  356. package/dist/{chunk-57W2C7HY.js → chunk-VOHT6ZX3.js} +8 -8
  357. package/dist/{chunk-QYNCPS5W.js → chunk-WBKWIFXA.js} +6 -6
  358. package/dist/{chunk-VJFH2AXT.js → chunk-WG7HIXJ7.js} +8 -8
  359. package/dist/{chunk-VMXDTCYF.js → chunk-WMALDOF5.js} +4 -4
  360. package/dist/{chunk-I3FXTIKA.js → chunk-WP6Y2NJQ.js} +3 -3
  361. package/dist/chunk-WP6Y2NJQ.js.map +1 -0
  362. package/dist/{chunk-2L2NWXWJ.js → chunk-WRXD464C.js} +2 -2
  363. package/dist/{chunk-KT6HWAEN.js → chunk-WZUNBSS7.js} +2 -2
  364. package/dist/{chunk-NWQWUYOV.js → chunk-XGB3YF32.js} +2 -2
  365. package/dist/chunk-XJQNSMGA.js +10 -0
  366. package/dist/chunk-XJQNSMGA.js.map +1 -0
  367. package/dist/{chunk-QRX5BYUQ.js → chunk-Y6KPZQPI.js} +4 -4
  368. package/dist/{chunk-ZYKDPX3W.js → chunk-YY66AKSK.js} +2 -2
  369. package/dist/{chunk-62NA6IF3.js → chunk-ZBZ76VR7.js} +3 -3
  370. package/dist/{chunk-OXQP3N6X.js → chunk-ZTZ6S5Q6.js} +4 -4
  371. package/dist/data-display/Alert.js +4 -4
  372. package/dist/data-display/Avatar.js +5 -5
  373. package/dist/data-display/Badge.js +6 -6
  374. package/dist/data-display/Banner.js +2 -2
  375. package/dist/data-display/CardKit.js +15 -15
  376. package/dist/data-display/Carousel.js +5 -5
  377. package/dist/data-display/Chart.js +15 -15
  378. package/dist/data-display/Chip.js +1 -0
  379. package/dist/data-display/DataViews.js +88 -88
  380. package/dist/data-display/DescriptionItem.js +5 -5
  381. package/dist/data-display/FleetMap.js +15 -15
  382. package/dist/data-display/HoverCard.js +2 -2
  383. package/dist/data-display/Lightbox.js +3 -3
  384. package/dist/data-display/MapPreview.js +9 -9
  385. package/dist/data-display/Progress.js +5 -5
  386. package/dist/data-display/Sheet.js +5 -5
  387. package/dist/data-display/Table.js +3 -3
  388. package/dist/en-US.js +15 -11
  389. package/dist/feedback/ConfirmAction.js +9 -9
  390. package/dist/feedback/Modal.js +2 -2
  391. package/dist/feedback/NotificationStatusNotice.js +8 -8
  392. package/dist/form/AddressAutocomplete.js +5 -5
  393. package/dist/form/Autocomplete.js +1 -1
  394. package/dist/form/Button.js +5 -5
  395. package/dist/form/Calendar.js +4 -4
  396. package/dist/form/CategorySelect.js +9 -9
  397. package/dist/form/CepField.js +2 -2
  398. package/dist/form/Checkbox.js +3 -3
  399. package/dist/form/CodeEditor.js +1 -1
  400. package/dist/form/Command.js +2 -2
  401. package/dist/form/DateRangePicker.js +7 -7
  402. package/dist/form/Input.js +1 -1
  403. package/dist/form/InputOTP.js +2 -2
  404. package/dist/form/Label.js +2 -2
  405. package/dist/form/Menubar.js +2 -2
  406. package/dist/form/NumberField.js +22 -0
  407. package/dist/form/NumberField.js.map +1 -0
  408. package/dist/form/Switch.js +5 -5
  409. package/dist/form/UploadButton.js +2 -2
  410. package/dist/form/total-form.js +24 -24
  411. package/dist/icons.js +7 -6
  412. package/dist/layout/Box.js +5 -5
  413. package/dist/layout/Collapsible.js +1 -0
  414. package/dist/layout/ContentToolbar.js +3 -3
  415. package/dist/layout/ScrollArea.js +1 -1
  416. package/dist/layout/SettingCard.js +70 -0
  417. package/dist/layout/SettingCard.js.map +1 -0
  418. package/dist/layout/SettingsLayout.js +3 -3
  419. package/dist/layout/Stack.js +6 -6
  420. package/dist/locales.js +37 -23
  421. package/dist/locales.js.map +1 -1
  422. package/dist/navigation/AppHeader.js +11 -11
  423. package/dist/navigation/CommandPalette.js +3 -3
  424. package/dist/navigation/Pagination.js +2 -2
  425. package/dist/navigation/Tabs.js +2 -2
  426. package/dist/provider.js +5 -5
  427. package/dist/pt-BR.js +12 -8
  428. package/dist/social-login-button.js +11 -11
  429. package/dist/tokens.js +2 -2
  430. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts +6 -1
  431. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
  432. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts +0 -11
  433. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  434. package/dist/types/components/data-display/DataViews/data-views-overflow.d.ts.map +1 -1
  435. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  436. package/dist/types/components/form/Input/Input.types.d.ts +10 -0
  437. package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
  438. package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
  439. package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
  440. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
  441. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
  442. package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
  443. package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
  444. package/dist/types/components/form/NumberField/index.d.ts +3 -0
  445. package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
  446. package/dist/types/components/form/index.d.ts +1 -0
  447. package/dist/types/components/form/index.d.ts.map +1 -1
  448. package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
  449. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
  450. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts +19 -0
  451. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts.map +1 -0
  452. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
  453. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
  454. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
  455. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
  456. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
  457. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
  458. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts +12 -0
  459. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts.map +1 -0
  460. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
  461. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
  462. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
  463. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
  464. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
  465. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
  466. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
  467. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
  468. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
  469. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
  470. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
  471. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
  472. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
  473. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
  474. package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
  475. package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
  476. package/dist/types/components/layout/index.d.ts +1 -0
  477. package/dist/types/components/layout/index.d.ts.map +1 -1
  478. package/dist/types/copy/layout.d.ts +27 -0
  479. package/dist/types/copy/layout.d.ts.map +1 -1
  480. package/dist/types/en-US.layout.d.ts +3 -1
  481. package/dist/types/en-US.layout.d.ts.map +1 -1
  482. package/dist/types/locales.d.ts +3 -1
  483. package/dist/types/locales.d.ts.map +1 -1
  484. package/dist/types/pt-BR.layout.d.ts +3 -1
  485. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  486. package/dist/typography/Heading.js +5 -5
  487. package/dist/typography/Paragraph.js +3 -3
  488. package/dist/typography/Text.js +4 -4
  489. package/dist/user-avatar.js +11 -11
  490. package/dist/utility/InstallPrompt.js +4 -4
  491. package/package.json +9 -1
  492. package/src/components/data-display/DataViews/data-views-category-pill.tsx +6 -1
  493. package/src/components/data-display/DataViews/data-views-more-fields.tsx +43 -37
  494. package/src/components/data-display/DataViews/data-views-overflow.ts +12 -1
  495. package/src/components/form/Input/Input.tsx +25 -12
  496. package/src/components/form/Input/Input.types.ts +10 -0
  497. package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
  498. package/src/components/form/NumberField/NumberField.md +86 -0
  499. package/src/components/form/NumberField/NumberField.tsx +88 -0
  500. package/src/components/form/NumberField/NumberField.types.ts +43 -0
  501. package/src/components/form/NumberField/index.ts +2 -0
  502. package/src/components/form/NumberField/tests.md +51 -0
  503. package/src/components/form/NumberField/track.md +48 -0
  504. package/src/components/form/index.ts +1 -0
  505. package/src/components/layout/SettingCard/SettingCard.focus.ts +49 -0
  506. package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
  507. package/src/components/layout/SettingCard/SettingCard.md +121 -0
  508. package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
  509. package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
  510. package/src/components/layout/SettingCard/SettingCard.rem.ts +14 -0
  511. package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
  512. package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
  513. package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
  514. package/src/components/layout/SettingCard/SettingGrid.md +65 -0
  515. package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
  516. package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
  517. package/src/components/layout/SettingCard/SettingGroup.md +81 -0
  518. package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
  519. package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
  520. package/src/components/layout/SettingCard/SettingToggle.md +61 -0
  521. package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
  522. package/src/components/layout/SettingCard/index.ts +18 -0
  523. package/src/components/layout/SettingCard/tests.md +68 -0
  524. package/src/components/layout/SettingCard/track.md +63 -0
  525. package/src/components/layout/index.ts +1 -0
  526. package/src/copy/layout.ts +29 -0
  527. package/src/en-US.layout.ts +16 -0
  528. package/src/locales.ts +10 -0
  529. package/src/pt-BR.layout.ts +16 -0
  530. package/dist/chunk-A7RIZOAL.js +0 -13
  531. package/dist/chunk-A7RIZOAL.js.map +0 -1
  532. package/dist/chunk-BY3JEK5T.js +0 -1
  533. package/dist/chunk-EZMCWRXO.js.map +0 -1
  534. package/dist/chunk-FZJ2FTGE.js +0 -1
  535. package/dist/chunk-GRHECKHU.js +0 -13
  536. package/dist/chunk-GRHECKHU.js.map +0 -1
  537. package/dist/chunk-I3FXTIKA.js.map +0 -1
  538. package/dist/chunk-XXE6NTJB.js.map +0 -1
  539. /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
  540. /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
  541. /package/dist/{chunk-TSEWUY4V.js.map → chunk-23LZNANO.js.map} +0 -0
  542. /package/dist/{chunk-K2EHH7TC.js.map → chunk-2CJXYSOE.js.map} +0 -0
  543. /package/dist/{chunk-HGJHZ5PE.js.map → chunk-2DHVWNTO.js.map} +0 -0
  544. /package/dist/{chunk-K2JH7QPR.js.map → chunk-2F2HPQNQ.js.map} +0 -0
  545. /package/dist/{chunk-C5YBXQTK.js.map → chunk-2QJKWH7Q.js.map} +0 -0
  546. /package/dist/{chunk-W3FAKT3D.js.map → chunk-2SWQ6HIK.js.map} +0 -0
  547. /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
  548. /package/dist/{chunk-3PUOLOEP.js.map → chunk-37L6O266.js.map} +0 -0
  549. /package/dist/{chunk-EVXFEXBS.js.map → chunk-3ELEPGCP.js.map} +0 -0
  550. /package/dist/{chunk-RVGG5YJY.js.map → chunk-3HJLJFLA.js.map} +0 -0
  551. /package/dist/{chunk-VESIQYBF.js.map → chunk-3ZTC2VEO.js.map} +0 -0
  552. /package/dist/{chunk-46UPILLK.js.map → chunk-4ETQRBZC.js.map} +0 -0
  553. /package/dist/{chunk-PFZAUMJA.js.map → chunk-4JGBWPG7.js.map} +0 -0
  554. /package/dist/{chunk-7IKWIWWV.js.map → chunk-53LG7IT4.js.map} +0 -0
  555. /package/dist/{chunk-S2GDYA6R.js.map → chunk-5GMHJ7Y5.js.map} +0 -0
  556. /package/dist/{chunk-IABE56TG.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  557. /package/dist/{chunk-4XVH6IWN.js.map → chunk-66KAONOC.js.map} +0 -0
  558. /package/dist/{chunk-4MXFPDKL.js.map → chunk-6CAP4STN.js.map} +0 -0
  559. /package/dist/{chunk-C5EFVSBN.js.map → chunk-6HJLYSBM.js.map} +0 -0
  560. /package/dist/{chunk-CASZGBCA.js.map → chunk-6P3CRSAW.js.map} +0 -0
  561. /package/dist/{chunk-Y5UCOBQN.js.map → chunk-6SK3MTYJ.js.map} +0 -0
  562. /package/dist/{chunk-JQL4GG5L.js.map → chunk-6VMTF23F.js.map} +0 -0
  563. /package/dist/{chunk-EPRA5QLB.js.map → chunk-6XUZDJZY.js.map} +0 -0
  564. /package/dist/{chunk-B6IURHSZ.js.map → chunk-7DNQHMDO.js.map} +0 -0
  565. /package/dist/{chunk-SLMA4UQS.js.map → chunk-A3TISECJ.js.map} +0 -0
  566. /package/dist/{chunk-FVPN4YKW.js.map → chunk-ABSHD35E.js.map} +0 -0
  567. /package/dist/{chunk-PQECNGDE.js.map → chunk-AGYGNNOM.js.map} +0 -0
  568. /package/dist/{chunk-SUTNQG7E.js.map → chunk-ALU3BH37.js.map} +0 -0
  569. /package/dist/{chunk-MGPA6KTM.js.map → chunk-AMFP64L3.js.map} +0 -0
  570. /package/dist/{chunk-VEGT5PAD.js.map → chunk-BAISDZ3L.js.map} +0 -0
  571. /package/dist/{chunk-CZJLWCEG.js.map → chunk-BPYPUEM5.js.map} +0 -0
  572. /package/dist/{chunk-3MALHTZQ.js.map → chunk-C4J7PVVI.js.map} +0 -0
  573. /package/dist/{chunk-7OZBOS75.js.map → chunk-CK2NTT4S.js.map} +0 -0
  574. /package/dist/{chunk-Q5NAZ7TW.js.map → chunk-CSGUSHAO.js.map} +0 -0
  575. /package/dist/{chunk-YTYROOLY.js.map → chunk-D22EGB3T.js.map} +0 -0
  576. /package/dist/{chunk-VNGYJXAU.js.map → chunk-DBV6DDQI.js.map} +0 -0
  577. /package/dist/{chunk-6PKVHFCK.js.map → chunk-DCRNBKMY.js.map} +0 -0
  578. /package/dist/{chunk-PMS3H3OO.js.map → chunk-DF2FFYZ7.js.map} +0 -0
  579. /package/dist/{chunk-RBGOGTT2.js.map → chunk-DWZ7FLA7.js.map} +0 -0
  580. /package/dist/{chunk-237NDIT2.js.map → chunk-E3O72LBJ.js.map} +0 -0
  581. /package/dist/{chunk-OH3YGJT5.js.map → chunk-EMNGIYH6.js.map} +0 -0
  582. /package/dist/{chunk-XFUNJYFT.js.map → chunk-EPNUVSNK.js.map} +0 -0
  583. /package/dist/{chunk-35UG2QDB.js.map → chunk-EUEUZI4L.js.map} +0 -0
  584. /package/dist/{chunk-KUJLZFDW.js.map → chunk-FCG5YR6T.js.map} +0 -0
  585. /package/dist/{chunk-2UBFDRL7.js.map → chunk-FCTURAZF.js.map} +0 -0
  586. /package/dist/{chunk-UC6A6ASM.js.map → chunk-FFQKUTO6.js.map} +0 -0
  587. /package/dist/{chunk-J3ZP6EUS.js.map → chunk-FNIHELAR.js.map} +0 -0
  588. /package/dist/{chunk-SQV3HPTZ.js.map → chunk-G76H5PEM.js.map} +0 -0
  589. /package/dist/{chunk-FLIMEQUA.js.map → chunk-GBX5ACPF.js.map} +0 -0
  590. /package/dist/{chunk-22ZJH7RY.js.map → chunk-GN26LHNJ.js.map} +0 -0
  591. /package/dist/{chunk-5KFZGB5U.js.map → chunk-GS7ESED2.js.map} +0 -0
  592. /package/dist/{chunk-FGUK3D54.js.map → chunk-GZHZ7OTY.js.map} +0 -0
  593. /package/dist/{chunk-BLBOYCOV.js.map → chunk-HKV4MQ2W.js.map} +0 -0
  594. /package/dist/{chunk-K4JRHQMI.js.map → chunk-HMJM6DKA.js.map} +0 -0
  595. /package/dist/{chunk-ZWIDQEJ4.js.map → chunk-HT7DWIR4.js.map} +0 -0
  596. /package/dist/{chunk-UVD5NFRF.js.map → chunk-I3PGXMVJ.js.map} +0 -0
  597. /package/dist/{chunk-Z52HVR4J.js.map → chunk-I4IPGIRF.js.map} +0 -0
  598. /package/dist/{chunk-HR7YTBR7.js.map → chunk-IASDP44E.js.map} +0 -0
  599. /package/dist/{chunk-VKH7AENA.js.map → chunk-IFNJWH55.js.map} +0 -0
  600. /package/dist/{chunk-PUBPZOQJ.js.map → chunk-IPE5FFFD.js.map} +0 -0
  601. /package/dist/{chunk-HP2ODXNA.js.map → chunk-IPS55KWK.js.map} +0 -0
  602. /package/dist/{chunk-BILJU2DX.js.map → chunk-JFOATIMF.js.map} +0 -0
  603. /package/dist/{chunk-MCBG6R5A.js.map → chunk-JH77UDWB.js.map} +0 -0
  604. /package/dist/{chunk-XYDW5RQB.js.map → chunk-JTJR63WI.js.map} +0 -0
  605. /package/dist/{chunk-IVVOIDE5.js.map → chunk-KHVKQPQ5.js.map} +0 -0
  606. /package/dist/{chunk-T5WNNEP5.js.map → chunk-KVCS6IEI.js.map} +0 -0
  607. /package/dist/{chunk-HZ6L7WXE.js.map → chunk-LGOIBC2C.js.map} +0 -0
  608. /package/dist/{chunk-BKAB4KZK.js.map → chunk-LKAKYP42.js.map} +0 -0
  609. /package/dist/{chunk-ZPIMPOHV.js.map → chunk-M7E66OSC.js.map} +0 -0
  610. /package/dist/{chunk-VVXA7T2M.js.map → chunk-MG6XC5SK.js.map} +0 -0
  611. /package/dist/{chunk-554SVTCN.js.map → chunk-MKZNP32D.js.map} +0 -0
  612. /package/dist/{chunk-MSS6IU5X.js.map → chunk-N6V6BFKD.js.map} +0 -0
  613. /package/dist/{chunk-OLQDB346.js.map → chunk-NH4XD62U.js.map} +0 -0
  614. /package/dist/{chunk-GH2DC7PS.js.map → chunk-NPN7JTRM.js.map} +0 -0
  615. /package/dist/{chunk-AIBNBWQU.js.map → chunk-NR7LSYLM.js.map} +0 -0
  616. /package/dist/{chunk-3XLDTVLC.js.map → chunk-NU2HND2Y.js.map} +0 -0
  617. /package/dist/{chunk-T2VO32Z2.js.map → chunk-OG5LJPI3.js.map} +0 -0
  618. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  619. /package/dist/{chunk-URVNHKM2.js.map → chunk-ON7PRAAC.js.map} +0 -0
  620. /package/dist/{chunk-3TFUAKWJ.js.map → chunk-OVOSDXFM.js.map} +0 -0
  621. /package/dist/{chunk-SONWG2RT.js.map → chunk-OW4UEIXA.js.map} +0 -0
  622. /package/dist/{chunk-23FCBIUN.js.map → chunk-P7FQUGED.js.map} +0 -0
  623. /package/dist/{chunk-V7F53GEO.js.map → chunk-P7IVAMAU.js.map} +0 -0
  624. /package/dist/{chunk-JYF3HT7M.js.map → chunk-PD6JRCUT.js.map} +0 -0
  625. /package/dist/{chunk-B474PL5O.js.map → chunk-PKFFJAQ6.js.map} +0 -0
  626. /package/dist/{chunk-EUKYQXYU.js.map → chunk-PLDVEJPR.js.map} +0 -0
  627. /package/dist/{chunk-HT4B2DJU.js.map → chunk-PZEC5CQA.js.map} +0 -0
  628. /package/dist/{chunk-6FUOUUYO.js.map → chunk-Q6STVEYJ.js.map} +0 -0
  629. /package/dist/{chunk-6IKX5IIX.js.map → chunk-Q75SJ35X.js.map} +0 -0
  630. /package/dist/{chunk-WC5XYWTE.js.map → chunk-QGJBNVC2.js.map} +0 -0
  631. /package/dist/{chunk-KFZT3PHA.js.map → chunk-QHJ7FTZK.js.map} +0 -0
  632. /package/dist/{chunk-NUB4T3RQ.js.map → chunk-QJ6KWJJH.js.map} +0 -0
  633. /package/dist/{chunk-CZPU5TW3.js.map → chunk-RFZU5BTG.js.map} +0 -0
  634. /package/dist/{chunk-JGV66VUK.js.map → chunk-RLCMVSJZ.js.map} +0 -0
  635. /package/dist/{chunk-JB67KPGM.js.map → chunk-RRO2EOJB.js.map} +0 -0
  636. /package/dist/{chunk-JJ3VR7WX.js.map → chunk-RZLWW3KC.js.map} +0 -0
  637. /package/dist/{chunk-MZQTHSLN.js.map → chunk-S7HRED4D.js.map} +0 -0
  638. /package/dist/{chunk-EXJBPKGW.js.map → chunk-SHDIZSN5.js.map} +0 -0
  639. /package/dist/{chunk-GJQYM3PM.js.map → chunk-SHQWIDD5.js.map} +0 -0
  640. /package/dist/{chunk-L6TCIZFR.js.map → chunk-SUAGBFYJ.js.map} +0 -0
  641. /package/dist/{chunk-K5V3KCFI.js.map → chunk-SVBR3GWG.js.map} +0 -0
  642. /package/dist/{chunk-DAPK3ADA.js.map → chunk-TC3EPGGJ.js.map} +0 -0
  643. /package/dist/{chunk-DEE6IPGI.js.map → chunk-TJXNVREN.js.map} +0 -0
  644. /package/dist/{chunk-WREIYOXN.js.map → chunk-TLMLEC4F.js.map} +0 -0
  645. /package/dist/{chunk-57ZSQB5V.js.map → chunk-TLRTLYVT.js.map} +0 -0
  646. /package/dist/{chunk-DUWF5LUK.js.map → chunk-TNCCCLLO.js.map} +0 -0
  647. /package/dist/{chunk-JPVDZXXX.js.map → chunk-U5RQBHRY.js.map} +0 -0
  648. /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
  649. /package/dist/{chunk-J4W4TQPC.js.map → chunk-V5P5Q6HM.js.map} +0 -0
  650. /package/dist/{chunk-DQOLW4B5.js.map → chunk-VBMV2W4K.js.map} +0 -0
  651. /package/dist/{chunk-57W2C7HY.js.map → chunk-VOHT6ZX3.js.map} +0 -0
  652. /package/dist/{chunk-QYNCPS5W.js.map → chunk-WBKWIFXA.js.map} +0 -0
  653. /package/dist/{chunk-VJFH2AXT.js.map → chunk-WG7HIXJ7.js.map} +0 -0
  654. /package/dist/{chunk-VMXDTCYF.js.map → chunk-WMALDOF5.js.map} +0 -0
  655. /package/dist/{chunk-2L2NWXWJ.js.map → chunk-WRXD464C.js.map} +0 -0
  656. /package/dist/{chunk-KT6HWAEN.js.map → chunk-WZUNBSS7.js.map} +0 -0
  657. /package/dist/{chunk-NWQWUYOV.js.map → chunk-XGB3YF32.js.map} +0 -0
  658. /package/dist/{chunk-QRX5BYUQ.js.map → chunk-Y6KPZQPI.js.map} +0 -0
  659. /package/dist/{chunk-ZYKDPX3W.js.map → chunk-YY66AKSK.js.map} +0 -0
  660. /package/dist/{chunk-62NA6IF3.js.map → chunk-ZBZ76VR7.js.map} +0 -0
  661. /package/dist/{chunk-OXQP3N6X.js.map → chunk-ZTZ6S5Q6.js.map} +0 -0
@@ -9,15 +9,15 @@
9
9
  *
10
10
  * A field with one or two options renders FLAT: inside a panel there is no
11
11
  * space to win back, and two labelled checkboxes are faster than a dropdown
12
- * needing a second click. Past that it becomes a {@link MultiSelectDropdown} —
13
- * see `INLINE_OPTION_LIMIT`.
12
+ * needing a second click. Past that — or whenever the field asks for a tree or
13
+ * a search — it is the bar's own {@link PillControl}; see `sharesBarControl`.
14
14
  */
15
15
  import Checkbox from "@mui/material/Checkbox/index.js";
16
16
 
17
- import { MultiSelectDropdown } from "../../layout/ContentToolbar";
18
17
  import { Box } from "../../../mui/Box";
19
18
  import { Text } from "../../typography/Text";
20
19
 
20
+ import { PillControl } from "./data-views-category-pill";
21
21
  import type { OverflowField } from "./data-views-overflow";
22
22
  import { RangeBounds } from "./data-views-range-pill";
23
23
  import { isRangeSet } from "./data-views-range-values";
@@ -41,42 +41,59 @@ export interface MoreFieldProps {
41
41
  */
42
42
  const INLINE_OPTION_LIMIT = 2;
43
43
 
44
- /** One overflowed pill: its options as checkboxes, all visible at once. */
44
+ /**
45
+ * Whether an overflowed pill keeps the SAME control it has on the bar.
46
+ *
47
+ * The panel used to build its own flat dropdown for every field past two
48
+ * options, so a field's config only held while it fitted: `control:
49
+ * "category"` lost its tree (subcategories flattened into one list, no
50
+ * "Marcar tudo", no count footer) and `searchEnabled` lost its search, on
51
+ * exactly the phone widths where most filters live in here. Anything the bar
52
+ * would render as a dropdown now renders as the bar's own {@link PillControl};
53
+ * only a plain two-option field — one that did not ask for a dropdown, a tree
54
+ * or a search — stays a flat checkbox row, which is a panel layout rather than
55
+ * a different control (the filter panel draws the same line).
56
+ */
57
+ function sharesBarControl<T extends Record<string, unknown>>(field: OverflowField<T>): boolean {
58
+ const pill = field.pill;
59
+ if (!pill) return false;
60
+ return (
61
+ pill.control === "category" ||
62
+ pill.control === "multiselect" ||
63
+ pill.searchEnabled === true ||
64
+ pill.options.length > INLINE_OPTION_LIMIT
65
+ );
66
+ }
67
+
68
+ /** One overflowed pill: the bar's control, or its options as checkboxes. */
45
69
  function OverflowPill<T extends Record<string, unknown>>({
46
70
  field,
47
71
  values,
48
- onToggle,
72
+ onTogglePill,
49
73
  onClear,
50
74
  testIdPrefix,
51
75
  }: {
52
76
  field: OverflowField<T>;
53
77
  values: string[];
54
- onToggle: (value: string, checked: boolean) => void;
78
+ onTogglePill: (fieldId: string, value: string, checked: boolean) => void;
55
79
  onClear: () => void;
56
80
  testIdPrefix: string;
57
81
  }): React.JSX.Element {
58
- const copy = useDataViewsCopy();
59
- const options = field.pill?.options ?? [];
60
- if (options.length > INLINE_OPTION_LIMIT) {
82
+ const testId = `${testIdPrefix}-more-${field.id}`;
83
+ if (field.pill && sharesBarControl(field)) {
61
84
  return (
62
- <MultiSelectDropdown
63
- extraOptionsHeading={copy.filters.optionsHeading}
64
- clearText={copy.filters.clear}
65
- clearLabel={copy.filters.clearRange(field.label)}
66
- label={field.pill?.label ?? field.label}
67
- options={options}
68
- selected={new Set(values)}
69
- onToggle={onToggle}
70
- onClear={onClear}
71
- allLabel={copy.filters.allOption}
72
- searchable={options.length > 6 ? true : undefined}
73
- searchPlaceholder={copy.filters.optionSearchPlaceholder}
74
- noResultsLabel={copy.filters.optionsEmpty}
75
- layout="pill"
76
- data-testid={`${testIdPrefix}-more-${field.id}`}
85
+ <PillControl
86
+ fieldId={field.id}
87
+ pill={field.pill}
88
+ selected={values}
89
+ onTogglePill={onTogglePill}
90
+ onClearField={onClear}
91
+ testIdPrefix={testIdPrefix}
92
+ testId={testId}
77
93
  />
78
94
  );
79
95
  }
96
+ const onToggle = (value: string, checked: boolean) => onTogglePill(field.id, value, checked);
80
97
  return (
81
98
  <Box sx={{ display: "flex", flexWrap: "wrap", gap: 0.75 }}>
82
99
  {(field.pill?.options ?? []).map((option) => {
@@ -85,7 +102,7 @@ function OverflowPill<T extends Record<string, unknown>>({
85
102
  <Box
86
103
  key={option.value}
87
104
  component="label"
88
- data-testid={`${testIdPrefix}-more-${field.id}-${option.value}`}
105
+ data-testid={`${testId}-${option.value}`}
89
106
  sx={{
90
107
  display: "inline-flex",
91
108
  alignItems: "center",
@@ -163,17 +180,6 @@ function OverflowRange<T extends Record<string, unknown>>({
163
180
  );
164
181
  }
165
182
 
166
- /**
167
- * The trigger, badged with how many fields had no room on the bar — and told
168
- * apart when some of them are APPLIED.
169
- *
170
- * An applied filter can land in here now (it is ranked first, not exempt), so
171
- * this button is the only thing on screen still saying it exists. A neutral
172
- * badge reading "3" would make "three filters you have not used" and "three
173
- * filters narrowing this list" look identical, which is the whole failure the
174
- * old exemption was written to avoid. So an overflow holding applied filters
175
- * takes the applied tone and counts them in its own badge.
176
-
177
183
  /**
178
184
  * Whether a field has anything applied, and how to unapply it — the two shapes
179
185
  * (a pill's selected values, a range's bounds) answered in one place so the
@@ -257,7 +263,7 @@ export function MoreGroup<T extends Record<string, unknown>>({
257
263
  <OverflowPill
258
264
  field={field}
259
265
  values={pills[field.id] ?? []}
260
- onToggle={(value, checked) => onTogglePill(field.id, value, checked)}
266
+ onTogglePill={onTogglePill}
261
267
  onClear={() => (pills[field.id] ?? []).forEach((v) => onTogglePill(field.id, v, false))}
262
268
  testIdPrefix={testIdPrefix}
263
269
  />
@@ -347,5 +347,16 @@ export function useFilterOverflow<T extends Record<string, unknown>>(
347
347
  if (cache.current === null || (!frozen && cache.current.signature !== signature)) {
348
348
  cache.current = { signature, split: computeSplit(all, pills, ranges, width, hasExport) };
349
349
  }
350
- return { ...cache.current.split, barRef };
350
+ // The cache holds the ARRANGEMENT — which ids sit on the bar, which in "Mais"
351
+ // — never the fields themselves. The signature keys on ids, so a field whose
352
+ // options arrive after the first measurement (a category list still loading)
353
+ // does not re-split, and handing back the cached objects served the empty
354
+ // list for good: "Categoria" in "Mais" rendered a label with no control under
355
+ // it (FUT-2828). Re-reading each field from `all` keeps the slots and the
356
+ // current config.
357
+ const { split } = cache.current;
358
+ const current = new Map(all.map((field) => [field.id, field]));
359
+ const fresh = (fields: OverflowField<T>[]): OverflowField<T>[] =>
360
+ fields.map((field) => current.get(field.id) ?? field);
361
+ return { ...split, inline: fresh(split.inline), overflow: fresh(split.overflow), barRef };
351
362
  }
@@ -80,6 +80,28 @@ const interactionProps = (
80
80
  onClick: loading ? undefined : onClick,
81
81
  });
82
82
 
83
+ /**
84
+ * `aria-label` has to ride `inputProps` to reach the `<input>` (FUT-755), and
85
+ * `aria-describedby` the same way — spread with the rest, either lands on the
86
+ * FormControl DIV that the text field renders as its root, which carries no
87
+ * role, so the field kept no accessible name or description and a source
88
+ * grep saying "this input is labelled" disagreed with the DOM. NumberField's
89
+ * suffix rides this to reach a caller's field (FUT-2823); this does not also
90
+ * join MUI's own helper-text id the way the shared package's later Input
91
+ * does — this maintenance line predates that fix.
92
+ */
93
+ const mergedInputProps = (
94
+ dataTestId: string | undefined,
95
+ inputProps: InputProps['inputProps'],
96
+ ariaLabel: string | undefined,
97
+ ariaDescribedBy: string | undefined,
98
+ ) => ({
99
+ 'data-testid': dataTestId,
100
+ ...inputProps,
101
+ ...(ariaLabel === undefined ? {} : { 'aria-label': ariaLabel }),
102
+ ...(ariaDescribedBy === undefined ? {} : { 'aria-describedby': ariaDescribedBy }),
103
+ });
104
+
83
105
  export const Input = React.forwardRef<HTMLInputElement, InputProps>(
84
106
  (
85
107
  {
@@ -99,6 +121,8 @@ export const Input = React.forwardRef<HTMLInputElement, InputProps>(
99
121
  onFocus,
100
122
  onBlur,
101
123
  'aria-label': ariaLabel,
124
+ 'aria-describedby': ariaDescribedBy,
125
+ inputProps,
102
126
  ...rest
103
127
  },
104
128
  ref,
@@ -120,18 +144,7 @@ export const Input = React.forwardRef<HTMLInputElement, InputProps>(
120
144
  {...interactionProps(loading, onClick, props.disabled)}
121
145
  onFocus={onFocus}
122
146
  onBlur={onBlur}
123
- /*
124
- * `aria-label` has to ride `inputProps` to reach the `<input>` (FUT-755).
125
- * Spread with the rest it lands on the FormControl DIV that the text
126
- * field renders as its root, which carries no role — so the field kept
127
- * no accessible name, and a source grep saying "this input is labelled"
128
- * disagreed with the DOM. The reports search box and the block-title
129
- * inputs were both named in source and anonymous to a screen reader.
130
- */
131
- inputProps={{
132
- 'data-testid': dataTestId,
133
- ...(ariaLabel === undefined ? {} : { 'aria-label': ariaLabel }),
134
- }}
147
+ inputProps={mergedInputProps(dataTestId, inputProps, ariaLabel, ariaDescribedBy)}
135
148
  InputProps={{
136
149
  startAdornment: startAdornment && (
137
150
  <InputAdornment position="start">{startAdornment}</InputAdornment>
@@ -1,3 +1,4 @@
1
+ import type { InputBaseComponentProps } from '@mui/material/InputBase/index.js';
1
2
  import type { InputLabelProps as MuiInputLabelProps } from '@mui/material/InputLabel/index.js';
2
3
  import type { InputHTMLAttributes } from 'react';
3
4
  import type React from 'react';
@@ -31,4 +32,13 @@ export interface InputProps
31
32
  * the TYPE was missing, so it failed to compile. FUT-729.
32
33
  */
33
34
  InputLabelProps?: Partial<MuiInputLabelProps>;
35
+ /**
36
+ * Attributes for the `<input>` element itself. Anything else this component
37
+ * does not recognise lands on the text field's ROOT `<div>`, where
38
+ * `inputMode`, `pattern`, `role` and `aria-value*` do nothing. Merged, not
39
+ * spread over: the field's own `data-testid` stays the default a caller can
40
+ * override, and the `aria-label` / `aria-describedby` it builds still land
41
+ * last.
42
+ */
43
+ inputProps?: InputBaseComponentProps;
34
44
  }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * The pure half of `NumberField`: what a keystroke may add, what a string of
3
+ * digits is worth, and where an arrow key lands. Kept apart from the component
4
+ * so every rule is a plain function a unit test can hold.
5
+ */
6
+
7
+ /**
8
+ * The most digits the field keeps. Fifteen is the longest run that is always
9
+ * a safe integer (`Number.MAX_SAFE_INTEGER` has sixteen, but not every
10
+ * sixteen-digit number is below it), so a pasted serial number can never turn
11
+ * into a rounded float.
12
+ */
13
+ export const MAX_DIGITS = 15;
14
+
15
+ export interface NumberBounds {
16
+ min?: number;
17
+ max?: number;
18
+ }
19
+
20
+ /** Everything that is not a digit, removed; then cut to {@link MAX_DIGITS}. */
21
+ export function digitsOf(raw: string): string {
22
+ return raw.replace(/\D+/g, '').slice(0, MAX_DIGITS);
23
+ }
24
+
25
+ /**
26
+ * What the field's text is worth. An empty field is `null` — never `0`, and
27
+ * never `NaN` — so "cleared" and "zero" stay two different answers.
28
+ */
29
+ export function parseDigits(raw: string): number | null {
30
+ const digits = digitsOf(raw);
31
+ return digits === '' ? null : Number(digits);
32
+ }
33
+
34
+ /** The text a value shows as. */
35
+ export function formatValue(value: number | null): string {
36
+ return value === null || !Number.isFinite(value) ? '' : String(value);
37
+ }
38
+
39
+ /** `value`, held inside whichever bounds are set. */
40
+ export function clamp(value: number, { min, max }: NumberBounds): number {
41
+ if (max !== undefined && value > max) return max;
42
+ if (min !== undefined && value < min) return min;
43
+ return value;
44
+ }
45
+
46
+ /**
47
+ * Where ArrowUp (`+1`) or ArrowDown (`-1`) takes the value.
48
+ *
49
+ * From empty, either arrow lands on the floor (`min`, else 0) rather than
50
+ * stepping past it: the first press says "give me a number", and the floor is
51
+ * the only one both directions agree on.
52
+ */
53
+ export function stepValue(
54
+ value: number | null,
55
+ direction: 1 | -1,
56
+ step: number,
57
+ bounds: NumberBounds,
58
+ ): number {
59
+ if (value === null) return clamp(bounds.min ?? 0, bounds);
60
+ return clamp(value + direction * step, bounds);
61
+ }
62
+
63
+ /**
64
+ * A key that would type a character the field refuses. Shortcuts (Ctrl/Cmd +
65
+ * a letter — copy, paste, select all) and the named keys (`Backspace`,
66
+ * `ArrowLeft`, `Tab`) are left alone: only a single printable character that
67
+ * is not a digit is blocked.
68
+ */
69
+ export function isRefusedKey(event: {
70
+ key: string;
71
+ ctrlKey: boolean;
72
+ metaKey: boolean;
73
+ altKey: boolean;
74
+ }): boolean {
75
+ if (event.ctrlKey || event.metaKey || event.altKey) return false;
76
+ return event.key.length === 1 && !/\d/.test(event.key);
77
+ }
@@ -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,48 @@
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.
43
+ - 2026-09-26 21:33 BRT — backported onto the `ui-6.30.x` maintenance line
44
+ (FUT-2823). `Input` there also gained a top-level `aria-describedby` route
45
+ to the `<input>`, the same way `aria-label` already rode `inputProps` — the
46
+ suffix's id reaches the field either way, but this line's `Input` does not
47
+ also join MUI's own helper-text id into it, a separate fix `main` shipped
48
+ after this line's fork point.
@@ -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';