@12-apps/ui 6.40.0 → 6.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +43 -5
  3. package/dist/_internal/components/data-display/Badge/Badge.js +3 -3
  4. package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
  5. package/dist/_internal/components/data-display/Badge/BadgeContent.js +3 -3
  6. package/dist/_internal/components/data-display/CardKit/CardKebab.js +5 -5
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
  9. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
  10. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  11. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +3 -3
  12. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +3 -3
  13. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  14. package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
  15. package/dist/_internal/components/data-display/Chart/chart-context.js +3 -3
  16. package/dist/_internal/components/data-display/Chart/chart-internals.js +3 -3
  17. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  18. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +48 -48
  19. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +63 -63
  20. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +7 -7
  21. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +8 -8
  22. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +14 -14
  23. package/dist/_internal/components/data-display/DataViews/base-card.js +3 -3
  24. package/dist/_internal/components/data-display/DataViews/base-list-card.js +3 -3
  25. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +18 -18
  27. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +6 -6
  28. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +3 -3
  29. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
  30. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
  31. package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
  32. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +23 -23
  33. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +7 -7
  34. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +5 -5
  35. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +45 -45
  36. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +29 -29
  37. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +14 -14
  38. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +17 -17
  39. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +3 -3
  40. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +5 -5
  41. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +6 -6
  42. package/dist/_internal/components/data-display/DataViews/data-views-search.js +3 -3
  43. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
  44. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -17
  45. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +24 -24
  46. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -16
  47. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
  48. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +7 -7
  49. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +7 -7
  50. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +6 -6
  51. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  52. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
  53. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
  54. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +5 -5
  55. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +3 -3
  56. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
  57. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  58. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +3 -3
  59. package/dist/_internal/components/data-display/index.js +9 -9
  60. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
  61. package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
  62. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +5 -5
  63. package/dist/_internal/components/feedback/index.js +8 -8
  64. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
  65. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +5 -5
  66. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +4 -4
  67. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +4 -4
  68. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +3 -3
  69. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +4 -4
  70. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +3 -3
  71. package/dist/_internal/components/form/Button/Button.js +4 -4
  72. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  73. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -8
  74. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -4
  75. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -4
  76. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +5 -5
  77. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +4 -4
  78. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
  79. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -3
  80. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -4
  81. package/dist/_internal/components/form/CepField/CepField.js +5 -5
  82. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  83. package/dist/_internal/components/form/Command/Command.js +3 -3
  84. package/dist/_internal/components/form/Command/Command.styles.js +3 -3
  85. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -3
  86. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +5 -5
  87. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
  88. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +4 -4
  89. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +5 -5
  90. package/dist/_internal/components/form/Input/Input.js +4 -4
  91. package/dist/_internal/components/form/Input/Input.styles.js +3 -3
  92. package/dist/_internal/components/form/InputOTP/InputOTP.js +4 -4
  93. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -3
  94. package/dist/_internal/components/form/Label/Label.js +3 -3
  95. package/dist/_internal/components/form/Label/Label.styles.js +3 -3
  96. package/dist/_internal/components/form/Menubar/Menubar.item.js +3 -3
  97. package/dist/_internal/components/form/Menubar/Menubar.js +3 -3
  98. package/dist/_internal/components/form/Menubar/Menubar.styles.js +3 -3
  99. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +3 -3
  100. package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
  101. package/dist/_internal/components/form/NumberField/NumberField.js +28 -0
  102. package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
  103. package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
  104. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  105. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -5
  106. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -3
  107. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -4
  108. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +3 -3
  109. package/dist/_internal/components/form/Select/Select.js +3 -3
  110. package/dist/_internal/components/form/Switch/Switch.js +5 -5
  111. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  112. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  113. package/dist/_internal/components/form/Textarea/Textarea.js +3 -3
  114. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -4
  115. package/dist/_internal/components/form/Toggle/Toggle.js +4 -4
  116. package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -3
  117. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -3
  118. package/dist/_internal/components/form/index.js +53 -47
  119. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
  120. package/dist/_internal/components/form/total-form/Fields/CepField.js +6 -6
  121. package/dist/_internal/components/form/total-form/Fields/SelectField.js +4 -4
  122. package/dist/_internal/components/form/total-form/Fields/TextField.js +5 -5
  123. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -4
  124. package/dist/_internal/components/form/total-form/Fields/index.js +24 -24
  125. package/dist/_internal/components/form/total-form/SubmitButton.js +5 -5
  126. package/dist/_internal/components/index.js +155 -116
  127. package/dist/_internal/components/layout/Box/Box.js +6 -6
  128. package/dist/_internal/components/layout/Card/Card.js +2 -2
  129. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +3 -3
  130. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
  131. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +4 -4
  132. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +3 -3
  133. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +3 -3
  134. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +3 -3
  135. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +3 -3
  136. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +2 -2
  137. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
  138. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
  139. package/dist/_internal/components/layout/SettingCard/SettingCard.js +54 -0
  140. package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
  141. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
  142. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
  143. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +59 -0
  144. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
  145. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +37 -0
  146. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
  147. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
  148. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
  149. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +56 -0
  150. package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
  151. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
  152. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
  153. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +65 -0
  154. package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
  155. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +63 -0
  156. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
  157. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +65 -0
  158. package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
  159. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +4 -4
  160. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +3 -3
  161. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  162. package/dist/_internal/components/layout/Stack/Stack.js +7 -7
  163. package/dist/_internal/components/layout/TableFilter/TableFilter.js +3 -3
  164. package/dist/_internal/components/layout/index.js +88 -26
  165. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -8
  166. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +3 -3
  167. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +2 -2
  168. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +4 -4
  169. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
  170. package/dist/_internal/components/navigation/Pagination/Pagination.js +4 -4
  171. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +3 -3
  172. package/dist/_internal/components/navigation/Tabs/Tabs.js +4 -4
  173. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +2 -2
  174. package/dist/_internal/components/navigation/index.js +27 -27
  175. package/dist/_internal/components/typography/index.js +4 -4
  176. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  177. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +3 -3
  178. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
  179. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
  180. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -3
  181. package/dist/_internal/components/utility/index.js +16 -16
  182. package/dist/_internal/en-US.data-display.js +2 -2
  183. package/dist/_internal/en-US.layout.js +5 -1
  184. package/dist/_internal/icons/Icon.js +6 -6
  185. package/dist/_internal/provider/UiProvider.js +5 -5
  186. package/dist/_internal/provider/mui-bridge.js +4 -4
  187. package/dist/_internal/provider/use-ui-theme.js +5 -5
  188. package/dist/_internal/pt-BR.data-display.js +2 -2
  189. package/dist/_internal/pt-BR.layout.js +5 -1
  190. package/dist/_internal/social-login-button/social-login-button.js +7 -7
  191. package/dist/_internal/tokens/density.js +3 -3
  192. package/dist/_internal/tokens/field-height.js +2 -2
  193. package/dist/_internal/user-avatar/user-avatar.js +7 -7
  194. package/dist/charts.js +3 -3
  195. package/dist/chunk-2GTORM5E.js +1 -0
  196. package/dist/chunk-2GTORM5E.js.map +1 -0
  197. package/dist/{chunk-3PGFMBEI.js → chunk-2LKWJV65.js} +5 -5
  198. package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
  199. package/dist/chunk-33L26P4J.js +27 -0
  200. package/dist/chunk-33L26P4J.js.map +1 -0
  201. package/dist/{chunk-CKPFLEOL.js → chunk-3CUWQXTG.js} +3 -3
  202. package/dist/{chunk-GVFPOKJW.js → chunk-3CYTVX4T.js} +5 -5
  203. package/dist/chunk-3DO5AJCG.js +117 -0
  204. package/dist/chunk-3DO5AJCG.js.map +1 -0
  205. package/dist/{chunk-TJPQIFI4.js → chunk-3EPA2A4M.js} +8 -8
  206. package/dist/{chunk-HDELNMZC.js → chunk-3MJHHPRW.js} +2 -2
  207. package/dist/chunk-3U7WKBMH.js +27 -0
  208. package/dist/chunk-3U7WKBMH.js.map +1 -0
  209. package/dist/{chunk-RNC574FS.js → chunk-3UEZ6NUI.js} +2 -2
  210. package/dist/{chunk-OXLOC6TC.js → chunk-3XS37SQT.js} +3 -3
  211. package/dist/{chunk-2Q5QHSU2.js → chunk-44USLRMT.js} +8 -8
  212. package/dist/{chunk-O7OQZJ3D.js → chunk-4GN2RLYL.js} +2 -2
  213. package/dist/{chunk-QUFKPCWD.js → chunk-4S2LWZ7L.js} +2 -2
  214. package/dist/{chunk-LPWIAVGP.js → chunk-4UVFPORR.js} +5 -5
  215. package/dist/{chunk-3B4YMZD5.js → chunk-4Z7GEO2R.js} +2 -2
  216. package/dist/{chunk-XXPEFK4V.js → chunk-53O2TNSR.js} +5 -5
  217. package/dist/{chunk-G3SKAI6S.js → chunk-54HTXJJ2.js} +2 -2
  218. package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
  219. package/dist/{chunk-JDUIWHJ3.js → chunk-6H4TPEMO.js} +2 -2
  220. package/dist/{chunk-FYZJEME4.js → chunk-6JGATEOF.js} +3 -3
  221. package/dist/{chunk-ZFUOLLZS.js → chunk-6L2FKTBO.js} +5 -5
  222. package/dist/{chunk-BDBI4W77.js → chunk-6MD5QXXJ.js} +3 -3
  223. package/dist/{chunk-LJSKF43D.js → chunk-6TPYT3UC.js} +5 -5
  224. package/dist/{chunk-KZT5JC3E.js → chunk-6ZD3FI5P.js} +2 -2
  225. package/dist/{chunk-SBV62CSC.js → chunk-72FPUWD6.js} +2 -2
  226. package/dist/{chunk-L75CZ3SI.js → chunk-72S2RGWD.js} +2 -2
  227. package/dist/{chunk-WUFTDJ2L.js → chunk-77BKKPCI.js} +2 -2
  228. package/dist/{chunk-5A4XPYNK.js → chunk-7FEXRMJE.js} +2 -2
  229. package/dist/{chunk-AW336SO7.js → chunk-7KKMZJFT.js} +2 -2
  230. package/dist/{chunk-4SSWJRC4.js → chunk-7TE4TMS3.js} +3 -3
  231. package/dist/chunk-AEMD6JHZ.js +1 -0
  232. package/dist/chunk-AEMD6JHZ.js.map +1 -0
  233. package/dist/{chunk-5XWCKCHP.js → chunk-ALOUJ3CE.js} +4 -4
  234. package/dist/{chunk-UFUMYNKS.js → chunk-AWG2AJHX.js} +5 -5
  235. package/dist/{chunk-DDVNYVJH.js → chunk-B3QWQG62.js} +2 -2
  236. package/dist/{chunk-CKI33CN2.js → chunk-BA6Z52QN.js} +2 -2
  237. package/dist/{chunk-RSWHKOUN.js → chunk-BM4KKGL7.js} +2 -2
  238. package/dist/chunk-BOWS4U6W.js +1 -0
  239. package/dist/chunk-BOWS4U6W.js.map +1 -0
  240. package/dist/{chunk-OZGJ3YCN.js → chunk-BVSSEOLI.js} +2 -2
  241. package/dist/{chunk-FI6BL4UU.js → chunk-C2TERIB4.js} +2 -2
  242. package/dist/{chunk-DUITNU72.js → chunk-C6OVO6AT.js} +2 -2
  243. package/dist/{chunk-WL2S2YB3.js → chunk-CKHFYTIX.js} +4 -4
  244. package/dist/{chunk-GBEHJBYM.js → chunk-CLK67TNH.js} +2 -2
  245. package/dist/{chunk-T2HZ3GVA.js → chunk-CM2Q7IH3.js} +4 -4
  246. package/dist/{chunk-GE26GVHM.js → chunk-CMFJQH6A.js} +2 -2
  247. package/dist/{chunk-6PPHALM3.js → chunk-CMLIWUBW.js} +4 -4
  248. package/dist/{chunk-AU3GV6UL.js → chunk-DH5UJD2I.js} +3 -3
  249. package/dist/{chunk-BKT2KJ56.js → chunk-DH6SL3SY.js} +2 -2
  250. package/dist/{chunk-TRTX4BDI.js → chunk-DJKVSUXH.js} +2 -2
  251. package/dist/{chunk-VE3P77TV.js → chunk-DLWLIPCP.js} +2 -2
  252. package/dist/{chunk-AJVFSUC4.js → chunk-EIII4QU4.js} +9 -9
  253. package/dist/{chunk-MWPXKZ7O.js → chunk-ERY6D2OV.js} +4 -4
  254. package/dist/{chunk-TJ7NQG7E.js → chunk-FBUCXTA4.js} +4 -4
  255. package/dist/{chunk-SE6TW72O.js → chunk-FDMQ7H22.js} +2 -2
  256. package/dist/{chunk-EKM7C4X2.js → chunk-FTQBVZ7V.js} +3 -3
  257. package/dist/{chunk-E2FMNY6B.js → chunk-FXWXBEOZ.js} +2 -2
  258. package/dist/{chunk-UI5O6J6R.js → chunk-FY6PONLA.js} +4 -4
  259. package/dist/{chunk-QUIHOPOC.js → chunk-G4TKMUOL.js} +2 -2
  260. package/dist/{chunk-6BS2RBW4.js → chunk-G7XHJPLO.js} +3 -3
  261. package/dist/{chunk-4RXPIHJG.js → chunk-GE2CCITY.js} +2 -2
  262. package/dist/{chunk-WRHBXOGN.js → chunk-GG62LKA3.js} +5 -5
  263. package/dist/{chunk-YQCRQHVU.js → chunk-GI63FQEJ.js} +4 -4
  264. package/dist/{chunk-WUQKXAYF.js → chunk-GPHURU2K.js} +5 -5
  265. package/dist/{chunk-GPT673YL.js → chunk-H72YKEGD.js} +2 -2
  266. package/dist/chunk-HALFOXSZ.js +1 -0
  267. package/dist/chunk-HALFOXSZ.js.map +1 -0
  268. package/dist/{chunk-UP6RO2PR.js → chunk-HKBJZX3C.js} +3 -3
  269. package/dist/chunk-IC7GHPMK.js +22 -0
  270. package/dist/chunk-IC7GHPMK.js.map +1 -0
  271. package/dist/{chunk-COUFRGD6.js → chunk-J6KLT7HP.js} +4 -4
  272. package/dist/{chunk-N4D5V3AA.js → chunk-JAGAFEZL.js} +2 -2
  273. package/dist/{chunk-CLTK76ZF.js → chunk-JE5GEWTG.js} +5 -5
  274. package/dist/{chunk-23XBBGWD.js → chunk-JFLFZLOA.js} +5 -5
  275. package/dist/{chunk-BLUURKCY.js → chunk-K6LNHHSH.js} +2 -2
  276. package/dist/{chunk-HSNOWYEE.js → chunk-K7FSTB2K.js} +2 -2
  277. package/dist/{chunk-SXVCXLKU.js → chunk-K7MQP2KT.js} +3 -3
  278. package/dist/{chunk-QQ46JX5H.js → chunk-KHOAXZW2.js} +4 -4
  279. package/dist/{chunk-SCVBGQFO.js → chunk-KQZGUHYZ.js} +2 -2
  280. package/dist/{chunk-GJ7GIGDS.js → chunk-LCWGNDTH.js} +2 -2
  281. package/dist/{chunk-4D2IVVHR.js → chunk-LF3EVXMF.js} +2 -2
  282. package/dist/{chunk-2XTBGZSR.js → chunk-LGCRL7DK.js} +2 -2
  283. package/dist/{chunk-WY35GCHY.js → chunk-LODMNSLR.js} +3 -3
  284. package/dist/{chunk-EXFX3JRN.js → chunk-M47ZOUGF.js} +4 -4
  285. package/dist/{chunk-AQCQ2USS.js → chunk-M65ZNPLO.js} +2 -2
  286. package/dist/{chunk-JZ5IGO5G.js → chunk-NCB4GBRL.js} +2 -2
  287. package/dist/{chunk-SE4WZIKD.js → chunk-NFGIA2ZV.js} +2 -2
  288. package/dist/{chunk-H772ZSAI.js → chunk-NQ7NMCRI.js} +2 -2
  289. package/dist/{chunk-P7JF6XT7.js → chunk-NRSVI23L.js} +2 -2
  290. package/dist/{chunk-FRTEU7ZO.js → chunk-NU55QUMO.js} +2 -2
  291. package/dist/chunk-OJUORFGO.js +87 -0
  292. package/dist/chunk-OJUORFGO.js.map +1 -0
  293. package/dist/{chunk-JB56E4XQ.js → chunk-PAICZOL5.js} +6 -6
  294. package/dist/chunk-PEOOCQ2T.js +140 -0
  295. package/dist/chunk-PEOOCQ2T.js.map +1 -0
  296. package/dist/chunk-PGGGKYWG.js +1 -0
  297. package/dist/chunk-PGGGKYWG.js.map +1 -0
  298. package/dist/{chunk-QX3CXOJ3.js → chunk-PTONBPZL.js} +2 -2
  299. package/dist/chunk-Q4JWWTL4.js +36 -0
  300. package/dist/chunk-Q4JWWTL4.js.map +1 -0
  301. package/dist/{chunk-4UASV6VL.js → chunk-QDELBNL3.js} +2 -2
  302. package/dist/{chunk-ZE56GK5C.js → chunk-QEI5DC6S.js} +5 -5
  303. package/dist/chunk-QGUNUXTT.js +1 -0
  304. package/dist/chunk-QGUNUXTT.js.map +1 -0
  305. package/dist/{chunk-3UXBIUJF.js → chunk-RDFPM2AQ.js} +5 -5
  306. package/dist/chunk-RDZGXJOD.js +74 -0
  307. package/dist/chunk-RDZGXJOD.js.map +1 -0
  308. package/dist/chunk-RN7UJI7S.js +1 -0
  309. package/dist/chunk-RN7UJI7S.js.map +1 -0
  310. package/dist/chunk-RPBGUWNF.js +168 -0
  311. package/dist/chunk-RPBGUWNF.js.map +1 -0
  312. package/dist/{chunk-BKHO4RSF.js → chunk-RZ2VZ7SL.js} +2 -2
  313. package/dist/{chunk-MT7QJRP7.js → chunk-S4IXC2V3.js} +3 -3
  314. package/dist/chunk-SALQ65SM.js +118 -0
  315. package/dist/chunk-SALQ65SM.js.map +1 -0
  316. package/dist/{chunk-XOZYUJQ5.js → chunk-SDKOOVEX.js} +5 -3
  317. package/dist/{chunk-XOZYUJQ5.js.map → chunk-SDKOOVEX.js.map} +1 -1
  318. package/dist/{chunk-5K4G2XYS.js → chunk-SNBAMWI5.js} +2 -2
  319. package/dist/{chunk-MKJHDHLF.js → chunk-TCNTIGMY.js} +2 -2
  320. package/dist/{chunk-RUZVK4FV.js → chunk-TPVSHO75.js} +3 -3
  321. package/dist/{chunk-I72PREY7.js → chunk-TTJTMDLI.js} +2 -2
  322. package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
  323. package/dist/chunk-U67ZQ6VM.js +82 -0
  324. package/dist/chunk-U67ZQ6VM.js.map +1 -0
  325. package/dist/{chunk-APPIPQFT.js → chunk-UGPRBJWB.js} +6 -6
  326. package/dist/{chunk-V3RQFWL6.js → chunk-VEEG4UXZ.js} +2 -2
  327. package/dist/{chunk-DOLDAAXH.js → chunk-VOJBLBXE.js} +3 -3
  328. package/dist/{chunk-WTXPGASQ.js → chunk-VWJEM2ER.js} +3 -3
  329. package/dist/chunk-VYM2GPR6.js +47 -0
  330. package/dist/chunk-VYM2GPR6.js.map +1 -0
  331. package/dist/{chunk-BXEMC4YH.js → chunk-VYV3JOV5.js} +2 -2
  332. package/dist/{chunk-OTWMG7B2.js → chunk-WN5PNP6F.js} +4 -4
  333. package/dist/chunk-X3C3VTYS.js +85 -0
  334. package/dist/chunk-X3C3VTYS.js.map +1 -0
  335. package/dist/{chunk-HZBRXLV7.js → chunk-XB7HYOMM.js} +2 -2
  336. package/dist/{chunk-C6FVXX7Y.js → chunk-XBLFK2FL.js} +2 -2
  337. package/dist/{chunk-EDBVMLNX.js → chunk-XHA2NXLD.js} +2 -2
  338. package/dist/chunk-XJQNSMGA.js +10 -0
  339. package/dist/chunk-XJQNSMGA.js.map +1 -0
  340. package/dist/{chunk-ZO4NO77T.js → chunk-XO4ZUHVH.js} +2 -2
  341. package/dist/{chunk-D455V3BW.js → chunk-XVZG52CM.js} +7 -7
  342. package/dist/{chunk-OPT7X3Y6.js → chunk-XXL4PM4M.js} +2 -2
  343. package/dist/{chunk-3HKUOLPD.js → chunk-XZY7O7JJ.js} +4 -4
  344. package/dist/{chunk-53TDQYA3.js → chunk-Y2UXX5IQ.js} +4 -4
  345. package/dist/{chunk-743SY4WQ.js → chunk-YLXQWYOG.js} +5 -5
  346. package/dist/{chunk-Q33JWFSA.js → chunk-YPIVLPXF.js} +2 -2
  347. package/dist/{chunk-T7UUP7VD.js → chunk-YRUX7XMQ.js} +2 -2
  348. package/dist/{chunk-4JEXYOSN.js → chunk-YTXZUTLF.js} +2 -2
  349. package/dist/{chunk-V7A5ZAAF.js → chunk-YWJDUJAR.js} +3 -3
  350. package/dist/{chunk-ZK7YERPQ.js → chunk-Z2NN53E5.js} +2 -2
  351. package/dist/{chunk-CLSC36JS.js → chunk-Z4DKVLYG.js} +3 -3
  352. package/dist/{chunk-NFJ3VVD3.js → chunk-Z6T5SXST.js} +5 -5
  353. package/dist/{chunk-IITZA6U2.js → chunk-ZBVU2YWV.js} +9 -9
  354. package/dist/{chunk-IEWAFD6L.js → chunk-ZC5HDBQO.js} +2 -2
  355. package/dist/{chunk-KQS4ZJGS.js → chunk-ZGCPDA3F.js} +5 -5
  356. package/dist/{chunk-AHDNANID.js → chunk-ZH2SZ6B3.js} +2 -2
  357. package/dist/{chunk-KOX2AEFW.js → chunk-ZKWVCSAB.js} +2 -2
  358. package/dist/{chunk-K2U4BNHQ.js → chunk-ZNBLGS66.js} +2 -2
  359. package/dist/{chunk-WGUY7EIB.js → chunk-ZUME25DS.js} +5 -5
  360. package/dist/data-display/Badge.js +3 -3
  361. package/dist/data-display/CardKit.js +6 -6
  362. package/dist/data-display/Carousel.js +3 -3
  363. package/dist/data-display/Chart.js +3 -3
  364. package/dist/data-display/Chip.js +1 -0
  365. package/dist/data-display/DataViews.js +67 -67
  366. package/dist/data-display/FleetMap.js +9 -9
  367. package/dist/data-display/MapPreview.js +5 -5
  368. package/dist/data-display/Sheet.js +3 -3
  369. package/dist/en-US.js +15 -11
  370. package/dist/feedback/ConfirmAction.js +5 -5
  371. package/dist/feedback/Dialog.js +2 -2
  372. package/dist/feedback/NotificationStatusNotice.js +5 -5
  373. package/dist/form/AddressAutocomplete.js +7 -7
  374. package/dist/form/Autocomplete.js +4 -4
  375. package/dist/form/Button.js +4 -4
  376. package/dist/form/CategorySelect.js +10 -10
  377. package/dist/form/CepField.js +5 -5
  378. package/dist/form/CodeEditor.js +2 -2
  379. package/dist/form/Command.js +3 -3
  380. package/dist/form/CreatableSelect.js +3 -3
  381. package/dist/form/DateRangePicker.js +7 -7
  382. package/dist/form/Input.js +4 -4
  383. package/dist/form/InputOTP.js +4 -4
  384. package/dist/form/Label.js +3 -3
  385. package/dist/form/Menubar.js +3 -3
  386. package/dist/form/NumberField.js +29 -0
  387. package/dist/form/NumberField.js.map +1 -0
  388. package/dist/form/PhoneInput.js +3 -3
  389. package/dist/form/RadioGroup.js +5 -5
  390. package/dist/form/RichTextEditor.js +3 -3
  391. package/dist/form/Select.js +3 -3
  392. package/dist/form/Switch.js +5 -5
  393. package/dist/form/Textarea.js +3 -3
  394. package/dist/form/Toggle.js +4 -4
  395. package/dist/form/ToggleGroup.js +3 -3
  396. package/dist/form/total-form.js +30 -30
  397. package/dist/icons.js +7 -6
  398. package/dist/layout/Box.js +6 -6
  399. package/dist/layout/Card.js +2 -2
  400. package/dist/layout/Collapsible.js +1 -0
  401. package/dist/layout/ContentToolbar.js +13 -13
  402. package/dist/layout/ScrollArea.js +2 -2
  403. package/dist/layout/SettingCard.js +80 -0
  404. package/dist/layout/SettingCard.js.map +1 -0
  405. package/dist/layout/SettingsLayout.js +4 -4
  406. package/dist/layout/Stack.js +7 -7
  407. package/dist/layout/TableFilter.js +3 -3
  408. package/dist/locales.js +37 -23
  409. package/dist/locales.js.map +1 -1
  410. package/dist/navigation/AppHeader.js +12 -12
  411. package/dist/navigation/NavigationMenu.js +4 -4
  412. package/dist/navigation/Pagination.js +4 -4
  413. package/dist/navigation/Tabs.js +4 -4
  414. package/dist/provider.js +6 -6
  415. package/dist/pt-BR.js +12 -8
  416. package/dist/social-login-button.js +7 -7
  417. package/dist/tokens.js +4 -4
  418. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  419. package/dist/types/components/form/Input/Input.types.d.ts +10 -0
  420. package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
  421. package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
  422. package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
  423. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
  424. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
  425. package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
  426. package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
  427. package/dist/types/components/form/NumberField/index.d.ts +3 -0
  428. package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
  429. package/dist/types/components/form/index.d.ts +1 -0
  430. package/dist/types/components/form/index.d.ts.map +1 -1
  431. package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
  432. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
  433. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
  434. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
  435. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
  436. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
  437. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
  438. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
  439. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
  440. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
  441. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
  442. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
  443. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
  444. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
  445. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
  446. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
  447. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
  448. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
  449. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
  450. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
  451. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
  452. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
  453. package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
  454. package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
  455. package/dist/types/components/layout/index.d.ts +1 -0
  456. package/dist/types/components/layout/index.d.ts.map +1 -1
  457. package/dist/types/copy/layout.d.ts +27 -0
  458. package/dist/types/copy/layout.d.ts.map +1 -1
  459. package/dist/types/en-US.layout.d.ts +3 -1
  460. package/dist/types/en-US.layout.d.ts.map +1 -1
  461. package/dist/types/locales.d.ts +3 -1
  462. package/dist/types/locales.d.ts.map +1 -1
  463. package/dist/types/pt-BR.layout.d.ts +3 -1
  464. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  465. package/dist/user-avatar.js +7 -7
  466. package/dist/utility/InstallPrompt.js +2 -2
  467. package/dist/utility/WorkflowStep.js +3 -3
  468. package/package.json +9 -1
  469. package/src/components/form/Input/Input.tsx +2 -0
  470. package/src/components/form/Input/Input.types.ts +10 -0
  471. package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
  472. package/src/components/form/NumberField/NumberField.md +86 -0
  473. package/src/components/form/NumberField/NumberField.tsx +88 -0
  474. package/src/components/form/NumberField/NumberField.types.ts +43 -0
  475. package/src/components/form/NumberField/index.ts +2 -0
  476. package/src/components/form/NumberField/tests.md +51 -0
  477. package/src/components/form/NumberField/track.md +42 -0
  478. package/src/components/form/index.ts +1 -0
  479. package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
  480. package/src/components/layout/SettingCard/SettingCard.md +121 -0
  481. package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
  482. package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
  483. package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
  484. package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
  485. package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
  486. package/src/components/layout/SettingCard/SettingGrid.md +65 -0
  487. package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
  488. package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
  489. package/src/components/layout/SettingCard/SettingGroup.md +81 -0
  490. package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
  491. package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
  492. package/src/components/layout/SettingCard/SettingToggle.md +61 -0
  493. package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
  494. package/src/components/layout/SettingCard/index.ts +18 -0
  495. package/src/components/layout/SettingCard/tests.md +68 -0
  496. package/src/components/layout/SettingCard/track.md +54 -0
  497. package/src/components/layout/index.ts +1 -0
  498. package/src/copy/layout.ts +29 -0
  499. package/src/en-US.layout.ts +16 -0
  500. package/src/locales.ts +10 -0
  501. package/src/pt-BR.layout.ts +16 -0
  502. package/dist/chunk-A7RIZOAL.js +0 -13
  503. package/dist/chunk-A7RIZOAL.js.map +0 -1
  504. package/dist/chunk-BY3JEK5T.js +0 -1
  505. package/dist/chunk-FZJ2FTGE.js +0 -1
  506. package/dist/chunk-GRHECKHU.js +0 -13
  507. package/dist/chunk-GRHECKHU.js.map +0 -1
  508. /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
  509. /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
  510. /package/dist/{chunk-3PGFMBEI.js.map → chunk-2LKWJV65.js.map} +0 -0
  511. /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
  512. /package/dist/{chunk-CKPFLEOL.js.map → chunk-3CUWQXTG.js.map} +0 -0
  513. /package/dist/{chunk-GVFPOKJW.js.map → chunk-3CYTVX4T.js.map} +0 -0
  514. /package/dist/{chunk-TJPQIFI4.js.map → chunk-3EPA2A4M.js.map} +0 -0
  515. /package/dist/{chunk-HDELNMZC.js.map → chunk-3MJHHPRW.js.map} +0 -0
  516. /package/dist/{chunk-RNC574FS.js.map → chunk-3UEZ6NUI.js.map} +0 -0
  517. /package/dist/{chunk-OXLOC6TC.js.map → chunk-3XS37SQT.js.map} +0 -0
  518. /package/dist/{chunk-2Q5QHSU2.js.map → chunk-44USLRMT.js.map} +0 -0
  519. /package/dist/{chunk-O7OQZJ3D.js.map → chunk-4GN2RLYL.js.map} +0 -0
  520. /package/dist/{chunk-QUFKPCWD.js.map → chunk-4S2LWZ7L.js.map} +0 -0
  521. /package/dist/{chunk-LPWIAVGP.js.map → chunk-4UVFPORR.js.map} +0 -0
  522. /package/dist/{chunk-3B4YMZD5.js.map → chunk-4Z7GEO2R.js.map} +0 -0
  523. /package/dist/{chunk-XXPEFK4V.js.map → chunk-53O2TNSR.js.map} +0 -0
  524. /package/dist/{chunk-G3SKAI6S.js.map → chunk-54HTXJJ2.js.map} +0 -0
  525. /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  526. /package/dist/{chunk-JDUIWHJ3.js.map → chunk-6H4TPEMO.js.map} +0 -0
  527. /package/dist/{chunk-FYZJEME4.js.map → chunk-6JGATEOF.js.map} +0 -0
  528. /package/dist/{chunk-ZFUOLLZS.js.map → chunk-6L2FKTBO.js.map} +0 -0
  529. /package/dist/{chunk-BDBI4W77.js.map → chunk-6MD5QXXJ.js.map} +0 -0
  530. /package/dist/{chunk-LJSKF43D.js.map → chunk-6TPYT3UC.js.map} +0 -0
  531. /package/dist/{chunk-KZT5JC3E.js.map → chunk-6ZD3FI5P.js.map} +0 -0
  532. /package/dist/{chunk-SBV62CSC.js.map → chunk-72FPUWD6.js.map} +0 -0
  533. /package/dist/{chunk-L75CZ3SI.js.map → chunk-72S2RGWD.js.map} +0 -0
  534. /package/dist/{chunk-WUFTDJ2L.js.map → chunk-77BKKPCI.js.map} +0 -0
  535. /package/dist/{chunk-5A4XPYNK.js.map → chunk-7FEXRMJE.js.map} +0 -0
  536. /package/dist/{chunk-AW336SO7.js.map → chunk-7KKMZJFT.js.map} +0 -0
  537. /package/dist/{chunk-4SSWJRC4.js.map → chunk-7TE4TMS3.js.map} +0 -0
  538. /package/dist/{chunk-5XWCKCHP.js.map → chunk-ALOUJ3CE.js.map} +0 -0
  539. /package/dist/{chunk-UFUMYNKS.js.map → chunk-AWG2AJHX.js.map} +0 -0
  540. /package/dist/{chunk-DDVNYVJH.js.map → chunk-B3QWQG62.js.map} +0 -0
  541. /package/dist/{chunk-CKI33CN2.js.map → chunk-BA6Z52QN.js.map} +0 -0
  542. /package/dist/{chunk-RSWHKOUN.js.map → chunk-BM4KKGL7.js.map} +0 -0
  543. /package/dist/{chunk-OZGJ3YCN.js.map → chunk-BVSSEOLI.js.map} +0 -0
  544. /package/dist/{chunk-FI6BL4UU.js.map → chunk-C2TERIB4.js.map} +0 -0
  545. /package/dist/{chunk-DUITNU72.js.map → chunk-C6OVO6AT.js.map} +0 -0
  546. /package/dist/{chunk-WL2S2YB3.js.map → chunk-CKHFYTIX.js.map} +0 -0
  547. /package/dist/{chunk-GBEHJBYM.js.map → chunk-CLK67TNH.js.map} +0 -0
  548. /package/dist/{chunk-T2HZ3GVA.js.map → chunk-CM2Q7IH3.js.map} +0 -0
  549. /package/dist/{chunk-GE26GVHM.js.map → chunk-CMFJQH6A.js.map} +0 -0
  550. /package/dist/{chunk-6PPHALM3.js.map → chunk-CMLIWUBW.js.map} +0 -0
  551. /package/dist/{chunk-AU3GV6UL.js.map → chunk-DH5UJD2I.js.map} +0 -0
  552. /package/dist/{chunk-BKT2KJ56.js.map → chunk-DH6SL3SY.js.map} +0 -0
  553. /package/dist/{chunk-TRTX4BDI.js.map → chunk-DJKVSUXH.js.map} +0 -0
  554. /package/dist/{chunk-VE3P77TV.js.map → chunk-DLWLIPCP.js.map} +0 -0
  555. /package/dist/{chunk-AJVFSUC4.js.map → chunk-EIII4QU4.js.map} +0 -0
  556. /package/dist/{chunk-MWPXKZ7O.js.map → chunk-ERY6D2OV.js.map} +0 -0
  557. /package/dist/{chunk-TJ7NQG7E.js.map → chunk-FBUCXTA4.js.map} +0 -0
  558. /package/dist/{chunk-SE6TW72O.js.map → chunk-FDMQ7H22.js.map} +0 -0
  559. /package/dist/{chunk-EKM7C4X2.js.map → chunk-FTQBVZ7V.js.map} +0 -0
  560. /package/dist/{chunk-E2FMNY6B.js.map → chunk-FXWXBEOZ.js.map} +0 -0
  561. /package/dist/{chunk-UI5O6J6R.js.map → chunk-FY6PONLA.js.map} +0 -0
  562. /package/dist/{chunk-QUIHOPOC.js.map → chunk-G4TKMUOL.js.map} +0 -0
  563. /package/dist/{chunk-6BS2RBW4.js.map → chunk-G7XHJPLO.js.map} +0 -0
  564. /package/dist/{chunk-4RXPIHJG.js.map → chunk-GE2CCITY.js.map} +0 -0
  565. /package/dist/{chunk-WRHBXOGN.js.map → chunk-GG62LKA3.js.map} +0 -0
  566. /package/dist/{chunk-YQCRQHVU.js.map → chunk-GI63FQEJ.js.map} +0 -0
  567. /package/dist/{chunk-WUQKXAYF.js.map → chunk-GPHURU2K.js.map} +0 -0
  568. /package/dist/{chunk-GPT673YL.js.map → chunk-H72YKEGD.js.map} +0 -0
  569. /package/dist/{chunk-UP6RO2PR.js.map → chunk-HKBJZX3C.js.map} +0 -0
  570. /package/dist/{chunk-COUFRGD6.js.map → chunk-J6KLT7HP.js.map} +0 -0
  571. /package/dist/{chunk-N4D5V3AA.js.map → chunk-JAGAFEZL.js.map} +0 -0
  572. /package/dist/{chunk-CLTK76ZF.js.map → chunk-JE5GEWTG.js.map} +0 -0
  573. /package/dist/{chunk-23XBBGWD.js.map → chunk-JFLFZLOA.js.map} +0 -0
  574. /package/dist/{chunk-BLUURKCY.js.map → chunk-K6LNHHSH.js.map} +0 -0
  575. /package/dist/{chunk-HSNOWYEE.js.map → chunk-K7FSTB2K.js.map} +0 -0
  576. /package/dist/{chunk-SXVCXLKU.js.map → chunk-K7MQP2KT.js.map} +0 -0
  577. /package/dist/{chunk-QQ46JX5H.js.map → chunk-KHOAXZW2.js.map} +0 -0
  578. /package/dist/{chunk-SCVBGQFO.js.map → chunk-KQZGUHYZ.js.map} +0 -0
  579. /package/dist/{chunk-GJ7GIGDS.js.map → chunk-LCWGNDTH.js.map} +0 -0
  580. /package/dist/{chunk-4D2IVVHR.js.map → chunk-LF3EVXMF.js.map} +0 -0
  581. /package/dist/{chunk-2XTBGZSR.js.map → chunk-LGCRL7DK.js.map} +0 -0
  582. /package/dist/{chunk-WY35GCHY.js.map → chunk-LODMNSLR.js.map} +0 -0
  583. /package/dist/{chunk-EXFX3JRN.js.map → chunk-M47ZOUGF.js.map} +0 -0
  584. /package/dist/{chunk-AQCQ2USS.js.map → chunk-M65ZNPLO.js.map} +0 -0
  585. /package/dist/{chunk-JZ5IGO5G.js.map → chunk-NCB4GBRL.js.map} +0 -0
  586. /package/dist/{chunk-SE4WZIKD.js.map → chunk-NFGIA2ZV.js.map} +0 -0
  587. /package/dist/{chunk-H772ZSAI.js.map → chunk-NQ7NMCRI.js.map} +0 -0
  588. /package/dist/{chunk-P7JF6XT7.js.map → chunk-NRSVI23L.js.map} +0 -0
  589. /package/dist/{chunk-FRTEU7ZO.js.map → chunk-NU55QUMO.js.map} +0 -0
  590. /package/dist/{chunk-JB56E4XQ.js.map → chunk-PAICZOL5.js.map} +0 -0
  591. /package/dist/{chunk-QX3CXOJ3.js.map → chunk-PTONBPZL.js.map} +0 -0
  592. /package/dist/{chunk-4UASV6VL.js.map → chunk-QDELBNL3.js.map} +0 -0
  593. /package/dist/{chunk-ZE56GK5C.js.map → chunk-QEI5DC6S.js.map} +0 -0
  594. /package/dist/{chunk-3UXBIUJF.js.map → chunk-RDFPM2AQ.js.map} +0 -0
  595. /package/dist/{chunk-BKHO4RSF.js.map → chunk-RZ2VZ7SL.js.map} +0 -0
  596. /package/dist/{chunk-MT7QJRP7.js.map → chunk-S4IXC2V3.js.map} +0 -0
  597. /package/dist/{chunk-5K4G2XYS.js.map → chunk-SNBAMWI5.js.map} +0 -0
  598. /package/dist/{chunk-MKJHDHLF.js.map → chunk-TCNTIGMY.js.map} +0 -0
  599. /package/dist/{chunk-RUZVK4FV.js.map → chunk-TPVSHO75.js.map} +0 -0
  600. /package/dist/{chunk-I72PREY7.js.map → chunk-TTJTMDLI.js.map} +0 -0
  601. /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
  602. /package/dist/{chunk-APPIPQFT.js.map → chunk-UGPRBJWB.js.map} +0 -0
  603. /package/dist/{chunk-V3RQFWL6.js.map → chunk-VEEG4UXZ.js.map} +0 -0
  604. /package/dist/{chunk-DOLDAAXH.js.map → chunk-VOJBLBXE.js.map} +0 -0
  605. /package/dist/{chunk-WTXPGASQ.js.map → chunk-VWJEM2ER.js.map} +0 -0
  606. /package/dist/{chunk-BXEMC4YH.js.map → chunk-VYV3JOV5.js.map} +0 -0
  607. /package/dist/{chunk-OTWMG7B2.js.map → chunk-WN5PNP6F.js.map} +0 -0
  608. /package/dist/{chunk-HZBRXLV7.js.map → chunk-XB7HYOMM.js.map} +0 -0
  609. /package/dist/{chunk-C6FVXX7Y.js.map → chunk-XBLFK2FL.js.map} +0 -0
  610. /package/dist/{chunk-EDBVMLNX.js.map → chunk-XHA2NXLD.js.map} +0 -0
  611. /package/dist/{chunk-ZO4NO77T.js.map → chunk-XO4ZUHVH.js.map} +0 -0
  612. /package/dist/{chunk-D455V3BW.js.map → chunk-XVZG52CM.js.map} +0 -0
  613. /package/dist/{chunk-OPT7X3Y6.js.map → chunk-XXL4PM4M.js.map} +0 -0
  614. /package/dist/{chunk-3HKUOLPD.js.map → chunk-XZY7O7JJ.js.map} +0 -0
  615. /package/dist/{chunk-53TDQYA3.js.map → chunk-Y2UXX5IQ.js.map} +0 -0
  616. /package/dist/{chunk-743SY4WQ.js.map → chunk-YLXQWYOG.js.map} +0 -0
  617. /package/dist/{chunk-Q33JWFSA.js.map → chunk-YPIVLPXF.js.map} +0 -0
  618. /package/dist/{chunk-T7UUP7VD.js.map → chunk-YRUX7XMQ.js.map} +0 -0
  619. /package/dist/{chunk-4JEXYOSN.js.map → chunk-YTXZUTLF.js.map} +0 -0
  620. /package/dist/{chunk-V7A5ZAAF.js.map → chunk-YWJDUJAR.js.map} +0 -0
  621. /package/dist/{chunk-ZK7YERPQ.js.map → chunk-Z2NN53E5.js.map} +0 -0
  622. /package/dist/{chunk-CLSC36JS.js.map → chunk-Z4DKVLYG.js.map} +0 -0
  623. /package/dist/{chunk-NFJ3VVD3.js.map → chunk-Z6T5SXST.js.map} +0 -0
  624. /package/dist/{chunk-IITZA6U2.js.map → chunk-ZBVU2YWV.js.map} +0 -0
  625. /package/dist/{chunk-IEWAFD6L.js.map → chunk-ZC5HDBQO.js.map} +0 -0
  626. /package/dist/{chunk-KQS4ZJGS.js.map → chunk-ZGCPDA3F.js.map} +0 -0
  627. /package/dist/{chunk-AHDNANID.js.map → chunk-ZH2SZ6B3.js.map} +0 -0
  628. /package/dist/{chunk-KOX2AEFW.js.map → chunk-ZKWVCSAB.js.map} +0 -0
  629. /package/dist/{chunk-K2U4BNHQ.js.map → chunk-ZNBLGS66.js.map} +0 -0
  630. /package/dist/{chunk-WGUY7EIB.js.map → chunk-ZUME25DS.js.map} +0 -0
@@ -0,0 +1,74 @@
1
+ import {
2
+ PendingSpinner,
3
+ SaveError,
4
+ SettingHeader,
5
+ partTestId
6
+ } from "./chunk-PEOOCQ2T.js";
7
+ import {
8
+ descriptionStyles
9
+ } from "./chunk-3DO5AJCG.js";
10
+ import {
11
+ Switch
12
+ } from "./chunk-ZGCPDA3F.js";
13
+ import {
14
+ SR_ONLY_SX
15
+ } from "./chunk-ANYOSBNA.js";
16
+
17
+ // src/components/layout/SettingCard/SettingSwitch.tsx
18
+ import Box from "@mui/material/Box/index.js";
19
+ import { useTheme } from "@mui/material/styles/index.js";
20
+ import { useId } from "react";
21
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
22
+ var useSettingSwitchIds = () => {
23
+ const base = useId();
24
+ return {
25
+ titleId: `${base}-title`,
26
+ inputId: `${base}-switch`,
27
+ summaryId: `${base}-summary`,
28
+ errorId: `${base}-error`
29
+ };
30
+ };
31
+ var SettingSwitchBlock = ({ title, headingLevel = "h3", icon, summary, copy, disabled, dataTestId, ids, state }) => {
32
+ const theme = useTheme();
33
+ const { shown, saving, error, flip } = state;
34
+ const describedBy = [summary != null ? ids.summaryId : null, error ? ids.errorId : null].filter(Boolean).join(" ");
35
+ const control = /* @__PURE__ */ jsxs(Box, { sx: { display: "inline-flex", alignItems: "center", gap: 1, flexShrink: 0 }, children: [
36
+ saving && /* @__PURE__ */ jsx(PendingSpinner, { dataTestId }),
37
+ /* @__PURE__ */ jsx(
38
+ Switch,
39
+ {
40
+ id: ids.inputId,
41
+ checked: shown,
42
+ onChange: (event) => void flip(event.target.checked),
43
+ disabled,
44
+ error: Boolean(error),
45
+ "aria-describedby": describedBy || void 0,
46
+ inputProps: { role: "switch", "aria-busy": saving },
47
+ dataTestId: partTestId(dataTestId, "switch")
48
+ }
49
+ )
50
+ ] });
51
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
52
+ /* @__PURE__ */ jsx(
53
+ SettingHeader,
54
+ {
55
+ titleId: ids.titleId,
56
+ title,
57
+ headingLevel,
58
+ icon,
59
+ labelFor: ids.inputId,
60
+ trailing: control,
61
+ dataTestId
62
+ }
63
+ ),
64
+ summary != null && /* @__PURE__ */ jsx(Box, { component: "p", id: ids.summaryId, sx: descriptionStyles(theme), "data-testid": partTestId(dataTestId, "summary"), children: summary }),
65
+ /* @__PURE__ */ jsx(SaveError, { id: ids.errorId, message: error, dataTestId }),
66
+ /* @__PURE__ */ jsx(Box, { role: "status", "aria-live": "polite", sx: SR_ONLY_SX, children: saving ? copy.saving : "" })
67
+ ] });
68
+ };
69
+
70
+ export {
71
+ useSettingSwitchIds,
72
+ SettingSwitchBlock
73
+ };
74
+ //# sourceMappingURL=chunk-RDZGXJOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/SettingCard/SettingSwitch.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React, { useId } from 'react';\n\nimport { Switch } from '../../form/Switch';\nimport { SR_ONLY_SX } from '../../form/Label/Label.styles';\n\nimport { useAsyncSwitch } from './SettingCard.hooks';\nimport { PendingSpinner, SaveError, SettingHeader, partTestId } from './SettingCard.parts';\nimport { descriptionStyles } from './SettingCard.styles';\nimport type { SettingToggleProps } from './SettingCard.types';\n\n/** Everything the switch-driven cards share, minus the surface each draws around it. */\nexport type SettingSwitchBlockProps = Pick<\n SettingToggleProps,\n 'title' | 'headingLevel' | 'icon' | 'summary' | 'checked' | 'onChange' | 'copy' | 'formatError' | 'dataTestId'\n> & { disabled: boolean };\n\n/** The ids one switch block wires its label, description and failure line with. */\nexport interface SettingSwitchIds {\n titleId: string;\n inputId: string;\n summaryId: string;\n errorId: string;\n}\n\nexport const useSettingSwitchIds = (): SettingSwitchIds => {\n const base = useId();\n return {\n titleId: `${base}-title`,\n inputId: `${base}-switch`,\n summaryId: `${base}-summary`,\n errorId: `${base}-error`,\n };\n};\n\n/**\n * Title-as-label, the switch, its explanation and the failure line.\n *\n * The switch is never `disabled` while it saves, for the reason Save is not\n * (`SettingCard.tsx`): a disabled control drops keyboard focus. It says\n * `aria-busy` instead, ignores flips until the save settles (see\n * `useAsyncSwitch`), shows a spinner, and a polite live region says the words.\n */\nexport const SettingSwitchBlock: React.FC<\n SettingSwitchBlockProps & { ids: SettingSwitchIds; state: ReturnType<typeof useAsyncSwitch> }\n> = ({ title, headingLevel = 'h3', icon, summary, copy, disabled, dataTestId, ids, state }) => {\n const theme = useTheme();\n const { shown, saving, error, flip } = state;\n const describedBy = [summary != null ? ids.summaryId : null, error ? ids.errorId : null]\n .filter(Boolean)\n .join(' ');\n\n const control = (\n <Box sx={{ display: 'inline-flex', alignItems: 'center', gap: 1, flexShrink: 0 }}>\n {saving && <PendingSpinner dataTestId={dataTestId} />}\n <Switch\n id={ids.inputId}\n checked={shown}\n onChange={(event) => void flip(event.target.checked)}\n disabled={disabled}\n error={Boolean(error)}\n aria-describedby={describedBy || undefined}\n inputProps={{ role: 'switch', 'aria-busy': saving }}\n dataTestId={partTestId(dataTestId, 'switch')}\n />\n </Box>\n );\n\n return (\n <>\n <SettingHeader\n titleId={ids.titleId}\n title={title}\n headingLevel={headingLevel}\n icon={icon}\n labelFor={ids.inputId}\n trailing={control}\n dataTestId={dataTestId}\n />\n {summary != null && (\n <Box component=\"p\" id={ids.summaryId} sx={descriptionStyles(theme)} data-testid={partTestId(dataTestId, 'summary')}>\n {summary}\n </Box>\n )}\n <SaveError id={ids.errorId} message={error} dataTestId={dataTestId} />\n <Box role=\"status\" aria-live=\"polite\" sx={SR_ONLY_SX}>\n {saving ? copy.saving : ''}\n </Box>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AACzB,SAAgB,aAAa;AAoDzB,SAgBA,UAfa,KADb;AA5BG,IAAM,sBAAsB,MAAwB;AACzD,QAAM,OAAO,MAAM;AACnB,SAAO;AAAA,IACL,SAAS,GAAG,IAAI;AAAA,IAChB,SAAS,GAAG,IAAI;AAAA,IAChB,WAAW,GAAG,IAAI;AAAA,IAClB,SAAS,GAAG,IAAI;AAAA,EAClB;AACF;AAUO,IAAM,qBAET,CAAC,EAAE,OAAO,eAAe,MAAM,MAAM,SAAS,MAAM,UAAU,YAAY,KAAK,MAAM,MAAM;AAC7F,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,QAAQ,OAAO,KAAK,IAAI;AACvC,QAAM,cAAc,CAAC,WAAW,OAAO,IAAI,YAAY,MAAM,QAAQ,IAAI,UAAU,IAAI,EACpF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,UACJ,qBAAC,OAAI,IAAI,EAAE,SAAS,eAAe,YAAY,UAAU,KAAK,GAAG,YAAY,EAAE,GAC5E;AAAA,cAAU,oBAAC,kBAAe,YAAwB;AAAA,IACnD;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,IAAI;AAAA,QACR,SAAS;AAAA,QACT,UAAU,CAAC,UAAU,KAAK,KAAK,MAAM,OAAO,OAAO;AAAA,QACnD;AAAA,QACA,OAAO,QAAQ,KAAK;AAAA,QACpB,oBAAkB,eAAe;AAAA,QACjC,YAAY,EAAE,MAAM,UAAU,aAAa,OAAO;AAAA,QAClD,YAAY,WAAW,YAAY,QAAQ;AAAA;AAAA,IAC7C;AAAA,KACF;AAGF,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,IAAI;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,IAAI;AAAA,QACd,UAAU;AAAA,QACV;AAAA;AAAA,IACF;AAAA,IACC,WAAW,QACV,oBAAC,OAAI,WAAU,KAAI,IAAI,IAAI,WAAW,IAAI,kBAAkB,KAAK,GAAG,eAAa,WAAW,YAAY,SAAS,GAC9G,mBACH;AAAA,IAEF,oBAAC,aAAU,IAAI,IAAI,SAAS,SAAS,OAAO,YAAwB;AAAA,IACpE,oBAAC,OAAI,MAAK,UAAS,aAAU,UAAS,IAAI,YACvC,mBAAS,KAAK,SAAS,IAC1B;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-RN7UJI7S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,168 @@
1
+ import {
2
+ useSettingCard
3
+ } from "./chunk-SALQ65SM.js";
4
+ import {
5
+ LearnMore,
6
+ PendingSpinner,
7
+ SaveError,
8
+ SettingHeader,
9
+ partTestId
10
+ } from "./chunk-PEOOCQ2T.js";
11
+ import {
12
+ SETTING_CARD_OPEN_ATTR,
13
+ actionsStyles,
14
+ summaryStyles,
15
+ surfaceStyles,
16
+ withCallerSx
17
+ } from "./chunk-3DO5AJCG.js";
18
+ import {
19
+ Icon
20
+ } from "./chunk-JAGAFEZL.js";
21
+ import {
22
+ Button
23
+ } from "./chunk-K6LNHHSH.js";
24
+
25
+ // src/components/layout/SettingCard/SettingCard.tsx
26
+ import Box from "@mui/material/Box/index.js";
27
+ import { forwardRef, useId } from "react";
28
+ import { jsx, jsxs } from "react/jsx-runtime";
29
+ var OpenBody = ({
30
+ bodyRef,
31
+ titleId,
32
+ errorId,
33
+ copy,
34
+ learnMore,
35
+ children,
36
+ saving,
37
+ error,
38
+ saveDisabled,
39
+ onSave,
40
+ onCancel,
41
+ dataTestId
42
+ }) => {
43
+ const onKeyDown = (event) => {
44
+ if (event.key !== "Escape") return;
45
+ event.stopPropagation();
46
+ onCancel();
47
+ };
48
+ return /* @__PURE__ */ jsxs(
49
+ Box,
50
+ {
51
+ ref: bodyRef,
52
+ role: "group",
53
+ "aria-labelledby": titleId,
54
+ onKeyDown,
55
+ sx: { display: "flex", flexDirection: "column", gap: 2, flex: 1 },
56
+ "data-testid": partTestId(dataTestId, "body"),
57
+ children: [
58
+ /* @__PURE__ */ jsx(Box, { children }),
59
+ learnMore && /* @__PURE__ */ jsx(LearnMore, { label: copy.learnMore, dataTestId, children: learnMore }),
60
+ /* @__PURE__ */ jsx(SaveError, { id: errorId, message: error, dataTestId }),
61
+ /* @__PURE__ */ jsxs(Box, { sx: (theme) => actionsStyles(theme), children: [
62
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", color: "neutral", onClick: onCancel, disabled: saving, dataTestId: partTestId(dataTestId, "cancel"), children: copy.cancel }),
63
+ /* @__PURE__ */ jsx(
64
+ Button,
65
+ {
66
+ variant: "solid",
67
+ onClick: onSave,
68
+ disabled: saveDisabled,
69
+ "aria-disabled": saving || void 0,
70
+ "aria-describedby": error ? errorId : void 0,
71
+ icon: saving ? /* @__PURE__ */ jsx(PendingSpinner, { dataTestId }) : void 0,
72
+ iconPosition: "left",
73
+ dataTestId: partTestId(dataTestId, "save"),
74
+ children: saving ? copy.saving : copy.save
75
+ }
76
+ )
77
+ ] })
78
+ ]
79
+ }
80
+ );
81
+ };
82
+ var EditTrigger = ({ triggerRef, id, titleId, label, disabled, onOpen, dataTestId }) => /* @__PURE__ */ jsx(
83
+ Button,
84
+ {
85
+ ref: triggerRef,
86
+ id,
87
+ variant: "outline",
88
+ color: "neutral",
89
+ size: "sm",
90
+ icon: /* @__PURE__ */ jsx(Icon, { name: "Edit", size: "xs" }),
91
+ iconPosition: "left",
92
+ disabled,
93
+ "aria-labelledby": `${id} ${titleId}`,
94
+ onClick: onOpen,
95
+ dataTestId: partTestId(dataTestId, "edit"),
96
+ children: label
97
+ }
98
+ );
99
+ var SettingCard = forwardRef(function SettingCard2(props, ref) {
100
+ const { title, headingLevel = "h3", icon, status, summary, children, learnMore, copy, dataTestId, className, sx } = props;
101
+ const baseId = useId();
102
+ const titleId = `${baseId}-title`;
103
+ const card = useSettingCard(props);
104
+ const { open } = card;
105
+ return /* @__PURE__ */ jsxs(
106
+ Box,
107
+ {
108
+ component: "section",
109
+ ref,
110
+ "aria-labelledby": titleId,
111
+ "aria-busy": card.saving || void 0,
112
+ "data-state": open ? "open" : "closed",
113
+ ...{ [SETTING_CARD_OPEN_ATTR]: open ? "" : void 0 },
114
+ "data-testid": dataTestId,
115
+ className,
116
+ sx: withCallerSx((theme) => surfaceStyles(theme, open), sx),
117
+ children: [
118
+ /* @__PURE__ */ jsx(
119
+ SettingHeader,
120
+ {
121
+ titleId,
122
+ title,
123
+ headingLevel,
124
+ icon,
125
+ status,
126
+ trailing: open ? null : /* @__PURE__ */ jsx(
127
+ EditTrigger,
128
+ {
129
+ triggerRef: card.editRef,
130
+ id: `${baseId}-edit`,
131
+ titleId,
132
+ label: copy.edit,
133
+ disabled: card.disabled,
134
+ onOpen: card.openCard,
135
+ dataTestId
136
+ }
137
+ ),
138
+ dataTestId
139
+ }
140
+ ),
141
+ !open && summary != null && /* @__PURE__ */ jsx(Box, { component: "p", sx: summaryStyles, "data-testid": partTestId(dataTestId, "summary"), children: summary }),
142
+ open && /* @__PURE__ */ jsx(
143
+ OpenBody,
144
+ {
145
+ bodyRef: card.bodyRef,
146
+ titleId,
147
+ errorId: `${baseId}-error`,
148
+ copy,
149
+ learnMore,
150
+ saving: card.saving,
151
+ error: card.error,
152
+ saveDisabled: card.saveDisabled,
153
+ onSave: card.save,
154
+ onCancel: card.cancel,
155
+ dataTestId,
156
+ children
157
+ }
158
+ )
159
+ ]
160
+ }
161
+ );
162
+ });
163
+ SettingCard.displayName = "SettingCard";
164
+
165
+ export {
166
+ SettingCard
167
+ };
168
+ //# sourceMappingURL=chunk-RPBGUWNF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/SettingCard/SettingCard.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport React, { forwardRef, useId } from 'react';\n\nimport { Icon } from '../../../icons';\nimport { Button } from '../../form/Button';\n\nimport { useSettingCard } from './SettingCard.hooks';\nimport { LearnMore, PendingSpinner, SaveError, SettingHeader, partTestId } from './SettingCard.parts';\nimport { SETTING_CARD_OPEN_ATTR, actionsStyles, summaryStyles, surfaceStyles, withCallerSx } from './SettingCard.styles';\nimport type { SettingCardCopy, SettingCardProps } from './SettingCard.types';\n\ninterface OpenBodyProps {\n bodyRef: React.RefObject<HTMLDivElement | null>;\n titleId: string;\n errorId: string;\n copy: SettingCardCopy;\n learnMore?: React.ReactNode;\n children: React.ReactNode;\n saving: boolean;\n error: string | null;\n saveDisabled: boolean;\n onSave: () => void;\n onCancel: () => void;\n dataTestId?: string;\n}\n\n/**\n * The open card: the host's form, the disclosure, the failure line, and the\n * two actions.\n *\n * Save is NOT `disabled` while it saves — it is `aria-disabled` and ignores\n * the click. A disabled button drops the focus it holds, so a keyboard user\n * who pressed Save would land on `<body>` and, if the save then failed, have\n * to find their way back to the form from the top of the page.\n */\nconst OpenBody: React.FC<OpenBodyProps> = ({\n bodyRef, titleId, errorId, copy, learnMore, children, saving, error, saveDisabled, onSave, onCancel, dataTestId,\n}) => {\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n event.stopPropagation();\n onCancel();\n };\n\n return (\n <Box\n ref={bodyRef}\n role=\"group\"\n aria-labelledby={titleId}\n onKeyDown={onKeyDown}\n sx={{ display: 'flex', flexDirection: 'column', gap: 2, flex: 1 }}\n data-testid={partTestId(dataTestId, 'body')}\n >\n <Box>{children}</Box>\n {learnMore && (\n <LearnMore label={copy.learnMore} dataTestId={dataTestId}>\n {learnMore}\n </LearnMore>\n )}\n <SaveError id={errorId} message={error} dataTestId={dataTestId} />\n <Box sx={(theme) => actionsStyles(theme)}>\n <Button variant=\"ghost\" color=\"neutral\" onClick={onCancel} disabled={saving} dataTestId={partTestId(dataTestId, 'cancel')}>\n {copy.cancel}\n </Button>\n <Button\n variant=\"solid\"\n onClick={onSave}\n disabled={saveDisabled}\n aria-disabled={saving || undefined}\n aria-describedby={error ? errorId : undefined}\n icon={saving ? <PendingSpinner dataTestId={dataTestId} /> : undefined}\n iconPosition=\"left\"\n dataTestId={partTestId(dataTestId, 'save')}\n >\n {saving ? copy.saving : copy.save}\n </Button>\n </Box>\n </Box>\n );\n};\n\n/**\n * A setting, summarised while closed and edited in place.\n *\n * Closed: title, status pill, a one-line summary and Edit. Edit opens the card\n * where it is — no dialog, no route — around the host's form, a \"learn more\"\n * disclosure and Cancel / Save. Save may be async: the card holds its saving\n * state while the promise is pending, closes when it resolves, and stays open\n * with the error when it rejects. Focus moves into the card as it opens and\n * back to Edit as it closes.\n */\ninterface EditTriggerProps {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n id: string;\n titleId: string;\n label: string;\n disabled: boolean;\n onOpen: () => void;\n dataTestId?: string;\n}\n\n/** Edit. Its accessible name is \"Edit\" AND the card's title, so a grid of them is not a list of \"Edit, Edit, Edit\". */\nconst EditTrigger: React.FC<EditTriggerProps> = ({ triggerRef, id, titleId, label, disabled, onOpen, dataTestId }) => (\n <Button\n ref={triggerRef}\n id={id}\n variant=\"outline\"\n color=\"neutral\"\n size=\"sm\"\n icon={<Icon name=\"Edit\" size=\"xs\" />}\n iconPosition=\"left\"\n disabled={disabled}\n aria-labelledby={`${id} ${titleId}`}\n onClick={onOpen}\n dataTestId={partTestId(dataTestId, 'edit')}\n >\n {label}\n </Button>\n);\n\n/**\n * A setting, summarised while closed and edited in place.\n *\n * Closed: title, status pill, a one-line summary and Edit. Edit opens the card\n * where it is — no dialog, no route — around the host's form, a \"learn more\"\n * disclosure and Cancel / Save. Save may be async: the card holds its saving\n * state while the promise is pending, closes when it resolves, and stays open\n * with the error when it rejects. Focus moves into the card as it opens and\n * back to Edit as it closes.\n */\nexport const SettingCard = forwardRef<HTMLElement, SettingCardProps>(function SettingCard(props, ref) {\n const { title, headingLevel = 'h3', icon, status, summary, children, learnMore, copy, dataTestId, className, sx } = props;\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const card = useSettingCard(props);\n const { open } = card;\n\n return (\n <Box\n component=\"section\"\n ref={ref}\n aria-labelledby={titleId}\n aria-busy={card.saving || undefined}\n data-state={open ? 'open' : 'closed'}\n {...{ [SETTING_CARD_OPEN_ATTR]: open ? '' : undefined }}\n data-testid={dataTestId}\n className={className}\n sx={withCallerSx((theme) => surfaceStyles(theme, open), sx)}\n >\n <SettingHeader\n titleId={titleId}\n title={title}\n headingLevel={headingLevel}\n icon={icon}\n status={status}\n trailing={\n open ? null : (\n <EditTrigger\n triggerRef={card.editRef}\n id={`${baseId}-edit`}\n titleId={titleId}\n label={copy.edit}\n disabled={card.disabled}\n onOpen={card.openCard}\n dataTestId={dataTestId}\n />\n )\n }\n dataTestId={dataTestId}\n />\n {!open && summary != null && (\n <Box component=\"p\" sx={summaryStyles} data-testid={partTestId(dataTestId, 'summary')}>\n {summary}\n </Box>\n )}\n {open && (\n <OpenBody\n bodyRef={card.bodyRef}\n titleId={titleId}\n errorId={`${baseId}-error`}\n copy={copy}\n learnMore={learnMore}\n saving={card.saving}\n error={card.error}\n saveDisabled={card.saveDisabled}\n onSave={card.save}\n onCancel={card.cancel}\n dataTestId={dataTestId}\n >\n {children}\n </OpenBody>\n )}\n </Box>\n );\n});\n\nSettingCard.displayName = 'SettingCard';\n"],"mappings":"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","names":["SettingCard"]}
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-BXC6GRLE.js";
8
8
  import {
9
9
  SettingsPanel
10
- } from "./chunk-MKJHDHLF.js";
10
+ } from "./chunk-TCNTIGMY.js";
11
11
  import {
12
12
  atLeastRail
13
13
  } from "./chunk-NYFNF7I5.js";
@@ -135,4 +135,4 @@ SettingsLayout.displayName = "SettingsLayout";
135
135
  export {
136
136
  SettingsLayout
137
137
  };
138
- //# sourceMappingURL=chunk-BKHO4RSF.js.map
138
+ //# sourceMappingURL=chunk-RZ2VZ7SL.js.map
@@ -7,11 +7,11 @@ import {
7
7
  panelHeadSx,
8
8
  pinnedLabelSx,
9
9
  pinnedSx
10
- } from "./chunk-NFJ3VVD3.js";
10
+ } from "./chunk-Z6T5SXST.js";
11
11
  import {
12
12
  fieldBorder,
13
13
  fieldHeight
14
- } from "./chunk-EXFX3JRN.js";
14
+ } from "./chunk-M47ZOUGF.js";
15
15
  import {
16
16
  fieldRadiusPx
17
17
  } from "./chunk-GDN2LUTZ.js";
@@ -158,4 +158,4 @@ export {
158
158
  CategoryPanelHead,
159
159
  CategoryPinnedTray
160
160
  };
161
- //# sourceMappingURL=chunk-MT7QJRP7.js.map
161
+ //# sourceMappingURL=chunk-S4IXC2V3.js.map
@@ -0,0 +1,118 @@
1
+ import {
2
+ focusFirstTabbable
3
+ } from "./chunk-LV7LSPBF.js";
4
+
5
+ // src/components/layout/SettingCard/SettingCard.hooks.ts
6
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
7
+ function saveErrorMessage(error, formatError, fallback) {
8
+ return formatError?.(error) ?? fallback;
9
+ }
10
+ function useControllableOpen(open, defaultOpen, onOpenChange) {
11
+ const [inner, setInner] = useState(defaultOpen);
12
+ const controlled = open !== void 0;
13
+ const value = controlled ? open : inner;
14
+ const setOpen = useCallback(
15
+ (next) => {
16
+ if (!controlled) setInner(next);
17
+ onOpenChange?.(next);
18
+ },
19
+ [controlled, onOpenChange]
20
+ );
21
+ return [value, setOpen];
22
+ }
23
+ function useSaveRunner(formatError, fallback) {
24
+ const [saving, setSaving] = useState(false);
25
+ const [error, setError] = useState(null);
26
+ const seq = useRef(0);
27
+ useEffect(
28
+ () => () => {
29
+ seq.current += 1;
30
+ },
31
+ []
32
+ );
33
+ const run = useCallback(
34
+ async (save) => {
35
+ const mine = seq.current += 1;
36
+ setSaving(true);
37
+ setError(null);
38
+ try {
39
+ await Promise.resolve().then(save);
40
+ if (seq.current !== mine) return false;
41
+ setSaving(false);
42
+ return true;
43
+ } catch (cause) {
44
+ if (seq.current !== mine) return false;
45
+ setSaving(false);
46
+ setError(saveErrorMessage(cause, formatError, fallback));
47
+ return false;
48
+ }
49
+ },
50
+ [formatError, fallback]
51
+ );
52
+ const reset = useCallback(() => {
53
+ seq.current += 1;
54
+ setSaving(false);
55
+ setError(null);
56
+ }, []);
57
+ return { saving, error, run, reset };
58
+ }
59
+ function useAsyncSwitch(options) {
60
+ const { checked, onChange, formatError, fallback } = options;
61
+ const [pending, setPending] = useState(null);
62
+ const { saving, error, run } = useSaveRunner(formatError, fallback);
63
+ const flip = useCallback(
64
+ async (next) => {
65
+ if (saving) return;
66
+ setPending(next);
67
+ await run(() => onChange(next));
68
+ setPending(null);
69
+ },
70
+ [saving, run, onChange]
71
+ );
72
+ return { shown: pending ?? checked, saving, error, flip };
73
+ }
74
+ function useFocusHandoff(open, body, trigger) {
75
+ const previous = useRef(open);
76
+ useLayoutEffect(() => {
77
+ if (previous.current === open) return;
78
+ previous.current = open;
79
+ if (open && body.current) focusFirstTabbable(body.current);
80
+ if (!open) trigger.current?.focus();
81
+ }, [open, body, trigger]);
82
+ }
83
+ function useSettingCard(props) {
84
+ const { copy, onSave, onCancel, open: openProp, defaultOpen = false, onOpenChange, formatError } = props;
85
+ const disabled = props.disabled ?? false;
86
+ const saveDisabled = props.saveDisabled ?? false;
87
+ const [open, setOpen] = useControllableOpen(openProp, defaultOpen, onOpenChange);
88
+ const { saving, error, run, reset } = useSaveRunner(formatError, copy.saveFailed);
89
+ const bodyRef = useRef(null);
90
+ const editRef = useRef(null);
91
+ useFocusHandoff(open, bodyRef, editRef);
92
+ useEffect(() => {
93
+ if (!open) reset();
94
+ }, [open, reset]);
95
+ const openCard = useCallback(() => setOpen(true), [setOpen]);
96
+ const cancel = useCallback(() => {
97
+ if (saving) return;
98
+ setOpen(false);
99
+ onCancel?.();
100
+ }, [saving, setOpen, onCancel]);
101
+ const save = useCallback(() => {
102
+ if (saving || saveDisabled) return;
103
+ void run(onSave).then((saved) => {
104
+ if (saved) setOpen(false);
105
+ });
106
+ }, [saving, saveDisabled, run, onSave, setOpen]);
107
+ return { open, disabled, saveDisabled, saving, error, bodyRef, editRef, openCard, cancel, save };
108
+ }
109
+
110
+ export {
111
+ saveErrorMessage,
112
+ useControllableOpen,
113
+ useSaveRunner,
114
+ useAsyncSwitch,
115
+ useFocusHandoff,
116
+ useSettingCard
117
+ };
118
+ //# sourceMappingURL=chunk-SALQ65SM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/SettingCard/SettingCard.hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react';\n\nimport { focusFirstTabbable } from '../../feedback/Dialog/Dialog.focus';\n\nimport type { SettingCardProps, SettingErrorFormatter, SettingSaveResult } from './SettingCard.types';\n\n/** The sentence a rejected save shows: the host's, else the copy's fallback. */\nexport function saveErrorMessage(\n error: unknown,\n formatError: SettingErrorFormatter | undefined,\n fallback: string,\n): string {\n return formatError?.(error) ?? fallback;\n}\n\n/**\n * Open state that is controlled when `open` is passed and uncontrolled\n * otherwise — the shape MUI's own `useControlled` has, without its dev-only\n * warnings reaching into this package's surface.\n */\nexport function useControllableOpen(\n open: boolean | undefined,\n defaultOpen: boolean,\n onOpenChange: ((open: boolean) => void) | undefined,\n): [boolean, (next: boolean) => void] {\n const [inner, setInner] = useState(defaultOpen);\n const controlled = open !== undefined;\n const value = controlled ? open : inner;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!controlled) setInner(next);\n onOpenChange?.(next);\n },\n [controlled, onOpenChange],\n );\n\n return [value, setOpen];\n}\n\n/**\n * Runs a save that may or may not be async and reports how it went.\n *\n * `Promise.resolve().then(save)` rather than `await save()`: it also catches a\n * handler that throws SYNCHRONOUSLY, which an `await` inside `try` would too —\n * but it keeps the pending state visible for one tick even when the handler\n * returns nothing, so a save never \"succeeds\" in the middle of the click that\n * started it. A sequence id drops the outcome of a run the card has since\n * abandoned (closed, or started again).\n */\nexport function useSaveRunner(formatError: SettingErrorFormatter | undefined, fallback: string) {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const seq = useRef(0);\n\n useEffect(\n () => () => {\n // Unmounted: whatever is still in flight has nobody left to report to.\n seq.current += 1;\n },\n [],\n );\n\n const run = useCallback(\n async (save: () => SettingSaveResult): Promise<boolean> => {\n const mine = (seq.current += 1);\n setSaving(true);\n setError(null);\n try {\n await Promise.resolve().then(save);\n if (seq.current !== mine) return false;\n setSaving(false);\n return true;\n } catch (cause) {\n if (seq.current !== mine) return false;\n setSaving(false);\n setError(saveErrorMessage(cause, formatError, fallback));\n return false;\n }\n },\n [formatError, fallback],\n );\n\n const reset = useCallback(() => {\n seq.current += 1;\n setSaving(false);\n setError(null);\n }, []);\n\n return { saving, error, run, reset };\n}\n\n/**\n * A switch that saves the moment it flips.\n *\n * It shows the flip at once (`pending`) and holds it while the save runs; a\n * success hands back to the host's `checked`, which by then says the same\n * thing, and a failure drops `pending` so the switch returns to what is\n * actually saved. A flip while one is in flight is ignored rather than queued:\n * two racing writes of a boolean have no right answer.\n */\nexport function useAsyncSwitch(options: {\n checked: boolean;\n onChange: (checked: boolean) => SettingSaveResult;\n formatError: SettingErrorFormatter | undefined;\n fallback: string;\n}) {\n const { checked, onChange, formatError, fallback } = options;\n const [pending, setPending] = useState<boolean | null>(null);\n const { saving, error, run } = useSaveRunner(formatError, fallback);\n\n const flip = useCallback(\n async (next: boolean) => {\n if (saving) return;\n setPending(next);\n await run(() => onChange(next));\n setPending(null);\n },\n [saving, run, onChange],\n );\n\n return { shown: pending ?? checked, saving, error, flip };\n}\n\n/**\n * Focus follows the card: into it when it opens, back to the trigger when it\n * closes.\n *\n * Inward, it is the Dialog's own rule (`focusFirstTabbable`, FUT-2696): the\n * first tabbable descendant, and a caller's `autoFocus` keeps winning. The\n * card is NOT a trap — it is inline, the rest of the page is still there, and\n * locking Tab inside it would strand a keyboard user who wants to leave\n * mid-edit. What it owes them is the round trip: the Edit trigger unmounts\n * while the card is open, so without the return focus would fall to <body>\n * and the reader would start again from the top of the page.\n *\n * Only a TRANSITION moves focus: a card mounted open (or closed) leaves focus\n * where the page put it.\n */\nexport function useFocusHandoff(\n open: boolean,\n body: RefObject<HTMLElement | null>,\n trigger: RefObject<HTMLElement | null>,\n): void {\n const previous = useRef(open);\n\n useLayoutEffect(() => {\n if (previous.current === open) return;\n previous.current = open;\n if (open && body.current) focusFirstTabbable(body.current);\n if (!open) trigger.current?.focus();\n }, [open, body, trigger]);\n}\n\n/**\n * Everything an editable card DOES, apart from how it looks: its open state,\n * the save and its outcome, Cancel, and where focus goes.\n */\nexport function useSettingCard(props: SettingCardProps) {\n const { copy, onSave, onCancel, open: openProp, defaultOpen = false, onOpenChange, formatError } = props;\n const disabled = props.disabled ?? false;\n const saveDisabled = props.saveDisabled ?? false;\n const [open, setOpen] = useControllableOpen(openProp, defaultOpen, onOpenChange);\n const { saving, error, run, reset } = useSaveRunner(formatError, copy.saveFailed);\n const bodyRef = useRef<HTMLDivElement>(null);\n const editRef = useRef<HTMLButtonElement>(null);\n useFocusHandoff(open, bodyRef, editRef);\n\n // However the card closed — Cancel, a save, or a controlling host — the\n // next opening starts without the last one's error.\n useEffect(() => {\n if (!open) reset();\n }, [open, reset]);\n\n const openCard = useCallback(() => setOpen(true), [setOpen]);\n\n const cancel = useCallback(() => {\n if (saving) return;\n setOpen(false);\n onCancel?.();\n }, [saving, setOpen, onCancel]);\n\n const save = useCallback(() => {\n if (saving || saveDisabled) return;\n void run(onSave).then((saved) => {\n if (saved) setOpen(false);\n });\n }, [saving, saveDisabled, run, onSave, setOpen]);\n\n return { open, disabled, saveDisabled, saving, error, bodyRef, editRef, openCard, cancel, save };\n}\n"],"mappings":"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","names":[]}
@@ -9,7 +9,7 @@ import {
9
9
  inputRadiusStyles,
10
10
  outlinedStyles,
11
11
  pulseStyles
12
- } from "./chunk-743SY4WQ.js";
12
+ } from "./chunk-YLXQWYOG.js";
13
13
  import {
14
14
  INPUT_LOADING,
15
15
  SIZE_MAP,
@@ -20,7 +20,7 @@ import {
20
20
  } from "./chunk-TYJR4GOF.js";
21
21
  import {
22
22
  fieldControlStyles
23
- } from "./chunk-EXFX3JRN.js";
23
+ } from "./chunk-M47ZOUGF.js";
24
24
  import {
25
25
  rem
26
26
  } from "./chunk-YKCAJ2TN.js";
@@ -92,6 +92,7 @@ var Input = React.forwardRef(
92
92
  "aria-label": ariaLabel,
93
93
  "aria-describedby": ariaDescribedBy,
94
94
  "aria-busy": ariaBusy,
95
+ inputProps,
95
96
  ...rest
96
97
  }, ref) => {
97
98
  const { testId: dataTestId, rest: props } = splitTestId(rest);
@@ -117,6 +118,7 @@ var Input = React.forwardRef(
117
118
  onBlur,
118
119
  inputProps: {
119
120
  "data-testid": dataTestId,
121
+ ...inputProps,
120
122
  ...inputAriaOf({ id, helperText, label: ariaLabel, describedBy: ariaDescribedBy, busy: ariaBusy })
121
123
  },
122
124
  InputProps: {
@@ -135,4 +137,4 @@ Input.displayName = "Input";
135
137
  export {
136
138
  Input
137
139
  };
138
- //# sourceMappingURL=chunk-XOZYUJQ5.js.map
140
+ //# sourceMappingURL=chunk-SDKOOVEX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/form/Input/Input.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { INPUT_LOADING } from './Input.metrics';\nimport { TextFieldSlim } from './text-field-slim';\n\nimport {\n filledStyles,\n floatingLabelStyles,\n glowStyles,\n inputBaseStyles,\n inputRadiusStyles,\n muiVariantFor,\n outlinedStyles,\n pulseStyles,\n SIZE_MAP,\n} from './Input.styles';\nimport type { InputProps } from './Input.types';\nimport { splitTestId } from '../../../platform/test-id';\nimport { fieldControlStyles } from '../../../tokens/field-height';\nimport { rem } from '../../../tokens/relative';\nimport type { SizeValue } from '../../../tokens/vocabulary';\n\n/**\n * `TextFieldSlim`, not `TextField` — see `text-field-slim.tsx`. MUI's own\n * `TextField` imports `Select` unconditionally, and through it `Menu`,\n * `Popover`, `Modal` and seven more component modules, so every screen with one\n * text box shipped a dropdown it can never render. Same composition, same DOM,\n * same prop routing; the select branch is the only thing missing.\n */\nconst StyledTextField = styled(TextFieldSlim, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'fieldSize', 'floating', 'glow', 'pulse', 'loading'].includes(prop as string),\n})<{\n customVariant?: InputProps['variant'];\n fieldSize: SizeValue;\n floating?: boolean;\n glow?: boolean;\n pulse?: boolean;\n loading?: boolean;\n}>(({ theme, customVariant, fieldSize, floating, glow, pulse, loading }) => ({\n position: 'relative',\n // The theme's field height for this size (outlined family, one line).\n ...fieldControlStyles(theme, fieldSize),\n opacity: loading ? INPUT_LOADING.opacity : 1,\n\n ...(glow ? glowStyles(theme) : {}),\n ...(pulse ? pulseStyles(theme, fieldSize) : {}),\n ...(floating ? floatingLabelStyles(theme) : {}),\n\n '& .MuiInputBase-root': {\n transition: 'all 0.3s ease',\n ...inputRadiusStyles(theme, customVariant),\n ...inputBaseStyles(theme, customVariant),\n },\n\n '& .MuiOutlinedInput-root': outlinedStyles(theme),\n '& .MuiFilledInput-root': filledStyles(theme),\n}));\n\n/** Only one adornment shows at a time: the spinner replaces the caller's while loading. */\nconst EndAdornment: React.FC<{ loading: boolean; endAdornment?: React.ReactNode }> = ({\n loading,\n endAdornment,\n}) => {\n const theme = useTheme();\n if (loading) {\n return (\n <InputAdornment position=\"end\">\n <CircularProgress size={rem(theme, INPUT_LOADING.spinnerSize)} />\n </InputAdornment>\n );\n }\n\n if (!endAdornment) return null;\n\n return <InputAdornment position=\"end\">{endAdornment}</InputAdornment>;\n};\n\n/** While loading the field is inert: no clicks, and disabled to assistive tech. */\nconst interactionProps = (\n loading: boolean,\n onClick: InputProps['onClick'],\n disabled?: boolean,\n) => ({\n disabled: loading || disabled,\n onClick: loading ? undefined : onClick,\n});\n\n/**\n * The ARIA that describes the field has to sit on the `<input>`: the text\n * field puts every attribute it does not recognise on its root `FormControl`,\n * a `<div>` with no role, where a screen reader never reads it.\n *\n * `aria-label` has ridden `inputProps` since FUT-755. `aria-describedby` and\n * `aria-busy` fell through to the div until FUT-2619, so CepField's input\n * pointed at nothing while its lookup status lived in a live region beside it.\n *\n * `inputProps` are spread onto the `<input>` AFTER the `aria-describedby` MUI\n * writes for helper text, so a caller's ids REPLACE the helper text's: MUI's\n * `TextField` on its own keeps only one of the two. This joins both, helper\n * text first. The helper id is MUI's `<id>-helper-text` (the parity test pins\n * that spelling), which is why the field's id is fixed here rather than left\n * to the text field.\n */\nfunction inputAriaOf(a: {\n id: string;\n helperText: React.ReactNode;\n label?: string;\n describedBy?: string;\n busy?: InputProps['aria-busy'];\n}): Record<string, unknown> {\n const describedBy = [a.helperText ? `${a.id}-helper-text` : undefined, a.describedBy]\n .filter(Boolean)\n .join(' ');\n return {\n ...(a.label === undefined ? {} : { 'aria-label': a.label }),\n ...(a.describedBy === undefined ? {} : { 'aria-describedby': describedBy }),\n ...(a.busy === undefined ? {} : { 'aria-busy': a.busy }),\n };\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'outlined',\n size = 'md',\n label,\n error,\n helperText,\n startAdornment,\n endAdornment,\n fullWidth = true,\n floating = false,\n glow = false,\n pulse = false,\n loading = false,\n onClick,\n onFocus,\n onBlur,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'aria-busy': ariaBusy,\n ...rest\n },\n ref,\n ) => {\n const { testId: dataTestId, rest: props } = splitTestId(rest);\n const generatedId = React.useId();\n const id = props.id ?? generatedId;\n return (\n <StyledTextField\n ref={ref}\n variant={muiVariantFor(variant)}\n customVariant={variant}\n fieldSize={size}\n floating={floating}\n glow={glow}\n pulse={pulse}\n loading={loading}\n label={label}\n error={error}\n helperText={helperText}\n fullWidth={fullWidth}\n {...interactionProps(loading, onClick, props.disabled)}\n onFocus={onFocus}\n onBlur={onBlur}\n /*\n * `aria-label` has to ride `inputProps` to reach the `<input>` (FUT-755).\n * Spread with the rest it lands on the FormControl DIV that the text\n * field renders as its root, which carries no role — so the field kept\n * no accessible name, and a source grep saying \"this input is labelled\"\n * disagreed with the DOM. The reports search box and the block-title\n * inputs were both named in source and anonymous to a screen reader.\n * `aria-describedby` and `aria-busy` are the same case: `inputAriaOf`.\n */\n inputProps={{\n 'data-testid': dataTestId,\n ...inputAriaOf({ id, helperText, label: ariaLabel, describedBy: ariaDescribedBy, busy: ariaBusy }),\n }}\n InputProps={{\n startAdornment: startAdornment && (\n <InputAdornment position=\"start\">{startAdornment}</InputAdornment>\n ),\n endAdornment: <EndAdornment loading={loading} endAdornment={endAdornment} />,\n }}\n {...SIZE_MAP[size]}\n {...props}\n id={id}\n />\n );\n },\n);\n\nInput.displayName = 'Input';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/components/form/Input/Input.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport { styled, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { INPUT_LOADING } from './Input.metrics';\nimport { TextFieldSlim } from './text-field-slim';\n\nimport {\n filledStyles,\n floatingLabelStyles,\n glowStyles,\n inputBaseStyles,\n inputRadiusStyles,\n muiVariantFor,\n outlinedStyles,\n pulseStyles,\n SIZE_MAP,\n} from './Input.styles';\nimport type { InputProps } from './Input.types';\nimport { splitTestId } from '../../../platform/test-id';\nimport { fieldControlStyles } from '../../../tokens/field-height';\nimport { rem } from '../../../tokens/relative';\nimport type { SizeValue } from '../../../tokens/vocabulary';\n\n/**\n * `TextFieldSlim`, not `TextField` — see `text-field-slim.tsx`. MUI's own\n * `TextField` imports `Select` unconditionally, and through it `Menu`,\n * `Popover`, `Modal` and seven more component modules, so every screen with one\n * text box shipped a dropdown it can never render. Same composition, same DOM,\n * same prop routing; the select branch is the only thing missing.\n */\nconst StyledTextField = styled(TextFieldSlim, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'fieldSize', 'floating', 'glow', 'pulse', 'loading'].includes(prop as string),\n})<{\n customVariant?: InputProps['variant'];\n fieldSize: SizeValue;\n floating?: boolean;\n glow?: boolean;\n pulse?: boolean;\n loading?: boolean;\n}>(({ theme, customVariant, fieldSize, floating, glow, pulse, loading }) => ({\n position: 'relative',\n // The theme's field height for this size (outlined family, one line).\n ...fieldControlStyles(theme, fieldSize),\n opacity: loading ? INPUT_LOADING.opacity : 1,\n\n ...(glow ? glowStyles(theme) : {}),\n ...(pulse ? pulseStyles(theme, fieldSize) : {}),\n ...(floating ? floatingLabelStyles(theme) : {}),\n\n '& .MuiInputBase-root': {\n transition: 'all 0.3s ease',\n ...inputRadiusStyles(theme, customVariant),\n ...inputBaseStyles(theme, customVariant),\n },\n\n '& .MuiOutlinedInput-root': outlinedStyles(theme),\n '& .MuiFilledInput-root': filledStyles(theme),\n}));\n\n/** Only one adornment shows at a time: the spinner replaces the caller's while loading. */\nconst EndAdornment: React.FC<{ loading: boolean; endAdornment?: React.ReactNode }> = ({\n loading,\n endAdornment,\n}) => {\n const theme = useTheme();\n if (loading) {\n return (\n <InputAdornment position=\"end\">\n <CircularProgress size={rem(theme, INPUT_LOADING.spinnerSize)} />\n </InputAdornment>\n );\n }\n\n if (!endAdornment) return null;\n\n return <InputAdornment position=\"end\">{endAdornment}</InputAdornment>;\n};\n\n/** While loading the field is inert: no clicks, and disabled to assistive tech. */\nconst interactionProps = (\n loading: boolean,\n onClick: InputProps['onClick'],\n disabled?: boolean,\n) => ({\n disabled: loading || disabled,\n onClick: loading ? undefined : onClick,\n});\n\n/**\n * The ARIA that describes the field has to sit on the `<input>`: the text\n * field puts every attribute it does not recognise on its root `FormControl`,\n * a `<div>` with no role, where a screen reader never reads it.\n *\n * `aria-label` has ridden `inputProps` since FUT-755. `aria-describedby` and\n * `aria-busy` fell through to the div until FUT-2619, so CepField's input\n * pointed at nothing while its lookup status lived in a live region beside it.\n *\n * `inputProps` are spread onto the `<input>` AFTER the `aria-describedby` MUI\n * writes for helper text, so a caller's ids REPLACE the helper text's: MUI's\n * `TextField` on its own keeps only one of the two. This joins both, helper\n * text first. The helper id is MUI's `<id>-helper-text` (the parity test pins\n * that spelling), which is why the field's id is fixed here rather than left\n * to the text field.\n */\nfunction inputAriaOf(a: {\n id: string;\n helperText: React.ReactNode;\n label?: string;\n describedBy?: string;\n busy?: InputProps['aria-busy'];\n}): Record<string, unknown> {\n const describedBy = [a.helperText ? `${a.id}-helper-text` : undefined, a.describedBy]\n .filter(Boolean)\n .join(' ');\n return {\n ...(a.label === undefined ? {} : { 'aria-label': a.label }),\n ...(a.describedBy === undefined ? {} : { 'aria-describedby': describedBy }),\n ...(a.busy === undefined ? {} : { 'aria-busy': a.busy }),\n };\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'outlined',\n size = 'md',\n label,\n error,\n helperText,\n startAdornment,\n endAdornment,\n fullWidth = true,\n floating = false,\n glow = false,\n pulse = false,\n loading = false,\n onClick,\n onFocus,\n onBlur,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n 'aria-busy': ariaBusy,\n inputProps,\n ...rest\n },\n ref,\n ) => {\n const { testId: dataTestId, rest: props } = splitTestId(rest);\n const generatedId = React.useId();\n const id = props.id ?? generatedId;\n return (\n <StyledTextField\n ref={ref}\n variant={muiVariantFor(variant)}\n customVariant={variant}\n fieldSize={size}\n floating={floating}\n glow={glow}\n pulse={pulse}\n loading={loading}\n label={label}\n error={error}\n helperText={helperText}\n fullWidth={fullWidth}\n {...interactionProps(loading, onClick, props.disabled)}\n onFocus={onFocus}\n onBlur={onBlur}\n /*\n * `aria-label` has to ride `inputProps` to reach the `<input>` (FUT-755).\n * Spread with the rest it lands on the FormControl DIV that the text\n * field renders as its root, which carries no role — so the field kept\n * no accessible name, and a source grep saying \"this input is labelled\"\n * disagreed with the DOM. The reports search box and the block-title\n * inputs were both named in source and anonymous to a screen reader.\n * `aria-describedby` and `aria-busy` are the same case: `inputAriaOf`.\n */\n inputProps={{\n 'data-testid': dataTestId,\n ...inputProps,\n ...inputAriaOf({ id, helperText, label: ariaLabel, describedBy: ariaDescribedBy, busy: ariaBusy }),\n }}\n InputProps={{\n startAdornment: startAdornment && (\n <InputAdornment position=\"start\">{startAdornment}</InputAdornment>\n ),\n endAdornment: <EndAdornment loading={loading} endAdornment={endAdornment} />,\n }}\n {...SIZE_MAP[size]}\n {...props}\n id={id}\n />\n );\n },\n);\n\nInput.displayName = 'Input';\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fieldHeight
3
- } from "./chunk-EXFX3JRN.js";
3
+ } from "./chunk-M47ZOUGF.js";
4
4
  import {
5
5
  fieldRadiusPx
6
6
  } from "./chunk-GDN2LUTZ.js";
@@ -77,4 +77,4 @@ function FilterTrigger({
77
77
  export {
78
78
  FilterTrigger
79
79
  };
80
- //# sourceMappingURL=chunk-5K4G2XYS.js.map
80
+ //# sourceMappingURL=chunk-SNBAMWI5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-6KEXHOIF.js";
4
4
  import {
5
5
  SettingsSectionChips
6
- } from "./chunk-WL2S2YB3.js";
6
+ } from "./chunk-CKHFYTIX.js";
7
7
  import {
8
8
  TOUCH_TARGET,
9
9
  atLeastRail,
@@ -167,4 +167,4 @@ function SettingsPanel({
167
167
  export {
168
168
  SettingsPanel
169
169
  };
170
- //# sourceMappingURL=chunk-MKJHDHLF.js.map
170
+ //# sourceMappingURL=chunk-TCNTIGMY.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  CategorySectionHeading,
3
3
  CategoryTreeRow
4
- } from "./chunk-GE26GVHM.js";
4
+ } from "./chunk-CMFJQH6A.js";
5
5
  import {
6
6
  emptySx,
7
7
  listSx,
8
8
  skeletonSx
9
- } from "./chunk-NFJ3VVD3.js";
9
+ } from "./chunk-Z6T5SXST.js";
10
10
  import {
11
11
  categoryCheckState,
12
12
  isLeafCategory,
@@ -144,4 +144,4 @@ function CategoryPanelList(props) {
144
144
  export {
145
145
  CategoryPanelList
146
146
  };
147
- //# sourceMappingURL=chunk-RUZVK4FV.js.map
147
+ //# sourceMappingURL=chunk-TPVSHO75.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-AUHYR7ID.js";
12
12
  import {
13
13
  Button
14
- } from "./chunk-BLUURKCY.js";
14
+ } from "./chunk-K6LNHHSH.js";
15
15
 
16
16
  // src/components/feedback/NotificationStatusNotice/NotificationStatusNotice.tsx
17
17
  import Box from "@mui/material/Box/index.js";
@@ -106,4 +106,4 @@ NotificationStatusNotice.displayName = "NotificationStatusNotice";
106
106
  export {
107
107
  NotificationStatusNotice
108
108
  };
109
- //# sourceMappingURL=chunk-I72PREY7.js.map
109
+ //# sourceMappingURL=chunk-TTJTMDLI.js.map
@@ -1,11 +1,11 @@
1
- import {
2
- PT_BR_TABLE_FILTER_COPY
3
- } from "./chunk-A7RIZOAL.js";
4
1
  import {
5
2
  PT_BR_CATEGORY_SELECT_COPY,
6
3
  PT_BR_CONFIRM_ACTION_COPY,
7
4
  PT_BR_SAVED_VIEWS_LABELS
8
5
  } from "./chunk-WUE5EK42.js";
6
+ import {
7
+ PT_BR_TABLE_FILTER_COPY
8
+ } from "./chunk-33L26P4J.js";
9
9
 
10
10
  // src/pt-BR.data-display.ts
11
11
  var PT_BR_LIGHTBOX_COPY = {
@@ -225,4 +225,4 @@ export {
225
225
  PT_BR_DATA_STATE_COPY,
226
226
  PT_BR_DATA_VIEWS_COPY
227
227
  };
228
- //# sourceMappingURL=chunk-TU5EIKJA.js.map
228
+ //# sourceMappingURL=chunk-U5SH3VRJ.js.map