@12-apps/ui 6.39.20 → 6.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NATIVE.md +1 -1
- package/components-catalog.md +43 -5
- package/components-guidelines.md +110 -0
- package/dist/_internal/components/data-display/Alert/Alert.js +3 -2
- package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -2
- package/dist/_internal/components/data-display/Alert/Alert.styles.js +3 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
- package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
- package/dist/_internal/components/data-display/Badge/Badge.js +10 -8
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +8 -6
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +9 -7
- package/dist/_internal/components/data-display/Banner/Banner.js +3 -2
- package/dist/_internal/components/data-display/Banner/Banner.styles.js +3 -2
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +9 -8
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -2
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +13 -12
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +13 -12
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +9 -7
- package/dist/_internal/components/data-display/Carousel/Carousel.js +13 -11
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +8 -6
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +8 -6
- package/dist/_internal/components/data-display/Chart/Chart.js +12 -10
- package/dist/_internal/components/data-display/Chart/SpecChart.js +15 -13
- package/dist/_internal/components/data-display/Chart/chart-context.js +9 -7
- package/dist/_internal/components/data-display/Chart/chart-internals.js +8 -6
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +11 -9
- package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +3 -3
- package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +6 -5
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +70 -69
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +87 -86
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +13 -12
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +17 -16
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +17 -16
- package/dist/_internal/components/data-display/DataViews/base-card.js +7 -6
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +11 -10
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +10 -9
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +15 -14
- package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +20 -20
- package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +10 -9
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +16 -15
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +8 -7
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +11 -10
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +11 -10
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +26 -26
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +20 -19
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +9 -8
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +66 -65
- package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +6 -5
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +37 -36
- package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +20 -19
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +24 -23
- package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-search.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +11 -10
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +27 -26
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +30 -29
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +26 -25
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +11 -10
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
- package/dist/_internal/components/data-display/DataViews/save-view-preview.js +6 -5
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +13 -12
- package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +3 -3
- package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +6 -5
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +15 -15
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +14 -14
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +23 -21
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +5 -5
- package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +13 -13
- package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
- package/dist/_internal/components/data-display/Progress/Progress.js +6 -5
- package/dist/_internal/components/data-display/Progress/Progress.metrics.js +4 -3
- package/dist/_internal/components/data-display/Progress/Progress.styles.js +5 -4
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +7 -5
- package/dist/_internal/components/data-display/Sheet/Sheet.js +9 -7
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +8 -6
- package/dist/_internal/components/data-display/Table/Table.js +5 -5
- package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
- package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
- package/dist/_internal/components/data-display/index.js +77 -75
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +11 -10
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
- package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
- package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +9 -8
- package/dist/_internal/components/feedback/index.js +19 -18
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +10 -10
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +7 -7
- package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +5 -5
- package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +5 -5
- package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +4 -4
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +5 -5
- package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +4 -4
- package/dist/_internal/components/form/Button/Button.js +8 -7
- package/dist/_internal/components/form/Button/Button.styles.js +6 -5
- package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
- package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
- package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +10 -10
- package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +5 -5
- package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +5 -5
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +7 -7
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +6 -6
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +12 -12
- package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +5 -5
- package/dist/_internal/components/form/CepField/CepField.js +7 -7
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/Command/Command.js +9 -7
- package/dist/_internal/components/form/Command/Command.styles.js +8 -6
- package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +4 -4
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +6 -6
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +13 -13
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +5 -5
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +6 -6
- package/dist/_internal/components/form/Input/Input.js +6 -6
- package/dist/_internal/components/form/Input/Input.metrics.js +2 -2
- package/dist/_internal/components/form/Input/Input.styles.js +5 -5
- package/dist/_internal/components/form/InputOTP/InputOTP.js +5 -5
- package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +4 -4
- package/dist/_internal/components/form/Label/Label.js +9 -7
- package/dist/_internal/components/form/Label/Label.styles.js +8 -6
- package/dist/_internal/components/form/Menubar/Menubar.item.js +9 -7
- package/dist/_internal/components/form/Menubar/Menubar.js +11 -9
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +8 -6
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +10 -8
- package/dist/_internal/components/form/NumberField/NumberField.helpers.js +20 -0
- package/dist/_internal/components/form/NumberField/NumberField.js +28 -0
- package/dist/_internal/components/form/NumberField/NumberField.types.js +1 -0
- package/dist/_internal/components/form/NumberField/NumberField.types.js.map +1 -0
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +4 -4
- package/dist/_internal/components/form/RadioGroup/RadioGroup.js +6 -6
- package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +4 -4
- package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +5 -5
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/_internal/components/form/Select/Select.js +5 -5
- package/dist/_internal/components/form/Select/Select.metrics.js +2 -2
- package/dist/_internal/components/form/Switch/Switch.js +3 -2
- package/dist/_internal/components/form/Switch/Switch.parts.js +3 -2
- package/dist/_internal/components/form/Switch/Switch.styles.js +3 -2
- package/dist/_internal/components/form/Textarea/Textarea.js +4 -4
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +5 -5
- package/dist/_internal/components/form/Toggle/Toggle.js +5 -5
- package/dist/_internal/components/form/Toggle/Toggle.styles.js +4 -4
- package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +4 -4
- package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
- package/dist/_internal/components/form/index.js +72 -64
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +13 -13
- package/dist/_internal/components/form/total-form/Fields/CepField.js +8 -8
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +6 -6
- package/dist/_internal/components/form/total-form/Fields/TextField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/ToggleField.js +5 -5
- package/dist/_internal/components/form/total-form/Fields/index.js +27 -27
- package/dist/_internal/components/form/total-form/SubmitButton.js +9 -8
- package/dist/_internal/components/index.js +244 -203
- package/dist/_internal/components/layout/Box/Box.js +10 -8
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +5 -5
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +4 -4
- package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +2 -2
- package/dist/_internal/components/layout/Separator/Separator.js +3 -3
- package/dist/_internal/components/layout/Separator/Separator.styles.js +2 -2
- package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js +19 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.hooks.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +54 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js +12 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.metrics.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +59 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js +37 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.styles.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.types.js +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.types.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +56 -0
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js +10 -0
- package/dist/_internal/components/layout/SettingCard/SettingGroup.context.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +65 -0
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +63 -0
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +65 -0
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js.map +1 -0
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +6 -6
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +4 -4
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +11 -9
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +4 -4
- package/dist/_internal/components/layout/index.js +87 -25
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +15 -13
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +8 -6
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
- package/dist/_internal/components/navigation/Pagination/Pagination.js +5 -5
- package/dist/_internal/components/navigation/Pagination/PaginationParts.js +4 -4
- package/dist/_internal/components/navigation/Tabs/Tabs.js +5 -5
- package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +4 -4
- package/dist/_internal/components/navigation/index.js +33 -31
- package/dist/_internal/components/typography/Heading/Heading.js +6 -5
- package/dist/_internal/components/typography/Heading/Heading.metrics.js +4 -3
- package/dist/_internal/components/typography/Heading/Heading.styles.js +5 -4
- package/dist/_internal/components/typography/Text/Text.js +5 -4
- package/dist/_internal/components/typography/Text/Text.metrics.js +4 -3
- package/dist/_internal/components/typography/index.js +12 -11
- package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +7 -5
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +7 -5
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +7 -5
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +7 -5
- package/dist/_internal/components/utility/index.js +20 -18
- package/dist/_internal/en-US.data-display.js +2 -2
- package/dist/_internal/en-US.layout.js +5 -1
- package/dist/_internal/icons/Icon.js +10 -8
- package/dist/_internal/provider/UiProvider.js +9 -7
- package/dist/_internal/provider/mui-bridge.js +8 -6
- package/dist/_internal/provider/use-ui-theme.js +9 -7
- package/dist/_internal/pt-BR.data-display.js +2 -2
- package/dist/_internal/pt-BR.layout.js +5 -1
- package/dist/_internal/social-login-button/social-login-button.js +16 -15
- package/dist/_internal/tokens/density.core.js +18 -0
- package/dist/_internal/tokens/density.core.js.map +1 -0
- package/dist/_internal/tokens/density.js +31 -0
- package/dist/_internal/tokens/density.js.map +1 -0
- package/dist/_internal/tokens/field-height.core.js +1 -1
- package/dist/_internal/tokens/field-height.js +7 -5
- package/dist/_internal/tokens/theme.js +3 -2
- package/dist/_internal/user-avatar/user-avatar.js +14 -13
- package/dist/charts.js +24 -22
- package/dist/chunk-2GTORM5E.js +1 -0
- package/dist/chunk-2GTORM5E.js.map +1 -0
- package/dist/{chunk-DFCQQN6P.js → chunk-2LKWJV65.js} +5 -5
- package/dist/{chunk-HVXIOIM5.js → chunk-2MLS6KU4.js} +2 -2
- package/dist/{chunk-IIUB4IOH.js → chunk-2XHIF3M3.js} +4 -4
- package/dist/chunk-33L26P4J.js +27 -0
- package/dist/chunk-33L26P4J.js.map +1 -0
- package/dist/{chunk-IASDP44E.js → chunk-3AOOI2NR.js} +6 -6
- package/dist/{chunk-TCV3N44E.js → chunk-3CLBGHTL.js} +2 -2
- package/dist/{chunk-KKN4LLVE.js → chunk-3CUWQXTG.js} +3 -3
- package/dist/{chunk-QXSW3CNN.js → chunk-3CYTVX4T.js} +5 -5
- package/dist/chunk-3DO5AJCG.js +117 -0
- package/dist/chunk-3DO5AJCG.js.map +1 -0
- package/dist/{chunk-I5ZVCY2N.js → chunk-3EPA2A4M.js} +8 -8
- package/dist/{chunk-DRSY37PB.js → chunk-3MJHHPRW.js} +2 -2
- package/dist/{chunk-NLYNRE7L.js → chunk-3RUCLKAK.js} +4 -4
- package/dist/chunk-3U7WKBMH.js +27 -0
- package/dist/chunk-3U7WKBMH.js.map +1 -0
- package/dist/{chunk-36JKV7CA.js → chunk-3UEZ6NUI.js} +3 -3
- package/dist/{chunk-EYZ6QBTV.js → chunk-3XS37SQT.js} +3 -3
- package/dist/{chunk-BSUG4KMP.js → chunk-44USLRMT.js} +11 -11
- package/dist/{chunk-DJYL2LC6.js → chunk-44Z72DDM.js} +2 -2
- package/dist/{chunk-4WCDMCIS.js → chunk-4CHYMTBT.js} +4 -4
- package/dist/{chunk-2LIRGFEK.js → chunk-4GN2RLYL.js} +2 -2
- package/dist/{chunk-HN3PZTUK.js → chunk-4MKVGSHX.js} +5 -5
- package/dist/{chunk-BRM3T4LQ.js → chunk-4S2LWZ7L.js} +5 -5
- package/dist/{chunk-OQRG34VG.js → chunk-4SHMSLFA.js} +2 -2
- package/dist/{chunk-62UAI62O.js → chunk-4UVFPORR.js} +5 -5
- package/dist/{chunk-YTINPQKU.js → chunk-4XHVGUOM.js} +2 -2
- package/dist/{chunk-7DK6YVJU.js → chunk-4Z7GEO2R.js} +2 -2
- package/dist/{chunk-A2TANYNR.js → chunk-53O2TNSR.js} +6 -6
- package/dist/{chunk-T6EKPFKZ.js → chunk-54HTXJJ2.js} +2 -2
- package/dist/{chunk-OHZU4IT3.js → chunk-5B7BTLN4.js} +2 -2
- package/dist/{chunk-K5V6TCYB.js → chunk-5ETBB2DG.js} +4 -4
- package/dist/{chunk-5752357K.js → chunk-5KGABAQB.js} +4 -4
- package/dist/{chunk-JKIKHWD2.js → chunk-5NT2M2JI.js} +4 -4
- package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
- package/dist/{chunk-7EH4D6FU.js → chunk-6H4TPEMO.js} +2 -2
- package/dist/{chunk-WB6ZU3B3.js → chunk-6JGATEOF.js} +6 -6
- package/dist/{chunk-TU5A2CV7.js → chunk-6L2FKTBO.js} +7 -7
- package/dist/{chunk-ME3WYPYK.js → chunk-6MD5QXXJ.js} +5 -5
- package/dist/{chunk-HQZRI7UX.js → chunk-6N2EDWMG.js} +4 -4
- package/dist/{chunk-H224XFFD.js → chunk-6REPQ352.js} +2 -2
- package/dist/{chunk-YZ2DMP23.js → chunk-6TPYT3UC.js} +5 -5
- package/dist/{chunk-I4MRBEWU.js → chunk-6ZD3FI5P.js} +11 -11
- package/dist/{chunk-PWZHCBG3.js → chunk-72FPUWD6.js} +2 -2
- package/dist/{chunk-VRPREI27.js → chunk-72S2RGWD.js} +2 -2
- package/dist/{chunk-OAW6GCS3.js → chunk-77BKKPCI.js} +3 -3
- package/dist/{chunk-67O4GPJJ.js → chunk-7FEXRMJE.js} +2 -2
- package/dist/{chunk-KN5J3NEZ.js → chunk-7KKMZJFT.js} +2 -2
- package/dist/{chunk-KJDBY2KN.js → chunk-7LILFS72.js} +2 -2
- package/dist/{chunk-SLDSWQVE.js → chunk-7TE4TMS3.js} +5 -5
- package/dist/{chunk-AG3DY5TH.js → chunk-ADSA76T7.js} +2 -2
- package/dist/chunk-AEMD6JHZ.js +1 -0
- package/dist/chunk-AEMD6JHZ.js.map +1 -0
- package/dist/{chunk-BKASAYQL.js → chunk-ALOUJ3CE.js} +8 -8
- package/dist/{chunk-VY2BMSHN.js → chunk-ANYOSBNA.js} +2 -2
- package/dist/{chunk-LNHYBA4B.js → chunk-AWG2AJHX.js} +5 -5
- package/dist/{chunk-7X7ZHJHM.js → chunk-B3QWQG62.js} +2 -2
- package/dist/{chunk-2S752BIJ.js → chunk-BA6Z52QN.js} +2 -2
- package/dist/{chunk-X4F32GUB.js → chunk-BM4KKGL7.js} +2 -2
- package/dist/chunk-BOWS4U6W.js +1 -0
- package/dist/chunk-BOWS4U6W.js.map +1 -0
- package/dist/{chunk-4T6UIYJB.js → chunk-BVSSEOLI.js} +2 -2
- package/dist/{chunk-3UABIEP3.js → chunk-C2TERIB4.js} +2 -2
- package/dist/{chunk-TEEJ4GNY.js → chunk-C6OVO6AT.js} +2 -2
- package/dist/{chunk-CYZZHWNK.js → chunk-CJ45OL7L.js} +2 -2
- package/dist/{chunk-N7LPVR7P.js → chunk-CKHFYTIX.js} +4 -4
- package/dist/{chunk-PA3AA55Q.js → chunk-CLK67TNH.js} +2 -2
- package/dist/{chunk-MQ277OLB.js → chunk-CM2Q7IH3.js} +5 -5
- package/dist/{chunk-ZXSWXE6U.js → chunk-CMFJQH6A.js} +5 -5
- package/dist/{chunk-NOKN4HRK.js → chunk-CMLIWUBW.js} +4 -4
- package/dist/{chunk-EA2UNEL6.js → chunk-CNR5RFKC.js} +2 -2
- package/dist/{chunk-P52LYD6S.js → chunk-DFI2RKVQ.js} +2 -2
- package/dist/{chunk-37USSARD.js → chunk-DH5UJD2I.js} +4 -4
- package/dist/{chunk-PCLKFR27.js → chunk-DH6SL3SY.js} +8 -8
- package/dist/chunk-DJKVSUXH.js +35 -0
- package/dist/chunk-DJKVSUXH.js.map +1 -0
- package/dist/{chunk-S6JHTEV4.js → chunk-DLWLIPCP.js} +3 -3
- package/dist/{chunk-KN4ZE2XZ.js → chunk-EIII4QU4.js} +19 -19
- package/dist/{chunk-L566FMDD.js → chunk-EO5IEWFI.js} +6 -6
- package/dist/{chunk-VY6L74JQ.js → chunk-EQXIW5MQ.js} +4 -4
- package/dist/{chunk-MWPXKZ7O.js → chunk-ERY6D2OV.js} +4 -4
- package/dist/{chunk-6PU3JYVY.js → chunk-F3AYISXT.js} +4 -4
- package/dist/{chunk-GY4NBSCN.js → chunk-FDMQ7H22.js} +2 -2
- package/dist/{chunk-IBGP3VSR.js → chunk-FHW3ATT7.js} +2 -2
- package/dist/{chunk-WL6N33AB.js → chunk-FIO55AKI.js} +4 -4
- package/dist/{chunk-5CQNBMLK.js → chunk-FTQBVZ7V.js} +4 -4
- package/dist/{chunk-J5UZB6Y6.js → chunk-FXWXBEOZ.js} +2 -2
- package/dist/{chunk-IGGXKT5B.js → chunk-G2WERTWZ.js} +2 -2
- package/dist/{chunk-DF4QODJ6.js → chunk-G4TKMUOL.js} +6 -6
- package/dist/{chunk-WY5PBZ7Q.js → chunk-G6ZPQHBL.js} +2 -2
- package/dist/{chunk-JYR6VV4Y.js → chunk-G7XHJPLO.js} +5 -5
- package/dist/{chunk-IQJCLFF4.js → chunk-GANW7FXQ.js} +2 -2
- package/dist/{chunk-3LSIFHQK.js → chunk-GE2CCITY.js} +2 -2
- package/dist/{chunk-G3XLFQ2Z.js → chunk-GG62LKA3.js} +6 -6
- package/dist/{chunk-YQCRQHVU.js → chunk-GI63FQEJ.js} +4 -4
- package/dist/{chunk-7ICK5MXV.js → chunk-GJFAI3J5.js} +10 -10
- package/dist/{chunk-2JNHWKQK.js → chunk-GPHURU2K.js} +12 -12
- package/dist/{chunk-5FAI25JQ.js → chunk-H72YKEGD.js} +3 -3
- package/dist/chunk-HALFOXSZ.js +1 -0
- package/dist/chunk-HALFOXSZ.js.map +1 -0
- package/dist/{chunk-J3XFUCCR.js → chunk-HKBJZX3C.js} +12 -12
- package/dist/{chunk-M4QXG5JP.js → chunk-HQWJUHR4.js} +4 -4
- package/dist/chunk-IC7GHPMK.js +22 -0
- package/dist/chunk-IC7GHPMK.js.map +1 -0
- package/dist/{chunk-4BNV5AAI.js → chunk-ITFFA3H2.js} +3 -3
- package/dist/{chunk-RB3X6CEE.js → chunk-IWGW2E35.js} +2 -2
- package/dist/{chunk-O25SH2MA.js → chunk-J6KLT7HP.js} +7 -7
- package/dist/{chunk-CRG24BGI.js → chunk-JAGAFEZL.js} +2 -2
- package/dist/{chunk-RDCHT2WN.js → chunk-JE5GEWTG.js} +5 -5
- package/dist/{chunk-FLDLUAHW.js → chunk-JE6GQB5J.js} +4 -4
- package/dist/{chunk-N23GCN5U.js → chunk-JFLFZLOA.js} +5 -5
- package/dist/{chunk-35443PF6.js → chunk-JIRZ27RI.js} +2 -2
- package/dist/{chunk-5MW7OYBM.js → chunk-JSGVYOMN.js} +2 -2
- package/dist/{chunk-RNIU447I.js → chunk-JU3FRRO2.js} +2 -2
- package/dist/{chunk-WOAXKWAB.js → chunk-K4A3JDYQ.js} +2 -2
- package/dist/{chunk-HM2JJNUE.js → chunk-K6LNHHSH.js} +5 -5
- package/dist/{chunk-NR5TW4AH.js → chunk-K7MQP2KT.js} +3 -3
- package/dist/{chunk-2OWKL4CC.js → chunk-KCDNOMMT.js} +9 -9
- package/dist/{chunk-O2DLEAUP.js → chunk-KHOAXZW2.js} +4 -4
- package/dist/{chunk-W5TI46QN.js → chunk-KQZGUHYZ.js} +3 -3
- package/dist/{chunk-2K7WPHI3.js → chunk-KW3H5FUS.js} +2 -2
- package/dist/{chunk-7D2C4LK2.js → chunk-LCWGNDTH.js} +4 -4
- package/dist/{chunk-FNRPQE2D.js → chunk-LF3EVXMF.js} +2 -2
- package/dist/{chunk-MCJRHF7Z.js → chunk-LGCRL7DK.js} +10 -10
- package/dist/{chunk-JK5UJM4Y.js → chunk-LODMNSLR.js} +9 -9
- package/dist/{chunk-CGO452DC.js → chunk-M47ZOUGF.js} +13 -10
- package/dist/{chunk-CGO452DC.js.map → chunk-M47ZOUGF.js.map} +1 -1
- package/dist/{chunk-YUXDVW62.js → chunk-M65ZNPLO.js} +2 -2
- package/dist/{chunk-URHX4FAQ.js → chunk-MKLIMY3D.js} +2 -2
- package/dist/{chunk-2FM5SUQV.js → chunk-MM5XSAVE.js} +2 -2
- package/dist/{chunk-LXT3X33C.js → chunk-NCB4GBRL.js} +2 -2
- package/dist/{chunk-FNO5TWBJ.js → chunk-NCEQWEXT.js} +4 -4
- package/dist/{chunk-FWPFCK4D.js → chunk-NDHDBOUH.js} +4 -4
- package/dist/{chunk-WRCLYSTX.js → chunk-NFGIA2ZV.js} +2 -2
- package/dist/{chunk-VPPIODKX.js → chunk-NQ7NMCRI.js} +2 -2
- package/dist/{chunk-YMTZN54Q.js → chunk-NRSVI23L.js} +2 -2
- package/dist/{chunk-2622YFM6.js → chunk-NSVSC6ZC.js} +6 -6
- package/dist/{chunk-Z43N7ASP.js → chunk-NU55QUMO.js} +2 -2
- package/dist/{chunk-66O55OZI.js → chunk-NYFGFELX.js} +2 -2
- package/dist/{chunk-PZBK3F52.js → chunk-O6MJWHU5.js} +3 -3
- package/dist/chunk-O6MJWHU5.js.map +1 -0
- package/dist/chunk-OJUORFGO.js +87 -0
- package/dist/chunk-OJUORFGO.js.map +1 -0
- package/dist/{chunk-JXECOCNA.js → chunk-P6Q2O3TU.js} +2 -2
- package/dist/{chunk-RTEY5COP.js → chunk-PAICZOL5.js} +4 -4
- package/dist/{chunk-ZN6YATOG.js → chunk-PAT2BQOQ.js} +2 -2
- package/dist/chunk-PEOOCQ2T.js +140 -0
- package/dist/chunk-PEOOCQ2T.js.map +1 -0
- package/dist/chunk-PGGGKYWG.js +1 -0
- package/dist/chunk-PGGGKYWG.js.map +1 -0
- package/dist/{chunk-TZBOWSAM.js → chunk-PICOOZLX.js} +6 -6
- package/dist/{chunk-JJJM75XF.js → chunk-PNDYAIKM.js} +2 -2
- package/dist/{chunk-EJYJLVPK.js → chunk-PRLYYKMG.js} +3 -3
- package/dist/{chunk-4GB46HLK.js → chunk-PTONBPZL.js} +2 -2
- package/dist/chunk-Q4JWWTL4.js +36 -0
- package/dist/chunk-Q4JWWTL4.js.map +1 -0
- package/dist/{chunk-FNG33MKA.js → chunk-QDELBNL3.js} +2 -2
- package/dist/{chunk-DSF4VT7L.js → chunk-QEI5DC6S.js} +6 -6
- package/dist/chunk-QGUNUXTT.js +1 -0
- package/dist/chunk-QGUNUXTT.js.map +1 -0
- package/dist/{chunk-VJ2BNJ5M.js → chunk-QMELMQPA.js} +4 -4
- package/dist/{chunk-HDJQDMHB.js → chunk-QMHS6ZDI.js} +2 -2
- package/dist/{chunk-2WVHZIWP.js → chunk-QSRZOXQI.js} +2 -2
- package/dist/{chunk-C3LZ3OGJ.js → chunk-R2FUQV24.js} +2 -2
- package/dist/{chunk-GOWBYHYW.js → chunk-R6SBP5M5.js} +4 -4
- package/dist/{chunk-HWSS6C7C.js → chunk-RDFPM2AQ.js} +8 -8
- package/dist/chunk-RDZGXJOD.js +74 -0
- package/dist/chunk-RDZGXJOD.js.map +1 -0
- package/dist/chunk-RN7UJI7S.js +1 -0
- package/dist/chunk-RN7UJI7S.js.map +1 -0
- package/dist/chunk-RPBGUWNF.js +168 -0
- package/dist/chunk-RPBGUWNF.js.map +1 -0
- package/dist/{chunk-4RPFI474.js → chunk-RSDYS5B3.js} +6 -6
- package/dist/{chunk-X53F33KA.js → chunk-RWXYND4H.js} +2 -2
- package/dist/{chunk-4NPPO63U.js → chunk-RZ2VZ7SL.js} +5 -5
- package/dist/{chunk-ORRI6FMN.js → chunk-S4IXC2V3.js} +3 -3
- package/dist/chunk-SALQ65SM.js +118 -0
- package/dist/chunk-SALQ65SM.js.map +1 -0
- package/dist/{chunk-MXCIUKTQ.js → chunk-SDBBJ6FG.js} +4 -4
- package/dist/{chunk-JRJCBDGN.js → chunk-SDKOOVEX.js} +6 -4
- package/dist/{chunk-JRJCBDGN.js.map → chunk-SDKOOVEX.js.map} +1 -1
- package/dist/{chunk-UMNXSQ7I.js → chunk-SNBAMWI5.js} +2 -2
- package/dist/{chunk-LP3JCXER.js → chunk-SNW5MJ6I.js} +2 -2
- package/dist/{chunk-5OBGW3FG.js → chunk-STTULW2K.js} +2 -2
- package/dist/{chunk-3CTQZDSD.js → chunk-TCNTIGMY.js} +4 -4
- package/dist/{chunk-Y6C4MYZE.js → chunk-TNQDSTIA.js} +7 -7
- package/dist/{chunk-6RLCBNDV.js → chunk-TPVSHO75.js} +7 -7
- package/dist/{chunk-BUPDBEBA.js → chunk-TTJTMDLI.js} +2 -2
- package/dist/{chunk-TU5EIKJA.js → chunk-U5SH3VRJ.js} +4 -4
- package/dist/chunk-U67ZQ6VM.js +82 -0
- package/dist/chunk-U67ZQ6VM.js.map +1 -0
- package/dist/{chunk-MLQYIJTO.js → chunk-U6W2RY3Z.js} +5 -5
- package/dist/{chunk-4WF6ZLIW.js → chunk-UGPRBJWB.js} +8 -8
- package/dist/chunk-VBP46YP4.js +42 -0
- package/dist/chunk-VBP46YP4.js.map +1 -0
- package/dist/{chunk-Y6G4I42P.js → chunk-VEEG4UXZ.js} +2 -2
- package/dist/{chunk-IRD45DRW.js → chunk-VOJBLBXE.js} +3 -3
- package/dist/{chunk-KHPL2J3B.js → chunk-VPAOVEI2.js} +3 -3
- package/dist/{chunk-DYGWKZ7T.js → chunk-VWJEM2ER.js} +3 -3
- package/dist/{chunk-FERUQ7OB.js → chunk-VYA4QWQL.js} +2 -2
- package/dist/chunk-VYM2GPR6.js +47 -0
- package/dist/chunk-VYM2GPR6.js.map +1 -0
- package/dist/{chunk-UKX3MPB7.js → chunk-VYV3JOV5.js} +2 -2
- package/dist/{chunk-B7CNP5HW.js → chunk-WV62BSWA.js} +2 -2
- package/dist/chunk-X3C3VTYS.js +85 -0
- package/dist/chunk-X3C3VTYS.js.map +1 -0
- package/dist/{chunk-IWEUSZY3.js → chunk-X66E5WSX.js} +3 -3
- package/dist/{chunk-OJ2XR3WH.js → chunk-XB7HYOMM.js} +2 -2
- package/dist/{chunk-H6AWKLOV.js → chunk-XBLFK2FL.js} +2 -2
- package/dist/{chunk-5HDYTTE7.js → chunk-XHA2NXLD.js} +2 -2
- package/dist/chunk-XJQNSMGA.js +10 -0
- package/dist/chunk-XJQNSMGA.js.map +1 -0
- package/dist/{chunk-F4KYBBTY.js → chunk-XLXMJ6X2.js} +3 -3
- package/dist/{chunk-SCZABICW.js → chunk-XO4ZUHVH.js} +2 -2
- package/dist/{chunk-PARTZ7XI.js → chunk-XP522FFM.js} +2 -2
- package/dist/{chunk-MBHWVRV5.js → chunk-XVZG52CM.js} +8 -8
- package/dist/{chunk-TGXCG62P.js → chunk-XXL4PM4M.js} +2 -2
- package/dist/{chunk-YKEO6UHN.js → chunk-XZJM6EPC.js} +4 -4
- package/dist/{chunk-YTY7TD7S.js → chunk-XZY7O7JJ.js} +5 -5
- package/dist/{chunk-WZNTZX5N.js → chunk-Y2UXX5IQ.js} +4 -4
- package/dist/{chunk-BLW6KLDR.js → chunk-YFODI4KT.js} +11 -4
- package/dist/chunk-YFODI4KT.js.map +1 -0
- package/dist/{chunk-QOLIBVGS.js → chunk-YGYQC7MT.js} +4 -4
- package/dist/{chunk-THMT3G3L.js → chunk-YLXQWYOG.js} +7 -7
- package/dist/{chunk-M4KVKQRN.js → chunk-YPIVLPXF.js} +3 -3
- package/dist/{chunk-57FZM6GH.js → chunk-YRUX7XMQ.js} +2 -2
- package/dist/{chunk-M2Q5CLPU.js → chunk-YTXZUTLF.js} +4 -4
- package/dist/{chunk-ZWCYSAI5.js → chunk-YWJDUJAR.js} +4 -4
- package/dist/{chunk-S36NC22G.js → chunk-Z2NN53E5.js} +2 -2
- package/dist/{chunk-GC56IWIZ.js → chunk-Z4DKVLYG.js} +9 -9
- package/dist/{chunk-U4QUDFPJ.js → chunk-Z4O3F6KU.js} +4 -4
- package/dist/{chunk-JC22FNFA.js → chunk-Z6T5SXST.js} +5 -5
- package/dist/{chunk-TXEN3QJ4.js → chunk-ZC5HDBQO.js} +2 -2
- package/dist/{chunk-LEHMWJNZ.js → chunk-ZEYUSS3W.js} +5 -5
- package/dist/{chunk-JH5BKA3Y.js → chunk-ZH2SZ6B3.js} +26 -8
- package/dist/chunk-ZH2SZ6B3.js.map +1 -0
- package/dist/{chunk-4WNFOBTH.js → chunk-ZKWVCSAB.js} +2 -2
- package/dist/{chunk-GEB4WSZH.js → chunk-ZNBLGS66.js} +3 -3
- package/dist/{chunk-TCAQOUIB.js → chunk-ZSTSISM6.js} +1 -1
- package/dist/chunk-ZSTSISM6.js.map +1 -0
- package/dist/data-display/Alert.js +3 -2
- package/dist/data-display/AsyncStateContainer.js +3 -3
- package/dist/data-display/Avatar.js +3 -3
- package/dist/data-display/Badge.js +10 -8
- package/dist/data-display/Banner.js +3 -2
- package/dist/data-display/CardKit.js +17 -16
- package/dist/data-display/Carousel.js +13 -11
- package/dist/data-display/Chart.js +24 -22
- package/dist/data-display/Chip.js +1 -0
- package/dist/data-display/DataGrid.js +3 -3
- package/dist/data-display/DataViews.js +107 -106
- package/dist/data-display/DescriptionItem.js +6 -5
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/FleetMap.js +23 -21
- package/dist/data-display/InteractiveTooltip.js +2 -2
- package/dist/data-display/Lightbox.js +6 -6
- package/dist/data-display/MapPreview.js +13 -13
- package/dist/data-display/Progress.js +6 -5
- package/dist/data-display/SectionOnboarding.js +3 -3
- package/dist/data-display/Sheet.js +9 -7
- package/dist/data-display/Table.js +5 -5
- package/dist/en-US.js +15 -11
- package/dist/feedback/ConfirmAction.js +14 -13
- package/dist/feedback/Dialog.js +2 -2
- package/dist/feedback/Modal.js +2 -2
- package/dist/feedback/NotificationStatusNotice.js +9 -8
- package/dist/form/AddressAutocomplete.js +10 -10
- package/dist/form/Autocomplete.js +5 -5
- package/dist/form/Button.js +8 -7
- package/dist/form/Calendar.js +4 -4
- package/dist/form/CategorySelect.js +12 -12
- package/dist/form/CepField.js +7 -7
- package/dist/form/CodeEditor.js +4 -4
- package/dist/form/Command.js +9 -7
- package/dist/form/CreatableSelect.js +4 -4
- package/dist/form/DateRangePicker.js +13 -13
- package/dist/form/Input.js +6 -6
- package/dist/form/InputOTP.js +5 -5
- package/dist/form/Label.js +9 -7
- package/dist/form/Menubar.js +11 -9
- package/dist/form/NumberField.js +29 -0
- package/dist/form/NumberField.js.map +1 -0
- package/dist/form/PhoneInput.js +4 -4
- package/dist/form/RadioGroup.js +6 -6
- package/dist/form/RichTextEditor.js +2 -2
- package/dist/form/Select.js +5 -5
- package/dist/form/Switch.js +3 -2
- package/dist/form/Textarea.js +4 -4
- package/dist/form/Toggle.js +5 -5
- package/dist/form/ToggleGroup.js +4 -4
- package/dist/form/UploadButton.js +2 -2
- package/dist/form/total-form.js +31 -30
- package/dist/icons.js +11 -8
- package/dist/layout/Box.js +10 -8
- package/dist/layout/Collapsible.js +1 -0
- package/dist/layout/ContentToolbar.js +12 -12
- package/dist/layout/ScrollArea.js +2 -2
- package/dist/layout/Separator.js +3 -3
- package/dist/layout/SettingCard.js +80 -0
- package/dist/layout/SettingCard.js.map +1 -0
- package/dist/layout/SettingsLayout.js +7 -7
- package/dist/layout/Stack.js +11 -9
- package/dist/layout/TableFilter.js +4 -4
- package/dist/locales.js +37 -23
- package/dist/locales.js.map +1 -1
- package/dist/native/chunks/{chunk-ONXKFA5Z.js → chunk-A2QNZ4VK.js} +4 -4
- package/dist/native/chunks/{chunk-X6RQGKGF.js → chunk-BST5DUUD.js} +2 -2
- package/dist/native/chunks/{chunk-GUBTMR2K.js → chunk-EDYZEMVD.js} +2 -2
- package/dist/native/chunks/{chunk-SZF56GVJ.js → chunk-LECBJD35.js} +3 -3
- package/dist/native/chunks/{chunk-JBYDLWQA.js → chunk-MTRRGDBQ.js} +5 -5
- package/dist/native/chunks/{chunk-IMGBBIMT.js → chunk-PN7C2BEY.js} +2 -2
- package/dist/native/chunks/{chunk-R5XVZRDD.js → chunk-RADD26LG.js} +46 -5
- package/dist/native/chunks/chunk-RADD26LG.js.map +1 -0
- package/dist/native/chunks/{chunk-4ZAULIDG.js → chunk-S4F364X4.js} +3 -3
- package/dist/native/chunks/{chunk-5IASLIBI.js → chunk-VJFKRXY2.js} +2 -2
- package/dist/native/data-display/Alert.js +3 -3
- package/dist/native/data-display/Avatar.js +3 -3
- package/dist/native/data-display/Badge.js +3 -3
- package/dist/native/data-display/Chip.js +3 -3
- package/dist/native/data-display/EmptyState.js +6 -6
- package/dist/native/data-display/ErrorState.js +5 -5
- package/dist/native/data-display/FleetMap.js +7 -7
- package/dist/native/data-display/LoadingState.js +2 -2
- package/dist/native/data-display/Progress.js +2 -2
- package/dist/native/feedback/Dialog.js +3 -3
- package/dist/native/form/Button.js +4 -4
- package/dist/native/form/Checkbox.js +3 -3
- package/dist/native/form/Input.js +4 -4
- package/dist/native/form/Select.js +5 -5
- package/dist/native/form/Switch.js +2 -2
- package/dist/native/icons.js +3 -3
- package/dist/native/layout/Box.js +3 -3
- package/dist/native/layout/Card.js +2 -2
- package/dist/native/layout/Container.js +2 -2
- package/dist/native/layout/Skeleton.js +3 -3
- package/dist/native/layout/Spacer.js +2 -2
- package/dist/native/layout/Stack.js +3 -3
- package/dist/native/provider.js +2 -2
- package/dist/native/tokens.js +15 -3
- package/dist/native/typography/Heading.js +2 -2
- package/dist/native/typography/Paragraph.js +2 -2
- package/dist/native/typography/Text.js +2 -2
- package/dist/navigation/AppHeader.js +18 -16
- package/dist/navigation/CommandPalette.js +3 -3
- package/dist/navigation/Pagination.js +5 -5
- package/dist/navigation/Tabs.js +5 -5
- package/dist/provider.js +10 -8
- package/dist/pt-BR.js +12 -8
- package/dist/social-login-button.js +16 -15
- package/dist/tokens.js +30 -8
- package/dist/types/components/form/Input/Input.d.ts.map +1 -1
- package/dist/types/components/form/Input/Input.types.d.ts +10 -0
- package/dist/types/components/form/Input/Input.types.d.ts.map +1 -1
- package/dist/types/components/form/NumberField/NumberField.d.ts +21 -0
- package/dist/types/components/form/NumberField/NumberField.d.ts.map +1 -0
- package/dist/types/components/form/NumberField/NumberField.helpers.d.ts +48 -0
- package/dist/types/components/form/NumberField/NumberField.helpers.d.ts.map +1 -0
- package/dist/types/components/form/NumberField/NumberField.types.d.ts +31 -0
- package/dist/types/components/form/NumberField/NumberField.types.d.ts.map +1 -0
- package/dist/types/components/form/NumberField/index.d.ts +3 -0
- package/dist/types/components/form/NumberField/index.d.ts.map +1 -0
- package/dist/types/components/form/index.d.ts +1 -0
- package/dist/types/components/form/index.d.ts.map +1 -1
- package/dist/types/components/layout/SettingCard/SettingCard.d.ts +14 -0
- package/dist/types/components/layout/SettingCard/SettingCard.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts +79 -0
- package/dist/types/components/layout/SettingCard/SettingCard.hooks.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts +21 -0
- package/dist/types/components/layout/SettingCard/SettingCard.metrics.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts +49 -0
- package/dist/types/components/layout/SettingCard/SettingCard.parts.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts +48 -0
- package/dist/types/components/layout/SettingCard/SettingCard.styles.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts +127 -0
- package/dist/types/components/layout/SettingCard/SettingCard.types.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingGrid.d.ts +33 -0
- package/dist/types/components/layout/SettingCard/SettingGrid.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts +13 -0
- package/dist/types/components/layout/SettingCard/SettingGroup.context.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingGroup.d.ts +18 -0
- package/dist/types/components/layout/SettingCard/SettingGroup.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts +28 -0
- package/dist/types/components/layout/SettingCard/SettingSwitch.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/SettingToggle.d.ts +13 -0
- package/dist/types/components/layout/SettingCard/SettingToggle.d.ts.map +1 -0
- package/dist/types/components/layout/SettingCard/index.d.ts +6 -0
- package/dist/types/components/layout/SettingCard/index.d.ts.map +1 -0
- package/dist/types/components/layout/index.d.ts +1 -0
- package/dist/types/components/layout/index.d.ts.map +1 -1
- package/dist/types/copy/layout.d.ts +27 -0
- package/dist/types/copy/layout.d.ts.map +1 -1
- package/dist/types/en-US.layout.d.ts +3 -1
- package/dist/types/en-US.layout.d.ts.map +1 -1
- package/dist/types/locales.d.ts +3 -1
- package/dist/types/locales.d.ts.map +1 -1
- package/dist/types/provider/mui-bridge.d.ts.map +1 -1
- package/dist/types/pt-BR.layout.d.ts +3 -1
- package/dist/types/pt-BR.layout.d.ts.map +1 -1
- package/dist/types/tokens/density.core.d.ts +73 -0
- package/dist/types/tokens/density.core.d.ts.map +1 -0
- package/dist/types/tokens/density.d.ts +95 -0
- package/dist/types/tokens/density.d.ts.map +1 -0
- package/dist/types/tokens/field-height.core.d.ts +7 -2
- package/dist/types/tokens/field-height.core.d.ts.map +1 -1
- package/dist/types/tokens/field-height.d.ts +9 -0
- package/dist/types/tokens/field-height.d.ts.map +1 -1
- package/dist/types/tokens/scales.d.ts +2 -1
- package/dist/types/tokens/scales.d.ts.map +1 -1
- package/dist/types/tokens/theme.d.ts +30 -0
- package/dist/types/tokens/theme.d.ts.map +1 -1
- package/dist/types-native/tokens/density.core.d.ts +73 -0
- package/dist/types-native/tokens/density.core.d.ts.map +1 -0
- package/dist/types-native/tokens/field-height.core.d.ts +7 -2
- package/dist/types-native/tokens/field-height.core.d.ts.map +1 -1
- package/dist/types-native/tokens/index.native.d.ts +1 -0
- package/dist/types-native/tokens/index.native.d.ts.map +1 -1
- package/dist/types-native/tokens/theme.d.ts +30 -0
- package/dist/types-native/tokens/theme.d.ts.map +1 -1
- package/dist/typography/Heading.js +6 -5
- package/dist/typography/Text.js +5 -4
- package/dist/user-avatar.js +14 -13
- package/dist/utility/InstallPrompt.js +2 -2
- package/dist/utility/WorkflowStep.js +7 -5
- package/package.json +9 -1
- package/src/components/form/Input/Input.tsx +2 -0
- package/src/components/form/Input/Input.types.ts +10 -0
- package/src/components/form/NumberField/NumberField.helpers.ts +77 -0
- package/src/components/form/NumberField/NumberField.md +86 -0
- package/src/components/form/NumberField/NumberField.tsx +88 -0
- package/src/components/form/NumberField/NumberField.types.ts +43 -0
- package/src/components/form/NumberField/index.ts +2 -0
- package/src/components/form/NumberField/tests.md +51 -0
- package/src/components/form/NumberField/track.md +42 -0
- package/src/components/form/index.ts +1 -0
- package/src/components/layout/SettingCard/SettingCard.hooks.ts +191 -0
- package/src/components/layout/SettingCard/SettingCard.md +121 -0
- package/src/components/layout/SettingCard/SettingCard.metrics.ts +22 -0
- package/src/components/layout/SettingCard/SettingCard.parts.tsx +162 -0
- package/src/components/layout/SettingCard/SettingCard.styles.ts +142 -0
- package/src/components/layout/SettingCard/SettingCard.tsx +197 -0
- package/src/components/layout/SettingCard/SettingCard.types.ts +140 -0
- package/src/components/layout/SettingCard/SettingGrid.md +65 -0
- package/src/components/layout/SettingCard/SettingGrid.tsx +105 -0
- package/src/components/layout/SettingCard/SettingGroup.context.ts +11 -0
- package/src/components/layout/SettingCard/SettingGroup.md +81 -0
- package/src/components/layout/SettingCard/SettingGroup.tsx +73 -0
- package/src/components/layout/SettingCard/SettingSwitch.tsx +92 -0
- package/src/components/layout/SettingCard/SettingToggle.md +61 -0
- package/src/components/layout/SettingCard/SettingToggle.tsx +43 -0
- package/src/components/layout/SettingCard/index.ts +18 -0
- package/src/components/layout/SettingCard/tests.md +68 -0
- package/src/components/layout/SettingCard/track.md +54 -0
- package/src/components/layout/index.ts +1 -0
- package/src/copy/layout.ts +29 -0
- package/src/en-US.layout.ts +16 -0
- package/src/locales.ts +10 -0
- package/src/provider/mui-bridge.ts +17 -3
- package/src/pt-BR.layout.ts +16 -0
- package/src/tokens/density.core.ts +118 -0
- package/src/tokens/density.ts +134 -0
- package/src/tokens/field-height.core.ts +8 -3
- package/src/tokens/field-height.ts +19 -8
- package/src/tokens/index.native.ts +11 -0
- package/src/tokens/scales.ts +15 -0
- package/src/tokens/theme.ts +43 -2
- package/dist/chunk-A7RIZOAL.js +0 -13
- package/dist/chunk-A7RIZOAL.js.map +0 -1
- package/dist/chunk-BLW6KLDR.js.map +0 -1
- package/dist/chunk-BY3JEK5T.js +0 -1
- package/dist/chunk-FZJ2FTGE.js +0 -1
- package/dist/chunk-GRHECKHU.js +0 -13
- package/dist/chunk-GRHECKHU.js.map +0 -1
- package/dist/chunk-JH5BKA3Y.js.map +0 -1
- package/dist/chunk-PZBK3F52.js.map +0 -1
- package/dist/chunk-TCAQOUIB.js.map +0 -1
- package/dist/native/chunks/chunk-R5XVZRDD.js.map +0 -1
- /package/dist/{chunk-BY3JEK5T.js.map → _internal/components/form/NumberField/NumberField.helpers.js.map} +0 -0
- /package/dist/{chunk-FZJ2FTGE.js.map → _internal/components/form/NumberField/NumberField.js.map} +0 -0
- /package/dist/{chunk-DFCQQN6P.js.map → chunk-2LKWJV65.js.map} +0 -0
- /package/dist/{chunk-HVXIOIM5.js.map → chunk-2MLS6KU4.js.map} +0 -0
- /package/dist/{chunk-IIUB4IOH.js.map → chunk-2XHIF3M3.js.map} +0 -0
- /package/dist/{chunk-IASDP44E.js.map → chunk-3AOOI2NR.js.map} +0 -0
- /package/dist/{chunk-TCV3N44E.js.map → chunk-3CLBGHTL.js.map} +0 -0
- /package/dist/{chunk-KKN4LLVE.js.map → chunk-3CUWQXTG.js.map} +0 -0
- /package/dist/{chunk-QXSW3CNN.js.map → chunk-3CYTVX4T.js.map} +0 -0
- /package/dist/{chunk-I5ZVCY2N.js.map → chunk-3EPA2A4M.js.map} +0 -0
- /package/dist/{chunk-DRSY37PB.js.map → chunk-3MJHHPRW.js.map} +0 -0
- /package/dist/{chunk-NLYNRE7L.js.map → chunk-3RUCLKAK.js.map} +0 -0
- /package/dist/{chunk-36JKV7CA.js.map → chunk-3UEZ6NUI.js.map} +0 -0
- /package/dist/{chunk-EYZ6QBTV.js.map → chunk-3XS37SQT.js.map} +0 -0
- /package/dist/{chunk-BSUG4KMP.js.map → chunk-44USLRMT.js.map} +0 -0
- /package/dist/{chunk-DJYL2LC6.js.map → chunk-44Z72DDM.js.map} +0 -0
- /package/dist/{chunk-4WCDMCIS.js.map → chunk-4CHYMTBT.js.map} +0 -0
- /package/dist/{chunk-2LIRGFEK.js.map → chunk-4GN2RLYL.js.map} +0 -0
- /package/dist/{chunk-HN3PZTUK.js.map → chunk-4MKVGSHX.js.map} +0 -0
- /package/dist/{chunk-BRM3T4LQ.js.map → chunk-4S2LWZ7L.js.map} +0 -0
- /package/dist/{chunk-OQRG34VG.js.map → chunk-4SHMSLFA.js.map} +0 -0
- /package/dist/{chunk-62UAI62O.js.map → chunk-4UVFPORR.js.map} +0 -0
- /package/dist/{chunk-YTINPQKU.js.map → chunk-4XHVGUOM.js.map} +0 -0
- /package/dist/{chunk-7DK6YVJU.js.map → chunk-4Z7GEO2R.js.map} +0 -0
- /package/dist/{chunk-A2TANYNR.js.map → chunk-53O2TNSR.js.map} +0 -0
- /package/dist/{chunk-T6EKPFKZ.js.map → chunk-54HTXJJ2.js.map} +0 -0
- /package/dist/{chunk-OHZU4IT3.js.map → chunk-5B7BTLN4.js.map} +0 -0
- /package/dist/{chunk-K5V6TCYB.js.map → chunk-5ETBB2DG.js.map} +0 -0
- /package/dist/{chunk-5752357K.js.map → chunk-5KGABAQB.js.map} +0 -0
- /package/dist/{chunk-JKIKHWD2.js.map → chunk-5NT2M2JI.js.map} +0 -0
- /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
- /package/dist/{chunk-7EH4D6FU.js.map → chunk-6H4TPEMO.js.map} +0 -0
- /package/dist/{chunk-WB6ZU3B3.js.map → chunk-6JGATEOF.js.map} +0 -0
- /package/dist/{chunk-TU5A2CV7.js.map → chunk-6L2FKTBO.js.map} +0 -0
- /package/dist/{chunk-ME3WYPYK.js.map → chunk-6MD5QXXJ.js.map} +0 -0
- /package/dist/{chunk-HQZRI7UX.js.map → chunk-6N2EDWMG.js.map} +0 -0
- /package/dist/{chunk-H224XFFD.js.map → chunk-6REPQ352.js.map} +0 -0
- /package/dist/{chunk-YZ2DMP23.js.map → chunk-6TPYT3UC.js.map} +0 -0
- /package/dist/{chunk-I4MRBEWU.js.map → chunk-6ZD3FI5P.js.map} +0 -0
- /package/dist/{chunk-PWZHCBG3.js.map → chunk-72FPUWD6.js.map} +0 -0
- /package/dist/{chunk-VRPREI27.js.map → chunk-72S2RGWD.js.map} +0 -0
- /package/dist/{chunk-OAW6GCS3.js.map → chunk-77BKKPCI.js.map} +0 -0
- /package/dist/{chunk-67O4GPJJ.js.map → chunk-7FEXRMJE.js.map} +0 -0
- /package/dist/{chunk-KN5J3NEZ.js.map → chunk-7KKMZJFT.js.map} +0 -0
- /package/dist/{chunk-KJDBY2KN.js.map → chunk-7LILFS72.js.map} +0 -0
- /package/dist/{chunk-SLDSWQVE.js.map → chunk-7TE4TMS3.js.map} +0 -0
- /package/dist/{chunk-AG3DY5TH.js.map → chunk-ADSA76T7.js.map} +0 -0
- /package/dist/{chunk-BKASAYQL.js.map → chunk-ALOUJ3CE.js.map} +0 -0
- /package/dist/{chunk-VY2BMSHN.js.map → chunk-ANYOSBNA.js.map} +0 -0
- /package/dist/{chunk-LNHYBA4B.js.map → chunk-AWG2AJHX.js.map} +0 -0
- /package/dist/{chunk-7X7ZHJHM.js.map → chunk-B3QWQG62.js.map} +0 -0
- /package/dist/{chunk-2S752BIJ.js.map → chunk-BA6Z52QN.js.map} +0 -0
- /package/dist/{chunk-X4F32GUB.js.map → chunk-BM4KKGL7.js.map} +0 -0
- /package/dist/{chunk-4T6UIYJB.js.map → chunk-BVSSEOLI.js.map} +0 -0
- /package/dist/{chunk-3UABIEP3.js.map → chunk-C2TERIB4.js.map} +0 -0
- /package/dist/{chunk-TEEJ4GNY.js.map → chunk-C6OVO6AT.js.map} +0 -0
- /package/dist/{chunk-CYZZHWNK.js.map → chunk-CJ45OL7L.js.map} +0 -0
- /package/dist/{chunk-N7LPVR7P.js.map → chunk-CKHFYTIX.js.map} +0 -0
- /package/dist/{chunk-PA3AA55Q.js.map → chunk-CLK67TNH.js.map} +0 -0
- /package/dist/{chunk-MQ277OLB.js.map → chunk-CM2Q7IH3.js.map} +0 -0
- /package/dist/{chunk-ZXSWXE6U.js.map → chunk-CMFJQH6A.js.map} +0 -0
- /package/dist/{chunk-NOKN4HRK.js.map → chunk-CMLIWUBW.js.map} +0 -0
- /package/dist/{chunk-EA2UNEL6.js.map → chunk-CNR5RFKC.js.map} +0 -0
- /package/dist/{chunk-P52LYD6S.js.map → chunk-DFI2RKVQ.js.map} +0 -0
- /package/dist/{chunk-37USSARD.js.map → chunk-DH5UJD2I.js.map} +0 -0
- /package/dist/{chunk-PCLKFR27.js.map → chunk-DH6SL3SY.js.map} +0 -0
- /package/dist/{chunk-S6JHTEV4.js.map → chunk-DLWLIPCP.js.map} +0 -0
- /package/dist/{chunk-KN4ZE2XZ.js.map → chunk-EIII4QU4.js.map} +0 -0
- /package/dist/{chunk-L566FMDD.js.map → chunk-EO5IEWFI.js.map} +0 -0
- /package/dist/{chunk-VY6L74JQ.js.map → chunk-EQXIW5MQ.js.map} +0 -0
- /package/dist/{chunk-MWPXKZ7O.js.map → chunk-ERY6D2OV.js.map} +0 -0
- /package/dist/{chunk-6PU3JYVY.js.map → chunk-F3AYISXT.js.map} +0 -0
- /package/dist/{chunk-GY4NBSCN.js.map → chunk-FDMQ7H22.js.map} +0 -0
- /package/dist/{chunk-IBGP3VSR.js.map → chunk-FHW3ATT7.js.map} +0 -0
- /package/dist/{chunk-WL6N33AB.js.map → chunk-FIO55AKI.js.map} +0 -0
- /package/dist/{chunk-5CQNBMLK.js.map → chunk-FTQBVZ7V.js.map} +0 -0
- /package/dist/{chunk-J5UZB6Y6.js.map → chunk-FXWXBEOZ.js.map} +0 -0
- /package/dist/{chunk-IGGXKT5B.js.map → chunk-G2WERTWZ.js.map} +0 -0
- /package/dist/{chunk-DF4QODJ6.js.map → chunk-G4TKMUOL.js.map} +0 -0
- /package/dist/{chunk-WY5PBZ7Q.js.map → chunk-G6ZPQHBL.js.map} +0 -0
- /package/dist/{chunk-JYR6VV4Y.js.map → chunk-G7XHJPLO.js.map} +0 -0
- /package/dist/{chunk-IQJCLFF4.js.map → chunk-GANW7FXQ.js.map} +0 -0
- /package/dist/{chunk-3LSIFHQK.js.map → chunk-GE2CCITY.js.map} +0 -0
- /package/dist/{chunk-G3XLFQ2Z.js.map → chunk-GG62LKA3.js.map} +0 -0
- /package/dist/{chunk-YQCRQHVU.js.map → chunk-GI63FQEJ.js.map} +0 -0
- /package/dist/{chunk-7ICK5MXV.js.map → chunk-GJFAI3J5.js.map} +0 -0
- /package/dist/{chunk-2JNHWKQK.js.map → chunk-GPHURU2K.js.map} +0 -0
- /package/dist/{chunk-5FAI25JQ.js.map → chunk-H72YKEGD.js.map} +0 -0
- /package/dist/{chunk-J3XFUCCR.js.map → chunk-HKBJZX3C.js.map} +0 -0
- /package/dist/{chunk-M4QXG5JP.js.map → chunk-HQWJUHR4.js.map} +0 -0
- /package/dist/{chunk-4BNV5AAI.js.map → chunk-ITFFA3H2.js.map} +0 -0
- /package/dist/{chunk-RB3X6CEE.js.map → chunk-IWGW2E35.js.map} +0 -0
- /package/dist/{chunk-O25SH2MA.js.map → chunk-J6KLT7HP.js.map} +0 -0
- /package/dist/{chunk-CRG24BGI.js.map → chunk-JAGAFEZL.js.map} +0 -0
- /package/dist/{chunk-RDCHT2WN.js.map → chunk-JE5GEWTG.js.map} +0 -0
- /package/dist/{chunk-FLDLUAHW.js.map → chunk-JE6GQB5J.js.map} +0 -0
- /package/dist/{chunk-N23GCN5U.js.map → chunk-JFLFZLOA.js.map} +0 -0
- /package/dist/{chunk-35443PF6.js.map → chunk-JIRZ27RI.js.map} +0 -0
- /package/dist/{chunk-5MW7OYBM.js.map → chunk-JSGVYOMN.js.map} +0 -0
- /package/dist/{chunk-RNIU447I.js.map → chunk-JU3FRRO2.js.map} +0 -0
- /package/dist/{chunk-WOAXKWAB.js.map → chunk-K4A3JDYQ.js.map} +0 -0
- /package/dist/{chunk-HM2JJNUE.js.map → chunk-K6LNHHSH.js.map} +0 -0
- /package/dist/{chunk-NR5TW4AH.js.map → chunk-K7MQP2KT.js.map} +0 -0
- /package/dist/{chunk-2OWKL4CC.js.map → chunk-KCDNOMMT.js.map} +0 -0
- /package/dist/{chunk-O2DLEAUP.js.map → chunk-KHOAXZW2.js.map} +0 -0
- /package/dist/{chunk-W5TI46QN.js.map → chunk-KQZGUHYZ.js.map} +0 -0
- /package/dist/{chunk-2K7WPHI3.js.map → chunk-KW3H5FUS.js.map} +0 -0
- /package/dist/{chunk-7D2C4LK2.js.map → chunk-LCWGNDTH.js.map} +0 -0
- /package/dist/{chunk-FNRPQE2D.js.map → chunk-LF3EVXMF.js.map} +0 -0
- /package/dist/{chunk-MCJRHF7Z.js.map → chunk-LGCRL7DK.js.map} +0 -0
- /package/dist/{chunk-JK5UJM4Y.js.map → chunk-LODMNSLR.js.map} +0 -0
- /package/dist/{chunk-YUXDVW62.js.map → chunk-M65ZNPLO.js.map} +0 -0
- /package/dist/{chunk-URHX4FAQ.js.map → chunk-MKLIMY3D.js.map} +0 -0
- /package/dist/{chunk-2FM5SUQV.js.map → chunk-MM5XSAVE.js.map} +0 -0
- /package/dist/{chunk-LXT3X33C.js.map → chunk-NCB4GBRL.js.map} +0 -0
- /package/dist/{chunk-FNO5TWBJ.js.map → chunk-NCEQWEXT.js.map} +0 -0
- /package/dist/{chunk-FWPFCK4D.js.map → chunk-NDHDBOUH.js.map} +0 -0
- /package/dist/{chunk-WRCLYSTX.js.map → chunk-NFGIA2ZV.js.map} +0 -0
- /package/dist/{chunk-VPPIODKX.js.map → chunk-NQ7NMCRI.js.map} +0 -0
- /package/dist/{chunk-YMTZN54Q.js.map → chunk-NRSVI23L.js.map} +0 -0
- /package/dist/{chunk-2622YFM6.js.map → chunk-NSVSC6ZC.js.map} +0 -0
- /package/dist/{chunk-Z43N7ASP.js.map → chunk-NU55QUMO.js.map} +0 -0
- /package/dist/{chunk-66O55OZI.js.map → chunk-NYFGFELX.js.map} +0 -0
- /package/dist/{chunk-JXECOCNA.js.map → chunk-P6Q2O3TU.js.map} +0 -0
- /package/dist/{chunk-RTEY5COP.js.map → chunk-PAICZOL5.js.map} +0 -0
- /package/dist/{chunk-ZN6YATOG.js.map → chunk-PAT2BQOQ.js.map} +0 -0
- /package/dist/{chunk-TZBOWSAM.js.map → chunk-PICOOZLX.js.map} +0 -0
- /package/dist/{chunk-JJJM75XF.js.map → chunk-PNDYAIKM.js.map} +0 -0
- /package/dist/{chunk-EJYJLVPK.js.map → chunk-PRLYYKMG.js.map} +0 -0
- /package/dist/{chunk-4GB46HLK.js.map → chunk-PTONBPZL.js.map} +0 -0
- /package/dist/{chunk-FNG33MKA.js.map → chunk-QDELBNL3.js.map} +0 -0
- /package/dist/{chunk-DSF4VT7L.js.map → chunk-QEI5DC6S.js.map} +0 -0
- /package/dist/{chunk-VJ2BNJ5M.js.map → chunk-QMELMQPA.js.map} +0 -0
- /package/dist/{chunk-HDJQDMHB.js.map → chunk-QMHS6ZDI.js.map} +0 -0
- /package/dist/{chunk-2WVHZIWP.js.map → chunk-QSRZOXQI.js.map} +0 -0
- /package/dist/{chunk-C3LZ3OGJ.js.map → chunk-R2FUQV24.js.map} +0 -0
- /package/dist/{chunk-GOWBYHYW.js.map → chunk-R6SBP5M5.js.map} +0 -0
- /package/dist/{chunk-HWSS6C7C.js.map → chunk-RDFPM2AQ.js.map} +0 -0
- /package/dist/{chunk-4RPFI474.js.map → chunk-RSDYS5B3.js.map} +0 -0
- /package/dist/{chunk-X53F33KA.js.map → chunk-RWXYND4H.js.map} +0 -0
- /package/dist/{chunk-4NPPO63U.js.map → chunk-RZ2VZ7SL.js.map} +0 -0
- /package/dist/{chunk-ORRI6FMN.js.map → chunk-S4IXC2V3.js.map} +0 -0
- /package/dist/{chunk-MXCIUKTQ.js.map → chunk-SDBBJ6FG.js.map} +0 -0
- /package/dist/{chunk-UMNXSQ7I.js.map → chunk-SNBAMWI5.js.map} +0 -0
- /package/dist/{chunk-LP3JCXER.js.map → chunk-SNW5MJ6I.js.map} +0 -0
- /package/dist/{chunk-5OBGW3FG.js.map → chunk-STTULW2K.js.map} +0 -0
- /package/dist/{chunk-3CTQZDSD.js.map → chunk-TCNTIGMY.js.map} +0 -0
- /package/dist/{chunk-Y6C4MYZE.js.map → chunk-TNQDSTIA.js.map} +0 -0
- /package/dist/{chunk-6RLCBNDV.js.map → chunk-TPVSHO75.js.map} +0 -0
- /package/dist/{chunk-BUPDBEBA.js.map → chunk-TTJTMDLI.js.map} +0 -0
- /package/dist/{chunk-TU5EIKJA.js.map → chunk-U5SH3VRJ.js.map} +0 -0
- /package/dist/{chunk-MLQYIJTO.js.map → chunk-U6W2RY3Z.js.map} +0 -0
- /package/dist/{chunk-4WF6ZLIW.js.map → chunk-UGPRBJWB.js.map} +0 -0
- /package/dist/{chunk-Y6G4I42P.js.map → chunk-VEEG4UXZ.js.map} +0 -0
- /package/dist/{chunk-IRD45DRW.js.map → chunk-VOJBLBXE.js.map} +0 -0
- /package/dist/{chunk-KHPL2J3B.js.map → chunk-VPAOVEI2.js.map} +0 -0
- /package/dist/{chunk-DYGWKZ7T.js.map → chunk-VWJEM2ER.js.map} +0 -0
- /package/dist/{chunk-FERUQ7OB.js.map → chunk-VYA4QWQL.js.map} +0 -0
- /package/dist/{chunk-UKX3MPB7.js.map → chunk-VYV3JOV5.js.map} +0 -0
- /package/dist/{chunk-B7CNP5HW.js.map → chunk-WV62BSWA.js.map} +0 -0
- /package/dist/{chunk-IWEUSZY3.js.map → chunk-X66E5WSX.js.map} +0 -0
- /package/dist/{chunk-OJ2XR3WH.js.map → chunk-XB7HYOMM.js.map} +0 -0
- /package/dist/{chunk-H6AWKLOV.js.map → chunk-XBLFK2FL.js.map} +0 -0
- /package/dist/{chunk-5HDYTTE7.js.map → chunk-XHA2NXLD.js.map} +0 -0
- /package/dist/{chunk-F4KYBBTY.js.map → chunk-XLXMJ6X2.js.map} +0 -0
- /package/dist/{chunk-SCZABICW.js.map → chunk-XO4ZUHVH.js.map} +0 -0
- /package/dist/{chunk-PARTZ7XI.js.map → chunk-XP522FFM.js.map} +0 -0
- /package/dist/{chunk-MBHWVRV5.js.map → chunk-XVZG52CM.js.map} +0 -0
- /package/dist/{chunk-TGXCG62P.js.map → chunk-XXL4PM4M.js.map} +0 -0
- /package/dist/{chunk-YKEO6UHN.js.map → chunk-XZJM6EPC.js.map} +0 -0
- /package/dist/{chunk-YTY7TD7S.js.map → chunk-XZY7O7JJ.js.map} +0 -0
- /package/dist/{chunk-WZNTZX5N.js.map → chunk-Y2UXX5IQ.js.map} +0 -0
- /package/dist/{chunk-QOLIBVGS.js.map → chunk-YGYQC7MT.js.map} +0 -0
- /package/dist/{chunk-THMT3G3L.js.map → chunk-YLXQWYOG.js.map} +0 -0
- /package/dist/{chunk-M4KVKQRN.js.map → chunk-YPIVLPXF.js.map} +0 -0
- /package/dist/{chunk-57FZM6GH.js.map → chunk-YRUX7XMQ.js.map} +0 -0
- /package/dist/{chunk-M2Q5CLPU.js.map → chunk-YTXZUTLF.js.map} +0 -0
- /package/dist/{chunk-ZWCYSAI5.js.map → chunk-YWJDUJAR.js.map} +0 -0
- /package/dist/{chunk-S36NC22G.js.map → chunk-Z2NN53E5.js.map} +0 -0
- /package/dist/{chunk-GC56IWIZ.js.map → chunk-Z4DKVLYG.js.map} +0 -0
- /package/dist/{chunk-U4QUDFPJ.js.map → chunk-Z4O3F6KU.js.map} +0 -0
- /package/dist/{chunk-JC22FNFA.js.map → chunk-Z6T5SXST.js.map} +0 -0
- /package/dist/{chunk-TXEN3QJ4.js.map → chunk-ZC5HDBQO.js.map} +0 -0
- /package/dist/{chunk-LEHMWJNZ.js.map → chunk-ZEYUSS3W.js.map} +0 -0
- /package/dist/{chunk-4WNFOBTH.js.map → chunk-ZKWVCSAB.js.map} +0 -0
- /package/dist/{chunk-GEB4WSZH.js.map → chunk-ZNBLGS66.js.map} +0 -0
- /package/dist/native/chunks/{chunk-ONXKFA5Z.js.map → chunk-A2QNZ4VK.js.map} +0 -0
- /package/dist/native/chunks/{chunk-X6RQGKGF.js.map → chunk-BST5DUUD.js.map} +0 -0
- /package/dist/native/chunks/{chunk-GUBTMR2K.js.map → chunk-EDYZEMVD.js.map} +0 -0
- /package/dist/native/chunks/{chunk-SZF56GVJ.js.map → chunk-LECBJD35.js.map} +0 -0
- /package/dist/native/chunks/{chunk-JBYDLWQA.js.map → chunk-MTRRGDBQ.js.map} +0 -0
- /package/dist/native/chunks/{chunk-IMGBBIMT.js.map → chunk-PN7C2BEY.js.map} +0 -0
- /package/dist/native/chunks/{chunk-4ZAULIDG.js.map → chunk-S4F364X4.js.map} +0 -0
- /package/dist/native/chunks/{chunk-5IASLIBI.js.map → chunk-VJFKRXY2.js.map} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# SettingGrid
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Lays setting cards out in **one, two or three columns by the width it is
|
|
6
|
+
given**. Part of the `layout/SettingCard` family.
|
|
7
|
+
|
|
8
|
+
- **Container queries, not media queries.** A settings grid lives beside a
|
|
9
|
+
navigation rail, inside a drawer, in half a split view; the viewport says
|
|
10
|
+
nothing about how wide any of those are. The grid asks its own width.
|
|
11
|
+
- **Equal-height rows, without measuring.** Each row is as tall as its tallest
|
|
12
|
+
card and every card in it stretches to match (`grid-auto-rows: auto` with
|
|
13
|
+
`align-items: stretch`). Not `1fr` rows — those make *every* row as tall as the
|
|
14
|
+
tallest one on the page.
|
|
15
|
+
- **An open card spans the row.** A [`SettingCard`](./SettingCard.md) mid-edit
|
|
16
|
+
takes the whole row, wherever it sat, so its form has room.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { SettingCard, SettingGrid, SettingToggle } from '@12-apps/ui/layout/SettingCard';
|
|
22
|
+
|
|
23
|
+
<SettingGrid aria-label="Security">
|
|
24
|
+
<SettingCard … />
|
|
25
|
+
<SettingToggle … />
|
|
26
|
+
<SettingGroup … />
|
|
27
|
+
</SettingGrid>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Props
|
|
31
|
+
|
|
32
|
+
| prop | type | default | effect |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| `children` | `ReactNode` | **required** | The cards. |
|
|
35
|
+
| `minColumnWidth` | `number` | `320` | The narrowest a column may get, in design px (scaled through the type scale). A column is added each time the grid's own width fits one more. |
|
|
36
|
+
| `maxColumns` | `1 \| 2 \| 3` | `3` | The most columns laid out. |
|
|
37
|
+
| `gap` | `number` | `2` | Gap between cards, in theme spacing units. |
|
|
38
|
+
| `aria-label` | `string` | — | When set, the grid is a labelled `region`. |
|
|
39
|
+
| `dataTestId` | `string` | — | On the container; the inner grid is `<id>-grid`. |
|
|
40
|
+
| `className`, `sx` | | | On the container. |
|
|
41
|
+
|
|
42
|
+
## How the columns are decided
|
|
43
|
+
|
|
44
|
+
The outer element is an `inline-size` container named `setting-grid`
|
|
45
|
+
(`SETTING_GRID_CONTAINER`); the inner element is the grid, because a container
|
|
46
|
+
query is answered by an **ancestor**. `n` columns apply from
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
calc(n × minColumnWidth + (n − 1) × gap)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
so a column is never narrower than `minColumnWidth`. Nested grids each answer
|
|
53
|
+
to their own container.
|
|
54
|
+
|
|
55
|
+
## The open-card span
|
|
56
|
+
|
|
57
|
+
`SettingCard` sets `grid-column: 1 / -1` on itself while open and carries
|
|
58
|
+
`data-setting-card-open`. The grid also gives the whole row to a direct child
|
|
59
|
+
that **contains** an open card (`:has()`), so a host that wraps each card in an
|
|
60
|
+
element of its own keeps the behaviour.
|
|
61
|
+
|
|
62
|
+
## Accessibility
|
|
63
|
+
|
|
64
|
+
Layout only: reading and tab order are the children's source order at every
|
|
65
|
+
width — the grid never reorders them.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import Box from '@mui/material/Box/index.js';
|
|
2
|
+
import { useTheme, type CSSObject, type Theme } from '@mui/material/styles/index.js';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
|
|
5
|
+
import { rem } from '../../../tokens/relative';
|
|
6
|
+
|
|
7
|
+
import { SETTING_CARD, SETTING_GRID_GAP_UNITS } from './SettingCard.metrics';
|
|
8
|
+
import { partTestId } from './SettingCard.parts';
|
|
9
|
+
import { SETTING_CARD_OPEN_ATTR, withCallerSx } from './SettingCard.styles';
|
|
10
|
+
import type { SettingGridColumns, SettingGridProps } from './SettingCard.types';
|
|
11
|
+
|
|
12
|
+
/** The container the grid's own queries are asked of. Named, so a nested grid answers to its own. */
|
|
13
|
+
export const SETTING_GRID_CONTAINER = 'setting-grid';
|
|
14
|
+
|
|
15
|
+
/** The track list for `n` equal columns. `minmax(0, …)` so a long word cannot widen its column. */
|
|
16
|
+
const tracks = (n: SettingGridColumns): string => `repeat(${n}, minmax(0, 1fr))`;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The narrowest the container can be and still fit `n` columns of
|
|
20
|
+
* `minColumnWidth` with the gaps between them. A `calc()` because the gap is a
|
|
21
|
+
* spacing unit and the width a type-scale length: two scales, one sum.
|
|
22
|
+
*/
|
|
23
|
+
const threshold = (theme: Theme, n: number, minColumnPx: number, gapUnits: number): string =>
|
|
24
|
+
`calc(${n} * ${rem(theme, minColumnPx)} + ${n - 1} * ${theme.spacing(gapUnits)})`;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The grid itself.
|
|
28
|
+
*
|
|
29
|
+
* - Columns come from CONTAINER queries, not viewport ones: a settings grid
|
|
30
|
+
* lives beside a rail, inside a drawer, in half a split view, and the
|
|
31
|
+
* viewport says nothing about how wide any of those are.
|
|
32
|
+
* - `grid-auto-rows: auto` with `align-items: stretch` is the equal-height
|
|
33
|
+
* rule: each row is as tall as its tallest card and every card in it
|
|
34
|
+
* stretches to match. Not `1fr` rows — those would make EVERY row as tall as
|
|
35
|
+
* the tallest, so one open card would inflate the whole page.
|
|
36
|
+
* - An open card spans the row. The card sets `grid-column` on itself; the
|
|
37
|
+
* `:has()` rule covers a card the host wrapped in an element of its own.
|
|
38
|
+
*/
|
|
39
|
+
export interface SettingGridLayout {
|
|
40
|
+
/** The narrowest column, in DESIGN px (drawn through `rem`). */
|
|
41
|
+
minColumnPx: number;
|
|
42
|
+
maxColumns: SettingGridColumns;
|
|
43
|
+
/** The gap, in theme SPACING units. */
|
|
44
|
+
gapUnits: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function settingGridStyles(theme: Theme, { minColumnPx, maxColumns, gapUnits }: SettingGridLayout): CSSObject {
|
|
48
|
+
const styles: CSSObject = {
|
|
49
|
+
display: 'grid',
|
|
50
|
+
gap: theme.spacing(gapUnits),
|
|
51
|
+
gridTemplateColumns: tracks(1),
|
|
52
|
+
gridAutoRows: 'auto',
|
|
53
|
+
alignItems: 'stretch',
|
|
54
|
+
[`& > [${SETTING_CARD_OPEN_ATTR}], & > :has([${SETTING_CARD_OPEN_ATTR}])`]: { gridColumn: '1 / -1' },
|
|
55
|
+
};
|
|
56
|
+
for (const n of [2, 3] as const) {
|
|
57
|
+
if (n > maxColumns) break;
|
|
58
|
+
styles[`@container ${SETTING_GRID_CONTAINER} (min-width: ${threshold(theme, n, minColumnPx, gapUnits)})`] = {
|
|
59
|
+
gridTemplateColumns: tracks(n),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return styles;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Lays setting cards out in one, two or three columns by the width it is
|
|
67
|
+
* GIVEN — see {@link settingGridStyles}. Two elements, because a container
|
|
68
|
+
* query is answered by an ANCESTOR: the outer one is the container, the inner
|
|
69
|
+
* one the grid.
|
|
70
|
+
*/
|
|
71
|
+
export const SettingGrid = forwardRef<HTMLDivElement, SettingGridProps>(function SettingGrid(props, ref) {
|
|
72
|
+
const {
|
|
73
|
+
children,
|
|
74
|
+
minColumnWidth = SETTING_CARD.gridMinColumnWidth,
|
|
75
|
+
maxColumns = 3,
|
|
76
|
+
gap = SETTING_GRID_GAP_UNITS,
|
|
77
|
+
'aria-label': ariaLabel,
|
|
78
|
+
dataTestId,
|
|
79
|
+
className,
|
|
80
|
+
sx,
|
|
81
|
+
} = props;
|
|
82
|
+
const theme = useTheme();
|
|
83
|
+
const gridStyles = settingGridStyles(theme, { minColumnPx: minColumnWidth, maxColumns, gapUnits: gap });
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<Box
|
|
87
|
+
ref={ref}
|
|
88
|
+
role={ariaLabel ? 'region' : undefined}
|
|
89
|
+
aria-label={ariaLabel}
|
|
90
|
+
data-testid={dataTestId}
|
|
91
|
+
className={className}
|
|
92
|
+
sx={withCallerSx({ containerType: 'inline-size', containerName: SETTING_GRID_CONTAINER, minWidth: 0 }, sx)}
|
|
93
|
+
>
|
|
94
|
+
<Box
|
|
95
|
+
sx={gridStyles}
|
|
96
|
+
data-max-columns={maxColumns}
|
|
97
|
+
data-testid={partTestId(dataTestId, 'grid')}
|
|
98
|
+
>
|
|
99
|
+
{children}
|
|
100
|
+
</Box>
|
|
101
|
+
</Box>
|
|
102
|
+
);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
SettingGrid.displayName = 'SettingGrid';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* What a `SettingGroup` tells the rows inside it: whether its main switch is
|
|
5
|
+
* off. `inert` on the rows' container already makes every descendant
|
|
6
|
+
* unreachable; this is for the family's own rows (`SettingToggle`) to ALSO
|
|
7
|
+
* draw and announce themselves as disabled, which `inert` does not do.
|
|
8
|
+
*/
|
|
9
|
+
export const SettingGroupContext = createContext<{ inactive: boolean }>({ inactive: false });
|
|
10
|
+
|
|
11
|
+
export const useSettingGroup = (): { inactive: boolean } => useContext(SettingGroupContext);
|
|
@@ -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)
|