@12-apps/ui 6.30.1 → 6.30.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +43 -5
  3. package/dist/_internal/components/data-display/Alert/Alert.js +4 -4
  4. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +2 -2
  5. package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -3
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -5
  7. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +3 -3
  8. package/dist/_internal/components/data-display/Badge/Badge.animations.js +2 -2
  9. package/dist/_internal/components/data-display/Badge/Badge.js +6 -6
  10. package/dist/_internal/components/data-display/Badge/Badge.metrics.js +2 -2
  11. package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
  12. package/dist/_internal/components/data-display/Badge/Badge.variants.js +2 -2
  13. package/dist/_internal/components/data-display/Badge/BadgeContent.js +4 -4
  14. package/dist/_internal/components/data-display/Banner/Banner.js +2 -2
  15. package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -2
  16. package/dist/_internal/components/data-display/CardKit/CardKebab.js +6 -6
  17. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +5 -5
  18. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +11 -11
  19. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -7
  20. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +2 -2
  21. package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
  22. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
  23. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +2 -2
  24. package/dist/_internal/components/data-display/Chart/Chart.js +6 -6
  25. package/dist/_internal/components/data-display/Chart/SpecChart.js +9 -9
  26. package/dist/_internal/components/data-display/Chart/chart-context.js +4 -4
  27. package/dist/_internal/components/data-display/Chart/chart-internals.js +2 -2
  28. package/dist/_internal/components/data-display/Chart/chart-renderers.js +5 -5
  29. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +5 -5
  30. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +52 -52
  31. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +68 -68
  32. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +8 -8
  33. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +10 -10
  34. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +13 -13
  35. package/dist/_internal/components/data-display/DataViews/base-card.js +7 -7
  36. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +10 -10
  37. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +4 -4
  38. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +9 -9
  39. package/dist/_internal/components/data-display/DataViews/base-list-card.js +14 -14
  40. package/dist/_internal/components/data-display/DataViews/card-surface.js +2 -2
  41. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +11 -11
  42. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +5 -5
  43. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +7 -7
  44. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +13 -13
  45. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +7 -7
  46. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +8 -8
  47. package/dist/_internal/components/data-display/DataViews/data-views-export.js +8 -8
  48. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +12 -12
  49. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +14 -14
  50. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +6 -6
  51. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +49 -49
  52. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +5 -5
  53. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +21 -21
  54. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  55. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +29 -6
  56. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +33 -10
  57. package/dist/_internal/components/data-display/DataViews/data-views-overflow.js +1 -1
  58. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  59. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  60. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +8 -8
  61. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +18 -18
  62. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +20 -20
  63. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +17 -17
  64. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +8 -8
  65. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  66. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +5 -5
  67. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +9 -9
  68. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  69. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +5 -5
  70. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -11
  71. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -10
  72. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  73. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +15 -15
  74. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  75. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
  76. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
  77. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  78. package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
  79. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -9
  80. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
  81. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
  82. package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
  83. package/dist/_internal/components/data-display/Progress/Progress.js +5 -5
  84. package/dist/_internal/components/data-display/Progress/Progress.metrics.js +3 -3
  85. package/dist/_internal/components/data-display/Progress/Progress.styles.js +4 -4
  86. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
  87. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  88. package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
  89. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +2 -2
  90. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  91. package/dist/_internal/components/data-display/index.js +57 -57
  92. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
  93. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  94. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +8 -8
  95. package/dist/_internal/components/feedback/index.js +14 -14
  96. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  97. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +3 -3
  98. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +1 -1
  99. package/dist/_internal/components/form/Button/Button.js +5 -5
  100. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  101. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  102. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  103. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  104. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  105. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  106. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  107. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  108. package/dist/_internal/components/form/CepField/CepField.js +2 -2
  109. package/dist/_internal/components/form/Checkbox/Checkbox.js +3 -3
  110. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +1 -1
  111. package/dist/_internal/components/form/Command/Command.js +2 -2
  112. package/dist/_internal/components/form/Command/Command.styles.js +2 -2
  113. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +7 -7
  114. package/dist/_internal/components/form/Input/Input.js +1 -1
  115. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  116. package/dist/_internal/components/form/Label/Label.js +2 -2
  117. package/dist/_internal/components/form/Label/Label.styles.js +2 -2
  118. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  119. package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
  120. package/dist/_internal/components/form/Menubar/Menubar.styles.js +2 -2
  121. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +2 -2
  122. package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
  123. package/dist/_internal/components/form/NumberField/NumberField.js +21 -0
  124. package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
  125. package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
  126. package/dist/_internal/components/form/Switch/Switch.js +5 -5
  127. package/dist/_internal/components/form/Switch/Switch.parts.js +4 -4
  128. package/dist/_internal/components/form/Switch/Switch.styles.js +3 -3
  129. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  130. package/dist/_internal/components/form/index.js +47 -41
  131. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  132. package/dist/_internal/components/form/total-form/Fields/CepField.js +3 -3
  133. package/dist/_internal/components/form/total-form/Fields/TextField.js +2 -2
  134. package/dist/_internal/components/form/total-form/Fields/index.js +20 -20
  135. package/dist/_internal/components/form/total-form/SubmitButton.js +6 -6
  136. package/dist/_internal/components/index.js +194 -153
  137. package/dist/_internal/components/layout/Box/Box.js +5 -5
  138. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +1 -1
  139. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js +8 -0
  140. package/dist/_internal/components/layout/SettingCard/SettingCard.focus.js.map +1 -0
  141. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
  142. package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
  143. package/dist/_internal/components/layout/SettingCard/SettingCard.js +44 -0
  144. package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
  145. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
  146. package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
  147. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +49 -0
  148. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
  149. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js +8 -0
  150. package/dist/_internal/components/layout/SettingCard/SettingCard.rem.js.map +1 -0
  151. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +35 -0
  152. package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
  153. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
  154. package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
  155. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +46 -0
  156. package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
  157. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
  158. package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
  159. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +55 -0
  160. package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
  161. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +53 -0
  162. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
  163. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +55 -0
  164. package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
  165. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +3 -3
  166. package/dist/_internal/components/layout/Stack/Stack.js +6 -6
  167. package/dist/_internal/components/layout/index.js +74 -12
  168. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +9 -9
  169. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  170. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  171. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  172. package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
  173. package/dist/_internal/components/navigation/index.js +26 -26
  174. package/dist/_internal/components/typography/Heading/Heading.js +5 -5
  175. package/dist/_internal/components/typography/Heading/Heading.metrics.js +3 -3
  176. package/dist/_internal/components/typography/Heading/Heading.styles.js +4 -4
  177. package/dist/_internal/components/typography/Paragraph/Paragraph.js +3 -3
  178. package/dist/_internal/components/typography/Text/Text.js +4 -4
  179. package/dist/_internal/components/typography/Text/Text.metrics.js +3 -3
  180. package/dist/_internal/components/typography/index.js +11 -11
  181. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +3 -3
  182. package/dist/_internal/components/utility/InstallPrompt/usePwaInstall.js +2 -2
  183. package/dist/_internal/components/utility/index.js +15 -15
  184. package/dist/_internal/en-US.data-display.js +2 -2
  185. package/dist/_internal/en-US.layout.js +5 -1
  186. package/dist/_internal/icons/Icon.js +6 -6
  187. package/dist/_internal/provider/UiProvider.js +4 -4
  188. package/dist/_internal/provider/mui-bridge.js +3 -3
  189. package/dist/_internal/provider/use-ui-theme.js +4 -4
  190. package/dist/_internal/pt-BR.data-display.js +2 -2
  191. package/dist/_internal/pt-BR.layout.js +5 -1
  192. package/dist/_internal/social-login-button/social-login-button.js +11 -11
  193. package/dist/_internal/tokens/theme.js +2 -2
  194. package/dist/_internal/user-avatar/user-avatar.js +11 -11
  195. package/dist/charts.js +15 -15
  196. package/dist/{chunk-TSEWUY4V.js → chunk-23LZNANO.js} +2 -2
  197. package/dist/{chunk-K2EHH7TC.js → chunk-2CJXYSOE.js} +7 -7
  198. package/dist/{chunk-HGJHZ5PE.js → chunk-2DHVWNTO.js} +7 -7
  199. package/dist/{chunk-K2JH7QPR.js → chunk-2F2HPQNQ.js} +3 -3
  200. package/dist/chunk-2GTORM5E.js +1 -0
  201. package/dist/chunk-2GTORM5E.js.map +1 -0
  202. package/dist/{chunk-C5YBXQTK.js → chunk-2QJKWH7Q.js} +3 -3
  203. package/dist/{chunk-W3FAKT3D.js → chunk-2SWQ6HIK.js} +4 -4
  204. package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
  205. package/dist/chunk-33L26P4J.js +27 -0
  206. package/dist/chunk-33L26P4J.js.map +1 -0
  207. package/dist/{chunk-3PUOLOEP.js → chunk-37L6O266.js} +2 -2
  208. package/dist/{chunk-EVXFEXBS.js → chunk-3ELEPGCP.js} +2 -2
  209. package/dist/{chunk-RVGG5YJY.js → chunk-3HJLJFLA.js} +2 -2
  210. package/dist/chunk-3U7WKBMH.js +27 -0
  211. package/dist/chunk-3U7WKBMH.js.map +1 -0
  212. package/dist/{chunk-VESIQYBF.js → chunk-3ZTC2VEO.js} +9 -9
  213. package/dist/{chunk-46UPILLK.js → chunk-4ETQRBZC.js} +4 -4
  214. package/dist/chunk-4HDP2PZD.js +9 -0
  215. package/dist/chunk-4HDP2PZD.js.map +1 -0
  216. package/dist/{chunk-PFZAUMJA.js → chunk-4JGBWPG7.js} +2 -2
  217. package/dist/{chunk-7IKWIWWV.js → chunk-53LG7IT4.js} +11 -11
  218. package/dist/{chunk-S2GDYA6R.js → chunk-5GMHJ7Y5.js} +5 -5
  219. package/dist/{chunk-IABE56TG.js → chunk-5ZOJLYD2.js} +4 -4
  220. package/dist/{chunk-XXE6NTJB.js → chunk-5ZXVYKHU.js} +10 -5
  221. package/dist/chunk-5ZXVYKHU.js.map +1 -0
  222. package/dist/{chunk-4XVH6IWN.js → chunk-66KAONOC.js} +3 -3
  223. package/dist/{chunk-4MXFPDKL.js → chunk-6CAP4STN.js} +4 -4
  224. package/dist/{chunk-C5EFVSBN.js → chunk-6HJLYSBM.js} +2 -2
  225. package/dist/{chunk-CASZGBCA.js → chunk-6P3CRSAW.js} +5 -5
  226. package/dist/chunk-6PPF5WEN.js +30 -0
  227. package/dist/chunk-6PPF5WEN.js.map +1 -0
  228. package/dist/{chunk-Y5UCOBQN.js → chunk-6SK3MTYJ.js} +4 -4
  229. package/dist/{chunk-JQL4GG5L.js → chunk-6VMTF23F.js} +5 -5
  230. package/dist/{chunk-EPRA5QLB.js → chunk-6XUZDJZY.js} +2 -2
  231. package/dist/{chunk-B6IURHSZ.js → chunk-7DNQHMDO.js} +4 -4
  232. package/dist/{chunk-SLMA4UQS.js → chunk-A3TISECJ.js} +3 -3
  233. package/dist/{chunk-FVPN4YKW.js → chunk-ABSHD35E.js} +3 -3
  234. package/dist/chunk-AEMD6JHZ.js +1 -0
  235. package/dist/chunk-AEMD6JHZ.js.map +1 -0
  236. package/dist/{chunk-PQECNGDE.js → chunk-AGYGNNOM.js} +2 -2
  237. package/dist/{chunk-SUTNQG7E.js → chunk-ALU3BH37.js} +4 -4
  238. package/dist/{chunk-MGPA6KTM.js → chunk-AMFP64L3.js} +2 -2
  239. package/dist/{chunk-VEGT5PAD.js → chunk-BAISDZ3L.js} +21 -21
  240. package/dist/chunk-BOWS4U6W.js +1 -0
  241. package/dist/chunk-BOWS4U6W.js.map +1 -0
  242. package/dist/{chunk-CZJLWCEG.js → chunk-BPYPUEM5.js} +2 -2
  243. package/dist/{chunk-3MALHTZQ.js → chunk-C4J7PVVI.js} +3 -3
  244. package/dist/{chunk-7OZBOS75.js → chunk-CK2NTT4S.js} +6 -6
  245. package/dist/{chunk-Q5NAZ7TW.js → chunk-CSGUSHAO.js} +4 -4
  246. package/dist/{chunk-YTYROOLY.js → chunk-D22EGB3T.js} +3 -3
  247. package/dist/{chunk-VNGYJXAU.js → chunk-DBV6DDQI.js} +2 -2
  248. package/dist/{chunk-6PKVHFCK.js → chunk-DCRNBKMY.js} +9 -9
  249. package/dist/{chunk-PMS3H3OO.js → chunk-DF2FFYZ7.js} +4 -4
  250. package/dist/chunk-DG2A4DQU.js +118 -0
  251. package/dist/chunk-DG2A4DQU.js.map +1 -0
  252. package/dist/{chunk-RBGOGTT2.js → chunk-DWZ7FLA7.js} +4 -4
  253. package/dist/{chunk-237NDIT2.js → chunk-E3O72LBJ.js} +2 -2
  254. package/dist/{chunk-OH3YGJT5.js → chunk-EMNGIYH6.js} +5 -5
  255. package/dist/{chunk-XFUNJYFT.js → chunk-EPNUVSNK.js} +7 -7
  256. package/dist/{chunk-35UG2QDB.js → chunk-EUEUZI4L.js} +2 -2
  257. package/dist/{chunk-KUJLZFDW.js → chunk-FCG5YR6T.js} +3 -3
  258. package/dist/{chunk-2UBFDRL7.js → chunk-FCTURAZF.js} +2 -2
  259. package/dist/{chunk-UC6A6ASM.js → chunk-FFQKUTO6.js} +2 -2
  260. package/dist/{chunk-J3ZP6EUS.js → chunk-FNIHELAR.js} +2 -2
  261. package/dist/{chunk-SQV3HPTZ.js → chunk-G76H5PEM.js} +4 -4
  262. package/dist/{chunk-FLIMEQUA.js → chunk-GBX5ACPF.js} +5 -5
  263. package/dist/{chunk-22ZJH7RY.js → chunk-GN26LHNJ.js} +2 -2
  264. package/dist/{chunk-5KFZGB5U.js → chunk-GS7ESED2.js} +2 -2
  265. package/dist/{chunk-FGUK3D54.js → chunk-GZHZ7OTY.js} +3 -3
  266. package/dist/chunk-HALFOXSZ.js +1 -0
  267. package/dist/chunk-HALFOXSZ.js.map +1 -0
  268. package/dist/{chunk-BLBOYCOV.js → chunk-HKV4MQ2W.js} +5 -5
  269. package/dist/{chunk-K4JRHQMI.js → chunk-HMJM6DKA.js} +3 -3
  270. package/dist/{chunk-ZWIDQEJ4.js → chunk-HT7DWIR4.js} +5 -5
  271. package/dist/{chunk-UVD5NFRF.js → chunk-I3PGXMVJ.js} +2 -2
  272. package/dist/{chunk-Z52HVR4J.js → chunk-I4IPGIRF.js} +2 -2
  273. package/dist/{chunk-HR7YTBR7.js → chunk-IASDP44E.js} +4 -4
  274. package/dist/chunk-IAVQXQ3V.js +82 -0
  275. package/dist/chunk-IAVQXQ3V.js.map +1 -0
  276. package/dist/chunk-IC7GHPMK.js +22 -0
  277. package/dist/chunk-IC7GHPMK.js.map +1 -0
  278. package/dist/{chunk-VKH7AENA.js → chunk-IFNJWH55.js} +2 -2
  279. package/dist/{chunk-PUBPZOQJ.js → chunk-IPE5FFFD.js} +2 -2
  280. package/dist/{chunk-HP2ODXNA.js → chunk-IPS55KWK.js} +2 -2
  281. package/dist/{chunk-BILJU2DX.js → chunk-JFOATIMF.js} +5 -5
  282. package/dist/{chunk-MCBG6R5A.js → chunk-JH77UDWB.js} +3 -3
  283. package/dist/{chunk-XYDW5RQB.js → chunk-JTJR63WI.js} +2 -2
  284. package/dist/{chunk-IVVOIDE5.js → chunk-KHVKQPQ5.js} +3 -3
  285. package/dist/chunk-KRR6KK5J.js +117 -0
  286. package/dist/chunk-KRR6KK5J.js.map +1 -0
  287. package/dist/{chunk-T5WNNEP5.js → chunk-KVCS6IEI.js} +2 -2
  288. package/dist/{chunk-HZ6L7WXE.js → chunk-LGOIBC2C.js} +7 -7
  289. package/dist/chunk-LGPQVKHC.js +47 -0
  290. package/dist/chunk-LGPQVKHC.js.map +1 -0
  291. package/dist/{chunk-BKAB4KZK.js → chunk-LKAKYP42.js} +5 -5
  292. package/dist/{chunk-ZPIMPOHV.js → chunk-M7E66OSC.js} +4 -4
  293. package/dist/{chunk-VVXA7T2M.js → chunk-MG6XC5SK.js} +2 -2
  294. package/dist/{chunk-554SVTCN.js → chunk-MKZNP32D.js} +4 -4
  295. package/dist/chunk-MPRZDEKY.js +168 -0
  296. package/dist/chunk-MPRZDEKY.js.map +1 -0
  297. package/dist/{chunk-MSS6IU5X.js → chunk-N6V6BFKD.js} +3 -3
  298. package/dist/{chunk-OLQDB346.js → chunk-NH4XD62U.js} +2 -2
  299. package/dist/{chunk-GH2DC7PS.js → chunk-NPN7JTRM.js} +4 -4
  300. package/dist/{chunk-AIBNBWQU.js → chunk-NR7LSYLM.js} +2 -2
  301. package/dist/{chunk-3XLDTVLC.js → chunk-NU2HND2Y.js} +5 -5
  302. package/dist/{chunk-T2VO32Z2.js → chunk-OG5LJPI3.js} +2 -2
  303. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  304. package/dist/{chunk-URVNHKM2.js → chunk-ON7PRAAC.js} +6 -6
  305. package/dist/{chunk-EZMCWRXO.js → chunk-OTMJBGJA.js} +24 -26
  306. package/dist/chunk-OTMJBGJA.js.map +1 -0
  307. package/dist/{chunk-3TFUAKWJ.js → chunk-OVOSDXFM.js} +2 -2
  308. package/dist/{chunk-SONWG2RT.js → chunk-OW4UEIXA.js} +5 -5
  309. package/dist/{chunk-23FCBIUN.js → chunk-P7FQUGED.js} +8 -8
  310. package/dist/{chunk-V7F53GEO.js → chunk-P7IVAMAU.js} +7 -7
  311. package/dist/{chunk-JYF3HT7M.js → chunk-PD6JRCUT.js} +8 -8
  312. package/dist/chunk-PGGGKYWG.js +1 -0
  313. package/dist/chunk-PGGGKYWG.js.map +1 -0
  314. package/dist/{chunk-B474PL5O.js → chunk-PKFFJAQ6.js} +2 -2
  315. package/dist/{chunk-EUKYQXYU.js → chunk-PLDVEJPR.js} +2 -2
  316. package/dist/{chunk-HT4B2DJU.js → chunk-PZEC5CQA.js} +4 -4
  317. package/dist/chunk-Q4JWWTL4.js +36 -0
  318. package/dist/chunk-Q4JWWTL4.js.map +1 -0
  319. package/dist/chunk-Q6FUSSLK.js +140 -0
  320. package/dist/chunk-Q6FUSSLK.js.map +1 -0
  321. package/dist/{chunk-6FUOUUYO.js → chunk-Q6STVEYJ.js} +4 -4
  322. package/dist/{chunk-6IKX5IIX.js → chunk-Q75SJ35X.js} +5 -5
  323. package/dist/{chunk-WC5XYWTE.js → chunk-QGJBNVC2.js} +2 -2
  324. package/dist/chunk-QGUNUXTT.js +1 -0
  325. package/dist/chunk-QGUNUXTT.js.map +1 -0
  326. package/dist/{chunk-KFZT3PHA.js → chunk-QHJ7FTZK.js} +4 -4
  327. package/dist/{chunk-NUB4T3RQ.js → chunk-QJ6KWJJH.js} +2 -2
  328. package/dist/chunk-R6XVOUNC.js +85 -0
  329. package/dist/chunk-R6XVOUNC.js.map +1 -0
  330. package/dist/{chunk-CZPU5TW3.js → chunk-RFZU5BTG.js} +2 -2
  331. package/dist/chunk-RH4QT7YT.js +74 -0
  332. package/dist/chunk-RH4QT7YT.js.map +1 -0
  333. package/dist/{chunk-JGV66VUK.js → chunk-RLCMVSJZ.js} +2 -2
  334. package/dist/chunk-RN7UJI7S.js +1 -0
  335. package/dist/chunk-RN7UJI7S.js.map +1 -0
  336. package/dist/{chunk-JB67KPGM.js → chunk-RRO2EOJB.js} +4 -4
  337. package/dist/{chunk-JJ3VR7WX.js → chunk-RZLWW3KC.js} +2 -2
  338. package/dist/{chunk-MZQTHSLN.js → chunk-S7HRED4D.js} +2 -2
  339. package/dist/{chunk-EXJBPKGW.js → chunk-SHDIZSN5.js} +5 -5
  340. package/dist/{chunk-GJQYM3PM.js → chunk-SHQWIDD5.js} +4 -4
  341. package/dist/{chunk-L6TCIZFR.js → chunk-SUAGBFYJ.js} +3 -3
  342. package/dist/{chunk-K5V3KCFI.js → chunk-SVBR3GWG.js} +6 -6
  343. package/dist/{chunk-DAPK3ADA.js → chunk-TC3EPGGJ.js} +4 -4
  344. package/dist/{chunk-DEE6IPGI.js → chunk-TJXNVREN.js} +2 -2
  345. package/dist/{chunk-WREIYOXN.js → chunk-TLMLEC4F.js} +7 -7
  346. package/dist/{chunk-57ZSQB5V.js → chunk-TLRTLYVT.js} +2 -2
  347. package/dist/{chunk-DUWF5LUK.js → chunk-TNCCCLLO.js} +4 -4
  348. package/dist/{chunk-TQ6FPOPD.js → chunk-TPKSOHB5.js} +5 -2
  349. package/dist/{chunk-TQ6FPOPD.js.map → chunk-TPKSOHB5.js.map} +1 -1
  350. package/dist/{chunk-JPVDZXXX.js → chunk-U5RQBHRY.js} +2 -2
  351. package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
  352. package/dist/chunk-V32X24SH.js +87 -0
  353. package/dist/chunk-V32X24SH.js.map +1 -0
  354. package/dist/{chunk-J4W4TQPC.js → chunk-V5P5Q6HM.js} +6 -6
  355. package/dist/{chunk-DQOLW4B5.js → chunk-VBMV2W4K.js} +3 -3
  356. package/dist/{chunk-57W2C7HY.js → chunk-VOHT6ZX3.js} +8 -8
  357. package/dist/{chunk-QYNCPS5W.js → chunk-WBKWIFXA.js} +6 -6
  358. package/dist/{chunk-VJFH2AXT.js → chunk-WG7HIXJ7.js} +8 -8
  359. package/dist/{chunk-VMXDTCYF.js → chunk-WMALDOF5.js} +4 -4
  360. package/dist/{chunk-I3FXTIKA.js → chunk-WP6Y2NJQ.js} +3 -3
  361. package/dist/chunk-WP6Y2NJQ.js.map +1 -0
  362. package/dist/{chunk-2L2NWXWJ.js → chunk-WRXD464C.js} +2 -2
  363. package/dist/{chunk-KT6HWAEN.js → chunk-WZUNBSS7.js} +2 -2
  364. package/dist/{chunk-NWQWUYOV.js → chunk-XGB3YF32.js} +2 -2
  365. package/dist/chunk-XJQNSMGA.js +10 -0
  366. package/dist/chunk-XJQNSMGA.js.map +1 -0
  367. package/dist/{chunk-QRX5BYUQ.js → chunk-Y6KPZQPI.js} +4 -4
  368. package/dist/{chunk-ZYKDPX3W.js → chunk-YY66AKSK.js} +2 -2
  369. package/dist/{chunk-62NA6IF3.js → chunk-ZBZ76VR7.js} +3 -3
  370. package/dist/{chunk-OXQP3N6X.js → chunk-ZTZ6S5Q6.js} +4 -4
  371. package/dist/data-display/Alert.js +4 -4
  372. package/dist/data-display/Avatar.js +5 -5
  373. package/dist/data-display/Badge.js +6 -6
  374. package/dist/data-display/Banner.js +2 -2
  375. package/dist/data-display/CardKit.js +15 -15
  376. package/dist/data-display/Carousel.js +5 -5
  377. package/dist/data-display/Chart.js +15 -15
  378. package/dist/data-display/Chip.js +1 -0
  379. package/dist/data-display/DataViews.js +88 -88
  380. package/dist/data-display/DescriptionItem.js +5 -5
  381. package/dist/data-display/FleetMap.js +15 -15
  382. package/dist/data-display/HoverCard.js +2 -2
  383. package/dist/data-display/Lightbox.js +3 -3
  384. package/dist/data-display/MapPreview.js +9 -9
  385. package/dist/data-display/Progress.js +5 -5
  386. package/dist/data-display/Sheet.js +5 -5
  387. package/dist/data-display/Table.js +3 -3
  388. package/dist/en-US.js +15 -11
  389. package/dist/feedback/ConfirmAction.js +9 -9
  390. package/dist/feedback/Modal.js +2 -2
  391. package/dist/feedback/NotificationStatusNotice.js +8 -8
  392. package/dist/form/AddressAutocomplete.js +5 -5
  393. package/dist/form/Autocomplete.js +1 -1
  394. package/dist/form/Button.js +5 -5
  395. package/dist/form/Calendar.js +4 -4
  396. package/dist/form/CategorySelect.js +9 -9
  397. package/dist/form/CepField.js +2 -2
  398. package/dist/form/Checkbox.js +3 -3
  399. package/dist/form/CodeEditor.js +1 -1
  400. package/dist/form/Command.js +2 -2
  401. package/dist/form/DateRangePicker.js +7 -7
  402. package/dist/form/Input.js +1 -1
  403. package/dist/form/InputOTP.js +2 -2
  404. package/dist/form/Label.js +2 -2
  405. package/dist/form/Menubar.js +2 -2
  406. package/dist/form/NumberField.js +22 -0
  407. package/dist/form/NumberField.js.map +1 -0
  408. package/dist/form/Switch.js +5 -5
  409. package/dist/form/UploadButton.js +2 -2
  410. package/dist/form/total-form.js +24 -24
  411. package/dist/icons.js +7 -6
  412. package/dist/layout/Box.js +5 -5
  413. package/dist/layout/Collapsible.js +1 -0
  414. package/dist/layout/ContentToolbar.js +3 -3
  415. package/dist/layout/ScrollArea.js +1 -1
  416. package/dist/layout/SettingCard.js +70 -0
  417. package/dist/layout/SettingCard.js.map +1 -0
  418. package/dist/layout/SettingsLayout.js +3 -3
  419. package/dist/layout/Stack.js +6 -6
  420. package/dist/locales.js +37 -23
  421. package/dist/locales.js.map +1 -1
  422. package/dist/navigation/AppHeader.js +11 -11
  423. package/dist/navigation/CommandPalette.js +3 -3
  424. package/dist/navigation/Pagination.js +2 -2
  425. package/dist/navigation/Tabs.js +2 -2
  426. package/dist/provider.js +5 -5
  427. package/dist/pt-BR.js +12 -8
  428. package/dist/social-login-button.js +11 -11
  429. package/dist/tokens.js +2 -2
  430. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts +6 -1
  431. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
  432. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts +0 -11
  433. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  434. package/dist/types/components/data-display/DataViews/data-views-overflow.d.ts.map +1 -1
  435. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  436. package/dist/types/components/form/Input/Input.types.d.ts +10 -0
  437. package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
  438. package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
  439. package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
  440. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
  441. package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
  442. package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
  443. package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
  444. package/dist/types/components/form/NumberField/index.d.ts +3 -0
  445. package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
  446. package/dist/types/components/form/index.d.ts +1 -0
  447. package/dist/types/components/form/index.d.ts.map +1 -1
  448. package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
  449. package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
  450. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts +19 -0
  451. package/dist/types/components/layout/SettingCard/SettingCard.focus.d.ts.map +1 -0
  452. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
  453. package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
  454. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
  455. package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
  456. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
  457. package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
  458. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts +12 -0
  459. package/dist/types/components/layout/SettingCard/SettingCard.rem.d.ts.map +1 -0
  460. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
  461. package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
  462. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
  463. package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
  464. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
  465. package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
  466. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
  467. package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
  468. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
  469. package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
  470. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
  471. package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
  472. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
  473. package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
  474. package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
  475. package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
  476. package/dist/types/components/layout/index.d.ts +1 -0
  477. package/dist/types/components/layout/index.d.ts.map +1 -1
  478. package/dist/types/copy/layout.d.ts +27 -0
  479. package/dist/types/copy/layout.d.ts.map +1 -1
  480. package/dist/types/en-US.layout.d.ts +3 -1
  481. package/dist/types/en-US.layout.d.ts.map +1 -1
  482. package/dist/types/locales.d.ts +3 -1
  483. package/dist/types/locales.d.ts.map +1 -1
  484. package/dist/types/pt-BR.layout.d.ts +3 -1
  485. package/dist/types/pt-BR.layout.d.ts.map +1 -1
  486. package/dist/typography/Heading.js +5 -5
  487. package/dist/typography/Paragraph.js +3 -3
  488. package/dist/typography/Text.js +4 -4
  489. package/dist/user-avatar.js +11 -11
  490. package/dist/utility/InstallPrompt.js +4 -4
  491. package/package.json +9 -1
  492. package/src/components/data-display/DataViews/data-views-category-pill.tsx +6 -1
  493. package/src/components/data-display/DataViews/data-views-more-fields.tsx +43 -37
  494. package/src/components/data-display/DataViews/data-views-overflow.ts +12 -1
  495. package/src/components/form/Input/Input.tsx +25 -12
  496. package/src/components/form/Input/Input.types.ts +10 -0
  497. package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
  498. package/src/components/form/NumberField/NumberField.md +86 -0
  499. package/src/components/form/NumberField/NumberField.tsx +88 -0
  500. package/src/components/form/NumberField/NumberField.types.ts +43 -0
  501. package/src/components/form/NumberField/index.ts +2 -0
  502. package/src/components/form/NumberField/tests.md +51 -0
  503. package/src/components/form/NumberField/track.md +48 -0
  504. package/src/components/form/index.ts +1 -0
  505. package/src/components/layout/SettingCard/SettingCard.focus.ts +49 -0
  506. package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
  507. package/src/components/layout/SettingCard/SettingCard.md +121 -0
  508. package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
  509. package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
  510. package/src/components/layout/SettingCard/SettingCard.rem.ts +14 -0
  511. package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
  512. package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
  513. package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
  514. package/src/components/layout/SettingCard/SettingGrid.md +65 -0
  515. package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
  516. package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
  517. package/src/components/layout/SettingCard/SettingGroup.md +81 -0
  518. package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
  519. package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
  520. package/src/components/layout/SettingCard/SettingToggle.md +61 -0
  521. package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
  522. package/src/components/layout/SettingCard/index.ts +18 -0
  523. package/src/components/layout/SettingCard/tests.md +68 -0
  524. package/src/components/layout/SettingCard/track.md +63 -0
  525. package/src/components/layout/index.ts +1 -0
  526. package/src/copy/layout.ts +29 -0
  527. package/src/en-US.layout.ts +16 -0
  528. package/src/locales.ts +10 -0
  529. package/src/pt-BR.layout.ts +16 -0
  530. package/dist/chunk-A7RIZOAL.js +0 -13
  531. package/dist/chunk-A7RIZOAL.js.map +0 -1
  532. package/dist/chunk-BY3JEK5T.js +0 -1
  533. package/dist/chunk-EZMCWRXO.js.map +0 -1
  534. package/dist/chunk-FZJ2FTGE.js +0 -1
  535. package/dist/chunk-GRHECKHU.js +0 -13
  536. package/dist/chunk-GRHECKHU.js.map +0 -1
  537. package/dist/chunk-I3FXTIKA.js.map +0 -1
  538. package/dist/chunk-XXE6NTJB.js.map +0 -1
  539. /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
  540. /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
  541. /package/dist/{chunk-TSEWUY4V.js.map → chunk-23LZNANO.js.map} +0 -0
  542. /package/dist/{chunk-K2EHH7TC.js.map → chunk-2CJXYSOE.js.map} +0 -0
  543. /package/dist/{chunk-HGJHZ5PE.js.map → chunk-2DHVWNTO.js.map} +0 -0
  544. /package/dist/{chunk-K2JH7QPR.js.map → chunk-2F2HPQNQ.js.map} +0 -0
  545. /package/dist/{chunk-C5YBXQTK.js.map → chunk-2QJKWH7Q.js.map} +0 -0
  546. /package/dist/{chunk-W3FAKT3D.js.map → chunk-2SWQ6HIK.js.map} +0 -0
  547. /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
  548. /package/dist/{chunk-3PUOLOEP.js.map → chunk-37L6O266.js.map} +0 -0
  549. /package/dist/{chunk-EVXFEXBS.js.map → chunk-3ELEPGCP.js.map} +0 -0
  550. /package/dist/{chunk-RVGG5YJY.js.map → chunk-3HJLJFLA.js.map} +0 -0
  551. /package/dist/{chunk-VESIQYBF.js.map → chunk-3ZTC2VEO.js.map} +0 -0
  552. /package/dist/{chunk-46UPILLK.js.map → chunk-4ETQRBZC.js.map} +0 -0
  553. /package/dist/{chunk-PFZAUMJA.js.map → chunk-4JGBWPG7.js.map} +0 -0
  554. /package/dist/{chunk-7IKWIWWV.js.map → chunk-53LG7IT4.js.map} +0 -0
  555. /package/dist/{chunk-S2GDYA6R.js.map → chunk-5GMHJ7Y5.js.map} +0 -0
  556. /package/dist/{chunk-IABE56TG.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  557. /package/dist/{chunk-4XVH6IWN.js.map → chunk-66KAONOC.js.map} +0 -0
  558. /package/dist/{chunk-4MXFPDKL.js.map → chunk-6CAP4STN.js.map} +0 -0
  559. /package/dist/{chunk-C5EFVSBN.js.map → chunk-6HJLYSBM.js.map} +0 -0
  560. /package/dist/{chunk-CASZGBCA.js.map → chunk-6P3CRSAW.js.map} +0 -0
  561. /package/dist/{chunk-Y5UCOBQN.js.map → chunk-6SK3MTYJ.js.map} +0 -0
  562. /package/dist/{chunk-JQL4GG5L.js.map → chunk-6VMTF23F.js.map} +0 -0
  563. /package/dist/{chunk-EPRA5QLB.js.map → chunk-6XUZDJZY.js.map} +0 -0
  564. /package/dist/{chunk-B6IURHSZ.js.map → chunk-7DNQHMDO.js.map} +0 -0
  565. /package/dist/{chunk-SLMA4UQS.js.map → chunk-A3TISECJ.js.map} +0 -0
  566. /package/dist/{chunk-FVPN4YKW.js.map → chunk-ABSHD35E.js.map} +0 -0
  567. /package/dist/{chunk-PQECNGDE.js.map → chunk-AGYGNNOM.js.map} +0 -0
  568. /package/dist/{chunk-SUTNQG7E.js.map → chunk-ALU3BH37.js.map} +0 -0
  569. /package/dist/{chunk-MGPA6KTM.js.map → chunk-AMFP64L3.js.map} +0 -0
  570. /package/dist/{chunk-VEGT5PAD.js.map → chunk-BAISDZ3L.js.map} +0 -0
  571. /package/dist/{chunk-CZJLWCEG.js.map → chunk-BPYPUEM5.js.map} +0 -0
  572. /package/dist/{chunk-3MALHTZQ.js.map → chunk-C4J7PVVI.js.map} +0 -0
  573. /package/dist/{chunk-7OZBOS75.js.map → chunk-CK2NTT4S.js.map} +0 -0
  574. /package/dist/{chunk-Q5NAZ7TW.js.map → chunk-CSGUSHAO.js.map} +0 -0
  575. /package/dist/{chunk-YTYROOLY.js.map → chunk-D22EGB3T.js.map} +0 -0
  576. /package/dist/{chunk-VNGYJXAU.js.map → chunk-DBV6DDQI.js.map} +0 -0
  577. /package/dist/{chunk-6PKVHFCK.js.map → chunk-DCRNBKMY.js.map} +0 -0
  578. /package/dist/{chunk-PMS3H3OO.js.map → chunk-DF2FFYZ7.js.map} +0 -0
  579. /package/dist/{chunk-RBGOGTT2.js.map → chunk-DWZ7FLA7.js.map} +0 -0
  580. /package/dist/{chunk-237NDIT2.js.map → chunk-E3O72LBJ.js.map} +0 -0
  581. /package/dist/{chunk-OH3YGJT5.js.map → chunk-EMNGIYH6.js.map} +0 -0
  582. /package/dist/{chunk-XFUNJYFT.js.map → chunk-EPNUVSNK.js.map} +0 -0
  583. /package/dist/{chunk-35UG2QDB.js.map → chunk-EUEUZI4L.js.map} +0 -0
  584. /package/dist/{chunk-KUJLZFDW.js.map → chunk-FCG5YR6T.js.map} +0 -0
  585. /package/dist/{chunk-2UBFDRL7.js.map → chunk-FCTURAZF.js.map} +0 -0
  586. /package/dist/{chunk-UC6A6ASM.js.map → chunk-FFQKUTO6.js.map} +0 -0
  587. /package/dist/{chunk-J3ZP6EUS.js.map → chunk-FNIHELAR.js.map} +0 -0
  588. /package/dist/{chunk-SQV3HPTZ.js.map → chunk-G76H5PEM.js.map} +0 -0
  589. /package/dist/{chunk-FLIMEQUA.js.map → chunk-GBX5ACPF.js.map} +0 -0
  590. /package/dist/{chunk-22ZJH7RY.js.map → chunk-GN26LHNJ.js.map} +0 -0
  591. /package/dist/{chunk-5KFZGB5U.js.map → chunk-GS7ESED2.js.map} +0 -0
  592. /package/dist/{chunk-FGUK3D54.js.map → chunk-GZHZ7OTY.js.map} +0 -0
  593. /package/dist/{chunk-BLBOYCOV.js.map → chunk-HKV4MQ2W.js.map} +0 -0
  594. /package/dist/{chunk-K4JRHQMI.js.map → chunk-HMJM6DKA.js.map} +0 -0
  595. /package/dist/{chunk-ZWIDQEJ4.js.map → chunk-HT7DWIR4.js.map} +0 -0
  596. /package/dist/{chunk-UVD5NFRF.js.map → chunk-I3PGXMVJ.js.map} +0 -0
  597. /package/dist/{chunk-Z52HVR4J.js.map → chunk-I4IPGIRF.js.map} +0 -0
  598. /package/dist/{chunk-HR7YTBR7.js.map → chunk-IASDP44E.js.map} +0 -0
  599. /package/dist/{chunk-VKH7AENA.js.map → chunk-IFNJWH55.js.map} +0 -0
  600. /package/dist/{chunk-PUBPZOQJ.js.map → chunk-IPE5FFFD.js.map} +0 -0
  601. /package/dist/{chunk-HP2ODXNA.js.map → chunk-IPS55KWK.js.map} +0 -0
  602. /package/dist/{chunk-BILJU2DX.js.map → chunk-JFOATIMF.js.map} +0 -0
  603. /package/dist/{chunk-MCBG6R5A.js.map → chunk-JH77UDWB.js.map} +0 -0
  604. /package/dist/{chunk-XYDW5RQB.js.map → chunk-JTJR63WI.js.map} +0 -0
  605. /package/dist/{chunk-IVVOIDE5.js.map → chunk-KHVKQPQ5.js.map} +0 -0
  606. /package/dist/{chunk-T5WNNEP5.js.map → chunk-KVCS6IEI.js.map} +0 -0
  607. /package/dist/{chunk-HZ6L7WXE.js.map → chunk-LGOIBC2C.js.map} +0 -0
  608. /package/dist/{chunk-BKAB4KZK.js.map → chunk-LKAKYP42.js.map} +0 -0
  609. /package/dist/{chunk-ZPIMPOHV.js.map → chunk-M7E66OSC.js.map} +0 -0
  610. /package/dist/{chunk-VVXA7T2M.js.map → chunk-MG6XC5SK.js.map} +0 -0
  611. /package/dist/{chunk-554SVTCN.js.map → chunk-MKZNP32D.js.map} +0 -0
  612. /package/dist/{chunk-MSS6IU5X.js.map → chunk-N6V6BFKD.js.map} +0 -0
  613. /package/dist/{chunk-OLQDB346.js.map → chunk-NH4XD62U.js.map} +0 -0
  614. /package/dist/{chunk-GH2DC7PS.js.map → chunk-NPN7JTRM.js.map} +0 -0
  615. /package/dist/{chunk-AIBNBWQU.js.map → chunk-NR7LSYLM.js.map} +0 -0
  616. /package/dist/{chunk-3XLDTVLC.js.map → chunk-NU2HND2Y.js.map} +0 -0
  617. /package/dist/{chunk-T2VO32Z2.js.map → chunk-OG5LJPI3.js.map} +0 -0
  618. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  619. /package/dist/{chunk-URVNHKM2.js.map → chunk-ON7PRAAC.js.map} +0 -0
  620. /package/dist/{chunk-3TFUAKWJ.js.map → chunk-OVOSDXFM.js.map} +0 -0
  621. /package/dist/{chunk-SONWG2RT.js.map → chunk-OW4UEIXA.js.map} +0 -0
  622. /package/dist/{chunk-23FCBIUN.js.map → chunk-P7FQUGED.js.map} +0 -0
  623. /package/dist/{chunk-V7F53GEO.js.map → chunk-P7IVAMAU.js.map} +0 -0
  624. /package/dist/{chunk-JYF3HT7M.js.map → chunk-PD6JRCUT.js.map} +0 -0
  625. /package/dist/{chunk-B474PL5O.js.map → chunk-PKFFJAQ6.js.map} +0 -0
  626. /package/dist/{chunk-EUKYQXYU.js.map → chunk-PLDVEJPR.js.map} +0 -0
  627. /package/dist/{chunk-HT4B2DJU.js.map → chunk-PZEC5CQA.js.map} +0 -0
  628. /package/dist/{chunk-6FUOUUYO.js.map → chunk-Q6STVEYJ.js.map} +0 -0
  629. /package/dist/{chunk-6IKX5IIX.js.map → chunk-Q75SJ35X.js.map} +0 -0
  630. /package/dist/{chunk-WC5XYWTE.js.map → chunk-QGJBNVC2.js.map} +0 -0
  631. /package/dist/{chunk-KFZT3PHA.js.map → chunk-QHJ7FTZK.js.map} +0 -0
  632. /package/dist/{chunk-NUB4T3RQ.js.map → chunk-QJ6KWJJH.js.map} +0 -0
  633. /package/dist/{chunk-CZPU5TW3.js.map → chunk-RFZU5BTG.js.map} +0 -0
  634. /package/dist/{chunk-JGV66VUK.js.map → chunk-RLCMVSJZ.js.map} +0 -0
  635. /package/dist/{chunk-JB67KPGM.js.map → chunk-RRO2EOJB.js.map} +0 -0
  636. /package/dist/{chunk-JJ3VR7WX.js.map → chunk-RZLWW3KC.js.map} +0 -0
  637. /package/dist/{chunk-MZQTHSLN.js.map → chunk-S7HRED4D.js.map} +0 -0
  638. /package/dist/{chunk-EXJBPKGW.js.map → chunk-SHDIZSN5.js.map} +0 -0
  639. /package/dist/{chunk-GJQYM3PM.js.map → chunk-SHQWIDD5.js.map} +0 -0
  640. /package/dist/{chunk-L6TCIZFR.js.map → chunk-SUAGBFYJ.js.map} +0 -0
  641. /package/dist/{chunk-K5V3KCFI.js.map → chunk-SVBR3GWG.js.map} +0 -0
  642. /package/dist/{chunk-DAPK3ADA.js.map → chunk-TC3EPGGJ.js.map} +0 -0
  643. /package/dist/{chunk-DEE6IPGI.js.map → chunk-TJXNVREN.js.map} +0 -0
  644. /package/dist/{chunk-WREIYOXN.js.map → chunk-TLMLEC4F.js.map} +0 -0
  645. /package/dist/{chunk-57ZSQB5V.js.map → chunk-TLRTLYVT.js.map} +0 -0
  646. /package/dist/{chunk-DUWF5LUK.js.map → chunk-TNCCCLLO.js.map} +0 -0
  647. /package/dist/{chunk-JPVDZXXX.js.map → chunk-U5RQBHRY.js.map} +0 -0
  648. /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
  649. /package/dist/{chunk-J4W4TQPC.js.map → chunk-V5P5Q6HM.js.map} +0 -0
  650. /package/dist/{chunk-DQOLW4B5.js.map → chunk-VBMV2W4K.js.map} +0 -0
  651. /package/dist/{chunk-57W2C7HY.js.map → chunk-VOHT6ZX3.js.map} +0 -0
  652. /package/dist/{chunk-QYNCPS5W.js.map → chunk-WBKWIFXA.js.map} +0 -0
  653. /package/dist/{chunk-VJFH2AXT.js.map → chunk-WG7HIXJ7.js.map} +0 -0
  654. /package/dist/{chunk-VMXDTCYF.js.map → chunk-WMALDOF5.js.map} +0 -0
  655. /package/dist/{chunk-2L2NWXWJ.js.map → chunk-WRXD464C.js.map} +0 -0
  656. /package/dist/{chunk-KT6HWAEN.js.map → chunk-WZUNBSS7.js.map} +0 -0
  657. /package/dist/{chunk-NWQWUYOV.js.map → chunk-XGB3YF32.js.map} +0 -0
  658. /package/dist/{chunk-QRX5BYUQ.js.map → chunk-Y6KPZQPI.js.map} +0 -0
  659. /package/dist/{chunk-ZYKDPX3W.js.map → chunk-YY66AKSK.js.map} +0 -0
  660. /package/dist/{chunk-62NA6IF3.js.map → chunk-ZBZ76VR7.js.map} +0 -0
  661. /package/dist/{chunk-OXQP3N6X.js.map → chunk-ZTZ6S5Q6.js.map} +0 -0
@@ -0,0 +1,81 @@
1
+ # SettingGroup
2
+
3
+ ## Purpose
4
+
5
+ **One subject**: a main switch, plus the settings that only mean something
6
+ while it is on, indented beneath it. "Notifications" on or off, and — while on —
7
+ which notifications and when.
8
+
9
+ When the main switch is off the dependent rows **stay where they are**: dimmed,
10
+ disabled, and explained by a short hint. They are not removed. A reader
11
+ deciding whether to turn a feature on is helped by seeing what it would let
12
+ them configure, and a layout that jumps when a switch flips moves the thing
13
+ they were about to press.
14
+
15
+ Part of the `layout/SettingCard` family.
16
+
17
+ ## One group per subject — not a container for a page
18
+
19
+ A `SettingGroup` is for several settings of **the same subject**, where the
20
+ main switch decides whether the others apply at all. It is not a way to put
21
+ several unrelated settings in one box.
22
+
23
+ | these are… | use |
24
+ |---|---|
25
+ | Notifications (main switch) + digest, mentions, quiet hours | **one** `SettingGroup` — the rows mean nothing with notifications off |
26
+ | Session timeout, two-step sign-in, language | **three** cards — a `SettingCard`, a `SettingToggle`, a `SettingCard` — laid out by a `SettingGrid` |
27
+ | Backups (main switch) + frequency, retention | **one** `SettingGroup` |
28
+ | Backups and notifications | **two** groups, never one |
29
+
30
+ The test: if turning the main switch off would **not** make a row meaningless,
31
+ that row is a different subject and belongs in its own card. Squeezing two
32
+ subjects into one group gives one of them a main switch it does not have, and a
33
+ hint ("inactive until X is on") that is false for it.
34
+
35
+ ## Usage
36
+
37
+ ```tsx
38
+ import { SettingGroup, SettingToggle } from '@12-apps/ui/layout/SettingCard';
39
+
40
+ <SettingGroup
41
+ copy={switchCopy}
42
+ title="Notifications"
43
+ summary="What we tell you about, and when."
44
+ inactiveHint="Turn notifications on to choose which ones you get."
45
+ checked={settings.notifications}
46
+ onChange={(next) => api.setNotifications(next)}
47
+ >
48
+ <SettingToggle variant="row" copy={switchCopy} title="Weekly digest" checked={settings.digest} onChange={api.setDigest} />
49
+ <SettingToggle variant="row" copy={switchCopy} title="Mentions" checked={settings.mentions} onChange={api.setMentions} />
50
+ <NumberField label="Quiet hours from" value={quietFrom} onChange={setQuietFrom} min={0} max={23} suffix="h" />
51
+ </SettingGroup>
52
+ ```
53
+
54
+ ## Props
55
+
56
+ | prop | type | default | effect |
57
+ |---|---|---|---|
58
+ | `copy` | `SettingSwitchCopy` | **required** | The main switch's "saving" announcement and fallback error. |
59
+ | `title` | `string` | **required** | The subject. Names the main switch and the dependent rows' group. |
60
+ | `checked` | `boolean` | **required** | The main switch's persisted value. |
61
+ | `onChange` | `(checked: boolean) => void \| Promise<unknown>` | **required** | Persist the main switch — same async contract as [`SettingToggle`](./SettingToggle.md). |
62
+ | `inactiveHint` | `string` | **required** | Why the rows are inactive. Shown only while they are. |
63
+ | `children` | `ReactNode` | **required** | The dependent rows — `SettingToggle variant="row"`, fields, anything. |
64
+ | `summary` | `ReactNode` | — | Explanation under the title. |
65
+ | `disabled` | `boolean` | `false` | Disables the main switch; the rows are then inactive too. |
66
+ | `formatError`, `icon`, `dataTestId`, `className`, `sx` | | | As on `SettingToggle`. Parts add `-dependents` and `-hint`. |
67
+
68
+ ## When the rows are active
69
+
70
+ Only while the main switch is on **and saved**: turning it on lights the rows
71
+ once the save lands (so nobody edits rows a failed save then disables), and
72
+ turning it off dims them at once.
73
+
74
+ ## Accessibility
75
+
76
+ - The dependent rows are a `role="group"` named by the subject.
77
+ - Inactive, the group is `inert` — nothing in it is focusable or clickable,
78
+ whatever the host put there — and `aria-disabled`, described by the hint.
79
+ - The family's own rows (`SettingToggle`) also render `disabled`, so they read
80
+ as disabled rather than merely unreachable.
81
+ - Opacity alone never carries "inactive"; the hint says it in words.
@@ -0,0 +1,73 @@
1
+ import Box from '@mui/material/Box/index.js';
2
+ import { useTheme } from '@mui/material/styles/index.js';
3
+ import { forwardRef, useId, useMemo } from 'react';
4
+
5
+ import { Icon } from '../../../icons';
6
+
7
+ import { useAsyncSwitch } from './SettingCard.hooks';
8
+ import { partTestId } from './SettingCard.parts';
9
+ import { dependentsStyles, hintStyles, surfaceStyles, withCallerSx } from './SettingCard.styles';
10
+ import type { SettingGroupProps } from './SettingCard.types';
11
+ import { SettingGroupContext } from './SettingGroup.context';
12
+ import { SettingSwitchBlock, useSettingSwitchIds } from './SettingSwitch';
13
+
14
+ /**
15
+ * ONE subject: a main switch, and the settings that only mean something while
16
+ * it is on, indented beneath it.
17
+ *
18
+ * With the main switch off the dependent rows stay where they are — dimmed,
19
+ * `inert`, and explained by `inactiveHint` — rather than disappearing. A
20
+ * reader deciding whether to turn a feature on is helped by seeing what it
21
+ * would let them configure, and a layout that jumps when a switch flips moves
22
+ * the thing they were about to press.
23
+ *
24
+ * The rows are active only while the main switch is on AND saved: turning it
25
+ * on lights them once the save lands; turning it off dims them at once.
26
+ *
27
+ * Several subjects are several cards, never one group — see `SettingGroup.md`.
28
+ */
29
+ export const SettingGroup = forwardRef<HTMLElement, SettingGroupProps>(function SettingGroup(props, ref) {
30
+ const {
31
+ checked, onChange, copy, formatError, inactiveHint, children, disabled = false, dataTestId, className, sx,
32
+ } = props;
33
+ const theme = useTheme();
34
+ const ids = useSettingSwitchIds();
35
+ const hintId = `${useId()}-hint`;
36
+ const state = useAsyncSwitch({ checked, onChange, formatError, fallback: copy.saveFailed });
37
+ const active = checked && state.shown && !disabled;
38
+ const context = useMemo(() => ({ inactive: !active }), [active]);
39
+
40
+ return (
41
+ <Box
42
+ component="section"
43
+ ref={ref}
44
+ aria-labelledby={ids.titleId}
45
+ aria-busy={state.saving || undefined}
46
+ data-active={active}
47
+ data-testid={dataTestId}
48
+ className={className}
49
+ sx={withCallerSx((t) => surfaceStyles(t, false), sx)}
50
+ >
51
+ <SettingSwitchBlock {...props} disabled={disabled} ids={ids} state={state} />
52
+ {!active && (
53
+ <Box component="p" id={hintId} sx={hintStyles(theme)} data-testid={partTestId(dataTestId, 'hint')}>
54
+ <Icon name="InfoOutlined" size="xs" />
55
+ <span>{inactiveHint}</span>
56
+ </Box>
57
+ )}
58
+ <Box
59
+ role="group"
60
+ aria-labelledby={ids.titleId}
61
+ aria-describedby={active ? undefined : hintId}
62
+ aria-disabled={active ? undefined : true}
63
+ inert={!active}
64
+ sx={dependentsStyles(theme, active)}
65
+ data-testid={partTestId(dataTestId, 'dependents')}
66
+ >
67
+ <SettingGroupContext.Provider value={context}>{children}</SettingGroupContext.Provider>
68
+ </Box>
69
+ </Box>
70
+ );
71
+ });
72
+
73
+ SettingGroup.displayName = 'SettingGroup';
@@ -0,0 +1,92 @@
1
+ import Box from '@mui/material/Box/index.js';
2
+ import { useTheme } from '@mui/material/styles/index.js';
3
+ import React, { useId } from 'react';
4
+
5
+ import { Switch } from '../../form/Switch';
6
+ import { SR_ONLY_SX } from '../../form/Label/Label.styles';
7
+
8
+ import { useAsyncSwitch } from './SettingCard.hooks';
9
+ import { PendingSpinner, SaveError, SettingHeader, partTestId } from './SettingCard.parts';
10
+ import { descriptionStyles } from './SettingCard.styles';
11
+ import type { SettingToggleProps } from './SettingCard.types';
12
+
13
+ /** Everything the switch-driven cards share, minus the surface each draws around it. */
14
+ export type SettingSwitchBlockProps = Pick<
15
+ SettingToggleProps,
16
+ 'title' | 'headingLevel' | 'icon' | 'summary' | 'checked' | 'onChange' | 'copy' | 'formatError' | 'dataTestId'
17
+ > & { disabled: boolean };
18
+
19
+ /** The ids one switch block wires its label, description and failure line with. */
20
+ export interface SettingSwitchIds {
21
+ titleId: string;
22
+ inputId: string;
23
+ summaryId: string;
24
+ errorId: string;
25
+ }
26
+
27
+ export const useSettingSwitchIds = (): SettingSwitchIds => {
28
+ const base = useId();
29
+ return {
30
+ titleId: `${base}-title`,
31
+ inputId: `${base}-switch`,
32
+ summaryId: `${base}-summary`,
33
+ errorId: `${base}-error`,
34
+ };
35
+ };
36
+
37
+ /**
38
+ * Title-as-label, the switch, its explanation and the failure line.
39
+ *
40
+ * The switch is never `disabled` while it saves, for the reason Save is not
41
+ * (`SettingCard.tsx`): a disabled control drops keyboard focus. It says
42
+ * `aria-busy` instead, ignores flips until the save settles (see
43
+ * `useAsyncSwitch`), shows a spinner, and a polite live region says the words.
44
+ */
45
+ export const SettingSwitchBlock: React.FC<
46
+ SettingSwitchBlockProps & { ids: SettingSwitchIds; state: ReturnType<typeof useAsyncSwitch> }
47
+ > = ({ title, headingLevel = 'h3', icon, summary, copy, disabled, dataTestId, ids, state }) => {
48
+ const theme = useTheme();
49
+ const { shown, saving, error, flip } = state;
50
+ const describedBy = [summary != null ? ids.summaryId : null, error ? ids.errorId : null]
51
+ .filter(Boolean)
52
+ .join(' ');
53
+
54
+ const control = (
55
+ <Box sx={{ display: 'inline-flex', alignItems: 'center', gap: 1, flexShrink: 0 }}>
56
+ {saving && <PendingSpinner dataTestId={dataTestId} />}
57
+ <Switch
58
+ id={ids.inputId}
59
+ checked={shown}
60
+ onChange={(event) => void flip(event.target.checked)}
61
+ disabled={disabled}
62
+ error={Boolean(error)}
63
+ aria-describedby={describedBy || undefined}
64
+ inputProps={{ role: 'switch', 'aria-busy': saving }}
65
+ dataTestId={partTestId(dataTestId, 'switch')}
66
+ />
67
+ </Box>
68
+ );
69
+
70
+ return (
71
+ <>
72
+ <SettingHeader
73
+ titleId={ids.titleId}
74
+ title={title}
75
+ headingLevel={headingLevel}
76
+ icon={icon}
77
+ labelFor={ids.inputId}
78
+ trailing={control}
79
+ dataTestId={dataTestId}
80
+ />
81
+ {summary != null && (
82
+ <Box component="p" id={ids.summaryId} sx={descriptionStyles(theme)} data-testid={partTestId(dataTestId, 'summary')}>
83
+ {summary}
84
+ </Box>
85
+ )}
86
+ <SaveError id={ids.errorId} message={error} dataTestId={dataTestId} />
87
+ <Box role="status" aria-live="polite" sx={SR_ONLY_SX}>
88
+ {saving ? copy.saving : ''}
89
+ </Box>
90
+ </>
91
+ );
92
+ };
@@ -0,0 +1,61 @@
1
+ # SettingToggle
2
+
3
+ ## Purpose
4
+
5
+ A setting that is **one switch and nothing else**. There is no edit state:
6
+ flipping the switch is the edit, and it saves at once. Part of the
7
+ `layout/SettingCard` family.
8
+
9
+ ## Usage
10
+
11
+ ```tsx
12
+ import { SettingToggle } from '@12-apps/ui/layout/SettingCard';
13
+
14
+ <SettingToggle
15
+ copy={copy} // SettingSwitchCopy — saving + saveFailed
16
+ title="Two-step sign-in"
17
+ summary="Ask for a code on a new device."
18
+ checked={settings.twoStep}
19
+ onChange={(next) => api.setTwoStep(next)} // may return a promise
20
+ />
21
+ ```
22
+
23
+ ## Props
24
+
25
+ | prop | type | default | effect |
26
+ |---|---|---|---|
27
+ | `copy` | `SettingSwitchCopy` | **required** | The "saving" announcement and the fallback error. No shipped default. |
28
+ | `title` | `string` | **required** | The switch's `<label>` — its accessible name, and a tap target far larger than the track. |
29
+ | `checked` | `boolean` | **required** | The persisted value. |
30
+ | `onChange` | `(checked: boolean) => void \| Promise<unknown>` | **required** | Persist a flip. See below. |
31
+ | `summary` | `ReactNode` | — | Explanation under the title; the switch is `aria-describedby` it. |
32
+ | `variant` | `'card' \| 'row'` | `'card'` | `row` drops the surface — for a dependent row inside a [`SettingGroup`](./SettingGroup.md). |
33
+ | `disabled` | `boolean` | `false` | Disables the switch. Also disabled inside a `SettingGroup` whose main switch is off. |
34
+ | `formatError` | `(error: unknown) => string \| undefined` | — | The sentence for a rejected save; `undefined` falls back to `copy.saveFailed`. |
35
+ | `icon`, `dataTestId`, `className`, `sx` | | | As on `SettingCard`. Parts: `-switch`, `-title`, `-summary`, `-saving`, `-error`. |
36
+
37
+ ## Saving
38
+
39
+ - The switch shows the new value **at once** and holds it while the promise is
40
+ pending, with a spinner beside it, `aria-busy` on the input, and
41
+ `copy.saving` in a polite live region.
42
+ - **Resolved:** the switch hands back to `checked`, which the host has updated.
43
+ - **Rejected:** the switch returns to `checked` (the value actually saved) and
44
+ the error appears under it in a `role="alert"` line the switch is described
45
+ by.
46
+ - A flip while a save is pending is **ignored**, not queued: two racing writes
47
+ of a boolean have no right answer.
48
+ - The switch is never `disabled` while saving, so keyboard focus stays on it.
49
+
50
+ ## Accessibility
51
+
52
+ - `role="switch"` on the input, named by the title, described by the summary
53
+ (and the error, when there is one).
54
+ - The whole title is a `<label for>` the switch — clicking the words flips it.
55
+
56
+ ## Best practices
57
+
58
+ - Use it only when the setting is **exactly** one boolean. Anything with a
59
+ value to type or pick is a [`SettingCard`](./SettingCard.md).
60
+ - Several switches about one subject belong in a
61
+ [`SettingGroup`](./SettingGroup.md) with `variant="row"`.
@@ -0,0 +1,43 @@
1
+ import Box from '@mui/material/Box/index.js';
2
+ import { forwardRef } from 'react';
3
+
4
+ import { useAsyncSwitch } from './SettingCard.hooks';
5
+ import { flatStyles, surfaceStyles, withCallerSx } from './SettingCard.styles';
6
+ import type { SettingToggleProps } from './SettingCard.types';
7
+ import { useSettingGroup } from './SettingGroup.context';
8
+ import { SettingSwitchBlock, useSettingSwitchIds } from './SettingSwitch';
9
+
10
+ /**
11
+ * A setting that is one switch and nothing else. There is no edit state:
12
+ * flipping it IS the edit, and it saves at once.
13
+ *
14
+ * `onChange` may be async. The switch shows the new value while the promise is
15
+ * pending, with a spinner and an announced "saving"; a rejection flips it back
16
+ * to `checked` and shows the error under it.
17
+ *
18
+ * Inside a `SettingGroup` whose main switch is off, it renders disabled.
19
+ */
20
+ export const SettingToggle = forwardRef<HTMLElement, SettingToggleProps>(function SettingToggle(props, ref) {
21
+ const { checked, onChange, copy, formatError, disabled = false, variant = 'card', dataTestId, className, sx } = props;
22
+ const group = useSettingGroup();
23
+ const ids = useSettingSwitchIds();
24
+ const state = useAsyncSwitch({ checked, onChange, formatError, fallback: copy.saveFailed });
25
+ const card = variant === 'card';
26
+
27
+ return (
28
+ <Box
29
+ component={card ? 'section' : 'div'}
30
+ ref={ref}
31
+ aria-labelledby={ids.titleId}
32
+ aria-busy={state.saving || undefined}
33
+ data-variant={variant}
34
+ data-testid={dataTestId}
35
+ className={className}
36
+ sx={withCallerSx((theme) => (card ? surfaceStyles(theme, false) : flatStyles(theme)), sx)}
37
+ >
38
+ <SettingSwitchBlock {...props} disabled={disabled || group.inactive} ids={ids} state={state} />
39
+ </Box>
40
+ );
41
+ });
42
+
43
+ SettingToggle.displayName = 'SettingToggle';
@@ -0,0 +1,18 @@
1
+ export { SettingCard } from './SettingCard';
2
+ export { SettingToggle } from './SettingToggle';
3
+ export { SettingGroup } from './SettingGroup';
4
+ export { SettingGrid, SETTING_GRID_CONTAINER } from './SettingGrid';
5
+ export type {
6
+ SettingCardCopy,
7
+ SettingCardProps,
8
+ SettingErrorFormatter,
9
+ SettingGridColumns,
10
+ SettingGridProps,
11
+ SettingGroupProps,
12
+ SettingHeadingLevel,
13
+ SettingSaveResult,
14
+ SettingStatus,
15
+ SettingSwitchCopy,
16
+ SettingToggleProps,
17
+ SettingToggleVariant,
18
+ } from './SettingCard.types';
@@ -0,0 +1,68 @@
1
+ # SettingCard family Test Status Tracking
2
+
3
+ `SettingCard`, `SettingToggle`, `SettingGroup` and `SettingGrid` share this
4
+ folder and this file.
5
+
6
+ ## Test Files Status
7
+
8
+ - [x] SettingCard.test.stories.tsx, SettingToggle.test.stories.tsx, SettingGroup.test.stories.tsx, SettingGrid.test.stories.tsx created
9
+ - [x] `__tests__/` Vitest suites for all four
10
+ - [x] Core categories implemented (interaction, keyboard, screen reader, focus, responsive/layout, visual states, edge cases)
11
+
12
+ ## Storybook Tests Status
13
+
14
+ ### Test Results
15
+
16
+ | Test Name | Status | Pass/Fail | Notes |
17
+ | ------------------------------------------- | ------ | --------- | ------------------------------------------------------ |
18
+ | SettingCard › Opens in place | PASS | Pass | form inside the same card; no dialog |
19
+ | SettingCard › Focus round trip | PASS | Pass | first field on open, Edit on close |
20
+ | SettingCard › Keyboard only | PASS | Pass | Tab to Edit, Enter opens, Escape cancels |
21
+ | SettingCard › Save resolves | PASS | Pass | "Saving…", `aria-busy`, then new summary + focus |
22
+ | SettingCard › Save rejects | PASS | Pass | stays open, draft intact, focus stays on Save |
23
+ | SettingCard › Cancel discards | PASS | Pass | reopened form shows the saved value |
24
+ | SettingCard › Accessible names | PASS | Pass | region, heading, "Edit <title>" |
25
+ | SettingCard › Learn more disclosure | PASS | Pass | `aria-expanded` toggles, content visible |
26
+ | SettingToggle › Flip saves | PASS | Pass | optimistic value, busy but enabled, then settles |
27
+ | SettingToggle › Reject reverts | PASS | Pass | back to saved value, error shown |
28
+ | SettingToggle › Keyboard flip | PASS | Pass | Space flips; focus stays on the switch while saving |
29
+ | SettingToggle › Label is the tap target | PASS | Pass | clicking the title flips |
30
+ | SettingGroup › Off dims and disables | PASS | Pass | rows rendered, `inert`, opacity < 1, hint shown |
31
+ | SettingGroup › Off rows skipped by Tab | PASS | Pass | focus never enters the inert rows |
32
+ | SettingGroup › Turn on activates | PASS | Pass | rows live, hint gone, fields accept input |
33
+ | SettingGrid › Columns follow the container | PASS | Pass | 1 / 2 / 3 columns at 360 / 720 / 1080 px containers |
34
+ | SettingGrid › Rows share height | PASS | Pass | three cards of different content, one height |
35
+ | SettingGrid › Open card spans the row | PASS | Pass | open card width equals the grid's; back on cancel |
36
+
37
+ Legend: Pending | Running | PASS | FAIL
38
+
39
+ ## Static Stories Status
40
+
41
+ - [x] Default story (each component)
42
+ - [x] Open, Saving, SaveRejected, HostErrorMessage (SettingCard)
43
+ - [x] Saving, SaveRejected, Rows (SettingToggle)
44
+ - [x] Off (dimmed), On, Disabled, OneSubjectPerGroup (SettingGroup)
45
+ - [x] ResponsiveByContainer, OpenCardSpansRow, TwoColumnsMax, Empty (SettingGrid)
46
+ - [x] Disabled state stories
47
+ - [x] Loading (saving) state stories
48
+ - [x] Error state stories
49
+ - [x] Long content / edge cases
50
+ - [x] Dark theme (SettingCard)
51
+
52
+ ## Lint Status
53
+
54
+ - [x] No lint errors
55
+ - [x] No warnings
56
+
57
+ ## TypeCheck Status
58
+
59
+ - [x] No type errors
60
+ - [x] All props properly typed
61
+
62
+ ## Overall Component Status
63
+
64
+ - [x] All tests passing
65
+ - [x] Lint clean
66
+ - [x] TypeCheck clean
67
+ - [x] Stories working
68
+ - [ ] Ready for production (pending review)
@@ -0,0 +1,63 @@
1
+ # SettingCard family
2
+
3
+ Four settings-screen building blocks under one subpath,
4
+ `@12-apps/ui/layout/SettingCard` (FUT-2823). `SettingCard` summarises a setting
5
+ while closed and edits it in place, with an async save that stays open on
6
+ failure and a focus round trip. `SettingToggle` is a switch that saves as it
7
+ flips. `SettingGroup` is one subject's main switch with dependent rows that dim
8
+ (never vanish) while it is off. `SettingGrid` lays them out in 1–3 columns by
9
+ container query, with equal-height rows and a full-row span for an open card.
10
+ App-agnostic: every word comes in through props (`SettingCardCopy`,
11
+ `SettingSwitchCopy`, titles, summaries, hints).
12
+
13
+ ## Props
14
+
15
+ - **SettingCard** — `copy`, `title`, `onSave` (may be async), `children` (the
16
+ form), `summary`, `status`, `learnMore`, `onCancel`, `open` / `defaultOpen` /
17
+ `onOpenChange`, `disabled`, `saveDisabled`, `formatError`, `headingLevel`,
18
+ `icon`, `dataTestId`, `className`, `sx`.
19
+ - **SettingToggle** — `copy`, `title`, `checked`, `onChange` (may be async),
20
+ `summary`, `variant` (`card` | `row`), `disabled`, `formatError`, `icon`,
21
+ `dataTestId`, `className`, `sx`.
22
+ - **SettingGroup** — `SettingToggle`'s switch props plus `inactiveHint` and
23
+ `children` (the dependent rows).
24
+ - **SettingGrid** — `children`, `minColumnWidth`, `maxColumns`, `gap`,
25
+ `aria-label`, `dataTestId`, `className`, `sx`.
26
+
27
+ ## Lint
28
+
29
+ - Clean (`pnpm lint:files src/components/layout/SettingCard`), plus the
30
+ complexity and flakiness gates.
31
+
32
+ ## Type Errors
33
+
34
+ - None (`pnpm typecheck`, `tsc -p tsconfig.stories.json`).
35
+
36
+ ## Testing Scenarios
37
+
38
+ - Closed/open rendering, in-place open, Escape, controlled mode, no focus steal
39
+ on mount; save pending / resolved / rejected / thrown / double-press /
40
+ `saveDisabled`; cancel discarding uncontrolled drafts; toggle optimistic flip,
41
+ revert, ignored second flip; group inert rows, hint, activation only after
42
+ the save lands; grid container-query CSS, row sizing, open-card span; layout
43
+ measured in Chromium by the test stories.
44
+
45
+ ## Storybook Tests List
46
+
47
+ - Layout/SettingCard/Tests → 8, Layout/SettingToggle/Tests → 4,
48
+ Layout/SettingGroup/Tests → 3, Layout/SettingGrid/Tests → 3.
49
+
50
+ ## Current
51
+
52
+ - 2026-09-26 16:40 BRT — v1: all four components, copy packs in both locales,
53
+ docs per component. Remaining TODO: first host adoption in the origin host
54
+ (FUT-1659 is the admin screens that would fold onto it).
55
+ - 2026-09-26 21:33 BRT — backported onto the `ui-6.30.x` maintenance line
56
+ (FUT-2823). `SettingCard.hooks.ts`'s focus-on-open and `SettingCard.styles.ts`
57
+ / `SettingCard.parts.tsx` / `SettingGrid.tsx`'s size tokens now use
58
+ `SettingCard.focus.ts` / `SettingCard.rem.ts`, private copies of
59
+ `feedback/Dialog`'s `focusFirstTabbable` and `tokens/relative`'s `rem()` —
60
+ both shipped on `main` after this line's fork point, and pulling either
61
+ module forward would drag its own unrelated fix (a Dialog focus-trap change,
62
+ a whole lint gate) onto a line that takes only security and backport fixes.
63
+ Behaviour is unchanged; only where the two helpers live differs from `main`.
@@ -8,6 +8,7 @@ export * from './Drawer';
8
8
  export * from './Resizable';
9
9
  export * from './ScrollArea';
10
10
  export * from './Separator';
11
+ export * from './SettingCard';
11
12
  export * from './Sidebar';
12
13
  export * from './Skeleton/Skeleton';
13
14
  export * from './TableFilter';
@@ -16,3 +16,32 @@ export interface TableFilterCopy {
16
16
  rangeMin: string;
17
17
  rangeMax: string;
18
18
  }
19
+
20
+ /**
21
+ * The chrome words of an editable `SettingCard`. The card's own title, summary
22
+ * and status are per-card props; these are the words every card repeats.
23
+ */
24
+ export interface SettingCardCopy {
25
+ /** The closed card's trigger. Its accessible name also carries the card's title. */
26
+ edit: string;
27
+ /** Discard the draft and close. */
28
+ cancel: string;
29
+ save: string;
30
+ /** Announced (and shown to sighted users as the Save label) while the save is pending. */
31
+ saving: string;
32
+ /** The disclosure that reveals the card's longer explanation. */
33
+ learnMore: string;
34
+ /** Shown when the save rejected and the host's `formatError` gave no sentence of its own. */
35
+ saveFailed: string;
36
+ }
37
+
38
+ /**
39
+ * What a switch that saves the moment it flips says about that save — shared
40
+ * by `SettingToggle` and `SettingGroup`'s main switch.
41
+ */
42
+ export interface SettingSwitchCopy {
43
+ /** Announced while the flip is being saved. */
44
+ saving: string;
45
+ /** Shown when the save rejected and the host's `formatError` gave no sentence of its own. */
46
+ saveFailed: string;
47
+ }
@@ -3,6 +3,8 @@
3
3
  * is — see `en-US.ts` for why the packs live in per-family files.
4
4
  */
5
5
  import type {
6
+ SettingCardCopy,
7
+ SettingSwitchCopy,
6
8
  TableFilterCopy,
7
9
  } from './copy';
8
10
 
@@ -13,3 +15,17 @@ export const EN_US_TABLE_FILTER_COPY: TableFilterCopy = {
13
15
  rangeMin: "Minimum",
14
16
  rangeMax: "Maximum",
15
17
  };
18
+
19
+ export const EN_US_SETTING_CARD_COPY: SettingCardCopy = {
20
+ edit: "Edit",
21
+ cancel: "Cancel",
22
+ save: "Save",
23
+ saving: "Saving…",
24
+ learnMore: "Learn more",
25
+ saveFailed: "Could not save. Please try again.",
26
+ };
27
+
28
+ export const EN_US_SETTING_SWITCH_COPY: SettingSwitchCopy = {
29
+ saving: "Saving…",
30
+ saveFailed: "Could not save. Please try again.",
31
+ };
package/src/locales.ts CHANGED
@@ -38,6 +38,8 @@ import type {
38
38
  PhoneInputCopy,
39
39
  RichEditorToolbarCopy,
40
40
  SectionOnboardingCopy,
41
+ SettingCardCopy,
42
+ SettingSwitchCopy,
41
43
  SocialLoginCopy,
42
44
  TableFilterCopy,
43
45
  TimingDiagramCopy,
@@ -115,6 +117,14 @@ export const TABLE_FILTER_COPY = pack<TableFilterCopy>(
115
117
  pt.PT_BR_TABLE_FILTER_COPY,
116
118
  en.EN_US_TABLE_FILTER_COPY,
117
119
  );
120
+ export const SETTING_CARD_COPY = pack<SettingCardCopy>(
121
+ pt.PT_BR_SETTING_CARD_COPY,
122
+ en.EN_US_SETTING_CARD_COPY,
123
+ );
124
+ export const SETTING_SWITCH_COPY = pack<SettingSwitchCopy>(
125
+ pt.PT_BR_SETTING_SWITCH_COPY,
126
+ en.EN_US_SETTING_SWITCH_COPY,
127
+ );
118
128
 
119
129
  // navigation
120
130
  export const COMMAND_PALETTE_COPY = pack<CommandPaletteCopy>(
@@ -3,6 +3,8 @@
3
3
  * barrel over this folder — see that file for why.
4
4
  */
5
5
  import type {
6
+ SettingCardCopy,
7
+ SettingSwitchCopy,
6
8
  TableFilterCopy,
7
9
  } from './copy';
8
10
 
@@ -13,3 +15,17 @@ export const PT_BR_TABLE_FILTER_COPY: TableFilterCopy = {
13
15
  rangeMin: "Mínimo",
14
16
  rangeMax: "Máximo",
15
17
  };
18
+
19
+ export const PT_BR_SETTING_CARD_COPY: SettingCardCopy = {
20
+ edit: "Editar",
21
+ cancel: "Cancelar",
22
+ save: "Salvar",
23
+ saving: "Salvando…",
24
+ learnMore: "Saiba mais",
25
+ saveFailed: "Não foi possível salvar. Tente novamente.",
26
+ };
27
+
28
+ export const PT_BR_SETTING_SWITCH_COPY: SettingSwitchCopy = {
29
+ saving: "Salvando…",
30
+ saveFailed: "Não foi possível salvar. Tente novamente.",
31
+ };
@@ -1,13 +0,0 @@
1
- // src/pt-BR.layout.ts
2
- var PT_BR_TABLE_FILTER_COPY = {
3
- clearAllFilters: "Limpar todos os filtros",
4
- clearKeyword: "Limpar a busca",
5
- invalidRange: "O m\xE1ximo deve ser maior ou igual ao m\xEDnimo.",
6
- rangeMin: "M\xEDnimo",
7
- rangeMax: "M\xE1ximo"
8
- };
9
-
10
- export {
11
- PT_BR_TABLE_FILTER_COPY
12
- };
13
- //# sourceMappingURL=chunk-A7RIZOAL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pt-BR.layout.ts"],"sourcesContent":["/**\n * The pt-BR pack for the layout family. Split out of `pt-BR.ts`, which is a\n * barrel over this folder — see that file for why.\n */\nimport type {\n TableFilterCopy,\n} from './copy';\n\nexport const PT_BR_TABLE_FILTER_COPY: TableFilterCopy = {\n clearAllFilters: \"Limpar todos os filtros\",\n clearKeyword: \"Limpar a busca\",\n invalidRange: \"O máximo deve ser maior ou igual ao mínimo.\",\n rangeMin: \"Mínimo\",\n rangeMax: \"Máximo\",\n};\n"],"mappings":";AAQO,IAAM,0BAA2C;AAAA,EACtD,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AACZ;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-BY3JEK5T.js.map