@12-apps/ui 6.30.2 → 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 (648) 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 +16 -16
  56. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +20 -20
  57. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  58. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  59. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +8 -8
  60. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +18 -18
  61. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +20 -20
  62. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +17 -17
  63. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +8 -8
  64. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  65. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +5 -5
  66. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +9 -9
  67. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  68. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +5 -5
  69. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -11
  70. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -10
  71. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  72. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +15 -15
  73. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  74. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  75. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  76. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  77. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  78. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -9
  79. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  80. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  81. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  82. package/dist/_internal/components/data-display/Progress/Progress.js +5 -5
  83. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +3 -3
  84. package/dist/_internal/components/data-display/Progress/Progress.styles.js +4 -4
  85. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
  86. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  87. package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
  88. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +2 -2
  89. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  90. package/dist/_internal/components/data-display/index.js +57 -57
  91. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
  92. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  93. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +8 -8
  94. package/dist/_internal/components/feedback/index.js +14 -14
  95. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  96. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -3
  97. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  98. package/dist/_internal/components/form/Button/Button.js +5 -5
  99. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  100. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  101. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  102. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  103. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  104. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  105. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  106. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  107. package/dist/_internal/components/form/CepField/CepField.js +2 -2
  108. package/dist/_internal/components/form/Checkbox/Checkbox.js +3 -3
  109. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
  110. package/dist/_internal/components/form/Command/Command.js +2 -2
  111. package/dist/_internal/components/form/Command/Command.styles.js +2 -2
  112. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
  113. package/dist/_internal/components/form/Input/Input.js +1 -1
  114. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  115. package/dist/_internal/components/form/Label/Label.js +2 -2
  116. package/dist/_internal/components/form/Label/Label.styles.js +2 -2
  117. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  118. package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
  119. package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
  120. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
  121. package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
  122. package/dist/_internal/components/form/NumberField/NumberField.js +21 -0
  123. package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
  124. package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
  125. package/dist/_internal/components/form/Switch/Switch.js +5 -5
  126. package/dist/_internal/components/form/Switch/Switch.parts.js +4 -4
  127. package/dist/_internal/components/form/Switch/Switch.styles.js +3 -3
  128. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  129. package/dist/_internal/components/form/index.js +47 -41
  130. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  131. package/dist/_internal/components/form/total-form/Fields/CepField.js +3 -3
  132. package/dist/_internal/components/form/total-form/Fields/TextField.js +2 -2
  133. package/dist/_internal/components/form/total-form/Fields/index.js +20 -20
  134. package/dist/_internal/components/form/total-form/SubmitButton.js +6 -6
  135. package/dist/_internal/components/index.js +194 -153
  136. package/dist/_internal/components/layout/Box/Box.js +5 -5
  137. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +1 -1
  138. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js +8 -0
  139. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js.map +1 -0
  140. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
  141. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
  142. package/dist/_internal/components/layout/SettingCard/SettingCard.js +44 -0
  143. package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
  144. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
  145. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
  146. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +49 -0
  147. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
  148. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js +8 -0
  149. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js.map +1 -0
  150. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +35 -0
  151. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
  152. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
  153. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
  154. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +46 -0
  155. package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
  156. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
  157. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
  158. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +55 -0
  159. package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
  160. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +53 -0
  161. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
  162. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +55 -0
  163. package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
  164. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +3 -3
  165. package/dist/_internal/components/layout/Stack/Stack.js +6 -6
  166. package/dist/_internal/components/layout/index.js +74 -12
  167. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +9 -9
  168. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  169. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  170. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  171. package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
  172. package/dist/_internal/components/navigation/index.js +26 -26
  173. package/dist/_internal/components/typography/Heading/Heading.js +5 -5
  174. package/dist/_internal/components/typography/Heading/Heading.metrics.js +3 -3
  175. package/dist/_internal/components/typography/Heading/Heading.styles.js +4 -4
  176. package/dist/_internal/components/typography/Paragraph/Paragraph.js +3 -3
  177. package/dist/_internal/components/typography/Text/Text.js +4 -4
  178. package/dist/_internal/components/typography/Text/Text.metrics.js +3 -3
  179. package/dist/_internal/components/typography/index.js +11 -11
  180. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +3 -3
  181. package/dist/_internal/components/utility/InstallPrompt/usePwaInstall.js +2 -2
  182. package/dist/_internal/components/utility/index.js +15 -15
  183. package/dist/_internal/en-US.data-display.js +2 -2
  184. package/dist/_internal/en-US.layout.js +5 -1
  185. package/dist/_internal/icons/Icon.js +6 -6
  186. package/dist/_internal/provider/UiProvider.js +4 -4
  187. package/dist/_internal/provider/mui-bridge.js +3 -3
  188. package/dist/_internal/provider/use-ui-theme.js +4 -4
  189. package/dist/_internal/pt-BR.data-display.js +2 -2
  190. package/dist/_internal/pt-BR.layout.js +5 -1
  191. package/dist/_internal/social-login-button/social-login-button.js +11 -11
  192. package/dist/_internal/tokens/theme.js +2 -2
  193. package/dist/_internal/user-avatar/user-avatar.js +11 -11
  194. package/dist/charts.js +15 -15
  195. package/dist/{chunk-TSEWUY4V.js → chunk-23LZNANO.js} +2 -2
  196. package/dist/{chunk-K2EHH7TC.js → chunk-2CJXYSOE.js} +7 -7
  197. package/dist/{chunk-HGJHZ5PE.js → chunk-2DHVWNTO.js} +7 -7
  198. package/dist/{chunk-K2JH7QPR.js → chunk-2F2HPQNQ.js} +3 -3
  199. package/dist/chunk-2GTORM5E.js +1 -0
  200. package/dist/chunk-2GTORM5E.js.map +1 -0
  201. package/dist/{chunk-C5YBXQTK.js → chunk-2QJKWH7Q.js} +3 -3
  202. package/dist/{chunk-W3FAKT3D.js → chunk-2SWQ6HIK.js} +4 -4
  203. package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
  204. package/dist/chunk-33L26P4J.js +27 -0
  205. package/dist/chunk-33L26P4J.js.map +1 -0
  206. package/dist/{chunk-3PUOLOEP.js → chunk-37L6O266.js} +2 -2
  207. package/dist/{chunk-EVXFEXBS.js → chunk-3ELEPGCP.js} +2 -2
  208. package/dist/{chunk-RVGG5YJY.js → chunk-3HJLJFLA.js} +2 -2
  209. package/dist/chunk-3U7WKBMH.js +27 -0
  210. package/dist/chunk-3U7WKBMH.js.map +1 -0
  211. package/dist/{chunk-VESIQYBF.js → chunk-3ZTC2VEO.js} +9 -9
  212. package/dist/{chunk-46UPILLK.js → chunk-4ETQRBZC.js} +4 -4
  213. package/dist/chunk-4HDP2PZD.js +9 -0
  214. package/dist/chunk-4HDP2PZD.js.map +1 -0
  215. package/dist/{chunk-PFZAUMJA.js → chunk-4JGBWPG7.js} +2 -2
  216. package/dist/{chunk-7IKWIWWV.js → chunk-53LG7IT4.js} +11 -11
  217. package/dist/{chunk-S2GDYA6R.js → chunk-5GMHJ7Y5.js} +5 -5
  218. package/dist/{chunk-IABE56TG.js → chunk-5ZOJLYD2.js} +4 -4
  219. package/dist/{chunk-XXE6NTJB.js → chunk-5ZXVYKHU.js} +10 -5
  220. package/dist/chunk-5ZXVYKHU.js.map +1 -0
  221. package/dist/{chunk-4XVH6IWN.js → chunk-66KAONOC.js} +3 -3
  222. package/dist/{chunk-4MXFPDKL.js → chunk-6CAP4STN.js} +4 -4
  223. package/dist/{chunk-C5EFVSBN.js → chunk-6HJLYSBM.js} +2 -2
  224. package/dist/{chunk-PZAXUO6F.js → chunk-6P3CRSAW.js} +3 -3
  225. package/dist/chunk-6PPF5WEN.js +30 -0
  226. package/dist/chunk-6PPF5WEN.js.map +1 -0
  227. package/dist/{chunk-Y5UCOBQN.js → chunk-6SK3MTYJ.js} +4 -4
  228. package/dist/{chunk-LBLX3Q2C.js → chunk-6VMTF23F.js} +5 -5
  229. package/dist/{chunk-EPRA5QLB.js → chunk-6XUZDJZY.js} +2 -2
  230. package/dist/{chunk-B6IURHSZ.js → chunk-7DNQHMDO.js} +4 -4
  231. package/dist/{chunk-SLMA4UQS.js → chunk-A3TISECJ.js} +3 -3
  232. package/dist/{chunk-FVPN4YKW.js → chunk-ABSHD35E.js} +3 -3
  233. package/dist/chunk-AEMD6JHZ.js +1 -0
  234. package/dist/chunk-AEMD6JHZ.js.map +1 -0
  235. package/dist/{chunk-PQECNGDE.js → chunk-AGYGNNOM.js} +2 -2
  236. package/dist/{chunk-SUTNQG7E.js → chunk-ALU3BH37.js} +4 -4
  237. package/dist/{chunk-MGPA6KTM.js → chunk-AMFP64L3.js} +2 -2
  238. package/dist/{chunk-ALEITBJX.js → chunk-BAISDZ3L.js} +20 -20
  239. package/dist/chunk-BOWS4U6W.js +1 -0
  240. package/dist/chunk-BOWS4U6W.js.map +1 -0
  241. package/dist/{chunk-CZJLWCEG.js → chunk-BPYPUEM5.js} +2 -2
  242. package/dist/{chunk-3MALHTZQ.js → chunk-C4J7PVVI.js} +3 -3
  243. package/dist/{chunk-7OZBOS75.js → chunk-CK2NTT4S.js} +6 -6
  244. package/dist/{chunk-Q5NAZ7TW.js → chunk-CSGUSHAO.js} +4 -4
  245. package/dist/{chunk-YTYROOLY.js → chunk-D22EGB3T.js} +3 -3
  246. package/dist/{chunk-DH5OA4VK.js → chunk-DBV6DDQI.js} +2 -2
  247. package/dist/{chunk-6PKVHFCK.js → chunk-DCRNBKMY.js} +9 -9
  248. package/dist/{chunk-PMS3H3OO.js → chunk-DF2FFYZ7.js} +4 -4
  249. package/dist/chunk-DG2A4DQU.js +118 -0
  250. package/dist/chunk-DG2A4DQU.js.map +1 -0
  251. package/dist/{chunk-RBGOGTT2.js → chunk-DWZ7FLA7.js} +4 -4
  252. package/dist/{chunk-237NDIT2.js → chunk-E3O72LBJ.js} +2 -2
  253. package/dist/{chunk-OH3YGJT5.js → chunk-EMNGIYH6.js} +5 -5
  254. package/dist/{chunk-XFUNJYFT.js → chunk-EPNUVSNK.js} +7 -7
  255. package/dist/{chunk-35UG2QDB.js → chunk-EUEUZI4L.js} +2 -2
  256. package/dist/{chunk-BTKMGXAK.js → chunk-FCG5YR6T.js} +3 -3
  257. package/dist/{chunk-2UBFDRL7.js → chunk-FCTURAZF.js} +2 -2
  258. package/dist/{chunk-UC6A6ASM.js → chunk-FFQKUTO6.js} +2 -2
  259. package/dist/{chunk-J3ZP6EUS.js → chunk-FNIHELAR.js} +2 -2
  260. package/dist/{chunk-SQV3HPTZ.js → chunk-G76H5PEM.js} +4 -4
  261. package/dist/{chunk-FLIMEQUA.js → chunk-GBX5ACPF.js} +5 -5
  262. package/dist/{chunk-22ZJH7RY.js → chunk-GN26LHNJ.js} +2 -2
  263. package/dist/{chunk-5KFZGB5U.js → chunk-GS7ESED2.js} +2 -2
  264. package/dist/{chunk-FGUK3D54.js → chunk-GZHZ7OTY.js} +3 -3
  265. package/dist/chunk-HALFOXSZ.js +1 -0
  266. package/dist/chunk-HALFOXSZ.js.map +1 -0
  267. package/dist/{chunk-BLBOYCOV.js → chunk-HKV4MQ2W.js} +5 -5
  268. package/dist/{chunk-K4JRHQMI.js → chunk-HMJM6DKA.js} +3 -3
  269. package/dist/{chunk-ZWIDQEJ4.js → chunk-HT7DWIR4.js} +5 -5
  270. package/dist/{chunk-UVD5NFRF.js → chunk-I3PGXMVJ.js} +2 -2
  271. package/dist/{chunk-Z52HVR4J.js → chunk-I4IPGIRF.js} +2 -2
  272. package/dist/{chunk-HR7YTBR7.js → chunk-IASDP44E.js} +4 -4
  273. package/dist/chunk-IAVQXQ3V.js +82 -0
  274. package/dist/chunk-IAVQXQ3V.js.map +1 -0
  275. package/dist/chunk-IC7GHPMK.js +22 -0
  276. package/dist/chunk-IC7GHPMK.js.map +1 -0
  277. package/dist/{chunk-VKH7AENA.js → chunk-IFNJWH55.js} +2 -2
  278. package/dist/{chunk-PUBPZOQJ.js → chunk-IPE5FFFD.js} +2 -2
  279. package/dist/{chunk-HP2ODXNA.js → chunk-IPS55KWK.js} +2 -2
  280. package/dist/{chunk-BILJU2DX.js → chunk-JFOATIMF.js} +5 -5
  281. package/dist/{chunk-MCBG6R5A.js → chunk-JH77UDWB.js} +3 -3
  282. package/dist/{chunk-XYDW5RQB.js → chunk-JTJR63WI.js} +2 -2
  283. package/dist/{chunk-IVVOIDE5.js → chunk-KHVKQPQ5.js} +3 -3
  284. package/dist/chunk-KRR6KK5J.js +117 -0
  285. package/dist/chunk-KRR6KK5J.js.map +1 -0
  286. package/dist/{chunk-T5WNNEP5.js → chunk-KVCS6IEI.js} +2 -2
  287. package/dist/{chunk-HZ6L7WXE.js → chunk-LGOIBC2C.js} +7 -7
  288. package/dist/chunk-LGPQVKHC.js +47 -0
  289. package/dist/chunk-LGPQVKHC.js.map +1 -0
  290. package/dist/{chunk-BKAB4KZK.js → chunk-LKAKYP42.js} +5 -5
  291. package/dist/{chunk-ZPIMPOHV.js → chunk-M7E66OSC.js} +4 -4
  292. package/dist/{chunk-VVXA7T2M.js → chunk-MG6XC5SK.js} +2 -2
  293. package/dist/{chunk-554SVTCN.js → chunk-MKZNP32D.js} +4 -4
  294. package/dist/chunk-MPRZDEKY.js +168 -0
  295. package/dist/chunk-MPRZDEKY.js.map +1 -0
  296. package/dist/{chunk-MSS6IU5X.js → chunk-N6V6BFKD.js} +3 -3
  297. package/dist/{chunk-OLQDB346.js → chunk-NH4XD62U.js} +2 -2
  298. package/dist/{chunk-GH2DC7PS.js → chunk-NPN7JTRM.js} +4 -4
  299. package/dist/{chunk-AIBNBWQU.js → chunk-NR7LSYLM.js} +2 -2
  300. package/dist/{chunk-3XLDTVLC.js → chunk-NU2HND2Y.js} +5 -5
  301. package/dist/{chunk-T2VO32Z2.js → chunk-OG5LJPI3.js} +2 -2
  302. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  303. package/dist/{chunk-URVNHKM2.js → chunk-ON7PRAAC.js} +6 -6
  304. package/dist/{chunk-ZJ66D63E.js → chunk-OTMJBGJA.js} +3 -3
  305. package/dist/{chunk-3TFUAKWJ.js → chunk-OVOSDXFM.js} +2 -2
  306. package/dist/{chunk-SONWG2RT.js → chunk-OW4UEIXA.js} +5 -5
  307. package/dist/{chunk-23FCBIUN.js → chunk-P7FQUGED.js} +8 -8
  308. package/dist/{chunk-V7F53GEO.js → chunk-P7IVAMAU.js} +7 -7
  309. package/dist/{chunk-JYF3HT7M.js → chunk-PD6JRCUT.js} +8 -8
  310. package/dist/chunk-PGGGKYWG.js +1 -0
  311. package/dist/chunk-PGGGKYWG.js.map +1 -0
  312. package/dist/{chunk-B474PL5O.js → chunk-PKFFJAQ6.js} +2 -2
  313. package/dist/{chunk-EUKYQXYU.js → chunk-PLDVEJPR.js} +2 -2
  314. package/dist/{chunk-HT4B2DJU.js → chunk-PZEC5CQA.js} +4 -4
  315. package/dist/chunk-Q4JWWTL4.js +36 -0
  316. package/dist/chunk-Q4JWWTL4.js.map +1 -0
  317. package/dist/chunk-Q6FUSSLK.js +140 -0
  318. package/dist/chunk-Q6FUSSLK.js.map +1 -0
  319. package/dist/{chunk-J2UZOMTA.js → chunk-Q6STVEYJ.js} +4 -4
  320. package/dist/{chunk-6IKX5IIX.js → chunk-Q75SJ35X.js} +5 -5
  321. package/dist/{chunk-WC5XYWTE.js → chunk-QGJBNVC2.js} +2 -2
  322. package/dist/chunk-QGUNUXTT.js +1 -0
  323. package/dist/chunk-QGUNUXTT.js.map +1 -0
  324. package/dist/{chunk-KFZT3PHA.js → chunk-QHJ7FTZK.js} +4 -4
  325. package/dist/{chunk-NUB4T3RQ.js → chunk-QJ6KWJJH.js} +2 -2
  326. package/dist/chunk-R6XVOUNC.js +85 -0
  327. package/dist/chunk-R6XVOUNC.js.map +1 -0
  328. package/dist/{chunk-CZPU5TW3.js → chunk-RFZU5BTG.js} +2 -2
  329. package/dist/chunk-RH4QT7YT.js +74 -0
  330. package/dist/chunk-RH4QT7YT.js.map +1 -0
  331. package/dist/{chunk-JGV66VUK.js → chunk-RLCMVSJZ.js} +2 -2
  332. package/dist/chunk-RN7UJI7S.js +1 -0
  333. package/dist/chunk-RN7UJI7S.js.map +1 -0
  334. package/dist/{chunk-JB67KPGM.js → chunk-RRO2EOJB.js} +4 -4
  335. package/dist/{chunk-JJ3VR7WX.js → chunk-RZLWW3KC.js} +2 -2
  336. package/dist/{chunk-MZQTHSLN.js → chunk-S7HRED4D.js} +2 -2
  337. package/dist/{chunk-EXJBPKGW.js → chunk-SHDIZSN5.js} +5 -5
  338. package/dist/{chunk-GJQYM3PM.js → chunk-SHQWIDD5.js} +4 -4
  339. package/dist/{chunk-L6TCIZFR.js → chunk-SUAGBFYJ.js} +3 -3
  340. package/dist/{chunk-K5V3KCFI.js → chunk-SVBR3GWG.js} +6 -6
  341. package/dist/{chunk-DAPK3ADA.js → chunk-TC3EPGGJ.js} +4 -4
  342. package/dist/{chunk-DEE6IPGI.js → chunk-TJXNVREN.js} +2 -2
  343. package/dist/{chunk-WREIYOXN.js → chunk-TLMLEC4F.js} +7 -7
  344. package/dist/{chunk-57ZSQB5V.js → chunk-TLRTLYVT.js} +2 -2
  345. package/dist/{chunk-DUWF5LUK.js → chunk-TNCCCLLO.js} +4 -4
  346. package/dist/{chunk-JPVDZXXX.js → chunk-U5RQBHRY.js} +2 -2
  347. package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
  348. package/dist/chunk-V32X24SH.js +87 -0
  349. package/dist/chunk-V32X24SH.js.map +1 -0
  350. package/dist/{chunk-J4W4TQPC.js → chunk-V5P5Q6HM.js} +6 -6
  351. package/dist/{chunk-DQOLW4B5.js → chunk-VBMV2W4K.js} +3 -3
  352. package/dist/{chunk-57W2C7HY.js → chunk-VOHT6ZX3.js} +8 -8
  353. package/dist/{chunk-QYNCPS5W.js → chunk-WBKWIFXA.js} +6 -6
  354. package/dist/{chunk-VJFH2AXT.js → chunk-WG7HIXJ7.js} +8 -8
  355. package/dist/{chunk-VMXDTCYF.js → chunk-WMALDOF5.js} +4 -4
  356. package/dist/{chunk-D5GCWSGS.js → chunk-WP6Y2NJQ.js} +2 -2
  357. package/dist/{chunk-2L2NWXWJ.js → chunk-WRXD464C.js} +2 -2
  358. package/dist/{chunk-KT6HWAEN.js → chunk-WZUNBSS7.js} +2 -2
  359. package/dist/{chunk-NWQWUYOV.js → chunk-XGB3YF32.js} +2 -2
  360. package/dist/chunk-XJQNSMGA.js +10 -0
  361. package/dist/chunk-XJQNSMGA.js.map +1 -0
  362. package/dist/{chunk-QRX5BYUQ.js → chunk-Y6KPZQPI.js} +4 -4
  363. package/dist/{chunk-ZYKDPX3W.js → chunk-YY66AKSK.js} +2 -2
  364. package/dist/{chunk-62NA6IF3.js → chunk-ZBZ76VR7.js} +3 -3
  365. package/dist/{chunk-OXQP3N6X.js → chunk-ZTZ6S5Q6.js} +4 -4
  366. package/dist/data-display/Alert.js +4 -4
  367. package/dist/data-display/Avatar.js +5 -5
  368. package/dist/data-display/Badge.js +6 -6
  369. package/dist/data-display/Banner.js +2 -2
  370. package/dist/data-display/CardKit.js +15 -15
  371. package/dist/data-display/Carousel.js +5 -5
  372. package/dist/data-display/Chart.js +15 -15
  373. package/dist/data-display/Chip.js +1 -0
  374. package/dist/data-display/DataViews.js +88 -88
  375. package/dist/data-display/DescriptionItem.js +5 -5
  376. package/dist/data-display/FleetMap.js +15 -15
  377. package/dist/data-display/HoverCard.js +2 -2
  378. package/dist/data-display/Lightbox.js +3 -3
  379. package/dist/data-display/MapPreview.js +9 -9
  380. package/dist/data-display/Progress.js +5 -5
  381. package/dist/data-display/Sheet.js +5 -5
  382. package/dist/data-display/Table.js +3 -3
  383. package/dist/en-US.js +15 -11
  384. package/dist/feedback/ConfirmAction.js +9 -9
  385. package/dist/feedback/Modal.js +2 -2
  386. package/dist/feedback/NotificationStatusNotice.js +8 -8
  387. package/dist/form/AddressAutocomplete.js +5 -5
  388. package/dist/form/Autocomplete.js +1 -1
  389. package/dist/form/Button.js +5 -5
  390. package/dist/form/Calendar.js +4 -4
  391. package/dist/form/CategorySelect.js +9 -9
  392. package/dist/form/CepField.js +2 -2
  393. package/dist/form/Checkbox.js +3 -3
  394. package/dist/form/CodeEditor.js +1 -1
  395. package/dist/form/Command.js +2 -2
  396. package/dist/form/DateRangePicker.js +7 -7
  397. package/dist/form/Input.js +1 -1
  398. package/dist/form/InputOTP.js +2 -2
  399. package/dist/form/Label.js +2 -2
  400. package/dist/form/Menubar.js +2 -2
  401. package/dist/form/NumberField.js +22 -0
  402. package/dist/form/NumberField.js.map +1 -0
  403. package/dist/form/Switch.js +5 -5
  404. package/dist/form/UploadButton.js +2 -2
  405. package/dist/form/total-form.js +24 -24
  406. package/dist/icons.js +7 -6
  407. package/dist/layout/Box.js +5 -5
  408. package/dist/layout/Collapsible.js +1 -0
  409. package/dist/layout/ContentToolbar.js +3 -3
  410. package/dist/layout/ScrollArea.js +1 -1
  411. package/dist/layout/SettingCard.js +70 -0
  412. package/dist/layout/SettingCard.js.map +1 -0
  413. package/dist/layout/SettingsLayout.js +3 -3
  414. package/dist/layout/Stack.js +6 -6
  415. package/dist/locales.js +37 -23
  416. package/dist/locales.js.map +1 -1
  417. package/dist/navigation/AppHeader.js +11 -11
  418. package/dist/navigation/CommandPalette.js +3 -3
  419. package/dist/navigation/Pagination.js +2 -2
  420. package/dist/navigation/Tabs.js +2 -2
  421. package/dist/provider.js +5 -5
  422. package/dist/pt-BR.js +12 -8
  423. package/dist/social-login-button.js +11 -11
  424. package/dist/tokens.js +2 -2
  425. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  426. package/dist/types/components/form/Input/Input.types.d.ts +10 -0
  427. package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
  428. package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
  429. package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
  430. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
  431. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
  432. package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
  433. package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
  434. package/dist/types/components/form/NumberField/index.d.ts +3 -0
  435. package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
  436. package/dist/types/components/form/index.d.ts +1 -0
  437. package/dist/types/components/form/index.d.ts.map +1 -1
  438. package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
  439. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
  440. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts +19 -0
  441. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts.map +1 -0
  442. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
  443. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
  444. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
  445. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
  446. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
  447. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
  448. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts +12 -0
  449. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts.map +1 -0
  450. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
  451. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
  452. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
  453. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
  454. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
  455. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
  456. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
  457. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
  458. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
  459. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
  460. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
  461. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
  462. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
  463. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
  464. package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
  465. package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
  466. package/dist/types/components/layout/index.d.ts +1 -0
  467. package/dist/types/components/layout/index.d.ts.map +1 -1
  468. package/dist/types/copy/layout.d.ts +27 -0
  469. package/dist/types/copy/layout.d.ts.map +1 -1
  470. package/dist/types/en-US.layout.d.ts +3 -1
  471. package/dist/types/en-US.layout.d.ts.map +1 -1
  472. package/dist/types/locales.d.ts +3 -1
  473. package/dist/types/locales.d.ts.map +1 -1
  474. package/dist/types/pt-BR.layout.d.ts +3 -1
  475. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  476. package/dist/typography/Heading.js +5 -5
  477. package/dist/typography/Paragraph.js +3 -3
  478. package/dist/typography/Text.js +4 -4
  479. package/dist/user-avatar.js +11 -11
  480. package/dist/utility/InstallPrompt.js +4 -4
  481. package/package.json +9 -1
  482. package/src/components/form/Input/Input.tsx +25 -12
  483. package/src/components/form/Input/Input.types.ts +10 -0
  484. package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
  485. package/src/components/form/NumberField/NumberField.md +86 -0
  486. package/src/components/form/NumberField/NumberField.tsx +88 -0
  487. package/src/components/form/NumberField/NumberField.types.ts +43 -0
  488. package/src/components/form/NumberField/index.ts +2 -0
  489. package/src/components/form/NumberField/tests.md +51 -0
  490. package/src/components/form/NumberField/track.md +48 -0
  491. package/src/components/form/index.ts +1 -0
  492. package/src/components/layout/SettingCard/SettingCard.focus.ts +49 -0
  493. package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
  494. package/src/components/layout/SettingCard/SettingCard.md +121 -0
  495. package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
  496. package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
  497. package/src/components/layout/SettingCard/SettingCard.rem.ts +14 -0
  498. package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
  499. package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
  500. package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
  501. package/src/components/layout/SettingCard/SettingGrid.md +65 -0
  502. package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
  503. package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
  504. package/src/components/layout/SettingCard/SettingGroup.md +81 -0
  505. package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
  506. package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
  507. package/src/components/layout/SettingCard/SettingToggle.md +61 -0
  508. package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
  509. package/src/components/layout/SettingCard/index.ts +18 -0
  510. package/src/components/layout/SettingCard/tests.md +68 -0
  511. package/src/components/layout/SettingCard/track.md +63 -0
  512. package/src/components/layout/index.ts +1 -0
  513. package/src/copy/layout.ts +29 -0
  514. package/src/en-US.layout.ts +16 -0
  515. package/src/locales.ts +10 -0
  516. package/src/pt-BR.layout.ts +16 -0
  517. package/dist/chunk-A7RIZOAL.js +0 -13
  518. package/dist/chunk-A7RIZOAL.js.map +0 -1
  519. package/dist/chunk-BY3JEK5T.js +0 -1
  520. package/dist/chunk-FZJ2FTGE.js +0 -1
  521. package/dist/chunk-GRHECKHU.js +0 -13
  522. package/dist/chunk-GRHECKHU.js.map +0 -1
  523. package/dist/chunk-XXE6NTJB.js.map +0 -1
  524. /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
  525. /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
  526. /package/dist/{chunk-TSEWUY4V.js.map → chunk-23LZNANO.js.map} +0 -0
  527. /package/dist/{chunk-K2EHH7TC.js.map → chunk-2CJXYSOE.js.map} +0 -0
  528. /package/dist/{chunk-HGJHZ5PE.js.map → chunk-2DHVWNTO.js.map} +0 -0
  529. /package/dist/{chunk-K2JH7QPR.js.map → chunk-2F2HPQNQ.js.map} +0 -0
  530. /package/dist/{chunk-C5YBXQTK.js.map → chunk-2QJKWH7Q.js.map} +0 -0
  531. /package/dist/{chunk-W3FAKT3D.js.map → chunk-2SWQ6HIK.js.map} +0 -0
  532. /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
  533. /package/dist/{chunk-3PUOLOEP.js.map → chunk-37L6O266.js.map} +0 -0
  534. /package/dist/{chunk-EVXFEXBS.js.map → chunk-3ELEPGCP.js.map} +0 -0
  535. /package/dist/{chunk-RVGG5YJY.js.map → chunk-3HJLJFLA.js.map} +0 -0
  536. /package/dist/{chunk-VESIQYBF.js.map → chunk-3ZTC2VEO.js.map} +0 -0
  537. /package/dist/{chunk-46UPILLK.js.map → chunk-4ETQRBZC.js.map} +0 -0
  538. /package/dist/{chunk-PFZAUMJA.js.map → chunk-4JGBWPG7.js.map} +0 -0
  539. /package/dist/{chunk-7IKWIWWV.js.map → chunk-53LG7IT4.js.map} +0 -0
  540. /package/dist/{chunk-S2GDYA6R.js.map → chunk-5GMHJ7Y5.js.map} +0 -0
  541. /package/dist/{chunk-IABE56TG.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  542. /package/dist/{chunk-4XVH6IWN.js.map → chunk-66KAONOC.js.map} +0 -0
  543. /package/dist/{chunk-4MXFPDKL.js.map → chunk-6CAP4STN.js.map} +0 -0
  544. /package/dist/{chunk-C5EFVSBN.js.map → chunk-6HJLYSBM.js.map} +0 -0
  545. /package/dist/{chunk-PZAXUO6F.js.map → chunk-6P3CRSAW.js.map} +0 -0
  546. /package/dist/{chunk-Y5UCOBQN.js.map → chunk-6SK3MTYJ.js.map} +0 -0
  547. /package/dist/{chunk-LBLX3Q2C.js.map → chunk-6VMTF23F.js.map} +0 -0
  548. /package/dist/{chunk-EPRA5QLB.js.map → chunk-6XUZDJZY.js.map} +0 -0
  549. /package/dist/{chunk-B6IURHSZ.js.map → chunk-7DNQHMDO.js.map} +0 -0
  550. /package/dist/{chunk-SLMA4UQS.js.map → chunk-A3TISECJ.js.map} +0 -0
  551. /package/dist/{chunk-FVPN4YKW.js.map → chunk-ABSHD35E.js.map} +0 -0
  552. /package/dist/{chunk-PQECNGDE.js.map → chunk-AGYGNNOM.js.map} +0 -0
  553. /package/dist/{chunk-SUTNQG7E.js.map → chunk-ALU3BH37.js.map} +0 -0
  554. /package/dist/{chunk-MGPA6KTM.js.map → chunk-AMFP64L3.js.map} +0 -0
  555. /package/dist/{chunk-ALEITBJX.js.map → chunk-BAISDZ3L.js.map} +0 -0
  556. /package/dist/{chunk-CZJLWCEG.js.map → chunk-BPYPUEM5.js.map} +0 -0
  557. /package/dist/{chunk-3MALHTZQ.js.map → chunk-C4J7PVVI.js.map} +0 -0
  558. /package/dist/{chunk-7OZBOS75.js.map → chunk-CK2NTT4S.js.map} +0 -0
  559. /package/dist/{chunk-Q5NAZ7TW.js.map → chunk-CSGUSHAO.js.map} +0 -0
  560. /package/dist/{chunk-YTYROOLY.js.map → chunk-D22EGB3T.js.map} +0 -0
  561. /package/dist/{chunk-DH5OA4VK.js.map → chunk-DBV6DDQI.js.map} +0 -0
  562. /package/dist/{chunk-6PKVHFCK.js.map → chunk-DCRNBKMY.js.map} +0 -0
  563. /package/dist/{chunk-PMS3H3OO.js.map → chunk-DF2FFYZ7.js.map} +0 -0
  564. /package/dist/{chunk-RBGOGTT2.js.map → chunk-DWZ7FLA7.js.map} +0 -0
  565. /package/dist/{chunk-237NDIT2.js.map → chunk-E3O72LBJ.js.map} +0 -0
  566. /package/dist/{chunk-OH3YGJT5.js.map → chunk-EMNGIYH6.js.map} +0 -0
  567. /package/dist/{chunk-XFUNJYFT.js.map → chunk-EPNUVSNK.js.map} +0 -0
  568. /package/dist/{chunk-35UG2QDB.js.map → chunk-EUEUZI4L.js.map} +0 -0
  569. /package/dist/{chunk-BTKMGXAK.js.map → chunk-FCG5YR6T.js.map} +0 -0
  570. /package/dist/{chunk-2UBFDRL7.js.map → chunk-FCTURAZF.js.map} +0 -0
  571. /package/dist/{chunk-UC6A6ASM.js.map → chunk-FFQKUTO6.js.map} +0 -0
  572. /package/dist/{chunk-J3ZP6EUS.js.map → chunk-FNIHELAR.js.map} +0 -0
  573. /package/dist/{chunk-SQV3HPTZ.js.map → chunk-G76H5PEM.js.map} +0 -0
  574. /package/dist/{chunk-FLIMEQUA.js.map → chunk-GBX5ACPF.js.map} +0 -0
  575. /package/dist/{chunk-22ZJH7RY.js.map → chunk-GN26LHNJ.js.map} +0 -0
  576. /package/dist/{chunk-5KFZGB5U.js.map → chunk-GS7ESED2.js.map} +0 -0
  577. /package/dist/{chunk-FGUK3D54.js.map → chunk-GZHZ7OTY.js.map} +0 -0
  578. /package/dist/{chunk-BLBOYCOV.js.map → chunk-HKV4MQ2W.js.map} +0 -0
  579. /package/dist/{chunk-K4JRHQMI.js.map → chunk-HMJM6DKA.js.map} +0 -0
  580. /package/dist/{chunk-ZWIDQEJ4.js.map → chunk-HT7DWIR4.js.map} +0 -0
  581. /package/dist/{chunk-UVD5NFRF.js.map → chunk-I3PGXMVJ.js.map} +0 -0
  582. /package/dist/{chunk-Z52HVR4J.js.map → chunk-I4IPGIRF.js.map} +0 -0
  583. /package/dist/{chunk-HR7YTBR7.js.map → chunk-IASDP44E.js.map} +0 -0
  584. /package/dist/{chunk-VKH7AENA.js.map → chunk-IFNJWH55.js.map} +0 -0
  585. /package/dist/{chunk-PUBPZOQJ.js.map → chunk-IPE5FFFD.js.map} +0 -0
  586. /package/dist/{chunk-HP2ODXNA.js.map → chunk-IPS55KWK.js.map} +0 -0
  587. /package/dist/{chunk-BILJU2DX.js.map → chunk-JFOATIMF.js.map} +0 -0
  588. /package/dist/{chunk-MCBG6R5A.js.map → chunk-JH77UDWB.js.map} +0 -0
  589. /package/dist/{chunk-XYDW5RQB.js.map → chunk-JTJR63WI.js.map} +0 -0
  590. /package/dist/{chunk-IVVOIDE5.js.map → chunk-KHVKQPQ5.js.map} +0 -0
  591. /package/dist/{chunk-T5WNNEP5.js.map → chunk-KVCS6IEI.js.map} +0 -0
  592. /package/dist/{chunk-HZ6L7WXE.js.map → chunk-LGOIBC2C.js.map} +0 -0
  593. /package/dist/{chunk-BKAB4KZK.js.map → chunk-LKAKYP42.js.map} +0 -0
  594. /package/dist/{chunk-ZPIMPOHV.js.map → chunk-M7E66OSC.js.map} +0 -0
  595. /package/dist/{chunk-VVXA7T2M.js.map → chunk-MG6XC5SK.js.map} +0 -0
  596. /package/dist/{chunk-554SVTCN.js.map → chunk-MKZNP32D.js.map} +0 -0
  597. /package/dist/{chunk-MSS6IU5X.js.map → chunk-N6V6BFKD.js.map} +0 -0
  598. /package/dist/{chunk-OLQDB346.js.map → chunk-NH4XD62U.js.map} +0 -0
  599. /package/dist/{chunk-GH2DC7PS.js.map → chunk-NPN7JTRM.js.map} +0 -0
  600. /package/dist/{chunk-AIBNBWQU.js.map → chunk-NR7LSYLM.js.map} +0 -0
  601. /package/dist/{chunk-3XLDTVLC.js.map → chunk-NU2HND2Y.js.map} +0 -0
  602. /package/dist/{chunk-T2VO32Z2.js.map → chunk-OG5LJPI3.js.map} +0 -0
  603. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  604. /package/dist/{chunk-URVNHKM2.js.map → chunk-ON7PRAAC.js.map} +0 -0
  605. /package/dist/{chunk-ZJ66D63E.js.map → chunk-OTMJBGJA.js.map} +0 -0
  606. /package/dist/{chunk-3TFUAKWJ.js.map → chunk-OVOSDXFM.js.map} +0 -0
  607. /package/dist/{chunk-SONWG2RT.js.map → chunk-OW4UEIXA.js.map} +0 -0
  608. /package/dist/{chunk-23FCBIUN.js.map → chunk-P7FQUGED.js.map} +0 -0
  609. /package/dist/{chunk-V7F53GEO.js.map → chunk-P7IVAMAU.js.map} +0 -0
  610. /package/dist/{chunk-JYF3HT7M.js.map → chunk-PD6JRCUT.js.map} +0 -0
  611. /package/dist/{chunk-B474PL5O.js.map → chunk-PKFFJAQ6.js.map} +0 -0
  612. /package/dist/{chunk-EUKYQXYU.js.map → chunk-PLDVEJPR.js.map} +0 -0
  613. /package/dist/{chunk-HT4B2DJU.js.map → chunk-PZEC5CQA.js.map} +0 -0
  614. /package/dist/{chunk-J2UZOMTA.js.map → chunk-Q6STVEYJ.js.map} +0 -0
  615. /package/dist/{chunk-6IKX5IIX.js.map → chunk-Q75SJ35X.js.map} +0 -0
  616. /package/dist/{chunk-WC5XYWTE.js.map → chunk-QGJBNVC2.js.map} +0 -0
  617. /package/dist/{chunk-KFZT3PHA.js.map → chunk-QHJ7FTZK.js.map} +0 -0
  618. /package/dist/{chunk-NUB4T3RQ.js.map → chunk-QJ6KWJJH.js.map} +0 -0
  619. /package/dist/{chunk-CZPU5TW3.js.map → chunk-RFZU5BTG.js.map} +0 -0
  620. /package/dist/{chunk-JGV66VUK.js.map → chunk-RLCMVSJZ.js.map} +0 -0
  621. /package/dist/{chunk-JB67KPGM.js.map → chunk-RRO2EOJB.js.map} +0 -0
  622. /package/dist/{chunk-JJ3VR7WX.js.map → chunk-RZLWW3KC.js.map} +0 -0
  623. /package/dist/{chunk-MZQTHSLN.js.map → chunk-S7HRED4D.js.map} +0 -0
  624. /package/dist/{chunk-EXJBPKGW.js.map → chunk-SHDIZSN5.js.map} +0 -0
  625. /package/dist/{chunk-GJQYM3PM.js.map → chunk-SHQWIDD5.js.map} +0 -0
  626. /package/dist/{chunk-L6TCIZFR.js.map → chunk-SUAGBFYJ.js.map} +0 -0
  627. /package/dist/{chunk-K5V3KCFI.js.map → chunk-SVBR3GWG.js.map} +0 -0
  628. /package/dist/{chunk-DAPK3ADA.js.map → chunk-TC3EPGGJ.js.map} +0 -0
  629. /package/dist/{chunk-DEE6IPGI.js.map → chunk-TJXNVREN.js.map} +0 -0
  630. /package/dist/{chunk-WREIYOXN.js.map → chunk-TLMLEC4F.js.map} +0 -0
  631. /package/dist/{chunk-57ZSQB5V.js.map → chunk-TLRTLYVT.js.map} +0 -0
  632. /package/dist/{chunk-DUWF5LUK.js.map → chunk-TNCCCLLO.js.map} +0 -0
  633. /package/dist/{chunk-JPVDZXXX.js.map → chunk-U5RQBHRY.js.map} +0 -0
  634. /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
  635. /package/dist/{chunk-J4W4TQPC.js.map → chunk-V5P5Q6HM.js.map} +0 -0
  636. /package/dist/{chunk-DQOLW4B5.js.map → chunk-VBMV2W4K.js.map} +0 -0
  637. /package/dist/{chunk-57W2C7HY.js.map → chunk-VOHT6ZX3.js.map} +0 -0
  638. /package/dist/{chunk-QYNCPS5W.js.map → chunk-WBKWIFXA.js.map} +0 -0
  639. /package/dist/{chunk-VJFH2AXT.js.map → chunk-WG7HIXJ7.js.map} +0 -0
  640. /package/dist/{chunk-VMXDTCYF.js.map → chunk-WMALDOF5.js.map} +0 -0
  641. /package/dist/{chunk-D5GCWSGS.js.map → chunk-WP6Y2NJQ.js.map} +0 -0
  642. /package/dist/{chunk-2L2NWXWJ.js.map → chunk-WRXD464C.js.map} +0 -0
  643. /package/dist/{chunk-KT6HWAEN.js.map → chunk-WZUNBSS7.js.map} +0 -0
  644. /package/dist/{chunk-NWQWUYOV.js.map → chunk-XGB3YF32.js.map} +0 -0
  645. /package/dist/{chunk-QRX5BYUQ.js.map → chunk-Y6KPZQPI.js.map} +0 -0
  646. /package/dist/{chunk-ZYKDPX3W.js.map → chunk-YY66AKSK.js.map} +0 -0
  647. /package/dist/{chunk-62NA6IF3.js.map → chunk-ZBZ76VR7.js.map} +0 -0
  648. /package/dist/{chunk-OXQP3N6X.js.map → chunk-ZTZ6S5Q6.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pt-BR.layout.d.ts","sourceRoot":"","sources":["../../src/pt-BR.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC"}
1
+ {"version":3,"file":"pt-BR.layout.d.ts","sourceRoot":"","sources":["../../src/pt-BR.layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAEhB,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAOrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAGvC,CAAC"}
@@ -1,14 +1,14 @@
1
1
  import "../chunk-6GP2DOOO.js";
2
2
  import {
3
3
  Heading
4
- } from "../chunk-SLMA4UQS.js";
5
- import "../chunk-XYDW5RQB.js";
6
- import "../chunk-EUKYQXYU.js";
4
+ } from "../chunk-A3TISECJ.js";
5
+ import "../chunk-JTJR63WI.js";
6
+ import "../chunk-PLDVEJPR.js";
7
7
  import "../chunk-TYJR4GOF.js";
8
8
  import "../chunk-PT6TCWIW.js";
9
- import "../chunk-SONWG2RT.js";
10
- import "../chunk-AG66JBNH.js";
9
+ import "../chunk-OW4UEIXA.js";
11
10
  import "../chunk-2BYKTBDL.js";
11
+ import "../chunk-AG66JBNH.js";
12
12
  import "../chunk-6JAIFIPW.js";
13
13
  import "../chunk-FZXKH2ZT.js";
14
14
  import "../chunk-PZ5AY32C.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  Paragraph
3
- } from "../chunk-NWQWUYOV.js";
3
+ } from "../chunk-XGB3YF32.js";
4
4
  import "../chunk-QKLGH3RZ.js";
5
5
  import "../chunk-TYJR4GOF.js";
6
- import "../chunk-SONWG2RT.js";
7
- import "../chunk-AG66JBNH.js";
6
+ import "../chunk-OW4UEIXA.js";
8
7
  import "../chunk-2BYKTBDL.js";
8
+ import "../chunk-AG66JBNH.js";
9
9
  import "../chunk-6JAIFIPW.js";
10
10
  import "../chunk-FZXKH2ZT.js";
11
11
  import "../chunk-PZ5AY32C.js";
@@ -1,12 +1,12 @@
1
1
  import "../chunk-VUHLNYAE.js";
2
2
  import {
3
3
  Text
4
- } from "../chunk-YTYROOLY.js";
5
- import "../chunk-EPRA5QLB.js";
4
+ } from "../chunk-D22EGB3T.js";
5
+ import "../chunk-6XUZDJZY.js";
6
6
  import "../chunk-TYJR4GOF.js";
7
- import "../chunk-SONWG2RT.js";
8
- import "../chunk-AG66JBNH.js";
7
+ import "../chunk-OW4UEIXA.js";
9
8
  import "../chunk-2BYKTBDL.js";
9
+ import "../chunk-AG66JBNH.js";
10
10
  import "../chunk-6JAIFIPW.js";
11
11
  import "../chunk-FZXKH2ZT.js";
12
12
  import "../chunk-PZ5AY32C.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  UserAvatar,
3
3
  UserMenu
4
- } from "./chunk-554SVTCN.js";
4
+ } from "./chunk-MKZNP32D.js";
5
5
  import "./chunk-UDQSIRAP.js";
6
- import "./chunk-HGJHZ5PE.js";
7
- import "./chunk-35UG2QDB.js";
6
+ import "./chunk-2DHVWNTO.js";
7
+ import "./chunk-3ZVUNSFF.js";
8
+ import "./chunk-EUEUZI4L.js";
8
9
  import "./chunk-XRMZMBE3.js";
9
10
  import "./chunk-FAITHWIO.js";
10
- import "./chunk-3ZVUNSFF.js";
11
11
  import "./chunk-VUHLNYAE.js";
12
12
  import "./chunk-2GSIEDGN.js";
13
13
  import "./chunk-AVI3XHRQ.js";
@@ -16,16 +16,16 @@ import "./chunk-BEBLRL5D.js";
16
16
  import "./chunk-6Q6T3FW5.js";
17
17
  import "./chunk-BA4RHQ3B.js";
18
18
  import "./chunk-73BEVJCS.js";
19
- import "./chunk-BKAB4KZK.js";
20
- import "./chunk-TAMIZE4Q.js";
21
- import "./chunk-TSEWUY4V.js";
19
+ import "./chunk-LKAKYP42.js";
20
+ import "./chunk-23LZNANO.js";
22
21
  import "./chunk-5LQ7PKMW.js";
23
- import "./chunk-YTYROOLY.js";
24
- import "./chunk-EPRA5QLB.js";
22
+ import "./chunk-TAMIZE4Q.js";
23
+ import "./chunk-D22EGB3T.js";
24
+ import "./chunk-6XUZDJZY.js";
25
25
  import "./chunk-TYJR4GOF.js";
26
- import "./chunk-SONWG2RT.js";
27
- import "./chunk-AG66JBNH.js";
26
+ import "./chunk-OW4UEIXA.js";
28
27
  import "./chunk-2BYKTBDL.js";
28
+ import "./chunk-AG66JBNH.js";
29
29
  import "./chunk-6JAIFIPW.js";
30
30
  import "./chunk-FZXKH2ZT.js";
31
31
  import "./chunk-PZ5AY32C.js";
@@ -1,10 +1,12 @@
1
1
  import "../chunk-3QQVEYOR.js";
2
2
  import {
3
3
  InstallPrompt
4
- } from "../chunk-IABE56TG.js";
4
+ } from "../chunk-5ZOJLYD2.js";
5
+ import "../chunk-GY62N32G.js";
5
6
  import {
6
7
  usePwaInstall
7
- } from "../chunk-S2GDYA6R.js";
8
+ } from "../chunk-5GMHJ7Y5.js";
9
+ import "../chunk-WXYLH3QZ.js";
8
10
  import {
9
11
  PWA_INSTALL_AVAILABLE_EVENT,
10
12
  PWA_INSTALL_STASH_KEY,
@@ -12,8 +14,6 @@ import {
12
14
  readPwaInstallStash,
13
15
  resetPwaInstallStash
14
16
  } from "../chunk-UUL44SUX.js";
15
- import "../chunk-GY62N32G.js";
16
- import "../chunk-WXYLH3QZ.js";
17
17
  import "../chunk-PZ5AY32C.js";
18
18
  export {
19
19
  InstallPrompt,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.30.2",
3
+ "version": "6.30.3",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -420,6 +420,10 @@
420
420
  "types": "./dist/types/components/form/Menubar/index.d.ts",
421
421
  "default": "./dist/form/Menubar.js"
422
422
  },
423
+ "./form/NumberField": {
424
+ "types": "./dist/types/components/form/NumberField/index.d.ts",
425
+ "default": "./dist/form/NumberField.js"
426
+ },
423
427
  "./form/PasswordStrength": {
424
428
  "types": "./dist/types/components/form/PasswordStrength/index.d.ts",
425
429
  "default": "./dist/form/PasswordStrength.js"
@@ -536,6 +540,10 @@
536
540
  "types": "./dist/types/components/layout/Separator/index.d.ts",
537
541
  "default": "./dist/layout/Separator.js"
538
542
  },
543
+ "./layout/SettingCard": {
544
+ "types": "./dist/types/components/layout/SettingCard/index.d.ts",
545
+ "default": "./dist/layout/SettingCard.js"
546
+ },
539
547
  "./layout/SettingsLayout": {
540
548
  "types": "./dist/types/components/layout/SettingsLayout/index.d.ts",
541
549
  "default": "./dist/layout/SettingsLayout.js"
@@ -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';