@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,88 @@
|
|
|
1
|
+
import Box from '@mui/material/Box/index.js';
|
|
2
|
+
import { useTheme } from '@mui/material/styles/index.js';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
|
|
5
|
+
import { useRegionMap } from './RegionMap.hooks';
|
|
6
|
+
import type { RegionMapProps } from './RegionMap.types';
|
|
7
|
+
import { RegionMapDrawing } from './RegionMapDrawing';
|
|
8
|
+
import { RegionMapLegend } from './RegionMapLegend';
|
|
9
|
+
import { RegionMapList } from './RegionMapList';
|
|
10
|
+
|
|
11
|
+
/** One empty list, so the default does not change identity per render. */
|
|
12
|
+
const NO_IDS: readonly string[] = [];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A hand-drawn map of named areas around a centre; a tap toggles an area.
|
|
16
|
+
*
|
|
17
|
+
* Drawn as inline SVG over a plain background — no tile server, no API key,
|
|
18
|
+
* nothing fetched — because the question it answers is "which of THESE areas",
|
|
19
|
+
* not "what is the street called". Four choices shape it:
|
|
20
|
+
*
|
|
21
|
+
* - **The list is the accessible way in.** The drawing is one `role="img"`
|
|
22
|
+
* with a name; its areas are not tab stops (dozens of them, many too small to
|
|
23
|
+
* tap on a phone). Every area is also a toggle button in the list beneath,
|
|
24
|
+
* with `aria-pressed`, which is what a keyboard and a screen reader use —
|
|
25
|
+
* and what reaches a sliver no finger can.
|
|
26
|
+
* - **Excluded is hatched AND named, never only coloured,** and never in the
|
|
27
|
+
* error colour: leaving an area out is a choice, not a failure.
|
|
28
|
+
* - **The hit test is ours, not only the browser's.** A mouse click on a path
|
|
29
|
+
* is that path. A finger's tap takes the SMALLEST area within a few pixels'
|
|
30
|
+
* worth of metres (`hitRegion`), so a sliver beside a big area can be hit
|
|
31
|
+
* from the map; one too thin even for that is still on the list.
|
|
32
|
+
* - **A toggle is cheap.** Geometry is projected once per `rings` identity,
|
|
33
|
+
* and the base layer is memoised, so a tap re-renders the hatch and labels.
|
|
34
|
+
*/
|
|
35
|
+
export function RegionMap({
|
|
36
|
+
regions,
|
|
37
|
+
center,
|
|
38
|
+
circles,
|
|
39
|
+
onToggle,
|
|
40
|
+
highlightedIds = NO_IDS,
|
|
41
|
+
copy,
|
|
42
|
+
listMode = 'collapsed',
|
|
43
|
+
listSort = 'given',
|
|
44
|
+
maxHeight,
|
|
45
|
+
className,
|
|
46
|
+
dataTestId = 'region-map',
|
|
47
|
+
}: RegionMapProps): React.JSX.Element | null {
|
|
48
|
+
const theme = useTheme();
|
|
49
|
+
const model = useRegionMap({ regions, center, circles, onToggle });
|
|
50
|
+
const { view } = model;
|
|
51
|
+
if (view === null && regions.length === 0) return null;
|
|
52
|
+
return (
|
|
53
|
+
<Box className={className} data-testid={dataTestId}>
|
|
54
|
+
{view && (
|
|
55
|
+
<>
|
|
56
|
+
<RegionMapDrawing
|
|
57
|
+
model={{ ...model, view }}
|
|
58
|
+
showCenter={center !== null}
|
|
59
|
+
highlightedIds={highlightedIds}
|
|
60
|
+
maxHeight={maxHeight}
|
|
61
|
+
label={copy.mapLabel}
|
|
62
|
+
tappable={onToggle !== undefined}
|
|
63
|
+
testId={dataTestId}
|
|
64
|
+
theme={theme}
|
|
65
|
+
/>
|
|
66
|
+
<RegionMapLegend
|
|
67
|
+
copy={copy}
|
|
68
|
+
outermostMetres={model.outermostMetres}
|
|
69
|
+
showCenter={center !== null}
|
|
70
|
+
theme={theme}
|
|
71
|
+
testId={dataTestId}
|
|
72
|
+
/>
|
|
73
|
+
</>
|
|
74
|
+
)}
|
|
75
|
+
{listMode !== 'none' && (
|
|
76
|
+
<RegionMapList
|
|
77
|
+
regions={regions}
|
|
78
|
+
copy={copy}
|
|
79
|
+
mode={listMode}
|
|
80
|
+
sort={listSort}
|
|
81
|
+
onToggle={onToggle}
|
|
82
|
+
testId={dataTestId}
|
|
83
|
+
theme={theme}
|
|
84
|
+
/>
|
|
85
|
+
)}
|
|
86
|
+
</Box>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contract of `RegionMap` — a hand-drawn map of named areas (polygons with
|
|
3
|
+
* holes) around a centre, where a tap toggles an area's `excluded` state.
|
|
4
|
+
*
|
|
5
|
+
* Product-free: an area is a bairro, a delivery zone, a sales territory or a
|
|
6
|
+
* parking sector alike. Coordinates are plain WGS 84 latitude/longitude, and
|
|
7
|
+
* every word arrives through `copy`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** A latitude/longitude pair, in that order. */
|
|
11
|
+
export type RegionMapPoint = readonly [latitude: number, longitude: number];
|
|
12
|
+
|
|
13
|
+
/** One closed ring: the first point repeated last is allowed, not required. */
|
|
14
|
+
export type RegionMapRing = readonly RegionMapPoint[];
|
|
15
|
+
|
|
16
|
+
/** One named area. */
|
|
17
|
+
export interface RegionMapRegion {
|
|
18
|
+
/** Stable id — what `onToggle` reports. */
|
|
19
|
+
id: string;
|
|
20
|
+
/** The area's name: its label on the map and its row in the list. */
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* Every ring of every polygon of the area, holes included. Inside is decided
|
|
24
|
+
* by the EVEN-ODD rule over all of them, so a hole is just a ring inside its
|
|
25
|
+
* polygon, and a multi-part area is several outer rings.
|
|
26
|
+
*/
|
|
27
|
+
rings: readonly RegionMapRing[];
|
|
28
|
+
/** Drawn hatched, labelled, and pressed in the list. */
|
|
29
|
+
excluded?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Drawn faded, for an area shown for context beyond the circles (a ring may
|
|
32
|
+
* grow). Still tappable on the map; left off the list unless `listed`.
|
|
33
|
+
*/
|
|
34
|
+
outside?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the area has a row in the list. Defaults to `!outside`, so the
|
|
37
|
+
* list — and its count — covers the areas inside the circles while the map
|
|
38
|
+
* still draws the faded context around them.
|
|
39
|
+
*/
|
|
40
|
+
listed?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Pre-formatted secondary text on the list row, e.g. "2.7 km away", or a
|
|
43
|
+
* size tag such as "tiny" for an area too small to tap.
|
|
44
|
+
*/
|
|
45
|
+
detail?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** A circle drawn around the centre, e.g. a delivery ring. */
|
|
49
|
+
export interface RegionMapCircle {
|
|
50
|
+
radiusMetres: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Every word the map prints or announces. */
|
|
54
|
+
export interface RegionMapCopy {
|
|
55
|
+
/** The drawing's accessible name (`role="img"`). */
|
|
56
|
+
mapLabel: string;
|
|
57
|
+
/** The legend entry for a hatched (excluded) area. */
|
|
58
|
+
legendExcluded: string;
|
|
59
|
+
/** The legend entry for the outermost circle, given its radius in metres. */
|
|
60
|
+
legendCircle: (radiusMetres: number) => string;
|
|
61
|
+
/** The legend entry for the centre's dot. */
|
|
62
|
+
legendCenter: string;
|
|
63
|
+
/** The list's accessible name and its heading when shown. */
|
|
64
|
+
listLabel: string;
|
|
65
|
+
/** The button that reveals the list, given how many areas it holds. */
|
|
66
|
+
showList: (count: number) => string;
|
|
67
|
+
/** The button that hides it again. */
|
|
68
|
+
hideList: string;
|
|
69
|
+
/**
|
|
70
|
+
* A list row's state, read after its name by a screen reader: "excluded"
|
|
71
|
+
* for an excluded area (pressed, filled, checked), "outside" for a listed
|
|
72
|
+
* `outside` one (faded). Neither is shown; the row's look carries it.
|
|
73
|
+
*/
|
|
74
|
+
rowState: { excluded: string; outside: string };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The order of the list: as given (e.g. nearest first), or by name. */
|
|
78
|
+
export type RegionMapListSort = 'given' | 'name';
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* How the accessible list of areas — one toggle button each — is offered.
|
|
82
|
+
*
|
|
83
|
+
* - `shown`: always under the map (a computer, where there is room);
|
|
84
|
+
* - `collapsed`: behind one button (a phone) — still a keyboard's way in;
|
|
85
|
+
* - `none`: not rendered. Only for a host that offers its own list.
|
|
86
|
+
*/
|
|
87
|
+
export type RegionMapListMode = 'shown' | 'collapsed' | 'none';
|
|
88
|
+
|
|
89
|
+
export interface RegionMapProps {
|
|
90
|
+
regions: readonly RegionMapRegion[];
|
|
91
|
+
/**
|
|
92
|
+
* Where the map is centred, and where the dot and the circles are drawn.
|
|
93
|
+
* `null` with no regions renders NOTHING rather than a map of `0, 0`.
|
|
94
|
+
*/
|
|
95
|
+
center: { latitude: number; longitude: number } | null;
|
|
96
|
+
/** Circles around the centre; the view fits the largest. */
|
|
97
|
+
circles?: readonly RegionMapCircle[];
|
|
98
|
+
/**
|
|
99
|
+
* A tap on an area, or a press of its list button. Omit it and the map is
|
|
100
|
+
* read-only: nothing is tappable and the list rows are not buttons.
|
|
101
|
+
*/
|
|
102
|
+
onToggle?: (id: string) => void;
|
|
103
|
+
/**
|
|
104
|
+
* Areas to point at — e.g. a search's results — outlined and labelled. More
|
|
105
|
+
* than one at once: a search lists several hits.
|
|
106
|
+
*/
|
|
107
|
+
highlightedIds?: readonly string[];
|
|
108
|
+
copy: RegionMapCopy;
|
|
109
|
+
listMode?: RegionMapListMode;
|
|
110
|
+
/** The list's order; `'given'` keeps the order of `regions`. */
|
|
111
|
+
listSort?: RegionMapListSort;
|
|
112
|
+
/** The drawing's largest height, any CSS length; it stays square inside it. */
|
|
113
|
+
maxHeight?: string;
|
|
114
|
+
className?: string;
|
|
115
|
+
/** Every child TEST id derives from it. */
|
|
116
|
+
dataTestId?: string;
|
|
117
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import Box from '@mui/material/Box/index.js';
|
|
2
|
+
import Typography from '@mui/material/Typography/index.js';
|
|
3
|
+
import { alpha, type Theme } from '@mui/material/styles/index.js';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
import { rem, remPx } from '../../../tokens/relative';
|
|
7
|
+
|
|
8
|
+
import { labelPosition, type AreaGeometry, type DrawnRegion, type PlaneBox } from './RegionMap.helpers';
|
|
9
|
+
import type { RegionMapModel } from './RegionMap.hooks';
|
|
10
|
+
|
|
11
|
+
export interface RegionMapDrawingProps {
|
|
12
|
+
model: RegionMapModel & { view: PlaneBox };
|
|
13
|
+
showCenter: boolean;
|
|
14
|
+
highlightedIds: readonly string[];
|
|
15
|
+
maxHeight: string | undefined;
|
|
16
|
+
label: string;
|
|
17
|
+
tappable: boolean;
|
|
18
|
+
testId: string;
|
|
19
|
+
theme: Theme;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The drawing: one `role="img"`, square, with HTML labels laid over it.
|
|
24
|
+
*
|
|
25
|
+
* Strokes are `non-scaling-stroke` and labels are HTML at theme sizes, so the
|
|
26
|
+
* picture reads the same at 320 px and 1600 px; `maxHeight` caps it on a wide
|
|
27
|
+
* screen. Where it sits in a wider box is the host's call.
|
|
28
|
+
*
|
|
29
|
+
* The base areas are a memoised layer: a toggle changes `excluded`, not the
|
|
30
|
+
* geometry, so only the hatch, highlight and label layers re-render.
|
|
31
|
+
*/
|
|
32
|
+
export function RegionMapDrawing({
|
|
33
|
+
model,
|
|
34
|
+
showCenter,
|
|
35
|
+
highlightedIds,
|
|
36
|
+
maxHeight,
|
|
37
|
+
label,
|
|
38
|
+
tappable,
|
|
39
|
+
testId,
|
|
40
|
+
theme,
|
|
41
|
+
}: RegionMapDrawingProps): React.JSX.Element {
|
|
42
|
+
const hatchId = `${React.useId().replace(/:/g, '')}-hatch`;
|
|
43
|
+
const { view, drawn } = model;
|
|
44
|
+
const wanted = new Set(highlightedIds);
|
|
45
|
+
const highlighted = drawn.filter((d) => wanted.has(d.id));
|
|
46
|
+
const labelled = [...drawn.filter((d) => d.excluded), ...highlighted.filter((d) => !d.excluded)];
|
|
47
|
+
const base = drawn.map((d) => ({ id: d.id, name: d.name, geometry: d.geometry, outside: d.outside === true }));
|
|
48
|
+
return (
|
|
49
|
+
<Box
|
|
50
|
+
sx={{
|
|
51
|
+
position: 'relative',
|
|
52
|
+
width: '100%',
|
|
53
|
+
maxWidth: maxHeight,
|
|
54
|
+
maxHeight,
|
|
55
|
+
aspectRatio: '1 / 1',
|
|
56
|
+
border: 1,
|
|
57
|
+
borderColor: 'divider',
|
|
58
|
+
borderRadius: 1,
|
|
59
|
+
overflow: 'hidden',
|
|
60
|
+
bgcolor: 'background.paper',
|
|
61
|
+
}}
|
|
62
|
+
data-testid={`${testId}-canvas`}
|
|
63
|
+
>
|
|
64
|
+
<svg
|
|
65
|
+
viewBox={`${view.minX} ${view.minY} ${view.spanX} ${view.spanY}`}
|
|
66
|
+
role="img"
|
|
67
|
+
aria-label={label}
|
|
68
|
+
onPointerDown={model.onPointerDown}
|
|
69
|
+
onClick={model.onClick}
|
|
70
|
+
style={{ display: 'block', width: '100%', height: '100%', cursor: tappable ? 'pointer' : 'default' }}
|
|
71
|
+
>
|
|
72
|
+
<Hatch id={hatchId} pitch={view.spanX / 70} theme={theme} />
|
|
73
|
+
<BaseAreas areas={base} testId={testId} theme={theme} />
|
|
74
|
+
<ExcludedAreas drawn={drawn} hatchId={hatchId} testId={testId} theme={theme} />
|
|
75
|
+
<Circles radii={model.radii} theme={theme} />
|
|
76
|
+
{highlighted.map((d) => (
|
|
77
|
+
<path
|
|
78
|
+
key={`h-${d.id}`}
|
|
79
|
+
d={d.geometry.path}
|
|
80
|
+
fillRule="evenodd"
|
|
81
|
+
vectorEffect="non-scaling-stroke"
|
|
82
|
+
fill={alpha(theme.palette.primary.main, 0.3)}
|
|
83
|
+
stroke={theme.palette.primary.main}
|
|
84
|
+
strokeWidth={2.5}
|
|
85
|
+
pointerEvents="none"
|
|
86
|
+
data-testid={`${testId}-highlight-${d.id}`}
|
|
87
|
+
/>
|
|
88
|
+
))}
|
|
89
|
+
{showCenter && (
|
|
90
|
+
<circle
|
|
91
|
+
cx={0}
|
|
92
|
+
cy={0}
|
|
93
|
+
r={view.spanX / 90}
|
|
94
|
+
fill={theme.palette.primary.main}
|
|
95
|
+
stroke={theme.palette.background.paper}
|
|
96
|
+
strokeWidth={2}
|
|
97
|
+
vectorEffect="non-scaling-stroke"
|
|
98
|
+
pointerEvents="none"
|
|
99
|
+
data-testid={`${testId}-center`}
|
|
100
|
+
/>
|
|
101
|
+
)}
|
|
102
|
+
</svg>
|
|
103
|
+
{labelled.map((d) => (
|
|
104
|
+
<AreaLabel key={`l-${d.id}`} area={d} view={view} testId={testId} theme={theme} />
|
|
105
|
+
))}
|
|
106
|
+
</Box>
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** The hatch an excluded area is filled with: lines, not a colour. */
|
|
111
|
+
function Hatch({ id, pitch, theme }: { id: string; pitch: number; theme: Theme }): React.JSX.Element {
|
|
112
|
+
return (
|
|
113
|
+
<defs>
|
|
114
|
+
<pattern id={id} width={pitch} height={pitch} patternUnits="userSpaceOnUse" patternTransform="rotate(45)">
|
|
115
|
+
<rect width={pitch} height={pitch} fill={alpha(theme.palette.text.primary, 0.1)} />
|
|
116
|
+
<rect width={pitch / 3} height={pitch} fill={theme.palette.text.secondary} />
|
|
117
|
+
</pattern>
|
|
118
|
+
</defs>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
interface BaseArea {
|
|
123
|
+
id: string;
|
|
124
|
+
name: string;
|
|
125
|
+
geometry: AreaGeometry;
|
|
126
|
+
outside: boolean;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
interface BaseAreasProps {
|
|
130
|
+
areas: readonly BaseArea[];
|
|
131
|
+
testId: string;
|
|
132
|
+
theme: Theme;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Same areas, same geometry objects, same look: nothing to re-render. */
|
|
136
|
+
function sameBase(a: BaseAreasProps, b: BaseAreasProps): boolean {
|
|
137
|
+
if (a.theme !== b.theme || a.testId !== b.testId || a.areas.length !== b.areas.length) return false;
|
|
138
|
+
return a.areas.every((area, i) => {
|
|
139
|
+
const other = b.areas[i]!;
|
|
140
|
+
return (
|
|
141
|
+
area.id === other.id &&
|
|
142
|
+
area.geometry === other.geometry &&
|
|
143
|
+
area.outside === other.outside &&
|
|
144
|
+
area.name === other.name
|
|
145
|
+
);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Every area's fill and border — the tap targets. Memoised: see `sameBase`. */
|
|
150
|
+
const BaseAreas = React.memo(function BaseAreas({ areas, testId, theme }: BaseAreasProps): React.JSX.Element {
|
|
151
|
+
const { palette } = theme;
|
|
152
|
+
return (
|
|
153
|
+
<>
|
|
154
|
+
{areas.map((d) => (
|
|
155
|
+
<path
|
|
156
|
+
key={d.id}
|
|
157
|
+
d={d.geometry.path}
|
|
158
|
+
fillRule="evenodd"
|
|
159
|
+
vectorEffect="non-scaling-stroke"
|
|
160
|
+
fill={d.outside ? palette.background.paper : palette.action.hover}
|
|
161
|
+
stroke={palette.divider}
|
|
162
|
+
strokeWidth={1}
|
|
163
|
+
data-region-id={d.id}
|
|
164
|
+
data-testid={`${testId}-area-${d.id}`}
|
|
165
|
+
>
|
|
166
|
+
<title>{d.name}</title>
|
|
167
|
+
</path>
|
|
168
|
+
))}
|
|
169
|
+
</>
|
|
170
|
+
);
|
|
171
|
+
}, sameBase);
|
|
172
|
+
|
|
173
|
+
/** The hatch over every excluded area. */
|
|
174
|
+
function ExcludedAreas({
|
|
175
|
+
drawn,
|
|
176
|
+
hatchId,
|
|
177
|
+
testId,
|
|
178
|
+
theme,
|
|
179
|
+
}: {
|
|
180
|
+
drawn: readonly DrawnRegion[];
|
|
181
|
+
hatchId: string;
|
|
182
|
+
testId: string;
|
|
183
|
+
theme: Theme;
|
|
184
|
+
}): React.JSX.Element {
|
|
185
|
+
return (
|
|
186
|
+
<>
|
|
187
|
+
{drawn
|
|
188
|
+
.filter((d) => d.excluded)
|
|
189
|
+
.map((d) => (
|
|
190
|
+
<path
|
|
191
|
+
key={`x-${d.id}`}
|
|
192
|
+
d={d.geometry.path}
|
|
193
|
+
fillRule="evenodd"
|
|
194
|
+
vectorEffect="non-scaling-stroke"
|
|
195
|
+
fill={`url(#${hatchId})`}
|
|
196
|
+
stroke={theme.palette.text.secondary}
|
|
197
|
+
strokeWidth={1.5}
|
|
198
|
+
pointerEvents="none"
|
|
199
|
+
data-testid={`${testId}-excluded-${d.id}`}
|
|
200
|
+
/>
|
|
201
|
+
))}
|
|
202
|
+
</>
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** The dashed circles around the centre. */
|
|
207
|
+
function Circles({ radii, theme }: { radii: readonly number[]; theme: Theme }): React.JSX.Element {
|
|
208
|
+
return (
|
|
209
|
+
<>
|
|
210
|
+
{radii.map((radius) => (
|
|
211
|
+
<circle
|
|
212
|
+
key={radius}
|
|
213
|
+
cx={0}
|
|
214
|
+
cy={0}
|
|
215
|
+
r={radius}
|
|
216
|
+
fill="none"
|
|
217
|
+
stroke={theme.palette.info.main}
|
|
218
|
+
strokeWidth={1.75}
|
|
219
|
+
strokeDasharray="7 5"
|
|
220
|
+
vectorEffect="non-scaling-stroke"
|
|
221
|
+
pointerEvents="none"
|
|
222
|
+
/>
|
|
223
|
+
))}
|
|
224
|
+
</>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** Where a label's centre may go along one axis so the whole label stays in view. */
|
|
229
|
+
function clampCentre(wanted: number, half: number, span: number, gap: number): number {
|
|
230
|
+
if (span <= 2 * (half + gap)) return span / 2;
|
|
231
|
+
return Math.min(span - half - gap, Math.max(half + gap, wanted));
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* An area's name over the drawing, at the theme's type size whatever the
|
|
236
|
+
* width — and moved in by its own measured size, so it is never clipped at
|
|
237
|
+
* the drawing's edge.
|
|
238
|
+
*/
|
|
239
|
+
function AreaLabel({
|
|
240
|
+
area,
|
|
241
|
+
view,
|
|
242
|
+
testId,
|
|
243
|
+
theme,
|
|
244
|
+
}: {
|
|
245
|
+
area: DrawnRegion;
|
|
246
|
+
view: PlaneBox;
|
|
247
|
+
testId: string;
|
|
248
|
+
theme: Theme;
|
|
249
|
+
}): React.JSX.Element {
|
|
250
|
+
const at = labelPosition(area.geometry.rings, view);
|
|
251
|
+
const ref = React.useRef<HTMLSpanElement>(null);
|
|
252
|
+
const gap = remPx(theme, 4);
|
|
253
|
+
// Measured by a ResizeObserver, never in a layout effect: the observer's
|
|
254
|
+
// first call comes after the browser's own layout, so mounting a label on a
|
|
255
|
+
// tap forces no synchronous reflow of the drawing.
|
|
256
|
+
React.useEffect(() => {
|
|
257
|
+
const label = ref.current;
|
|
258
|
+
const box = label?.parentElement;
|
|
259
|
+
if (!label || !box || typeof ResizeObserver === 'undefined') return undefined;
|
|
260
|
+
const observer = new ResizeObserver(() => {
|
|
261
|
+
const width = box.clientWidth;
|
|
262
|
+
const height = box.clientHeight;
|
|
263
|
+
if (width === 0 || height === 0) return;
|
|
264
|
+
const x = clampCentre(at.fractionX * width, label.offsetWidth / 2, width, gap);
|
|
265
|
+
const y = clampCentre(at.fractionY * height, label.offsetHeight / 2, height, gap);
|
|
266
|
+
label.style.left = `${(x / width) * 100}%`;
|
|
267
|
+
label.style.top = `${(y / height) * 100}%`;
|
|
268
|
+
});
|
|
269
|
+
observer.observe(box);
|
|
270
|
+
observer.observe(label);
|
|
271
|
+
return () => observer.disconnect();
|
|
272
|
+
}, [at.fractionX, at.fractionY, gap]);
|
|
273
|
+
const halo = `0 0 ${rem(theme, 3)} ${theme.palette.background.paper}`;
|
|
274
|
+
return (
|
|
275
|
+
<Typography
|
|
276
|
+
ref={ref}
|
|
277
|
+
component="span"
|
|
278
|
+
aria-hidden
|
|
279
|
+
data-testid={`${testId}-label-${area.id}`}
|
|
280
|
+
// Position as an inline style, not `sx`: a per-label class would insert
|
|
281
|
+
// a new CSS rule (and a style recalculation) on every tap.
|
|
282
|
+
style={{ left: `${(at.fractionX * 100).toFixed(2)}%`, top: `${(at.fractionY * 100).toFixed(2)}%` }}
|
|
283
|
+
sx={{
|
|
284
|
+
position: 'absolute',
|
|
285
|
+
transform: 'translate(-50%, -50%)',
|
|
286
|
+
fontSize: rem(theme, 11),
|
|
287
|
+
fontWeight: 700,
|
|
288
|
+
lineHeight: 1.1,
|
|
289
|
+
textAlign: 'center',
|
|
290
|
+
maxWidth: '45%',
|
|
291
|
+
color: 'text.primary',
|
|
292
|
+
pointerEvents: 'none',
|
|
293
|
+
textShadow: `${halo}, ${halo}`,
|
|
294
|
+
}}
|
|
295
|
+
>
|
|
296
|
+
{area.name}
|
|
297
|
+
</Typography>
|
|
298
|
+
);
|
|
299
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import Box from '@mui/material/Box/index.js';
|
|
2
|
+
import Typography from '@mui/material/Typography/index.js';
|
|
3
|
+
import { alpha, type Theme } from '@mui/material/styles/index.js';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
|
|
6
|
+
import { rem } from '../../../tokens/relative';
|
|
7
|
+
|
|
8
|
+
import type { RegionMapCopy } from './RegionMap.types';
|
|
9
|
+
|
|
10
|
+
/** What the hatch, the dashed circle and the dot mean — in words. */
|
|
11
|
+
export function RegionMapLegend({
|
|
12
|
+
copy,
|
|
13
|
+
outermostMetres,
|
|
14
|
+
showCenter,
|
|
15
|
+
theme,
|
|
16
|
+
testId,
|
|
17
|
+
}: {
|
|
18
|
+
copy: RegionMapCopy;
|
|
19
|
+
outermostMetres: number | null;
|
|
20
|
+
showCenter: boolean;
|
|
21
|
+
theme: Theme;
|
|
22
|
+
testId: string;
|
|
23
|
+
}): React.JSX.Element {
|
|
24
|
+
const swatch = rem(theme, 14);
|
|
25
|
+
const { palette } = theme;
|
|
26
|
+
const stripe = rem(theme, 2);
|
|
27
|
+
return (
|
|
28
|
+
<Box
|
|
29
|
+
data-testid={`${testId}-legend`}
|
|
30
|
+
sx={{ display: 'flex', flexWrap: 'wrap', columnGap: 2, rowGap: 0.5, mt: 1, alignItems: 'center' }}
|
|
31
|
+
>
|
|
32
|
+
<LegendItem text={copy.legendExcluded}>
|
|
33
|
+
<Box
|
|
34
|
+
component="span"
|
|
35
|
+
sx={{
|
|
36
|
+
width: swatch,
|
|
37
|
+
height: swatch,
|
|
38
|
+
border: 1,
|
|
39
|
+
borderColor: 'text.secondary',
|
|
40
|
+
borderRadius: 0.5,
|
|
41
|
+
background: `repeating-linear-gradient(135deg, ${palette.text.secondary} 0 ${stripe}, ${alpha(palette.text.primary, 0.1)} ${stripe} ${rem(theme, 5)})`,
|
|
42
|
+
}}
|
|
43
|
+
/>
|
|
44
|
+
</LegendItem>
|
|
45
|
+
{outermostMetres !== null && (
|
|
46
|
+
<LegendItem text={copy.legendCircle(outermostMetres)}>
|
|
47
|
+
<Box
|
|
48
|
+
component="span"
|
|
49
|
+
sx={{
|
|
50
|
+
width: swatch,
|
|
51
|
+
height: swatch,
|
|
52
|
+
borderWidth: stripe,
|
|
53
|
+
borderStyle: 'dashed',
|
|
54
|
+
borderColor: 'info.main',
|
|
55
|
+
borderRadius: '50%',
|
|
56
|
+
}}
|
|
57
|
+
/>
|
|
58
|
+
</LegendItem>
|
|
59
|
+
)}
|
|
60
|
+
{showCenter && (
|
|
61
|
+
<LegendItem text={copy.legendCenter}>
|
|
62
|
+
<Box
|
|
63
|
+
component="span"
|
|
64
|
+
sx={{ width: rem(theme, 10), height: rem(theme, 10), bgcolor: 'primary.main', borderRadius: '50%' }}
|
|
65
|
+
/>
|
|
66
|
+
</LegendItem>
|
|
67
|
+
)}
|
|
68
|
+
</Box>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function LegendItem({ text, children }: { text: string; children: React.ReactNode }): React.JSX.Element {
|
|
73
|
+
return (
|
|
74
|
+
<Box component="span" sx={{ display: 'inline-flex', alignItems: 'center', gap: 0.75 }}>
|
|
75
|
+
{children}
|
|
76
|
+
<Typography component="span" variant="caption" color="text.secondary">
|
|
77
|
+
{text}
|
|
78
|
+
</Typography>
|
|
79
|
+
</Box>
|
|
80
|
+
);
|
|
81
|
+
}
|