@12-apps/ui 6.83.0 → 6.85.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 +7 -0
- package/dist/_internal/components/data-display/Alert/Alert.js +2 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
- 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 +3 -3
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +3 -3
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +5 -5
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -3
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +9 -9
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +7 -7
- package/dist/_internal/components/data-display/Carousel/Carousel.js +11 -11
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +6 -6
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +3 -3
- package/dist/_internal/components/data-display/Chart/Chart.js +6 -6
- package/dist/_internal/components/data-display/Chart/SpecChart.js +10 -10
- package/dist/_internal/components/data-display/Chart/chart-context.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-internals.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +5 -5
- 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/DataViewsGrid.js +68 -67
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +82 -81
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +5 -5
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +6 -6
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -8
- package/dist/_internal/components/data-display/DataViews/base-card.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-card-body.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +19 -19
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +9 -5
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +32 -31
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +11 -11
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +64 -63
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +34 -33
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +28 -27
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +31 -30
- package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-quick-chip.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +8 -7
- package/dist/_internal/components/data-display/DataViews/data-views-range-reset.js +9 -0
- package/dist/_internal/components/data-display/DataViews/data-views-search.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +20 -20
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-writers.js +3 -1
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +8 -8
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +22 -22
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +17 -17
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +24 -24
- package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +4 -4
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +5 -5
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
- package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +8 -8
- package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +16 -16
- package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +3 -3
- 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 +2 -2
- package/dist/_internal/components/data-display/RegionMap/RegionMap.fixtures.js +51 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.fixtures.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.helpers.js +38 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.helpers.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.hooks.js +9 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.hooks.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.js +37 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.types.js +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMap.types.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +10 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapLegend.js +9 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapLegend.js.map +1 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapList.js +34 -0
- package/dist/_internal/components/data-display/RegionMap/RegionMapList.js.map +1 -0
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.js +6 -6
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +3 -3
- package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
- package/dist/_internal/components/data-display/Table/Table.js +2 -2
- package/dist/_internal/components/data-display/index.js +103 -86
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
- package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +7 -7
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +10 -10
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +9 -9
- package/dist/_internal/components/feedback/index.js +21 -21
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +8 -8
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +6 -6
- package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +3 -3
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +4 -4
- package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +3 -3
- package/dist/_internal/components/form/Button/Button.js +4 -4
- package/dist/_internal/components/form/Button/Button.styles.js +3 -3
- package/dist/_internal/components/form/Calendar/Calendar.js +5 -5
- package/dist/_internal/components/form/Calendar/CalendarSelectorsMonth.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -8
- package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +5 -5
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +11 -11
- package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -4
- package/dist/_internal/components/form/CepField/CepField.js +6 -6
- package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/Command/Command.js +3 -3
- package/dist/_internal/components/form/Command/Command.styles.js +3 -3
- package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +5 -5
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +12 -12
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +4 -4
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +5 -5
- package/dist/_internal/components/form/Input/Input.factory.js +4 -4
- package/dist/_internal/components/form/Input/Input.js +5 -5
- package/dist/_internal/components/form/Input/Input.styles.js +3 -3
- package/dist/_internal/components/form/InputOTP/InputOTP.hooks.js +1 -1
- package/dist/_internal/components/form/InputOTP/InputOTP.js +5 -5
- package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -3
- package/dist/_internal/components/form/Label/Label.js +3 -3
- package/dist/_internal/components/form/Label/Label.styles.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.item.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.js +7 -7
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +5 -5
- package/dist/_internal/components/form/NumberField/NumberField.js +6 -6
- package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +5 -5
- package/dist/_internal/components/form/PickerSheet/PickerSheet.js +6 -6
- package/dist/_internal/components/form/PickerSheet/PickerSheet.parts.js +4 -4
- package/dist/_internal/components/form/PickerSheet/PickerSheet.styles.js +3 -3
- package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -5
- package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -3
- package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -4
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/_internal/components/form/Select/Select.js +6 -6
- package/dist/_internal/components/form/Select/Select.menu.js +4 -4
- package/dist/_internal/components/form/Select/Select.searchable.js +4 -4
- package/dist/_internal/components/form/Select/Select.styles.js +3 -3
- package/dist/_internal/components/form/Textarea/Textarea.js +3 -3
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -4
- package/dist/_internal/components/form/Toggle/Toggle.js +4 -4
- package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -3
- package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -3
- package/dist/_internal/components/form/index.js +60 -60
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +12 -12
- package/dist/_internal/components/form/total-form/Fields/CepField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/TextField.js +6 -6
- package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -4
- package/dist/_internal/components/form/total-form/Fields/index.js +31 -31
- package/dist/_internal/components/form/total-form/SubmitButton.js +5 -5
- package/dist/_internal/components/index.js +235 -218
- package/dist/_internal/components/layout/Box/Box.js +6 -6
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +3 -3
- package/dist/_internal/components/layout/Screen/Screen.js +7 -7
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +9 -9
- package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +12 -12
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +12 -12
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
- package/dist/_internal/components/layout/Skeleton/Skeleton.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +7 -7
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +3 -3
- package/dist/_internal/components/layout/index.js +34 -34
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +9 -9
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +3 -3
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +2 -2
- package/dist/_internal/components/navigation/Pagination/Pagination.js +4 -4
- package/dist/_internal/components/navigation/Pagination/PaginationParts.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +4 -4
- package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +3 -3
- package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
- package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +2 -2
- package/dist/_internal/components/navigation/index.js +18 -18
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -3
- package/dist/_internal/components/utility/index.js +16 -16
- package/dist/_internal/en-US.data-display.js +2 -2
- package/dist/_internal/icons/Icon.js +6 -6
- package/dist/_internal/provider/UiProvider.js +5 -5
- package/dist/_internal/provider/mui-bridge.js +4 -4
- package/dist/_internal/provider/use-ui-theme.js +5 -5
- package/dist/_internal/pt-BR.data-display.js +2 -2
- package/dist/_internal/social-login-button/social-login-button.js +5 -5
- package/dist/_internal/tokens/density.js +3 -3
- package/dist/_internal/tokens/field-height.js +2 -2
- package/dist/_internal/user-avatar/user-avatar.js +8 -8
- package/dist/charts.js +20 -20
- package/dist/{chunk-3RHU2Y2N.js → chunk-2DDCRHJE.js} +2 -2
- package/dist/{chunk-EBEMNKTK.js → chunk-2GDPZ53K.js} +8 -5
- package/dist/chunk-2GDPZ53K.js.map +1 -0
- package/dist/{chunk-X3EB67O2.js → chunk-2VRJ577J.js} +4 -4
- package/dist/{chunk-QSRZOXQI.js → chunk-2WVHZIWP.js} +2 -2
- package/dist/{chunk-6OYB3MRF.js → chunk-33AVAYCR.js} +3 -3
- package/dist/{chunk-62SXUU5U.js → chunk-3DPPDGOF.js} +5 -5
- package/dist/{chunk-7RG37FVT.js → chunk-3IX2TP4I.js} +30 -3
- package/dist/chunk-3IX2TP4I.js.map +1 -0
- package/dist/chunk-3OL2TSEJ.js +80 -0
- package/dist/chunk-3OL2TSEJ.js.map +1 -0
- package/dist/{chunk-BTGXHQX3.js → chunk-4JNC5AEF.js} +2 -2
- package/dist/{chunk-6MOJK2QT.js → chunk-4SQ2WCZA.js} +2 -2
- package/dist/{chunk-QHFAKEZZ.js → chunk-4V37DAMA.js} +3 -3
- package/dist/{chunk-RDRXTH47.js → chunk-52RHAAIH.js} +17 -13
- package/dist/chunk-52RHAAIH.js.map +1 -0
- package/dist/{chunk-E3E4L7MH.js → chunk-56GWNA5V.js} +5 -5
- package/dist/{chunk-JK3QB7MO.js → chunk-5CP5Z3YU.js} +2 -2
- package/dist/{chunk-2ZMR3TZU.js → chunk-5S5K73I6.js} +3 -3
- package/dist/{chunk-RBW5QQXW.js → chunk-5XTPEA3O.js} +2 -2
- package/dist/{chunk-WWB43LWU.js → chunk-5ZC7CNU4.js} +2 -2
- package/dist/{chunk-V4JMZZGH.js → chunk-6A4PTK5Q.js} +5 -5
- package/dist/{chunk-2P5ZBBTL.js → chunk-6GICMRDX.js} +5 -5
- package/dist/{chunk-QOTMQLMW.js → chunk-6OISIUZM.js} +3 -3
- package/dist/{chunk-34FX3NRZ.js → chunk-6PTP5NID.js} +2 -2
- package/dist/{chunk-3XZZSHE5.js → chunk-6VTOGR36.js} +5 -5
- package/dist/{chunk-SEUJNFOD.js → chunk-6WHIJPEF.js} +2 -2
- package/dist/{chunk-62XVHRTX.js → chunk-72HOUWAW.js} +71 -22
- package/dist/chunk-72HOUWAW.js.map +1 -0
- package/dist/{chunk-2D4WKET2.js → chunk-75FHDUJW.js} +5 -5
- package/dist/{chunk-66QQ7YQN.js → chunk-75I42HHE.js} +2 -2
- package/dist/{chunk-AAREDFH6.js → chunk-7TKQIZ3K.js} +2 -2
- package/dist/{chunk-WPFVQVQC.js → chunk-7VUXSNVZ.js} +5 -5
- package/dist/{chunk-4J62V5OE.js → chunk-7YJYIMWP.js} +2 -2
- package/dist/chunk-A63WU4UZ.js +226 -0
- package/dist/chunk-A63WU4UZ.js.map +1 -0
- package/dist/chunk-ABRUOINB.js +1 -0
- package/dist/chunk-ABRUOINB.js.map +1 -0
- package/dist/{chunk-UERGWYGY.js → chunk-ABRVOPC2.js} +3 -3
- package/dist/{chunk-M74YHHJE.js → chunk-ACBHZG3Z.js} +5 -5
- package/dist/chunk-ACFKPE2T.js +1 -0
- package/dist/chunk-ACFKPE2T.js.map +1 -0
- package/dist/{chunk-XKPV52CG.js → chunk-ARMKSYEQ.js} +3 -3
- package/dist/{chunk-MHFXJRLD.js → chunk-AT6UKTH4.js} +2 -2
- package/dist/{chunk-RB3R6BJL.js → chunk-AWUFS2ZC.js} +7 -7
- package/dist/{chunk-QK3XXPBA.js → chunk-BECKKDYG.js} +2 -2
- package/dist/{chunk-64UNVW6D.js → chunk-BP3ZKIPE.js} +4 -4
- package/dist/{chunk-ENRB6PIN.js → chunk-BRHRK7BK.js} +2 -2
- package/dist/chunk-BRZKOUEL.js +115 -0
- package/dist/chunk-BRZKOUEL.js.map +1 -0
- package/dist/{chunk-UQ6SAIX7.js → chunk-C74PDNTF.js} +4 -4
- package/dist/{chunk-76IHYINM.js → chunk-CARUHKZW.js} +23 -16
- package/dist/chunk-CARUHKZW.js.map +1 -0
- package/dist/{chunk-3HSLEUVW.js → chunk-CBO46LJH.js} +5 -5
- package/dist/{chunk-EMSMJRP3.js → chunk-CESGZRVQ.js} +4 -4
- package/dist/{chunk-LODYTVOO.js → chunk-CFDWKQZT.js} +2 -2
- package/dist/chunk-COOSJKZL.js +197 -0
- package/dist/chunk-COOSJKZL.js.map +1 -0
- package/dist/{chunk-TPAMLIN7.js → chunk-CPZGFIFH.js} +2 -2
- package/dist/{chunk-D4LMRSY7.js → chunk-CSGBHYW6.js} +2 -2
- package/dist/{chunk-JW7MN4DG.js → chunk-D34PZJH3.js} +2 -2
- package/dist/{chunk-WT7VZDTI.js → chunk-DDNUPFPE.js} +5 -5
- package/dist/{chunk-LZ5PGB7U.js → chunk-DYRZRY2T.js} +5 -5
- package/dist/{chunk-73BMQ3VC.js → chunk-ENJOBJPK.js} +2 -2
- package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
- package/dist/{chunk-U36BXXQ7.js → chunk-EP3DRILI.js} +2 -2
- package/dist/{chunk-SYERREN5.js → chunk-FCLON3MO.js} +6 -6
- package/dist/{chunk-GLAAX5JJ.js → chunk-FEKWKWGK.js} +5 -4
- package/dist/{chunk-GLAAX5JJ.js.map → chunk-FEKWKWGK.js.map} +1 -1
- package/dist/{chunk-33MMQHYU.js → chunk-FJ3UZ4RC.js} +2 -2
- package/dist/{chunk-LNIK7FJO.js → chunk-FORQEHRQ.js} +2 -2
- package/dist/{chunk-N3W6FZOC.js → chunk-FQGPYP2M.js} +4 -4
- package/dist/{chunk-MAHY7PK3.js → chunk-FQMLTCXT.js} +4 -4
- package/dist/{chunk-BDJIP4HG.js → chunk-FRUDRDJX.js} +4 -4
- package/dist/{chunk-MO4FFK62.js → chunk-FXECKKPW.js} +3 -3
- package/dist/{chunk-UWVVKUCG.js → chunk-FZEDQNUN.js} +3 -3
- package/dist/{chunk-6LMYQJZP.js → chunk-GCBWZ3MX.js} +2 -2
- package/dist/{chunk-YASSCBWN.js → chunk-GHP5JLL3.js} +2 -2
- package/dist/{chunk-3S352ZSG.js → chunk-GLR5MSU3.js} +2 -2
- package/dist/chunk-GMRQPNG3.js +80 -0
- package/dist/chunk-GMRQPNG3.js.map +1 -0
- package/dist/{chunk-ATJTGQYE.js → chunk-GOQOVKUZ.js} +3 -3
- package/dist/{chunk-REMODSVN.js → chunk-HDTFLW42.js} +2 -2
- package/dist/{chunk-SFVHZAGE.js → chunk-HG2YLNGJ.js} +2 -2
- package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
- package/dist/{chunk-OKDAHCYE.js → chunk-HJJR2WGL.js} +2 -2
- package/dist/{chunk-J34VGMA5.js → chunk-HNEZWVDR.js} +2 -2
- package/dist/{chunk-YJPBNIEM.js → chunk-HUXAIQC5.js} +2 -2
- package/dist/{chunk-OUI5IPS6.js → chunk-HWPQKHN2.js} +6 -6
- package/dist/{chunk-MNNIOQTQ.js → chunk-I7JUAHUO.js} +3 -3
- package/dist/{chunk-LC6ND4ET.js → chunk-IBOFASAZ.js} +2 -2
- package/dist/{chunk-TNDTEI6D.js → chunk-IDRVQVDL.js} +2 -2
- package/dist/{chunk-GYFKIPR2.js → chunk-IEAPXS57.js} +2 -2
- package/dist/{chunk-NQCTANF3.js → chunk-IF5UY3CT.js} +4 -4
- package/dist/{chunk-YHKHHSZH.js → chunk-IFX5KP65.js} +4 -4
- package/dist/{chunk-XATRYJ4Q.js → chunk-IMCSY2SI.js} +6 -6
- package/dist/{chunk-BARTUKJU.js → chunk-IU2WSJ4F.js} +2 -2
- package/dist/{chunk-GVSRBFP3.js → chunk-IYDXKLCE.js} +7 -7
- package/dist/{chunk-5NT2M2JI.js → chunk-JKIKHWD2.js} +4 -4
- package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
- package/dist/{chunk-LCGK22QQ.js → chunk-JVTZ7FWR.js} +5 -5
- package/dist/{chunk-BO6IMK5P.js → chunk-JZQYVGPV.js} +3 -3
- package/dist/{chunk-3W2B7IZG.js → chunk-K6WY2CHG.js} +2 -2
- package/dist/{chunk-RWCQ6TEM.js → chunk-KR4TN3OF.js} +2 -2
- package/dist/{chunk-SUCVFEPT.js → chunk-KRPDBVUB.js} +5 -5
- package/dist/{chunk-LRIPJ2D5.js → chunk-KRYOT3KB.js} +2 -2
- package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
- package/dist/{chunk-I3OKAQ5L.js → chunk-L7HNQRFS.js} +7 -7
- package/dist/{chunk-J7C7FPVO.js → chunk-LABIUXDM.js} +2 -2
- package/dist/{chunk-GJOU26UW.js → chunk-LH3YT5NL.js} +8 -8
- package/dist/chunk-LH3YT5NL.js.map +1 -0
- package/dist/{chunk-GM7BG3SD.js → chunk-LLPPIO3K.js} +3 -3
- package/dist/{chunk-RCTHCXS6.js → chunk-LRQT4MQO.js} +2 -2
- package/dist/{chunk-LTSVYILY.js → chunk-LXMFHD7M.js} +4 -4
- package/dist/{chunk-72OG3AGH.js → chunk-LYB6YYTG.js} +2 -2
- package/dist/{chunk-DRJL3JHR.js → chunk-LZJHHMOF.js} +2 -2
- package/dist/{chunk-Y4KR4LT2.js → chunk-MIUPTZS6.js} +2 -2
- package/dist/{chunk-XXUTD74L.js → chunk-MK6UXAWY.js} +3 -3
- package/dist/{chunk-BIUT3K6A.js → chunk-MKNW4FRR.js} +6 -6
- package/dist/{chunk-NZDIO5UG.js → chunk-MVNFUIJS.js} +5 -5
- package/dist/{chunk-APBIQH4G.js → chunk-N5OEDOJT.js} +7 -7
- package/dist/{chunk-UAOE3ZPC.js → chunk-NEYZV6V5.js} +6 -6
- package/dist/{chunk-ZXHODKHH.js → chunk-NKHNUTTY.js} +3 -3
- package/dist/{chunk-JL4I7OQE.js → chunk-NOF2FF4K.js} +2 -2
- package/dist/{chunk-WOSUYOAU.js → chunk-NQYC7V5N.js} +5 -5
- package/dist/{chunk-HF2WLLGH.js → chunk-NTRWUDP6.js} +3 -3
- package/dist/{chunk-HF2WLLGH.js.map → chunk-NTRWUDP6.js.map} +1 -1
- package/dist/{chunk-ZCCKIWZU.js → chunk-NYA26GV2.js} +2 -2
- package/dist/{chunk-N3LW5ER5.js → chunk-NZBEE2PR.js} +3 -3
- package/dist/{chunk-DYHOBKPU.js → chunk-OA6T2ME3.js} +5 -5
- package/dist/{chunk-U5FOJBLG.js → chunk-OOLES6RR.js} +14 -2
- package/dist/chunk-OOLES6RR.js.map +1 -0
- package/dist/{chunk-4UCXJYOO.js → chunk-OPY2AGAU.js} +6 -6
- package/dist/chunk-OPY2AGAU.js.map +1 -0
- package/dist/{chunk-4IVEBBF6.js → chunk-OQN2FHEL.js} +5 -4
- package/dist/{chunk-4IVEBBF6.js.map → chunk-OQN2FHEL.js.map} +1 -1
- package/dist/{chunk-WNIL2KTB.js → chunk-OQW4OERS.js} +3 -3
- package/dist/{chunk-JJNY5MZL.js → chunk-OZYUE2BI.js} +2 -2
- package/dist/{chunk-Y3TD7HOY.js → chunk-P4Q7JK4L.js} +2 -2
- package/dist/{chunk-W676GY42.js → chunk-P772HCHI.js} +4 -4
- package/dist/chunk-PBRCKHN3.js +75 -0
- package/dist/chunk-PBRCKHN3.js.map +1 -0
- package/dist/{chunk-4AJY7HMH.js → chunk-PD7MKJCM.js} +5 -5
- package/dist/{chunk-ICKR3QTG.js → chunk-PGHSNG33.js} +4 -4
- package/dist/{chunk-ZNJGEDCE.js → chunk-PGYYDSNX.js} +2 -2
- package/dist/{chunk-KXTNTDRD.js → chunk-PPEHBI5O.js} +2 -2
- package/dist/{chunk-5RPT32EL.js → chunk-PVIQDBUN.js} +2 -2
- package/dist/{chunk-N3ZOZWP5.js → chunk-Q3HYEAVQ.js} +2 -2
- package/dist/{chunk-HKQQ2NED.js → chunk-Q4GAPZDA.js} +2 -2
- package/dist/{chunk-VUBFCHXL.js → chunk-Q7XLTN2D.js} +3 -3
- package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
- package/dist/{chunk-YQIT3ET7.js → chunk-QAH3XILB.js} +3 -3
- package/dist/{chunk-YH7G44WL.js → chunk-QLJU7UUI.js} +2 -2
- package/dist/{chunk-TVMSXL3R.js → chunk-QO7UJXXO.js} +2 -2
- package/dist/{chunk-4OTJ66ID.js → chunk-QZOQVJ5L.js} +18 -7
- package/dist/chunk-QZOQVJ5L.js.map +1 -0
- package/dist/{chunk-UETHX57J.js → chunk-R6L376KR.js} +21 -7
- package/dist/chunk-R6L376KR.js.map +1 -0
- package/dist/{chunk-QQHZBJMU.js → chunk-RGVNXES5.js} +4 -4
- package/dist/{chunk-MWPD2BXO.js → chunk-RHVJ3L4U.js} +2 -2
- package/dist/{chunk-YV4O7KDR.js → chunk-S6HIZQIG.js} +5 -5
- package/dist/{chunk-MQVIYTH5.js → chunk-SAKSIN7E.js} +2 -2
- package/dist/{chunk-4HBCWKIX.js → chunk-SGFRSRAL.js} +2 -2
- package/dist/{chunk-WLLUARTC.js → chunk-T2G4LDU5.js} +2 -2
- package/dist/{chunk-37G7M2GJ.js → chunk-T6QVM5Q5.js} +5 -5
- package/dist/{chunk-BLNFOP2O.js → chunk-T6YTDEY4.js} +4 -4
- package/dist/{chunk-QTLM2YY2.js → chunk-TI4FGQYV.js} +2 -2
- package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
- package/dist/{chunk-JQSF3CUR.js → chunk-TRYR424I.js} +5 -4
- package/dist/{chunk-JQSF3CUR.js.map → chunk-TRYR424I.js.map} +1 -1
- package/dist/{chunk-C2I7NQC4.js → chunk-U2ILXZDG.js} +2 -2
- package/dist/{chunk-TR7ZA67L.js → chunk-U2QV4TTZ.js} +2 -2
- package/dist/{chunk-A5U7HEBI.js → chunk-U3HGQHEO.js} +6 -4
- package/dist/chunk-U3HGQHEO.js.map +1 -0
- package/dist/{chunk-3YFDGFEK.js → chunk-U4WAAZXJ.js} +2 -2
- package/dist/{chunk-UQUN2NGE.js → chunk-UAFSEZ2E.js} +2 -2
- package/dist/{chunk-D5Y4PNC5.js → chunk-ULAZDF6D.js} +2 -2
- package/dist/{chunk-3OWFUFZL.js → chunk-UMI3GYWI.js} +6 -6
- package/dist/{chunk-Q7QQXNL7.js → chunk-UT545JBQ.js} +3 -3
- package/dist/{chunk-JXK53XJW.js → chunk-UTUYXH72.js} +5 -5
- package/dist/{chunk-E72INDBL.js → chunk-UXOFA3ZP.js} +4 -4
- package/dist/{chunk-54OJAOXC.js → chunk-V6KQ5R4T.js} +11 -11
- package/dist/{chunk-FLJ3RIRP.js → chunk-VEKTKCSB.js} +5 -5
- package/dist/{chunk-UJACXYC2.js → chunk-VHGHF537.js} +3 -3
- package/dist/{chunk-OFXCSLGX.js → chunk-VLH3IMJG.js} +2 -2
- package/dist/{chunk-AKBL7S7A.js → chunk-VPGDYI63.js} +5 -5
- package/dist/{chunk-6DGNMASB.js → chunk-VPH3TENY.js} +2 -2
- package/dist/{chunk-45AON4CS.js → chunk-VYQZ5U3N.js} +2 -2
- package/dist/{chunk-GXSHLMT4.js → chunk-WDSJ6SVY.js} +2 -2
- package/dist/{chunk-JMDT3GQ3.js → chunk-WMAS6DZR.js} +3 -3
- package/dist/{chunk-XE7QBHXN.js → chunk-WTOA52EQ.js} +2 -2
- package/dist/{chunk-MLGAGZJ3.js → chunk-XMWTVDQN.js} +22 -21
- package/dist/chunk-XMWTVDQN.js.map +1 -0
- package/dist/{chunk-D22FGMGU.js → chunk-XNMU32XC.js} +2 -2
- package/dist/{chunk-PEMXXFXL.js → chunk-XQJPR57I.js} +2 -2
- package/dist/{chunk-54F7QIV2.js → chunk-XW44IFYE.js} +5 -5
- package/dist/{chunk-I2KAN3YB.js → chunk-Y3LK6ZQG.js} +2 -2
- package/dist/{chunk-7AC2UGTU.js → chunk-Y46R26TE.js} +3 -3
- package/dist/{chunk-GQ2T44BC.js → chunk-YEKPQAOW.js} +2 -2
- package/dist/{chunk-XNLJ2Z7T.js → chunk-YGWLMTPB.js} +5 -3
- package/dist/chunk-YGWLMTPB.js.map +1 -0
- package/dist/{chunk-ZGAOA7LN.js → chunk-YHPSPFU5.js} +9 -9
- package/dist/chunk-YOPMXGHY.js +23 -0
- package/dist/chunk-YOPMXGHY.js.map +1 -0
- package/dist/{chunk-F6LZHF4O.js → chunk-YTDUIU7X.js} +2 -2
- package/dist/{chunk-CO7GH3W7.js → chunk-YWXCLPCX.js} +2 -2
- package/dist/{chunk-RIPG3QIN.js → chunk-Z445LLFN.js} +4 -4
- package/dist/{chunk-M7HYNXCU.js → chunk-ZAPP32GD.js} +2 -2
- package/dist/{chunk-MT74NRLY.js → chunk-ZLVRCQPG.js} +9 -9
- package/dist/{chunk-KSJBFT4G.js → chunk-ZVZTQF7E.js} +4 -4
- package/dist/data-display/Alert.js +2 -2
- package/dist/data-display/AsyncStateContainer.js +4 -4
- package/dist/data-display/Avatar.js +3 -3
- package/dist/data-display/Badge.js +3 -3
- package/dist/data-display/CardKit.js +12 -12
- package/dist/data-display/Carousel.js +11 -11
- package/dist/data-display/Chart.js +20 -20
- package/dist/data-display/DataGrid.js +3 -3
- package/dist/data-display/DataViews.js +93 -92
- package/dist/data-display/FleetMap.js +24 -24
- package/dist/data-display/LazyImage.js +5 -5
- package/dist/data-display/Lightbox.js +6 -6
- package/dist/data-display/LoadingState.js +3 -3
- package/dist/data-display/MapPreview.js +16 -16
- package/dist/data-display/Progress.js +2 -2
- package/dist/data-display/RegionMap.js +45 -0
- package/dist/data-display/RegionMap.js.map +1 -0
- package/dist/data-display/Sheet.js +6 -6
- package/dist/data-display/StatCard.js +3 -3
- package/dist/data-display/Table.js +2 -2
- package/dist/en-US.js +6 -6
- package/dist/feedback/ConfirmAction.js +5 -5
- package/dist/feedback/Modal.js +2 -2
- package/dist/feedback/NotificationStatusNotice.js +7 -7
- package/dist/feedback/SequenceResolver.js +10 -10
- package/dist/form/AddressAutocomplete.js +8 -8
- package/dist/form/Autocomplete.js +4 -4
- package/dist/form/Button.js +4 -4
- package/dist/form/Calendar.js +5 -5
- package/dist/form/CategorySelect.js +11 -11
- package/dist/form/CepField.js +6 -6
- package/dist/form/Checkbox.js +2 -2
- package/dist/form/CodeEditor.js +3 -3
- package/dist/form/Command.js +3 -3
- package/dist/form/CreatableSelect.js +3 -3
- package/dist/form/DateRangePicker.js +12 -12
- package/dist/form/Input/outlined.js +5 -5
- package/dist/form/Input.js +5 -5
- package/dist/form/InputOTP.js +5 -5
- package/dist/form/Label.js +3 -3
- package/dist/form/MenuSelect.js +4 -4
- package/dist/form/Menubar.js +7 -7
- package/dist/form/NumberField.js +6 -6
- package/dist/form/PhoneInput.js +5 -5
- package/dist/form/PickerSheet.js +6 -6
- package/dist/form/RadioGroup.js +5 -5
- package/dist/form/RichTextEditor.js +2 -2
- package/dist/form/Select.js +6 -6
- package/dist/form/Textarea.js +3 -3
- package/dist/form/Toggle.js +4 -4
- package/dist/form/ToggleGroup.js +3 -3
- package/dist/form/total-form.js +34 -34
- package/dist/icons.js +6 -6
- package/dist/layout/Box.js +6 -6
- package/dist/layout/ContentToolbar.js +12 -12
- package/dist/layout/Screen.js +7 -7
- package/dist/layout/SettingCard.js +15 -15
- package/dist/layout/SettingsLayout.js +2 -2
- package/dist/layout/Skeleton.js +2 -2
- package/dist/layout/Stack.js +7 -7
- package/dist/layout/TableFilter.js +3 -3
- package/dist/locales.js +14 -14
- package/dist/navigation/AppHeader.js +9 -9
- package/dist/navigation/CommandPalette.js +2 -2
- package/dist/navigation/Pagination.js +4 -4
- package/dist/navigation/SectionNav.js +4 -4
- package/dist/navigation/Tabs.js +2 -2
- package/dist/provider.js +6 -6
- package/dist/pt-BR.js +8 -8
- package/dist/social-login-button.js +5 -5
- package/dist/tokens.js +4 -4
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +6 -0
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +32 -5
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts +6 -0
- package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts +3 -1
- package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts +3 -1
- package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts +16 -0
- package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts.map +1 -0
- package/dist/types/components/data-display/DataViews/data-views-writers.d.ts +13 -0
- package/dist/types/components/data-display/DataViews/data-views-writers.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts +4 -0
- package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts.map +1 -1
- package/dist/types/components/data-display/RegionMap/RegionMap.d.ts +25 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.fixtures.d.ts +27 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.fixtures.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.helpers.d.ts +110 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.helpers.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.hooks.d.ts +28 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.hooks.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.types.d.ts +116 -0
- package/dist/types/components/data-display/RegionMap/RegionMap.types.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMapDrawing.d.ts +28 -0
- package/dist/types/components/data-display/RegionMap/RegionMapDrawing.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMapLegend.d.ts +12 -0
- package/dist/types/components/data-display/RegionMap/RegionMapLegend.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/RegionMapList.d.ts +20 -0
- package/dist/types/components/data-display/RegionMap/RegionMapList.d.ts.map +1 -0
- package/dist/types/components/data-display/RegionMap/index.d.ts +5 -0
- package/dist/types/components/data-display/RegionMap/index.d.ts.map +1 -0
- package/dist/types/components/data-display/index.d.ts +1 -0
- package/dist/types/components/data-display/index.d.ts.map +1 -1
- package/dist/types/components/form/CepField/CepField.d.ts +1 -1
- package/dist/types/components/form/CepField/CepField.d.ts.map +1 -1
- package/dist/types/components/form/CepField/CepField.types.d.ts +8 -0
- package/dist/types/components/form/CepField/CepField.types.d.ts.map +1 -1
- package/dist/types/components/form/InputOTP/InputOTP.d.ts.map +1 -1
- package/dist/types/components/form/InputOTP/InputOTP.hooks.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/CepField.d.ts +6 -1
- package/dist/types/components/form/total-form/Fields/CepField.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/TextField.d.ts +22 -1
- package/dist/types/components/form/total-form/Fields/TextField.d.ts.map +1 -1
- package/dist/types/components/form/total-form/Fields/index.d.ts +1 -1
- package/dist/types/components/form/total-form/Fields/index.d.ts.map +1 -1
- package/dist/types/components/form/total-form/index.d.ts +1 -1
- package/dist/types/components/form/total-form/index.d.ts.map +1 -1
- package/dist/types/en-US.data-display.d.ts.map +1 -1
- package/dist/types/pt-BR.data-display.d.ts.map +1 -1
- package/dist/user-avatar.js +8 -8
- package/dist/utility/WorkflowStep.js +3 -3
- package/package.json +5 -1
- package/src/components/data-display/DataViews/data-views-copy.ts +6 -0
- package/src/components/data-display/DataViews/data-views-day-input.tsx +134 -38
- package/src/components/data-display/DataViews/data-views-empty.tsx +1 -1
- package/src/components/data-display/DataViews/data-views-filter-panel.tsx +8 -2
- package/src/components/data-display/DataViews/data-views-grid-parts.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-inline-bar.tsx +7 -0
- package/src/components/data-display/DataViews/data-views-more-filters.tsx +4 -1
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +11 -3
- package/src/components/data-display/DataViews/data-views-range-reset.ts +34 -0
- package/src/components/data-display/DataViews/data-views-writers.ts +24 -1
- package/src/components/data-display/DataViews/use-data-views-state.ts +6 -1
- package/src/components/data-display/RegionMap/RegionMap.fixtures.ts +67 -0
- package/src/components/data-display/RegionMap/RegionMap.helpers.ts +338 -0
- package/src/components/data-display/RegionMap/RegionMap.hooks.ts +125 -0
- package/src/components/data-display/RegionMap/RegionMap.md +144 -0
- package/src/components/data-display/RegionMap/RegionMap.tsx +88 -0
- package/src/components/data-display/RegionMap/RegionMap.types.ts +117 -0
- package/src/components/data-display/RegionMap/RegionMapDrawing.tsx +299 -0
- package/src/components/data-display/RegionMap/RegionMapLegend.tsx +81 -0
- package/src/components/data-display/RegionMap/RegionMapList.tsx +167 -0
- package/src/components/data-display/RegionMap/index.ts +13 -0
- package/src/components/data-display/RegionMap/tests.md +22 -0
- package/src/components/data-display/RegionMap/track.md +13 -0
- package/src/components/data-display/index.ts +1 -0
- package/src/components/form/CepField/CepField.md +7 -2
- package/src/components/form/CepField/CepField.tsx +13 -2
- package/src/components/form/CepField/CepField.types.ts +8 -0
- package/src/components/form/InputOTP/InputOTP.hooks.ts +48 -9
- package/src/components/form/InputOTP/InputOTP.md +6 -1
- package/src/components/form/InputOTP/InputOTP.tsx +40 -1
- package/src/components/form/total-form/Fields/CepField.tsx +7 -0
- package/src/components/form/total-form/Fields/TextField.tsx +64 -1
- package/src/components/form/total-form/Fields/index.ts +1 -1
- package/src/components/form/total-form/index.ts +1 -1
- package/src/en-US.data-display.ts +1 -0
- package/src/pt-BR.data-display.ts +1 -0
- package/dist/chunk-4OTJ66ID.js.map +0 -1
- package/dist/chunk-4UCXJYOO.js.map +0 -1
- package/dist/chunk-62XVHRTX.js.map +0 -1
- package/dist/chunk-76IHYINM.js.map +0 -1
- package/dist/chunk-7RG37FVT.js.map +0 -1
- package/dist/chunk-A5U7HEBI.js.map +0 -1
- package/dist/chunk-CDCTLPMD.js +0 -1
- package/dist/chunk-EBEMNKTK.js.map +0 -1
- package/dist/chunk-GJOU26UW.js.map +0 -1
- package/dist/chunk-MLGAGZJ3.js.map +0 -1
- package/dist/chunk-RDRXTH47.js.map +0 -1
- package/dist/chunk-U5FOJBLG.js.map +0 -1
- package/dist/chunk-UETHX57J.js.map +0 -1
- package/dist/chunk-XNLJ2Z7T.js.map +0 -1
- /package/dist/{chunk-CDCTLPMD.js.map → _internal/components/data-display/DataViews/data-views-range-reset.js.map} +0 -0
- /package/dist/{chunk-3RHU2Y2N.js.map → chunk-2DDCRHJE.js.map} +0 -0
- /package/dist/{chunk-X3EB67O2.js.map → chunk-2VRJ577J.js.map} +0 -0
- /package/dist/{chunk-QSRZOXQI.js.map → chunk-2WVHZIWP.js.map} +0 -0
- /package/dist/{chunk-6OYB3MRF.js.map → chunk-33AVAYCR.js.map} +0 -0
- /package/dist/{chunk-62SXUU5U.js.map → chunk-3DPPDGOF.js.map} +0 -0
- /package/dist/{chunk-BTGXHQX3.js.map → chunk-4JNC5AEF.js.map} +0 -0
- /package/dist/{chunk-6MOJK2QT.js.map → chunk-4SQ2WCZA.js.map} +0 -0
- /package/dist/{chunk-QHFAKEZZ.js.map → chunk-4V37DAMA.js.map} +0 -0
- /package/dist/{chunk-E3E4L7MH.js.map → chunk-56GWNA5V.js.map} +0 -0
- /package/dist/{chunk-JK3QB7MO.js.map → chunk-5CP5Z3YU.js.map} +0 -0
- /package/dist/{chunk-2ZMR3TZU.js.map → chunk-5S5K73I6.js.map} +0 -0
- /package/dist/{chunk-RBW5QQXW.js.map → chunk-5XTPEA3O.js.map} +0 -0
- /package/dist/{chunk-WWB43LWU.js.map → chunk-5ZC7CNU4.js.map} +0 -0
- /package/dist/{chunk-V4JMZZGH.js.map → chunk-6A4PTK5Q.js.map} +0 -0
- /package/dist/{chunk-2P5ZBBTL.js.map → chunk-6GICMRDX.js.map} +0 -0
- /package/dist/{chunk-QOTMQLMW.js.map → chunk-6OISIUZM.js.map} +0 -0
- /package/dist/{chunk-34FX3NRZ.js.map → chunk-6PTP5NID.js.map} +0 -0
- /package/dist/{chunk-3XZZSHE5.js.map → chunk-6VTOGR36.js.map} +0 -0
- /package/dist/{chunk-SEUJNFOD.js.map → chunk-6WHIJPEF.js.map} +0 -0
- /package/dist/{chunk-2D4WKET2.js.map → chunk-75FHDUJW.js.map} +0 -0
- /package/dist/{chunk-66QQ7YQN.js.map → chunk-75I42HHE.js.map} +0 -0
- /package/dist/{chunk-AAREDFH6.js.map → chunk-7TKQIZ3K.js.map} +0 -0
- /package/dist/{chunk-WPFVQVQC.js.map → chunk-7VUXSNVZ.js.map} +0 -0
- /package/dist/{chunk-4J62V5OE.js.map → chunk-7YJYIMWP.js.map} +0 -0
- /package/dist/{chunk-UERGWYGY.js.map → chunk-ABRVOPC2.js.map} +0 -0
- /package/dist/{chunk-M74YHHJE.js.map → chunk-ACBHZG3Z.js.map} +0 -0
- /package/dist/{chunk-XKPV52CG.js.map → chunk-ARMKSYEQ.js.map} +0 -0
- /package/dist/{chunk-MHFXJRLD.js.map → chunk-AT6UKTH4.js.map} +0 -0
- /package/dist/{chunk-RB3R6BJL.js.map → chunk-AWUFS2ZC.js.map} +0 -0
- /package/dist/{chunk-QK3XXPBA.js.map → chunk-BECKKDYG.js.map} +0 -0
- /package/dist/{chunk-64UNVW6D.js.map → chunk-BP3ZKIPE.js.map} +0 -0
- /package/dist/{chunk-ENRB6PIN.js.map → chunk-BRHRK7BK.js.map} +0 -0
- /package/dist/{chunk-UQ6SAIX7.js.map → chunk-C74PDNTF.js.map} +0 -0
- /package/dist/{chunk-3HSLEUVW.js.map → chunk-CBO46LJH.js.map} +0 -0
- /package/dist/{chunk-EMSMJRP3.js.map → chunk-CESGZRVQ.js.map} +0 -0
- /package/dist/{chunk-LODYTVOO.js.map → chunk-CFDWKQZT.js.map} +0 -0
- /package/dist/{chunk-TPAMLIN7.js.map → chunk-CPZGFIFH.js.map} +0 -0
- /package/dist/{chunk-D4LMRSY7.js.map → chunk-CSGBHYW6.js.map} +0 -0
- /package/dist/{chunk-JW7MN4DG.js.map → chunk-D34PZJH3.js.map} +0 -0
- /package/dist/{chunk-WT7VZDTI.js.map → chunk-DDNUPFPE.js.map} +0 -0
- /package/dist/{chunk-LZ5PGB7U.js.map → chunk-DYRZRY2T.js.map} +0 -0
- /package/dist/{chunk-73BMQ3VC.js.map → chunk-ENJOBJPK.js.map} +0 -0
- /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
- /package/dist/{chunk-U36BXXQ7.js.map → chunk-EP3DRILI.js.map} +0 -0
- /package/dist/{chunk-SYERREN5.js.map → chunk-FCLON3MO.js.map} +0 -0
- /package/dist/{chunk-33MMQHYU.js.map → chunk-FJ3UZ4RC.js.map} +0 -0
- /package/dist/{chunk-LNIK7FJO.js.map → chunk-FORQEHRQ.js.map} +0 -0
- /package/dist/{chunk-N3W6FZOC.js.map → chunk-FQGPYP2M.js.map} +0 -0
- /package/dist/{chunk-MAHY7PK3.js.map → chunk-FQMLTCXT.js.map} +0 -0
- /package/dist/{chunk-BDJIP4HG.js.map → chunk-FRUDRDJX.js.map} +0 -0
- /package/dist/{chunk-MO4FFK62.js.map → chunk-FXECKKPW.js.map} +0 -0
- /package/dist/{chunk-UWVVKUCG.js.map → chunk-FZEDQNUN.js.map} +0 -0
- /package/dist/{chunk-6LMYQJZP.js.map → chunk-GCBWZ3MX.js.map} +0 -0
- /package/dist/{chunk-YASSCBWN.js.map → chunk-GHP5JLL3.js.map} +0 -0
- /package/dist/{chunk-3S352ZSG.js.map → chunk-GLR5MSU3.js.map} +0 -0
- /package/dist/{chunk-ATJTGQYE.js.map → chunk-GOQOVKUZ.js.map} +0 -0
- /package/dist/{chunk-REMODSVN.js.map → chunk-HDTFLW42.js.map} +0 -0
- /package/dist/{chunk-SFVHZAGE.js.map → chunk-HG2YLNGJ.js.map} +0 -0
- /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
- /package/dist/{chunk-OKDAHCYE.js.map → chunk-HJJR2WGL.js.map} +0 -0
- /package/dist/{chunk-J34VGMA5.js.map → chunk-HNEZWVDR.js.map} +0 -0
- /package/dist/{chunk-YJPBNIEM.js.map → chunk-HUXAIQC5.js.map} +0 -0
- /package/dist/{chunk-OUI5IPS6.js.map → chunk-HWPQKHN2.js.map} +0 -0
- /package/dist/{chunk-MNNIOQTQ.js.map → chunk-I7JUAHUO.js.map} +0 -0
- /package/dist/{chunk-LC6ND4ET.js.map → chunk-IBOFASAZ.js.map} +0 -0
- /package/dist/{chunk-TNDTEI6D.js.map → chunk-IDRVQVDL.js.map} +0 -0
- /package/dist/{chunk-GYFKIPR2.js.map → chunk-IEAPXS57.js.map} +0 -0
- /package/dist/{chunk-NQCTANF3.js.map → chunk-IF5UY3CT.js.map} +0 -0
- /package/dist/{chunk-YHKHHSZH.js.map → chunk-IFX5KP65.js.map} +0 -0
- /package/dist/{chunk-XATRYJ4Q.js.map → chunk-IMCSY2SI.js.map} +0 -0
- /package/dist/{chunk-BARTUKJU.js.map → chunk-IU2WSJ4F.js.map} +0 -0
- /package/dist/{chunk-GVSRBFP3.js.map → chunk-IYDXKLCE.js.map} +0 -0
- /package/dist/{chunk-5NT2M2JI.js.map → chunk-JKIKHWD2.js.map} +0 -0
- /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
- /package/dist/{chunk-LCGK22QQ.js.map → chunk-JVTZ7FWR.js.map} +0 -0
- /package/dist/{chunk-BO6IMK5P.js.map → chunk-JZQYVGPV.js.map} +0 -0
- /package/dist/{chunk-3W2B7IZG.js.map → chunk-K6WY2CHG.js.map} +0 -0
- /package/dist/{chunk-RWCQ6TEM.js.map → chunk-KR4TN3OF.js.map} +0 -0
- /package/dist/{chunk-SUCVFEPT.js.map → chunk-KRPDBVUB.js.map} +0 -0
- /package/dist/{chunk-LRIPJ2D5.js.map → chunk-KRYOT3KB.js.map} +0 -0
- /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
- /package/dist/{chunk-I3OKAQ5L.js.map → chunk-L7HNQRFS.js.map} +0 -0
- /package/dist/{chunk-J7C7FPVO.js.map → chunk-LABIUXDM.js.map} +0 -0
- /package/dist/{chunk-GM7BG3SD.js.map → chunk-LLPPIO3K.js.map} +0 -0
- /package/dist/{chunk-RCTHCXS6.js.map → chunk-LRQT4MQO.js.map} +0 -0
- /package/dist/{chunk-LTSVYILY.js.map → chunk-LXMFHD7M.js.map} +0 -0
- /package/dist/{chunk-72OG3AGH.js.map → chunk-LYB6YYTG.js.map} +0 -0
- /package/dist/{chunk-DRJL3JHR.js.map → chunk-LZJHHMOF.js.map} +0 -0
- /package/dist/{chunk-Y4KR4LT2.js.map → chunk-MIUPTZS6.js.map} +0 -0
- /package/dist/{chunk-XXUTD74L.js.map → chunk-MK6UXAWY.js.map} +0 -0
- /package/dist/{chunk-BIUT3K6A.js.map → chunk-MKNW4FRR.js.map} +0 -0
- /package/dist/{chunk-NZDIO5UG.js.map → chunk-MVNFUIJS.js.map} +0 -0
- /package/dist/{chunk-APBIQH4G.js.map → chunk-N5OEDOJT.js.map} +0 -0
- /package/dist/{chunk-UAOE3ZPC.js.map → chunk-NEYZV6V5.js.map} +0 -0
- /package/dist/{chunk-ZXHODKHH.js.map → chunk-NKHNUTTY.js.map} +0 -0
- /package/dist/{chunk-JL4I7OQE.js.map → chunk-NOF2FF4K.js.map} +0 -0
- /package/dist/{chunk-WOSUYOAU.js.map → chunk-NQYC7V5N.js.map} +0 -0
- /package/dist/{chunk-ZCCKIWZU.js.map → chunk-NYA26GV2.js.map} +0 -0
- /package/dist/{chunk-N3LW5ER5.js.map → chunk-NZBEE2PR.js.map} +0 -0
- /package/dist/{chunk-DYHOBKPU.js.map → chunk-OA6T2ME3.js.map} +0 -0
- /package/dist/{chunk-WNIL2KTB.js.map → chunk-OQW4OERS.js.map} +0 -0
- /package/dist/{chunk-JJNY5MZL.js.map → chunk-OZYUE2BI.js.map} +0 -0
- /package/dist/{chunk-Y3TD7HOY.js.map → chunk-P4Q7JK4L.js.map} +0 -0
- /package/dist/{chunk-W676GY42.js.map → chunk-P772HCHI.js.map} +0 -0
- /package/dist/{chunk-4AJY7HMH.js.map → chunk-PD7MKJCM.js.map} +0 -0
- /package/dist/{chunk-ICKR3QTG.js.map → chunk-PGHSNG33.js.map} +0 -0
- /package/dist/{chunk-ZNJGEDCE.js.map → chunk-PGYYDSNX.js.map} +0 -0
- /package/dist/{chunk-KXTNTDRD.js.map → chunk-PPEHBI5O.js.map} +0 -0
- /package/dist/{chunk-5RPT32EL.js.map → chunk-PVIQDBUN.js.map} +0 -0
- /package/dist/{chunk-N3ZOZWP5.js.map → chunk-Q3HYEAVQ.js.map} +0 -0
- /package/dist/{chunk-HKQQ2NED.js.map → chunk-Q4GAPZDA.js.map} +0 -0
- /package/dist/{chunk-VUBFCHXL.js.map → chunk-Q7XLTN2D.js.map} +0 -0
- /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
- /package/dist/{chunk-YQIT3ET7.js.map → chunk-QAH3XILB.js.map} +0 -0
- /package/dist/{chunk-YH7G44WL.js.map → chunk-QLJU7UUI.js.map} +0 -0
- /package/dist/{chunk-TVMSXL3R.js.map → chunk-QO7UJXXO.js.map} +0 -0
- /package/dist/{chunk-QQHZBJMU.js.map → chunk-RGVNXES5.js.map} +0 -0
- /package/dist/{chunk-MWPD2BXO.js.map → chunk-RHVJ3L4U.js.map} +0 -0
- /package/dist/{chunk-YV4O7KDR.js.map → chunk-S6HIZQIG.js.map} +0 -0
- /package/dist/{chunk-MQVIYTH5.js.map → chunk-SAKSIN7E.js.map} +0 -0
- /package/dist/{chunk-4HBCWKIX.js.map → chunk-SGFRSRAL.js.map} +0 -0
- /package/dist/{chunk-WLLUARTC.js.map → chunk-T2G4LDU5.js.map} +0 -0
- /package/dist/{chunk-37G7M2GJ.js.map → chunk-T6QVM5Q5.js.map} +0 -0
- /package/dist/{chunk-BLNFOP2O.js.map → chunk-T6YTDEY4.js.map} +0 -0
- /package/dist/{chunk-QTLM2YY2.js.map → chunk-TI4FGQYV.js.map} +0 -0
- /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
- /package/dist/{chunk-C2I7NQC4.js.map → chunk-U2ILXZDG.js.map} +0 -0
- /package/dist/{chunk-TR7ZA67L.js.map → chunk-U2QV4TTZ.js.map} +0 -0
- /package/dist/{chunk-3YFDGFEK.js.map → chunk-U4WAAZXJ.js.map} +0 -0
- /package/dist/{chunk-UQUN2NGE.js.map → chunk-UAFSEZ2E.js.map} +0 -0
- /package/dist/{chunk-D5Y4PNC5.js.map → chunk-ULAZDF6D.js.map} +0 -0
- /package/dist/{chunk-3OWFUFZL.js.map → chunk-UMI3GYWI.js.map} +0 -0
- /package/dist/{chunk-Q7QQXNL7.js.map → chunk-UT545JBQ.js.map} +0 -0
- /package/dist/{chunk-JXK53XJW.js.map → chunk-UTUYXH72.js.map} +0 -0
- /package/dist/{chunk-E72INDBL.js.map → chunk-UXOFA3ZP.js.map} +0 -0
- /package/dist/{chunk-54OJAOXC.js.map → chunk-V6KQ5R4T.js.map} +0 -0
- /package/dist/{chunk-FLJ3RIRP.js.map → chunk-VEKTKCSB.js.map} +0 -0
- /package/dist/{chunk-UJACXYC2.js.map → chunk-VHGHF537.js.map} +0 -0
- /package/dist/{chunk-OFXCSLGX.js.map → chunk-VLH3IMJG.js.map} +0 -0
- /package/dist/{chunk-AKBL7S7A.js.map → chunk-VPGDYI63.js.map} +0 -0
- /package/dist/{chunk-6DGNMASB.js.map → chunk-VPH3TENY.js.map} +0 -0
- /package/dist/{chunk-45AON4CS.js.map → chunk-VYQZ5U3N.js.map} +0 -0
- /package/dist/{chunk-GXSHLMT4.js.map → chunk-WDSJ6SVY.js.map} +0 -0
- /package/dist/{chunk-JMDT3GQ3.js.map → chunk-WMAS6DZR.js.map} +0 -0
- /package/dist/{chunk-XE7QBHXN.js.map → chunk-WTOA52EQ.js.map} +0 -0
- /package/dist/{chunk-D22FGMGU.js.map → chunk-XNMU32XC.js.map} +0 -0
- /package/dist/{chunk-PEMXXFXL.js.map → chunk-XQJPR57I.js.map} +0 -0
- /package/dist/{chunk-54F7QIV2.js.map → chunk-XW44IFYE.js.map} +0 -0
- /package/dist/{chunk-I2KAN3YB.js.map → chunk-Y3LK6ZQG.js.map} +0 -0
- /package/dist/{chunk-7AC2UGTU.js.map → chunk-Y46R26TE.js.map} +0 -0
- /package/dist/{chunk-GQ2T44BC.js.map → chunk-YEKPQAOW.js.map} +0 -0
- /package/dist/{chunk-ZGAOA7LN.js.map → chunk-YHPSPFU5.js.map} +0 -0
- /package/dist/{chunk-F6LZHF4O.js.map → chunk-YTDUIU7X.js.map} +0 -0
- /package/dist/{chunk-CO7GH3W7.js.map → chunk-YWXCLPCX.js.map} +0 -0
- /package/dist/{chunk-RIPG3QIN.js.map → chunk-Z445LLFN.js.map} +0 -0
- /package/dist/{chunk-M7HYNXCU.js.map → chunk-ZAPP32GD.js.map} +0 -0
- /package/dist/{chunk-MT74NRLY.js.map → chunk-ZLVRCQPG.js.map} +0 -0
- /package/dist/{chunk-KSJBFT4G.js.map → chunk-ZVZTQF7E.js.map} +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import Check from '@mui/icons-material/Check';
|
|
2
|
+
import Box from '@mui/material/Box/index.js';
|
|
3
|
+
import Button from '@mui/material/Button/index.js';
|
|
4
|
+
import Chip from '@mui/material/Chip/index.js';
|
|
5
|
+
import Typography from '@mui/material/Typography/index.js';
|
|
6
|
+
import type { SxProps, Theme } from '@mui/material/styles/index.js';
|
|
7
|
+
import React from 'react';
|
|
8
|
+
|
|
9
|
+
import { rem } from '../../../tokens/relative';
|
|
10
|
+
import { SR_ONLY_SX } from '../../form/Label/Label.styles';
|
|
11
|
+
|
|
12
|
+
import type {
|
|
13
|
+
RegionMapCopy,
|
|
14
|
+
RegionMapListMode,
|
|
15
|
+
RegionMapListSort,
|
|
16
|
+
RegionMapProps,
|
|
17
|
+
RegionMapRegion,
|
|
18
|
+
} from './RegionMap.types';
|
|
19
|
+
|
|
20
|
+
/** The areas with a row: `listed`, defaulting to "not outside". */
|
|
21
|
+
export function listedRegions(
|
|
22
|
+
regions: readonly RegionMapRegion[],
|
|
23
|
+
sort: RegionMapListSort,
|
|
24
|
+
): RegionMapRegion[] {
|
|
25
|
+
const listed = regions.filter((region) => region.listed ?? region.outside !== true);
|
|
26
|
+
return sort === 'name' ? [...listed].sort((a, b) => a.name.localeCompare(b.name)) : listed;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Every listed area as a toggle button — the keyboard's and the screen
|
|
31
|
+
* reader's map, and the way to an area too small to tap. `collapsed` puts it
|
|
32
|
+
* behind one button that names the count; `shown` lays it out with a heading.
|
|
33
|
+
*/
|
|
34
|
+
export function RegionMapList({
|
|
35
|
+
regions,
|
|
36
|
+
copy,
|
|
37
|
+
mode,
|
|
38
|
+
sort,
|
|
39
|
+
onToggle,
|
|
40
|
+
testId,
|
|
41
|
+
theme,
|
|
42
|
+
}: {
|
|
43
|
+
regions: readonly RegionMapRegion[];
|
|
44
|
+
copy: RegionMapCopy;
|
|
45
|
+
mode: Exclude<RegionMapListMode, 'none'>;
|
|
46
|
+
sort: RegionMapListSort;
|
|
47
|
+
onToggle: RegionMapProps['onToggle'];
|
|
48
|
+
testId: string;
|
|
49
|
+
theme: Theme;
|
|
50
|
+
}): React.JSX.Element {
|
|
51
|
+
const [open, setOpen] = React.useState(false);
|
|
52
|
+
const listId = `${React.useId().replace(/:/g, '')}-list`;
|
|
53
|
+
const rows = listedRegions(regions, sort);
|
|
54
|
+
const visible = mode === 'shown' || open;
|
|
55
|
+
return (
|
|
56
|
+
<Box sx={{ mt: 1 }}>
|
|
57
|
+
{mode === 'collapsed' && (
|
|
58
|
+
<Button
|
|
59
|
+
variant="text"
|
|
60
|
+
size="small"
|
|
61
|
+
aria-expanded={open}
|
|
62
|
+
aria-controls={listId}
|
|
63
|
+
onClick={() => setOpen((current) => !current)}
|
|
64
|
+
data-testid={`${testId}-list-toggle`}
|
|
65
|
+
sx={{ px: 0 }}
|
|
66
|
+
>
|
|
67
|
+
{open ? copy.hideList : copy.showList(rows.length)}
|
|
68
|
+
</Button>
|
|
69
|
+
)}
|
|
70
|
+
{visible && (
|
|
71
|
+
<Box id={listId} role="group" aria-label={copy.listLabel} data-testid={`${testId}-list`} sx={{ mt: 1 }}>
|
|
72
|
+
{mode === 'shown' && (
|
|
73
|
+
<Typography variant="caption" component="p" sx={{ fontWeight: 700, color: 'text.secondary', mb: 0.5 }}>
|
|
74
|
+
{copy.listLabel}
|
|
75
|
+
</Typography>
|
|
76
|
+
)}
|
|
77
|
+
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>
|
|
78
|
+
{rows.map((region) => (
|
|
79
|
+
<RegionRow
|
|
80
|
+
key={region.id}
|
|
81
|
+
region={region}
|
|
82
|
+
states={copy.rowState}
|
|
83
|
+
onToggle={onToggle}
|
|
84
|
+
testId={testId}
|
|
85
|
+
theme={theme}
|
|
86
|
+
/>
|
|
87
|
+
))}
|
|
88
|
+
</Box>
|
|
89
|
+
</Box>
|
|
90
|
+
)}
|
|
91
|
+
</Box>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The focus ring every row shows from the keyboard, pressed or not. */
|
|
96
|
+
function focusRing(theme: Theme): { outline: string; outlineOffset: string } {
|
|
97
|
+
return { outline: `${rem(theme, 2)} solid ${theme.palette.primary.main}`, outlineOffset: rem(theme, 2) };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** A row's look: inverted when pressed, holding under hover and focus. */
|
|
101
|
+
function rowSx(pressed: boolean, outside: boolean, theme: Theme): SxProps<Theme> {
|
|
102
|
+
const ring = focusRing(theme);
|
|
103
|
+
if (!pressed) {
|
|
104
|
+
return { color: outside ? 'text.secondary' : 'text.primary', '&.Mui-focusVisible': ring };
|
|
105
|
+
}
|
|
106
|
+
const inverted = { bgcolor: 'text.primary', color: 'background.paper' };
|
|
107
|
+
return {
|
|
108
|
+
...inverted,
|
|
109
|
+
'& .MuiChip-icon': { color: 'inherit' },
|
|
110
|
+
'&:hover': inverted,
|
|
111
|
+
'&.Mui-focusVisible': { ...inverted, ...ring },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** The state a screen reader hears after the name, if any. */
|
|
116
|
+
function rowState(pressed: boolean, outside: boolean, states: RegionMapCopy['rowState']): string | null {
|
|
117
|
+
if (pressed) return states.excluded;
|
|
118
|
+
return outside ? states.outside : null;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* One area: pressed, filled and checked when excluded — never colour alone —
|
|
123
|
+
* with its state spelled out for a screen reader. The inverted colours hold
|
|
124
|
+
* under hover and keyboard focus, where MUI's own would wash them out.
|
|
125
|
+
*/
|
|
126
|
+
function RegionRow({
|
|
127
|
+
region,
|
|
128
|
+
states,
|
|
129
|
+
onToggle,
|
|
130
|
+
testId,
|
|
131
|
+
theme,
|
|
132
|
+
}: {
|
|
133
|
+
region: RegionMapRegion;
|
|
134
|
+
states: RegionMapCopy['rowState'];
|
|
135
|
+
onToggle: RegionMapProps['onToggle'];
|
|
136
|
+
testId: string;
|
|
137
|
+
theme: Theme;
|
|
138
|
+
}): React.JSX.Element {
|
|
139
|
+
const pressed = region.excluded === true;
|
|
140
|
+
const sx = rowSx(pressed, region.outside === true, theme);
|
|
141
|
+
const state = rowState(pressed, region.outside === true, states);
|
|
142
|
+
return (
|
|
143
|
+
<Chip
|
|
144
|
+
data-testid={`${testId}-row-${region.id}`}
|
|
145
|
+
label={
|
|
146
|
+
<Box component="span" sx={{ display: 'inline-flex', gap: 0.75, alignItems: 'baseline' }}>
|
|
147
|
+
<span>{region.name}</span>
|
|
148
|
+
{region.detail && (
|
|
149
|
+
<Box component="span" sx={{ fontSize: rem(theme, 11), opacity: 0.75 }}>
|
|
150
|
+
{region.detail}
|
|
151
|
+
</Box>
|
|
152
|
+
)}
|
|
153
|
+
{state && (
|
|
154
|
+
<Box component="span" sx={SR_ONLY_SX}>
|
|
155
|
+
{state}
|
|
156
|
+
</Box>
|
|
157
|
+
)}
|
|
158
|
+
</Box>
|
|
159
|
+
}
|
|
160
|
+
icon={pressed ? <Check fontSize="small" /> : undefined}
|
|
161
|
+
variant={pressed ? 'filled' : 'outlined'}
|
|
162
|
+
aria-pressed={onToggle ? pressed : undefined}
|
|
163
|
+
onClick={onToggle ? () => onToggle(region.id) : undefined}
|
|
164
|
+
sx={sx}
|
|
165
|
+
/>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { RegionMap } from './RegionMap';
|
|
2
|
+
export { decodePolyline, hitRegion, projectionAt } from './RegionMap.helpers';
|
|
3
|
+
export type { AreaGeometry, PlanePoint, PlaneRegion } from './RegionMap.helpers';
|
|
4
|
+
export type {
|
|
5
|
+
RegionMapCircle,
|
|
6
|
+
RegionMapCopy,
|
|
7
|
+
RegionMapListMode,
|
|
8
|
+
RegionMapListSort,
|
|
9
|
+
RegionMapPoint,
|
|
10
|
+
RegionMapProps,
|
|
11
|
+
RegionMapRegion,
|
|
12
|
+
RegionMapRing,
|
|
13
|
+
} from './RegionMap.types';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# RegionMap Test Status Tracking
|
|
2
|
+
|
|
3
|
+
## Test Files Status
|
|
4
|
+
|
|
5
|
+
- [x] `RegionMap.test.stories.tsx` created
|
|
6
|
+
- [x] `__tests__/region-map-helpers.test.ts` — the geometry: even-odd with a
|
|
7
|
+
hole, distance, which area a tap means (hole, smallest, sliver within the
|
|
8
|
+
tolerance even from inside a big neighbour, nothing beyond it), the view,
|
|
9
|
+
label placement, `extent` on 200k values, the projection and the decoder
|
|
10
|
+
- [x] `__tests__/region-map.test.tsx` — what is drawn (areas, hatch + name for
|
|
11
|
+
excluded only, several highlights, nothing with no centre and no areas),
|
|
12
|
+
what a tap reports, read-only, and the list (collapsed by default with its
|
|
13
|
+
count, `aria-expanded`, `aria-pressed`, state in words, outside areas off
|
|
14
|
+
the list and out of the count, `listed`, sort by name, detail, `none`)
|
|
15
|
+
|
|
16
|
+
## Storybook Tests Status
|
|
17
|
+
|
|
18
|
+
| Test Name | Status | Pass/Fail | Notes |
|
|
19
|
+
| --- | --- | --- | --- |
|
|
20
|
+
| A tap on an area reports its id | Written | — | `test-storybook` is not in this repo's CI; jsdom twin in `region-map.test.tsx` |
|
|
21
|
+
| Excluded areas are hatched and named | Written | — | same |
|
|
22
|
+
| The collapsed list opens and toggles from the keyboard | Written | — | same |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# RegionMap
|
|
2
|
+
|
|
3
|
+
A hand-drawn map of named areas around a centre; a tap toggles an area.
|
|
4
|
+
Product-free — built for a delivery host's excluded neighbourhoods, named for
|
|
5
|
+
what it draws.
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
- [x] Component, types, helpers, fixtures (real IBGE outlines, public data)
|
|
10
|
+
- [x] Docs (`RegionMap.md`), stories, test stories, vitest suites
|
|
11
|
+
- [x] Catalog entry, `data-display` export, `entries.json` subpath
|
|
12
|
+
- [ ] React Native build — not planned until a native host needs it
|
|
13
|
+
- [ ] Zoom and pan — the list covers areas too small to tap
|
|
@@ -21,6 +21,7 @@ export * from './FleetMap';
|
|
|
21
21
|
export * from './MapPreview';
|
|
22
22
|
export * from './Popover';
|
|
23
23
|
export * from './Progress';
|
|
24
|
+
export * from './RegionMap';
|
|
24
25
|
export * from './SectionOnboarding/SectionOnboarding';
|
|
25
26
|
export * from './Sheet';
|
|
26
27
|
export * from './StatCard';
|
|
@@ -48,6 +48,10 @@ serves a supplier form, a store-location form or a delivery checkout.
|
|
|
48
48
|
stands level with `sm` `Input`s
|
|
49
49
|
- `labelPlacement`: `above` (default) stacks the label over the box; `inside` draws it
|
|
50
50
|
in the box and floats it up on focus or a value, exactly as `Input`'s label does
|
|
51
|
+
- `autoComplete`: the `<input>`'s `autocomplete` (default `postal-code`). Pass `off` on a
|
|
52
|
+
form for somebody else's address (a supplier), or the browser offers the signed-in
|
|
53
|
+
person's own CEP and the lookup then fills their street (FUT-4140). Same prop on
|
|
54
|
+
`Fields.CepField`
|
|
51
55
|
|
|
52
56
|
### State Props
|
|
53
57
|
|
|
@@ -154,7 +158,8 @@ the lookup. The pure helpers (`formatCep`, `isValidCep`) live in
|
|
|
154
158
|
"Buscando endereço…" / "Endereço preenchido pelo CEP" without stealing focus
|
|
155
159
|
- `aria-busy` reflects the in-flight lookup
|
|
156
160
|
- `aria-describedby` links the input to its status region
|
|
157
|
-
- `inputMode="numeric"`
|
|
161
|
+
- `inputMode="numeric"` sits on the `<input>` (through `inputProps`), so it brings up the
|
|
162
|
+
numeric keypad on mobile; at the top level it landed on the wrapper `div` and did nothing
|
|
158
163
|
- With `labelPlacement="inside"` the label is the `Input`'s own, associated to the input
|
|
159
164
|
by `for`/`id`, so `getByLabelText` and screen readers name the field the same way
|
|
160
|
-
- `autoComplete="postal-code"` lets the browser's own autofill participate
|
|
165
|
+
- `autoComplete="postal-code"` (the default) lets the browser's own autofill participate
|
|
@@ -118,6 +118,12 @@ function CepStatus({
|
|
|
118
118
|
);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
/** What only the `<input>` can act on. Hoisted: one object for every render. */
|
|
122
|
+
const CEP_INPUT_PROPS = { inputMode: 'numeric' } as const;
|
|
123
|
+
|
|
124
|
+
/** `postal-code` unless the caller said otherwise (`off` for somebody else's address). */
|
|
125
|
+
const autoCompleteOf = (autoComplete: string | undefined): string => autoComplete ?? 'postal-code';
|
|
126
|
+
|
|
121
127
|
/** The stacked label over the box (`labelPlacement="above"`), or nothing when there is no label. */
|
|
122
128
|
function AboveLabel({
|
|
123
129
|
name,
|
|
@@ -181,6 +187,7 @@ export function CepField({
|
|
|
181
187
|
copy,
|
|
182
188
|
size, // undefined reaches `Input`, whose own default is `md`
|
|
183
189
|
labelPlacement = 'above',
|
|
190
|
+
autoComplete,
|
|
184
191
|
}: CepFieldProps): React.ReactElement {
|
|
185
192
|
const testId = dataTestId ?? `cep-field-${name}`;
|
|
186
193
|
|
|
@@ -206,8 +213,12 @@ export function CepField({
|
|
|
206
213
|
id={name}
|
|
207
214
|
name={name}
|
|
208
215
|
type="text"
|
|
209
|
-
inputMode
|
|
210
|
-
|
|
216
|
+
// On the `<input>`, through `inputProps`: a top-level `inputMode` is a
|
|
217
|
+
// prop `Input` does not recognise, so it landed on the wrapper `div`
|
|
218
|
+
// and the phone kept opening the letter keyboard for eight digits
|
|
219
|
+
// (FUT-1440's CepField row).
|
|
220
|
+
inputProps={CEP_INPUT_PROPS}
|
|
221
|
+
autoComplete={autoCompleteOf(autoComplete)}
|
|
211
222
|
size={size}
|
|
212
223
|
// `inside`: the label is the Input's own, drawn in the box and floating
|
|
213
224
|
// up on focus or a value — what every other `Input` in the form does.
|
|
@@ -89,4 +89,12 @@ export interface CepFieldProps {
|
|
|
89
89
|
* is the same height as its neighbours.
|
|
90
90
|
*/
|
|
91
91
|
labelPlacement?: 'above' | 'inside';
|
|
92
|
+
/**
|
|
93
|
+
* The `<input>`'s `autocomplete`. Defaults to `postal-code`, which lets the
|
|
94
|
+
* browser offer the signed-in person's own CEP — right on their own address
|
|
95
|
+
* form, wrong on a form for somebody else's (a supplier): pass `off` there,
|
|
96
|
+
* or the owner's CEP goes in and the lookup fills the owner's street
|
|
97
|
+
* (FUT-4140).
|
|
98
|
+
*/
|
|
99
|
+
autoComplete?: string;
|
|
92
100
|
}
|
|
@@ -17,6 +17,36 @@ const isAllowed = (variant: string, text: string) => (PATTERNS[variant] ?? /.*/)
|
|
|
17
17
|
const padTo = (digits: string[], length: number) =>
|
|
18
18
|
Array.from({ length }, (_, i) => digits[i] ?? '');
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* What a change to the numeric FIRST slot is, now that its `maxLength` is the
|
|
22
|
+
* code's length rather than 1 (FUT-4144).
|
|
23
|
+
*
|
|
24
|
+
* That slot carries `one-time-code`, and the phone's SMS fill (or a password
|
|
25
|
+
* manager) writes the WHOLE code into it as one change, not a paste — kept to
|
|
26
|
+
* one character, the code lost every digit but the last. So:
|
|
27
|
+
*
|
|
28
|
+
* - `overtype`: a keystroke into the already-filled slot (its old character
|
|
29
|
+
* plus the new one). Ignored, exactly as `maxLength={1}` refused it before.
|
|
30
|
+
* - `code`: anything else longer than one character, written in one go.
|
|
31
|
+
* Spread across the slots like a paste.
|
|
32
|
+
*
|
|
33
|
+
* Every other slot and variant keeps `maxLength={1}` and never gets here.
|
|
34
|
+
*/
|
|
35
|
+
function firstSlotFill(variant: string, index: number, inputValue: string, current: string) {
|
|
36
|
+
if (variant !== 'numeric' || index !== 0 || inputValue.length < 2) return null;
|
|
37
|
+
const overtype = inputValue.length === 2 && current !== '' && inputValue.includes(current);
|
|
38
|
+
return overtype ? 'overtype' : 'code';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The code inside a first-slot fill. A phone that INSERTS the SMS code at the
|
|
43
|
+
* caret rather than replacing the slot leaves the digit already there in
|
|
44
|
+
* front: `4` + `482913` arrives as `4482913`, which spread as-is would give
|
|
45
|
+
* `448291`. Longer than the code and led by that digit: the digit is dropped.
|
|
46
|
+
*/
|
|
47
|
+
const codeOfFill = (inputValue: string, current: string, length: number): string =>
|
|
48
|
+
inputValue.length > length && current !== '' && inputValue.startsWith(current) ? inputValue.slice(1) : inputValue;
|
|
49
|
+
|
|
20
50
|
interface OtpInput {
|
|
21
51
|
variant: string;
|
|
22
52
|
length: number;
|
|
@@ -55,8 +85,23 @@ export const useOtpDigits = ({ variant, length, value, onChange, onComplete }: O
|
|
|
55
85
|
[length, onChange, onComplete],
|
|
56
86
|
);
|
|
57
87
|
|
|
88
|
+
/** Lays a whole code across the slots from the first: a paste, or an OS/SMS fill. */
|
|
89
|
+
const spread = useCallback(
|
|
90
|
+
(text: string) => {
|
|
91
|
+
const code = text.slice(0, length);
|
|
92
|
+
// An empty code is not a rejection, but it is nothing to apply either.
|
|
93
|
+
if (!code || !isAllowed(variant, code)) return;
|
|
94
|
+
|
|
95
|
+
setDigits(padTo(code.split(''), length));
|
|
96
|
+
publish(code);
|
|
97
|
+
},
|
|
98
|
+
[variant, length, publish],
|
|
99
|
+
);
|
|
100
|
+
|
|
58
101
|
const handleInputChange = useCallback(
|
|
59
102
|
(index: number, inputValue: string) => {
|
|
103
|
+
const fill = firstSlotFill(variant, index, inputValue, digits[0] ?? '');
|
|
104
|
+
if (fill) return fill === 'code' ? spread(codeOfFill(inputValue, digits[0] ?? '', length)) : undefined;
|
|
60
105
|
if (!isAllowed(variant, inputValue)) return;
|
|
61
106
|
|
|
62
107
|
const next = [...digits];
|
|
@@ -68,7 +113,7 @@ export const useOtpDigits = ({ variant, length, value, onChange, onComplete }: O
|
|
|
68
113
|
focusSlot(index + 1);
|
|
69
114
|
}
|
|
70
115
|
},
|
|
71
|
-
[variant, digits, length, publish, focusSlot],
|
|
116
|
+
[variant, digits, length, publish, focusSlot, spread],
|
|
72
117
|
);
|
|
73
118
|
|
|
74
119
|
const handleKeyDown = useCallback(
|
|
@@ -89,15 +134,9 @@ export const useOtpDigits = ({ variant, length, value, onChange, onComplete }: O
|
|
|
89
134
|
const handlePaste = useCallback(
|
|
90
135
|
(e: React.ClipboardEvent) => {
|
|
91
136
|
e.preventDefault();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// An empty paste is not a rejection, but it is nothing to apply either.
|
|
95
|
-
if (!pasted || !isAllowed(variant, pasted)) return;
|
|
96
|
-
|
|
97
|
-
setDigits(padTo(pasted.split(''), length));
|
|
98
|
-
publish(pasted);
|
|
137
|
+
spread(e.clipboardData.getData('text'));
|
|
99
138
|
},
|
|
100
|
-
[
|
|
139
|
+
[spread],
|
|
101
140
|
);
|
|
102
141
|
|
|
103
142
|
return { digits, inputRefs, handleInputChange, handleKeyDown, handlePaste };
|
|
@@ -161,7 +161,12 @@ function CodeVerification() {
|
|
|
161
161
|
|
|
162
162
|
The InputOTP component is designed with accessibility in mind:
|
|
163
163
|
|
|
164
|
-
- **ARIA Labels**:
|
|
164
|
+
- **ARIA Labels**: The container is a `role="group"`, so the `aria-label` you pass names
|
|
165
|
+
the slots together
|
|
166
|
+
- **Phone keypad** (`variant="numeric"`, FUT-4144): every slot `<input>` carries
|
|
167
|
+
`inputmode="numeric"` and `pattern="[0-9]*"`, and the first slot
|
|
168
|
+
`autocomplete="one-time-code"` so the phone can offer a code from an SMS. The
|
|
169
|
+
`alphanumeric` and `masked` variants carry none of the three
|
|
165
170
|
- **Keyboard Navigation**: Full keyboard support for all interactions
|
|
166
171
|
- **Focus Management**: Clear focus indicators and logical tab order
|
|
167
172
|
- **Screen Reader Support**: Announces field positions and values
|
|
@@ -15,6 +15,41 @@ const StyledOTPInput = styled(TextField, {
|
|
|
15
15
|
!['customColor', 'customSize', 'glass', 'gradient'].includes(prop as string),
|
|
16
16
|
})<OtpSlotFlags>(({ theme, ...flags }) => ({ ...otpSlotSx(theme, flags) }));
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* What tells a phone that a `numeric` code is digits (FUT-4144).
|
|
20
|
+
*
|
|
21
|
+
* The hook already refused letters, but nothing reached the `<input>` to say
|
|
22
|
+
* so, and the courier's six-digit join code opened the letter keyboard.
|
|
23
|
+
* `inputMode` picks the keypad; `pattern` is what iOS reads for the same; and
|
|
24
|
+
* `one-time-code` on the FIRST slot lets the phone offer a code from an SMS —
|
|
25
|
+
* the first slot, because it is the one that takes a paste and spreads it.
|
|
26
|
+
* `alphanumeric` and `masked` are left exactly as they were.
|
|
27
|
+
*/
|
|
28
|
+
function keypadProps(variant: InputOTPProps['variant'], index: number): Record<string, string> {
|
|
29
|
+
if (variant !== 'numeric') return {};
|
|
30
|
+
return {
|
|
31
|
+
inputMode: 'numeric',
|
|
32
|
+
pattern: '[0-9]*',
|
|
33
|
+
...(index === 0 ? { autoComplete: 'one-time-code' } : {}),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* One character per slot — except the numeric FIRST slot, which carries
|
|
39
|
+
* `one-time-code`: the phone's SMS fill writes the whole code there in one
|
|
40
|
+
* change, and a `maxLength` of 1 would cut it to one digit before the hook
|
|
41
|
+
* could spread it.
|
|
42
|
+
*
|
|
43
|
+
* The code's length PLUS ONE: a phone that INSERTS the code at the caret keeps
|
|
44
|
+
* the digit already there in front (`4` + `482913`), and the browser caps that
|
|
45
|
+
* insertion at `maxlength` BEFORE the hook sees it. At the bare length it
|
|
46
|
+
* arrived as `448291` — a wrong code that looks whole. One more character lets
|
|
47
|
+
* the hook see the leading digit and drop it. A keystroke into the slot once
|
|
48
|
+
* filled is still refused, by the hook, as `maxLength={1}` refused it.
|
|
49
|
+
*/
|
|
50
|
+
const slotMaxLength = (variant: InputOTPProps['variant'], index: number, length: number): number =>
|
|
51
|
+
variant === 'numeric' && index === 0 ? length + 1 : 1;
|
|
52
|
+
|
|
18
53
|
const DEFAULTS = {
|
|
19
54
|
variant: 'numeric',
|
|
20
55
|
color: 'primary',
|
|
@@ -49,6 +84,9 @@ export const InputOTP = forwardRef<HTMLDivElement, InputOTPProps>((props, ref) =
|
|
|
49
84
|
<Box
|
|
50
85
|
ref={ref}
|
|
51
86
|
data-testid={dataTestId}
|
|
87
|
+
// A group, so the `aria-label` a caller gives the code names the six
|
|
88
|
+
// slots together: on a plain `div` it named nothing anyone could reach.
|
|
89
|
+
role="group"
|
|
52
90
|
sx={{ display: 'flex', gap: 1, justifyContent: 'center', alignItems: 'center' }}
|
|
53
91
|
{...rest}
|
|
54
92
|
>
|
|
@@ -72,9 +110,10 @@ export const InputOTP = forwardRef<HTMLDivElement, InputOTPProps>((props, ref) =
|
|
|
72
110
|
error={error}
|
|
73
111
|
disabled={disabled}
|
|
74
112
|
inputProps={{
|
|
75
|
-
maxLength:
|
|
113
|
+
maxLength: slotMaxLength(variant, index, length),
|
|
76
114
|
style: { textAlign: 'center' },
|
|
77
115
|
'data-testid': dataTestId ? `${dataTestId}-slot-${index}` : undefined,
|
|
116
|
+
...keypadProps(variant, index),
|
|
78
117
|
}}
|
|
79
118
|
/>
|
|
80
119
|
))}
|
|
@@ -34,6 +34,11 @@ export interface CepFieldProps {
|
|
|
34
34
|
size?: InputSize;
|
|
35
35
|
/** `above` (default) stacks the label over the box; `inside` floats it in the box like `Input`. */
|
|
36
36
|
labelPlacement?: 'above' | 'inside';
|
|
37
|
+
/**
|
|
38
|
+
* The `<input>`'s `autocomplete`. Defaults to `postal-code`; pass `off` when
|
|
39
|
+
* the form holds somebody else's address (FUT-4140).
|
|
40
|
+
*/
|
|
41
|
+
autoComplete?: string;
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
const PARTS: readonly CepPart[] = ['street', 'neighborhood', 'city', 'state'];
|
|
@@ -114,6 +119,7 @@ export function CepField({
|
|
|
114
119
|
copy,
|
|
115
120
|
size,
|
|
116
121
|
labelPlacement,
|
|
122
|
+
autoComplete,
|
|
117
123
|
}: CepFieldProps): React.ReactElement {
|
|
118
124
|
const { values, errors, setFieldValue } = useFormContext();
|
|
119
125
|
const { write, clearOwned } = useOwnedAutofill();
|
|
@@ -151,6 +157,7 @@ export function CepField({
|
|
|
151
157
|
debounceMs={debounceMs}
|
|
152
158
|
size={size}
|
|
153
159
|
labelPlacement={labelPlacement}
|
|
160
|
+
autoComplete={autoComplete}
|
|
154
161
|
dataTestId={`total-form-field-${name}`}
|
|
155
162
|
/>
|
|
156
163
|
);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
+
import type { InputHTMLAttributes } from 'react';
|
|
3
4
|
import React from 'react';
|
|
4
5
|
|
|
5
6
|
import { FormControl, FormLabel, FormMessage } from '../../Form';
|
|
@@ -16,6 +17,59 @@ export interface TextFieldProps {
|
|
|
16
17
|
type?: string;
|
|
17
18
|
/** Placeholder shown when the field is empty. */
|
|
18
19
|
placeholder?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The `autocomplete` attribute of the `<input>`. Omitted, the browser decides
|
|
22
|
+
* from the `name` — which is how a supplier's `name`/`phone`/`email` gets
|
|
23
|
+
* offered the signed-in owner's own (FUT-4140). Pass `off` for somebody
|
|
24
|
+
* else's data, `new-password` for a secret the password manager must not
|
|
25
|
+
* fill. An `inputProps.autoComplete` wins over this one.
|
|
26
|
+
*/
|
|
27
|
+
autoComplete?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Attributes for the `<input>` element itself — `inputMode`, `autoCapitalize`,
|
|
30
|
+
* `autoCorrect`, `spellCheck`, `maxLength`, `pattern`, `enterKeyHint`…
|
|
31
|
+
*
|
|
32
|
+
* They reach the `<input>`, never the wrapper `div`, where a keypad hint does
|
|
33
|
+
* nothing. What the field owns — `id`, `name`, `type`, `value`, `onChange`,
|
|
34
|
+
* `placeholder` and the `total-form-field-<name>` test id — is not
|
|
35
|
+
* overridable here.
|
|
36
|
+
*/
|
|
37
|
+
inputProps?: TextFieldInputProps;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** The `<input>` attributes {@link TextField} lets a caller set (see `inputProps`). */
|
|
41
|
+
export type TextFieldInputProps = Omit<
|
|
42
|
+
InputHTMLAttributes<HTMLInputElement>,
|
|
43
|
+
'id' | 'name' | 'type' | 'value' | 'defaultValue' | 'onChange' | 'placeholder' | 'size' | 'color'
|
|
44
|
+
>;
|
|
45
|
+
|
|
46
|
+
/** The keys {@link TextFieldInputProps} leaves out, also dropped at runtime. */
|
|
47
|
+
const FIELD_OWNED = [
|
|
48
|
+
'id',
|
|
49
|
+
'name',
|
|
50
|
+
'type',
|
|
51
|
+
'value',
|
|
52
|
+
'defaultValue',
|
|
53
|
+
'onChange',
|
|
54
|
+
'placeholder',
|
|
55
|
+
'size',
|
|
56
|
+
'color',
|
|
57
|
+
'data-testid',
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The caller's `<input>` attributes, minus what the field owns.
|
|
62
|
+
*
|
|
63
|
+
* The type already refuses those keys; plain JS or a cast does not, and a
|
|
64
|
+
* renamed id, name or test id would silently unbind the label, the form value
|
|
65
|
+
* or every spec that finds the field by it. So they are dropped here too, and
|
|
66
|
+
* the field's own test id is written last.
|
|
67
|
+
*/
|
|
68
|
+
function callerInputProps(inputProps: TextFieldInputProps | undefined, testId: string): Record<string, unknown> {
|
|
69
|
+
const kept = Object.fromEntries(
|
|
70
|
+
Object.entries(inputProps ?? {}).filter(([key]) => !FIELD_OWNED.includes(key)),
|
|
71
|
+
);
|
|
72
|
+
return { ...kept, 'data-testid': testId };
|
|
19
73
|
}
|
|
20
74
|
|
|
21
75
|
/**
|
|
@@ -26,7 +80,14 @@ export interface TextFieldProps {
|
|
|
26
80
|
* Renders its error via `total-form-field-<name>-message` and the input via
|
|
27
81
|
* `total-form-field-<name>`.
|
|
28
82
|
*/
|
|
29
|
-
export function TextField({
|
|
83
|
+
export function TextField({
|
|
84
|
+
name,
|
|
85
|
+
label,
|
|
86
|
+
type = 'text',
|
|
87
|
+
placeholder,
|
|
88
|
+
autoComplete,
|
|
89
|
+
inputProps,
|
|
90
|
+
}: TextFieldProps): React.ReactElement {
|
|
30
91
|
const { values, errors, setFieldValue } = useFormContext();
|
|
31
92
|
const error = errors[name];
|
|
32
93
|
const testId = `total-form-field-${name}`;
|
|
@@ -45,6 +106,8 @@ export function TextField({ name, label, type = 'text', placeholder }: TextField
|
|
|
45
106
|
placeholder={placeholder}
|
|
46
107
|
value={values[name] ?? ''}
|
|
47
108
|
error={Boolean(error)}
|
|
109
|
+
autoComplete={autoComplete}
|
|
110
|
+
inputProps={callerInputProps(inputProps, testId)}
|
|
48
111
|
data-testid={testId}
|
|
49
112
|
onChange={(event) => setFieldValue(name, event.target.value)}
|
|
50
113
|
/>
|
|
@@ -3,7 +3,7 @@ export type { CategoryFieldProps } from './CategoryField';
|
|
|
3
3
|
export { CepField } from './CepField';
|
|
4
4
|
export type { CepFieldProps, CepFills } from './CepField';
|
|
5
5
|
export { TextField } from './TextField';
|
|
6
|
-
export type { TextFieldProps } from './TextField';
|
|
6
|
+
export type { TextFieldInputProps, TextFieldProps } from './TextField';
|
|
7
7
|
export { SelectField } from './SelectField';
|
|
8
8
|
export type { SelectFieldProps } from './SelectField';
|
|
9
9
|
export { ToggleField } from './ToggleField';
|
|
@@ -9,4 +9,4 @@ export type { SubmitButtonProps } from './SubmitButton';
|
|
|
9
9
|
|
|
10
10
|
export * as Fields from './Fields';
|
|
11
11
|
export { CategoryField, TextField, SelectField } from './Fields';
|
|
12
|
-
export type { CategoryFieldProps, TextFieldProps, SelectFieldProps } from './Fields';
|
|
12
|
+
export type { CategoryFieldProps, TextFieldInputProps, TextFieldProps, SelectFieldProps } from './Fields';
|
|
@@ -219,6 +219,7 @@ export const EN_US_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
219
219
|
// rather than being carried over. A translated label above an unchanged
|
|
220
220
|
// mask is the shape that gets a date entered backwards.
|
|
221
221
|
dayMask: "mm/dd/yyyy",
|
|
222
|
+
dayInvalid: "That date does not exist.",
|
|
222
223
|
clearAllFilters: "Clear all filters",
|
|
223
224
|
// The KEYS are the package's own preset ids and stay as they are — the
|
|
224
225
|
// surface matches on them. Only the labels beside them are words.
|
|
@@ -213,6 +213,7 @@ export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
213
213
|
rangeInclusiveNote: "Ambas as datas entram no resultado.",
|
|
214
214
|
rangeStart: "De",
|
|
215
215
|
dayMask: "dd/mm/aaaa",
|
|
216
|
+
dayInvalid: "Essa data não existe.",
|
|
216
217
|
clearAllFilters: "Limpar todos os filtros",
|
|
217
218
|
rangePresets: {
|
|
218
219
|
hoje: "Hoje",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/InputOTP/InputOTP.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React, { forwardRef } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport { useOtpDigits } from './InputOTP.hooks';\nimport { otpSlotSx } from './InputOTP.styles';\nimport type { OtpSlotFlags } from './InputOTP.styles';\nimport type { InputOTPProps } from './InputOTP.types';\n\nconst StyledOTPInput = styled(TextField, {\n shouldForwardProp: (prop) =>\n !['customColor', 'customSize', 'glass', 'gradient'].includes(prop as string),\n})<OtpSlotFlags>(({ theme, ...flags }) => ({ ...otpSlotSx(theme, flags) }));\n\nconst DEFAULTS = {\n variant: 'numeric',\n color: 'primary',\n size: 'md',\n length: 6,\n value: '',\n glass: false,\n gradient: false,\n autoFocus: false,\n error: false,\n disabled: false,\n} satisfies Partial<InputOTPProps>;\n\ntype ResolvedProps = InputOTPProps & Required<Pick<InputOTPProps, keyof typeof DEFAULTS>>;\n\nexport const InputOTP = forwardRef<HTMLDivElement, InputOTPProps>((props, ref) => {\n const {\n variant, color, size, length, value, onChange, onComplete,\n glass, gradient, autoFocus, error, disabled, dataTestId,\n ...rest\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n\n const { digits, inputRefs, handleInputChange, handleKeyDown, handlePaste } = useOtpDigits({\n variant,\n length,\n value,\n onChange,\n onComplete,\n });\n\n return (\n <Box\n ref={ref}\n data-testid={dataTestId}\n sx={{ display: 'flex', gap: 1, justifyContent: 'center', alignItems: 'center' }}\n {...rest}\n >\n {digits.map((digit, index) => (\n <StyledOTPInput\n key={index}\n ref={(el: HTMLDivElement | null) => {\n inputRefs.current[index] = el?.querySelector('input') || null;\n }}\n customColor={color}\n customSize={size}\n glass={glass}\n gradient={gradient}\n // `masked` keeps the digit in state and shows a bullet in its place.\n value={variant === 'masked' ? (digit ? '•' : '') : digit}\n onChange={(e) => handleInputChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n // Only the first slot takes a paste; it fills the rest itself.\n onPaste={index === 0 ? handlePaste : undefined}\n autoFocus={autoFocus && index === 0}\n error={error}\n disabled={disabled}\n inputProps={{\n maxLength: 1,\n style: { textAlign: 'center' },\n 'data-testid': dataTestId ? `${dataTestId}-slot-${index}` : undefined,\n }}\n />\n ))}\n </Box>\n );\n});\n\nInputOTP.displayName = 'InputOTP';\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,eAAe;AACtB,SAAS,cAAc;AACvB,SAAgB,kBAAkB;AAoD1B;AA3CR,IAAM,iBAAiB,OAAO,WAAW;AAAA,EACvC,mBAAmB,CAAC,SAClB,CAAC,CAAC,eAAe,cAAc,SAAS,UAAU,EAAE,SAAS,IAAc;AAC/E,CAAC,EAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,OAAO,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE;AAE1E,IAAM,WAAW;AAAA,EACf,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AACZ;AAIO,IAAM,WAAW,WAA0C,CAAC,OAAO,QAAQ;AAChF,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAO;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAU;AAAA,IAC/C;AAAA,IAAO;AAAA,IAAU;AAAA,IAAW;AAAA,IAAO;AAAA,IAAU;AAAA,IAC7C,GAAG;AAAA,EACL,IAAI,aAAa,OAAO,QAAQ;AAEhC,QAAM,EAAE,QAAQ,WAAW,mBAAmB,eAAe,YAAY,IAAI,aAAa;AAAA,IACxF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,gBAAgB,UAAU,YAAY,SAAS;AAAA,MAC7E,GAAG;AAAA,MAEH,iBAAO,IAAI,CAAC,OAAO,UAClB;AAAA,QAAC;AAAA;AAAA,UAEC,KAAK,CAAC,OAA8B;AAClC,sBAAU,QAAQ,KAAK,IAAI,IAAI,cAAc,OAAO,KAAK;AAAA,UAC3D;AAAA,UACA,aAAa;AAAA,UACb,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UAEA,OAAO,YAAY,WAAY,QAAQ,WAAM,KAAM;AAAA,UACnD,UAAU,CAAC,MAAM,kBAAkB,OAAO,EAAE,OAAO,KAAK;AAAA,UACxD,WAAW,CAAC,MAAM,cAAc,OAAO,CAAC;AAAA,UAExC,SAAS,UAAU,IAAI,cAAc;AAAA,UACrC,WAAW,aAAa,UAAU;AAAA,UAClC;AAAA,UACA;AAAA,UACA,YAAY;AAAA,YACV,WAAW;AAAA,YACX,OAAO,EAAE,WAAW,SAAS;AAAA,YAC7B,eAAe,aAAa,GAAG,UAAU,SAAS,KAAK,KAAK;AAAA,UAC9D;AAAA;AAAA,QArBK;AAAA,MAsBP,CACD;AAAA;AAAA,EACH;AAEJ,CAAC;AAED,SAAS,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-filter-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport Box from \"@mui/material/Box/index.js\";\nimport Link from \"@mui/material/Link/index.js\";\n\nimport { StackedModal, StackedModalContent } from \"../../feedback/StackedModal\";\nimport { TableFilter } from \"../../layout/TableFilter\";\n\nimport { PillControl } from \"./data-views-category-pill\";\nimport { PanelRangeField } from \"./data-views-range-pill\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport type {\n FilterFieldConfig,\n RangeFieldConfig,\n RangeValue,\n} from \"./data-views-types\";\nimport { sxRem } from \"../../../tokens/relative\";\n\n/* ── Filter panel ────────────────────────────────────────────────────────── */\n\nexport interface GridFilterPanelProps<T extends Record<string, unknown>> {\n testIdPrefix: string;\n search: string;\n fields: FilterFieldConfig<T>[];\n rangeFields: RangeFieldConfig<T>[];\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n onSearchChange: (value: string) => void;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onChangeRange: (fieldId: string, range: RangeValue) => void;\n onClearField: (fieldId: string) => void;\n onClearAll: () => void;\n}\n\n/** One pill field: a compact multi-select for long lists, else a checkbox list. */\nfunction PillField<T extends Record<string, unknown>>({\n field,\n selected,\n testIdPrefix,\n onTogglePill,\n onClearField,\n}: {\n field: FilterFieldConfig<T>;\n selected: string[];\n testIdPrefix: string;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onClearField: (fieldId: string) => void;\n}): React.JSX.Element {\n const testId = `${testIdPrefix}-filter-${field.id}`;\n // `searchEnabled` forces the searchable multi-select; a plain `multiselect`\n // keeps the auto \"search only when the list is long\" rule. `category` is the\n // hierarchical tree — see PillControl.\n if (field.searchEnabled || field.control === \"multiselect\" || field.control === \"category\") {\n return (\n <PillControl\n fieldId={field.id}\n pill={field}\n selected={selected}\n onTogglePill={onTogglePill}\n onClearField={onClearField}\n testIdPrefix={testIdPrefix}\n layout=\"stacked\"\n />\n );\n }\n return (\n <TableFilter.CheckboxField\n label={field.label}\n options={field.options}\n selected={new Set(selected)}\n onToggle={(value, checked) => onTogglePill(field.id, value, checked)}\n testId={testId}\n />\n );\n}\n\n/** The filter controls (keyword + pill facets + numeric ranges), surface-agnostic. */\nfunction FilterControls<T extends Record<string, unknown>>({\n testIdPrefix,\n search,\n fields,\n rangeFields,\n pills,\n ranges,\n onSearchChange,\n onTogglePill,\n onChangeRange,\n onClearField,\n}: Omit<GridFilterPanelProps<T>, \"onClearAll\">): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <>\n <TableFilter.Keyword\n value={search}\n onChange={onSearchChange}\n label={copy.search.allColumnsLabel}\n placeholder={copy.search.keywordPlaceholder}\n testId={`${testIdPrefix}-search-all`}\n />\n {(fields.length > 0 || rangeFields.length > 0) && (\n <TableFilter.Section title={copy.filters.panelTitle}>\n {fields.map((field) => (\n <PillField\n key={field.id}\n field={field}\n selected={pills[field.id] ?? []}\n testIdPrefix={testIdPrefix}\n onTogglePill={onTogglePill}\n onClearField={onClearField}\n />\n ))}\n {rangeFields.map((field) => (\n <PanelRangeField\n key={field.id}\n field={field}\n value={ranges[field.id] ?? {}}\n onChange={(range) => onChangeRange(field.id, range)}\n testId={`${testIdPrefix}-range-${field.id}`}\n />\n ))}\n </TableFilter.Section>\n )}\n </>\n );\n}\n\n/** The slide-in filter panel: keyword + checkbox facets + numeric ranges. */\nexport function GridFilterPanel<T extends Record<string, unknown>>(\n props: GridFilterPanelProps<T>,\n): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <TableFilter.Panel\n onClearAll={props.onClearAll}\n clearTestId={`${props.testIdPrefix}-clear-filters`}\n ariaLabel={copy.filters.panelTitle}\n >\n <FilterControls {...props} />\n </TableFilter.Panel>\n );\n}\n\n/** Props for the modal filter surface used below the inline breakpoint. */\ninterface FilterDialogProps<T extends Record<string, unknown>> extends GridFilterPanelProps<T> {\n open: boolean;\n onClose: () => void;\n}\n\n/**\n * The same filter controls in a centered modal — used on smaller screens where the\n * slide-in panel would overlap the table. The \"Filtros\" toolbar button opens it.\n */\nexport function FilterDialog<T extends Record<string, unknown>>({\n open,\n onClose,\n ...props\n}: FilterDialogProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <StackedModal\n open={open}\n onClose={onClose}\n navigationTitle={copy.filters.panelTitle}\n backLabel={copy.nav.goBack}\n modalId={`${props.testIdPrefix}-filters`}\n maxWidth=\"xs\"\n dataTestId={`${props.testIdPrefix}-filter-dialog`}\n >\n <StackedModalContent>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\n <Box sx={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <Link\n component=\"button\"\n type=\"button\"\n underline=\"hover\"\n onClick={props.onClearAll}\n data-testid={`${props.testIdPrefix}-clear-filters`}\n sx={{ fontSize: sxRem(12), color: \"text.secondary\" }}\n >\n {copy.filters.clearAllFilters}\n </Link>\n </Box>\n <FilterControls {...props} />\n </Box>\n </StackedModalContent>\n </StackedModal>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAChB,OAAO,UAAU;AAmDX,SAqCF,UArCE,KA8CE,YA9CF;AAnBN,SAAS,UAA6C;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMsB;AACpB,QAAM,SAAS,GAAG,YAAY,WAAW,MAAM,EAAE;AAIjD,MAAI,MAAM,iBAAiB,MAAM,YAAY,iBAAiB,MAAM,YAAY,YAAY;AAC1F,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAO;AAAA;AAAA,IACT;AAAA,EAEJ;AACA,SACE;AAAA,IAAC,YAAY;AAAA,IAAZ;AAAA,MACC,OAAO,MAAM;AAAA,MACb,SAAS,MAAM;AAAA,MACf,UAAU,IAAI,IAAI,QAAQ;AAAA,MAC1B,UAAU,CAAC,OAAO,YAAY,aAAa,MAAM,IAAI,OAAO,OAAO;AAAA,MACnE;AAAA;AAAA,EACF;AAEJ;AAGA,SAAS,eAAkD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmE;AACjE,QAAM,OAAO,iBAAiB;AAC9B,SACE,iCACE;AAAA;AAAA,MAAC,YAAY;AAAA,MAAZ;AAAA,QACC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,KAAK,OAAO;AAAA,QACnB,aAAa,KAAK,OAAO;AAAA,QACzB,QAAQ,GAAG,YAAY;AAAA;AAAA,IACzB;AAAA,KACE,OAAO,SAAS,KAAK,YAAY,SAAS,MAC1C,qBAAC,YAAY,SAAZ,EAAoB,OAAO,KAAK,QAAQ,YACtC;AAAA,aAAO,IAAI,CAAC,UACX;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,UAAU,MAAM,MAAM,EAAE,KAAK,CAAC;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QALK,MAAM;AAAA,MAMb,CACD;AAAA,MACA,YAAY,IAAI,CAAC,UAChB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,UAC5B,UAAU,CAAC,UAAU,cAAc,MAAM,IAAI,KAAK;AAAA,UAClD,QAAQ,GAAG,YAAY,UAAU,MAAM,EAAE;AAAA;AAAA,QAJpC,MAAM;AAAA,MAKb,CACD;AAAA,OACH;AAAA,KAEJ;AAEJ;AAGO,SAAS,gBACd,OACmB;AACnB,QAAM,OAAO,iBAAiB;AAC9B,SACE;AAAA,IAAC,YAAY;AAAA,IAAZ;AAAA,MACC,YAAY,MAAM;AAAA,MAClB,aAAa,GAAG,MAAM,YAAY;AAAA,MAClC,WAAW,KAAK,QAAQ;AAAA,MAExB,8BAAC,kBAAgB,GAAG,OAAO;AAAA;AAAA,EAC7B;AAEJ;AAYO,SAAS,aAAgD;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4C;AAC1C,QAAM,OAAO,iBAAiB;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,iBAAiB,KAAK,QAAQ;AAAA,MAC9B,WAAW,KAAK,IAAI;AAAA,MACpB,SAAS,GAAG,MAAM,YAAY;AAAA,MAC9B,UAAS;AAAA,MACT,YAAY,GAAG,MAAM,YAAY;AAAA,MAEjC,8BAAC,uBACC,+BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,GAC5D;AAAA,4BAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,WAAW,GACrD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAM;AAAA,YACf,eAAa,GAAG,MAAM,YAAY;AAAA,YAClC,IAAI,EAAE,UAAU,MAAM,EAAE,GAAG,OAAO,iBAAiB;AAAA,YAElD,eAAK,QAAQ;AAAA;AAAA,QAChB,GACF;AAAA,QACA,oBAAC,kBAAgB,GAAG,OAAO;AAAA,SAC7B,GACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
|