@12-apps/ui 6.97.0 → 6.98.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/components-catalog.md +1 -1
- package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +3 -3
- package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js +2 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +5 -5
- package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -5
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +8 -8
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +8 -8
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +4 -4
- package/dist/_internal/components/data-display/Carousel/Carousel.js +6 -6
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +3 -3
- package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
- package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +51 -51
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +66 -66
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +3 -3
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +9 -9
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +11 -11
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +32 -32
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +48 -48
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +31 -31
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +29 -29
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +30 -30
- package/dist/_internal/components/data-display/DataViews/data-views-preset-chips.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +15 -15
- package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +16 -16
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +9 -9
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
- package/dist/_internal/components/data-display/DayRuler/DayRuler.js +7 -7
- package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +2 -2
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +10 -10
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +12 -12
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +3 -3
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +3 -3
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +6 -6
- 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.js +8 -8
- package/dist/_internal/components/data-display/RegionMap/RegionMap.js +5 -5
- package/dist/_internal/components/data-display/RegionMap/RegionMapDrawing.js +2 -2
- package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +6 -6
- package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.labels.js +2 -2
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +4 -4
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +6 -6
- package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +2 -2
- package/dist/_internal/components/data-display/Stepper/Stepper.js +2 -2
- package/dist/_internal/components/data-display/Table/Table.js +4 -4
- package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -2
- package/dist/_internal/components/data-display/Table/TableParts.js +2 -2
- package/dist/_internal/components/data-display/Timeline/Timeline.js +2 -2
- package/dist/_internal/components/data-display/index.js +86 -86
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +5 -5
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +4 -4
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -6
- package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +5 -5
- package/dist/_internal/components/feedback/Dialog/Dialog.js +2 -2
- package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +3 -3
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +4 -4
- package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -4
- package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -2
- package/dist/_internal/components/feedback/Toast/Toast.js +2 -2
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
- package/dist/_internal/components/feedback/UsableModal/UsableModal.js +1 -1
- package/dist/_internal/components/feedback/UsableModal/UsableModal.modal.js +4 -4
- package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js +6 -6
- package/dist/_internal/components/feedback/index.js +21 -21
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.band.js +1 -1
- package/dist/_internal/components/form/Calendar/Calendar.helpers.js +1 -1
- package/dist/_internal/components/form/Calendar/Calendar.hooks.js +1 -1
- package/dist/_internal/components/form/Calendar/Calendar.js +10 -10
- package/dist/_internal/components/form/Calendar/CalendarDay.js +2 -2
- package/dist/_internal/components/form/Calendar/CalendarDayCell.js +3 -3
- package/dist/_internal/components/form/Calendar/CalendarMonth.js +10 -6
- package/dist/_internal/components/form/Calendar/CalendarSelectorsMonth.js +6 -6
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +2 -2
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +4 -4
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/Command/Command.hooks.js +2 -2
- package/dist/_internal/components/form/Command/Command.js +4 -4
- package/dist/_internal/components/form/Command/Command.parts.js +2 -2
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.frame.js +22 -0
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.frame.js.map +1 -0
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +4 -4
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +20 -15
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.layout.js +13 -0
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.layout.js.map +1 -0
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +3 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +4 -4
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -2
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -3
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -4
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +5 -5
- package/dist/_internal/components/form/index.js +37 -34
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +5 -5
- package/dist/_internal/components/form/total-form/Fields/index.js +6 -6
- package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -3
- package/dist/_internal/components/index.js +164 -162
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +2 -2
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +2 -2
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -2
- package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -2
- package/dist/_internal/components/layout/Drawer/Drawer.js +2 -2
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +2 -2
- package/dist/_internal/components/layout/index.js +9 -9
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -8
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +3 -3
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +4 -4
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +5 -5
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
- package/dist/_internal/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/_internal/components/navigation/index.js +18 -18
- package/dist/_internal/components/typography/Code/Code.js +2 -2
- package/dist/_internal/components/typography/index.js +2 -2
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +2 -2
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +3 -3
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.parts.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +2 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +5 -5
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +4 -4
- package/dist/_internal/components/utility/index.js +8 -8
- package/dist/_internal/en-US.data-display.js +2 -2
- package/dist/_internal/en-US.labels.js +1 -1
- package/dist/_internal/pt-BR.data-display.js +2 -2
- package/dist/_internal/pt-BR.labels.js +1 -1
- package/dist/_internal/social-login-button/social-login-button.js +2 -2
- package/dist/_internal/user-avatar/user-avatar.js +6 -6
- package/dist/charts.js +17 -17
- package/dist/{chunk-UBVKMM3V.js → chunk-2A5GHOL3.js} +2 -2
- package/dist/{chunk-YGLAGY74.js → chunk-332KWE5H.js} +2 -2
- package/dist/{chunk-HNEZWVDR.js → chunk-364NT46L.js} +3 -3
- package/dist/{chunk-RLTGD5WJ.js → chunk-3AKQHYTM.js} +4 -4
- package/dist/{chunk-5I75WRXT.js → chunk-3CXRHRGE.js} +7 -7
- package/dist/{chunk-G6NMSBSQ.js → chunk-3LD42RNV.js} +2 -2
- package/dist/{chunk-24G3BWKD.js → chunk-3N2HWNKT.js} +2 -2
- package/dist/{chunk-MSJP2AEN.js → chunk-3N3W4TID.js} +2 -2
- package/dist/{chunk-H2UUMZQR.js → chunk-3PWDVJWD.js} +2 -1
- package/dist/chunk-3PWDVJWD.js.map +1 -0
- package/dist/{chunk-YNVTUQ5B.js → chunk-3V7OTBUZ.js} +2 -2
- package/dist/{chunk-LZNUBQ5I.js → chunk-4A454JZN.js} +2 -2
- package/dist/{chunk-TPMT3J32.js → chunk-4I2SDWSF.js} +2 -1
- package/dist/chunk-4I2SDWSF.js.map +1 -0
- package/dist/{chunk-SW7JCF4Z.js → chunk-4P63RSSY.js} +2 -2
- package/dist/{chunk-7QKFMMWK.js → chunk-4W4C4Q46.js} +2 -2
- package/dist/{chunk-B32XH7NK.js → chunk-4WVUX7IU.js} +3 -3
- package/dist/{chunk-Z6QFIRD7.js → chunk-4X2TOMK6.js} +7 -7
- package/dist/{chunk-MYTV353T.js → chunk-4Y3QLISA.js} +2 -2
- package/dist/{chunk-IMYKJTVX.js → chunk-5J6LN2O7.js} +2 -2
- package/dist/{chunk-BMC5KGH2.js → chunk-5V7IZBRY.js} +4 -4
- package/dist/{chunk-ZBUMGMWP.js → chunk-64LNNC54.js} +4 -4
- package/dist/{chunk-T77OVQEO.js → chunk-6D7CASMK.js} +2 -2
- package/dist/{chunk-YVDNCV2D.js → chunk-6RYSSNOO.js} +3 -3
- package/dist/{chunk-CPQJFHNZ.js → chunk-74IH3ZGD.js} +2 -2
- package/dist/{chunk-UQ5GJPVZ.js → chunk-76GAXLNC.js} +3 -3
- package/dist/{chunk-X4J576GR.js → chunk-7LFST3PW.js} +2 -2
- package/dist/{chunk-XCUHGPPZ.js → chunk-7MLT66DE.js} +2 -2
- package/dist/{chunk-EOIRU62W.js → chunk-7P544IWT.js} +3 -3
- package/dist/{chunk-XTYBJAZG.js → chunk-7TENMQNQ.js} +7 -7
- package/dist/{chunk-C7IFBYIJ.js → chunk-A27J4CIZ.js} +10 -10
- package/dist/{chunk-2KSFBZ2H.js → chunk-ABZJNKR6.js} +2 -2
- package/dist/{chunk-6LOWZCH7.js → chunk-AHXQN4VL.js} +2 -2
- package/dist/{chunk-Y7BOP7VZ.js → chunk-AP7GEUJS.js} +2 -2
- package/dist/{chunk-U2SAW6DH.js → chunk-B4OZU7J4.js} +7 -7
- package/dist/{chunk-DDGYTY4E.js → chunk-BIHZXB5P.js} +4 -4
- package/dist/{chunk-4QGMUHAU.js → chunk-BWNZVMBT.js} +2 -2
- package/dist/{chunk-CY4XIZNW.js → chunk-CAH5XNHT.js} +2 -2
- package/dist/{chunk-KILA7LCC.js → chunk-CFDWKQZT.js} +4 -4
- package/dist/{chunk-EWFBDAB7.js → chunk-CKGRSCRT.js} +2 -2
- package/dist/{chunk-YOLLISEY.js → chunk-CRD2WCU7.js} +9 -9
- package/dist/{chunk-L5KPBMMF.js → chunk-CXL3TT3K.js} +2 -2
- package/dist/{chunk-KOGJBAFI.js → chunk-D3KLIC5N.js} +2 -2
- package/dist/{chunk-2SBQ47RI.js → chunk-D4JL5725.js} +3 -3
- package/dist/{chunk-NI3MC742.js → chunk-DBJLYURK.js} +2 -2
- package/dist/{chunk-75GAQL2Q.js → chunk-DKPELKGL.js} +12 -12
- package/dist/{chunk-NGXL4R54.js → chunk-E4MJA52O.js} +4 -4
- package/dist/{chunk-QSOCOXVL.js → chunk-EASEJDBQ.js} +13 -8
- package/dist/chunk-EASEJDBQ.js.map +1 -0
- package/dist/{chunk-5HXVXW22.js → chunk-EGBQR5GH.js} +5 -5
- package/dist/{chunk-FTYOCFTV.js → chunk-EGYJUJMR.js} +2 -2
- package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
- package/dist/{chunk-6AKDAQSS.js → chunk-ERAMSYPR.js} +2 -2
- package/dist/{chunk-WYRH6OSN.js → chunk-F5EH5BJN.js} +2 -2
- package/dist/{chunk-X37NTEVS.js → chunk-F7JRQ2EI.js} +6 -6
- package/dist/chunk-F7JRQ2EI.js.map +1 -0
- package/dist/{chunk-QCYQL3ST.js → chunk-FJLPVPRG.js} +2 -2
- package/dist/{chunk-MAHY7PK3.js → chunk-FQMLTCXT.js} +4 -4
- package/dist/{chunk-TMINUTQQ.js → chunk-FRQGZIYU.js} +2 -2
- package/dist/{chunk-LV6AD6XC.js → chunk-FT3LJZWZ.js} +2 -2
- package/dist/{chunk-ZPWPA6FR.js → chunk-FW5GTAUY.js} +6 -6
- package/dist/{chunk-VMTOLAZ5.js → chunk-FZZMNKVF.js} +5 -5
- package/dist/{chunk-FGZIEZEP.js → chunk-G6TKWNF2.js} +4 -4
- package/dist/{chunk-I6IFUFLW.js → chunk-G7MHDZTL.js} +2 -2
- package/dist/{chunk-KES3HNSU.js → chunk-GB2DQOZ7.js} +2 -2
- package/dist/{chunk-HRES2S3Q.js → chunk-GFYDOH7D.js} +3 -3
- package/dist/{chunk-M2M4IDFU.js → chunk-GXYOBTOY.js} +2 -2
- package/dist/{chunk-OLHAUGVQ.js → chunk-GZQQSTKR.js} +2 -2
- package/dist/{chunk-N2J24TJ3.js → chunk-HAWOS4SF.js} +2 -2
- package/dist/{chunk-S2VZUBM7.js → chunk-HCTHY66U.js} +6 -6
- package/dist/{chunk-ABVIMFSD.js → chunk-HG52QQ2L.js} +2 -2
- package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
- package/dist/{chunk-OKDKKBLI.js → chunk-HOWAMSUY.js} +6 -6
- package/dist/{chunk-3TZUZXY5.js → chunk-HTXYBKLK.js} +2 -2
- package/dist/{chunk-WW3F7DCX.js → chunk-IFOHCY4O.js} +2 -2
- package/dist/{chunk-S46LGAQ2.js → chunk-IJVBLU25.js} +2 -2
- package/dist/{chunk-ARGVUTTL.js → chunk-IPVGWENM.js} +2 -2
- package/dist/{chunk-MPWA55CF.js → chunk-IXXB7CTR.js} +9 -5
- package/dist/chunk-IXXB7CTR.js.map +1 -0
- package/dist/{chunk-MWXZXCVX.js → chunk-J43PARXM.js} +6 -6
- package/dist/{chunk-UYKIUUWP.js → chunk-JJTJ7DCV.js} +2 -2
- package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
- package/dist/{chunk-RZ3P4X2I.js → chunk-K62L5JFC.js} +25 -4
- package/dist/chunk-K62L5JFC.js.map +1 -0
- package/dist/{chunk-2365CQJU.js → chunk-KAQDWEG6.js} +2 -2
- package/dist/{chunk-TB5CRHTF.js → chunk-KEPLO2AB.js} +2 -2
- package/dist/chunk-KNW63H63.js +263 -0
- package/dist/chunk-KNW63H63.js.map +1 -0
- package/dist/{chunk-PVIQDBUN.js → chunk-KUQ4XHVV.js} +2 -2
- package/dist/{chunk-DAFFZED3.js → chunk-KWBMM6MJ.js} +2 -2
- package/dist/{chunk-QPCHABOZ.js → chunk-L5YGVLPH.js} +8 -4
- package/dist/chunk-L5YGVLPH.js.map +1 -0
- package/dist/{chunk-JJYECKEL.js → chunk-LFECE4R7.js} +2 -2
- package/dist/{chunk-LXIPBHNJ.js → chunk-LKTJ26ST.js} +2 -2
- package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
- package/dist/{chunk-EYFDIUVR.js → chunk-M4G4LRQK.js} +2 -2
- package/dist/{chunk-TJUWSQYQ.js → chunk-MDU5Q2HW.js} +3 -2
- package/dist/{chunk-TJUWSQYQ.js.map → chunk-MDU5Q2HW.js.map} +1 -1
- package/dist/{chunk-KMMFN24G.js → chunk-MKHNLRVX.js} +4 -4
- package/dist/{chunk-4IG73U2X.js → chunk-MSPLIRBH.js} +2 -2
- package/dist/{chunk-RNIJL54W.js → chunk-O4UXH7BM.js} +7 -7
- package/dist/{chunk-DYHOBKPU.js → chunk-OA6T2ME3.js} +5 -5
- package/dist/{chunk-VNMD6BA4.js → chunk-OFRQMFWD.js} +3 -3
- package/dist/{chunk-LTJC7TGB.js → chunk-OHA2PAAA.js} +2 -2
- package/dist/{chunk-ZANWHTXH.js → chunk-OVJV2ZN7.js} +2 -2
- package/dist/{chunk-SKQPUAMK.js → chunk-PDWQJFMK.js} +6 -6
- package/dist/{chunk-6EZQLNPK.js → chunk-PGJIWCQR.js} +4 -4
- package/dist/{chunk-FRAFGRRD.js → chunk-PIELY4BJ.js} +1 -1
- package/dist/{chunk-3Z6JX7UN.js → chunk-PZJEF232.js} +2 -2
- package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
- package/dist/chunk-QAF76E6U.js +43 -0
- package/dist/chunk-QAF76E6U.js.map +1 -0
- package/dist/{chunk-4RF4BALN.js → chunk-R775ISK6.js} +4 -4
- package/dist/{chunk-YBAK2WN5.js → chunk-RFMQBIE6.js} +4 -4
- package/dist/{chunk-43EFQ3DU.js → chunk-RVBLOR32.js} +2 -2
- package/dist/{chunk-XNAI7QGU.js → chunk-SA3KLZDZ.js} +5 -5
- package/dist/{chunk-CAOL4AIB.js → chunk-SARK3GHS.js} +2 -2
- package/dist/chunk-SIY64A6O.js +60 -0
- package/dist/chunk-SIY64A6O.js.map +1 -0
- package/dist/{chunk-37SNQQ7P.js → chunk-SOXO2VN3.js} +3 -3
- package/dist/{chunk-6PU5P7QT.js → chunk-TDXEWGY2.js} +2 -2
- package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
- package/dist/{chunk-OGSTMHT6.js → chunk-TTBLQZVT.js} +3 -3
- package/dist/{chunk-KHDKG7XB.js → chunk-U4PV2ZKK.js} +6 -6
- package/dist/{chunk-VHE7UEG5.js → chunk-UC7DLGMP.js} +2 -2
- package/dist/{chunk-TI4FGQYV.js → chunk-UHLGJHTD.js} +2 -2
- package/dist/{chunk-TAHO2LCU.js → chunk-UIZIEU4X.js} +3 -3
- package/dist/{chunk-F7LBTMCA.js → chunk-ULC4SCFC.js} +2 -2
- package/dist/{chunk-FORQEHRQ.js → chunk-UXVWGNPG.js} +2 -2
- package/dist/{chunk-3ZRK3BRN.js → chunk-UXYCBPCE.js} +12 -6
- package/dist/chunk-UXYCBPCE.js.map +1 -0
- package/dist/{chunk-L6YTVXGN.js → chunk-VCYYL23C.js} +4 -2
- package/dist/{chunk-L6YTVXGN.js.map → chunk-VCYYL23C.js.map} +1 -1
- package/dist/{chunk-KF3Q3C3P.js → chunk-VGIBWJ72.js} +2 -2
- package/dist/{chunk-I54YFYBS.js → chunk-VMACQT3T.js} +3 -3
- package/dist/{native/chunks/chunk-QHW7JEPZ.js → chunk-VWKMN3ZZ.js} +3 -2
- package/dist/{chunk-XOXXG7Q5.js.map → chunk-VWKMN3ZZ.js.map} +1 -1
- package/dist/{chunk-EXEBN5ZP.js → chunk-W56KN53D.js} +8 -8
- package/dist/{chunk-KURE5R7Z.js → chunk-WGK7VNCO.js} +2 -2
- package/dist/{chunk-XALDXR3F.js → chunk-WK577LQL.js} +3 -3
- package/dist/{chunk-VCQFDQM3.js → chunk-WN6LR4HX.js} +27 -7
- package/dist/chunk-WN6LR4HX.js.map +1 -0
- package/dist/{chunk-LLPPIO3K.js → chunk-WNTXHLVJ.js} +2 -2
- package/dist/{chunk-PEVBSNCD.js → chunk-WPRQPKLV.js} +2 -2
- package/dist/{chunk-C347NNZJ.js → chunk-WVCHMTPG.js} +2 -2
- package/dist/{chunk-CSD6SWBZ.js → chunk-WYNGH2WL.js} +6 -6
- package/dist/{chunk-4L54KUZV.js → chunk-X5GCAXZS.js} +38 -16
- package/dist/chunk-X5GCAXZS.js.map +1 -0
- package/dist/{chunk-PJDAZG65.js → chunk-XA5ES25V.js} +3 -3
- package/dist/{chunk-FWTVIRZZ.js → chunk-YLZXIR6B.js} +4 -4
- package/dist/{chunk-FYAW5GBF.js → chunk-YQMJJ7AL.js} +33 -16
- package/dist/chunk-YQMJJ7AL.js.map +1 -0
- package/dist/{chunk-JOQGKXR5.js → chunk-Z2J4MRTF.js} +4 -4
- package/dist/{chunk-I4K5JMS4.js → chunk-ZDLC4BN4.js} +4 -2
- package/dist/chunk-ZDLC4BN4.js.map +1 -0
- package/dist/{chunk-USHVG4UQ.js → chunk-ZKVSFVIA.js} +3 -3
- package/dist/{chunk-TE6HAWDM.js → chunk-ZP2GPRNQ.js} +2 -2
- package/dist/{chunk-3PQL2EN5.js → chunk-ZW7Q3IRL.js} +6 -6
- package/dist/{chunk-M5Y42AZ4.js → chunk-ZX4ORMBC.js} +2 -2
- package/dist/data-display/AlertDialog.js +3 -3
- package/dist/data-display/AsyncStateContainer.js +5 -5
- package/dist/data-display/Avatar.js +5 -5
- package/dist/data-display/CardKit.js +12 -12
- package/dist/data-display/Carousel.js +6 -6
- package/dist/data-display/Chart.js +17 -17
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +72 -72
- package/dist/data-display/DayRuler.js +11 -11
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/ErrorState.js +2 -2
- package/dist/data-display/FleetMap.js +12 -12
- package/dist/data-display/HoverCard.js +3 -3
- package/dist/data-display/LazyImage.js +2 -2
- package/dist/data-display/Lightbox.js +3 -3
- package/dist/data-display/LoadingState.js +2 -2
- package/dist/data-display/MapPreview.js +8 -8
- package/dist/data-display/RegionMap.js +5 -5
- package/dist/data-display/ScheduleGrid.js +10 -10
- package/dist/data-display/SectionOnboarding.js +4 -4
- package/dist/data-display/Sheet.js +6 -6
- package/dist/data-display/Stepper.js +2 -2
- package/dist/data-display/Table.js +4 -4
- package/dist/data-display/Timeline.js +2 -2
- package/dist/en-US.js +2 -2
- package/dist/feedback/ConfirmAction.js +9 -9
- package/dist/feedback/Dialog.js +2 -2
- package/dist/feedback/Modal.js +2 -2
- package/dist/feedback/SequenceResolver.js +4 -4
- package/dist/feedback/Sonner.js +2 -2
- package/dist/feedback/StackedModal.js +4 -4
- package/dist/feedback/Toast.js +2 -2
- package/dist/feedback/TutorialOverlay.js +2 -2
- package/dist/feedback/UsableModal.js +1 -1
- package/dist/form/AddressAutocomplete.js +7 -7
- package/dist/form/Autocomplete.js +2 -2
- package/dist/form/Calendar.js +10 -10
- package/dist/form/CategorySelect.js +4 -4
- package/dist/form/CodeEditor.js +3 -3
- package/dist/form/Command.js +4 -4
- package/dist/form/DateRangePicker.js +20 -15
- package/dist/form/RichTextEditor.js +5 -5
- package/dist/form/total-form.js +9 -9
- package/dist/layout/ContentToolbar.js +6 -6
- package/dist/layout/Dashboard.js +2 -2
- package/dist/layout/Drawer.js +2 -2
- package/dist/layout/SettingsLayout.js +2 -2
- package/dist/layout/TableFilter.js +2 -2
- package/dist/locales.js +4 -4
- package/dist/{chunk-XOXXG7Q5.js → native/chunks/chunk-O76COY56.js} +3 -2
- package/dist/native/chunks/{chunk-QHW7JEPZ.js.map → chunk-O76COY56.js.map} +1 -1
- package/dist/native/chunks/{chunk-FXA5DLKR.js → chunk-UQ272RI2.js} +3 -3
- package/dist/native/chunks/{chunk-IN3XZ7EK.js → chunk-X65TVC3B.js} +2 -2
- package/dist/native/data-display/Avatar.js +1 -1
- package/dist/native/data-display/Badge.js +1 -1
- package/dist/native/data-display/Chip.js +1 -1
- package/dist/native/data-display/EmptyState.js +3 -3
- package/dist/native/data-display/ErrorState.js +2 -2
- package/dist/native/data-display/FleetMap.js +3 -3
- package/dist/native/data-display/LoadingState.js +1 -1
- package/dist/native/feedback/Dialog.js +1 -1
- package/dist/native/form/Button.js +2 -2
- package/dist/native/form/Checkbox.js +1 -1
- package/dist/native/form/Input.js +1 -1
- package/dist/native/form/Switch.js +1 -1
- package/dist/navigation/AppHeader.js +10 -10
- package/dist/navigation/Breadcrumbs.js +2 -2
- package/dist/navigation/NavigationMenu.js +3 -3
- package/dist/navigation/SectionNav.js +5 -5
- package/dist/navigation/Tabs.js +1 -1
- package/dist/pt-BR.js +2 -2
- package/dist/social-login-button.js +2 -2
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +3 -1
- package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.band.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.helpers.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.hooks.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.types.d.ts +24 -1
- package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/CalendarDay.d.ts +6 -0
- package/dist/types/components/form/Calendar/CalendarDay.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/CalendarDayCell.d.ts +11 -1
- package/dist/types/components/form/Calendar/CalendarDayCell.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/CalendarMonth.d.ts +27 -2
- package/dist/types/components/form/Calendar/CalendarMonth.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/index.d.ts +1 -1
- package/dist/types/components/form/Calendar/index.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.frame.d.ts +93 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.frame.d.ts.map +1 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.hooks.d.ts +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.hooks.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.layout.d.ts +27 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.layout.d.ts.map +1 -0
- package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts +8 -2
- package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +90 -1
- package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
- package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts +7 -1
- package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +18 -3
- package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
- package/dist/types/copy/labels.d.ts +6 -0
- package/dist/types/copy/labels.d.ts.map +1 -1
- package/dist/types/en-US.labels.d.ts.map +1 -1
- package/dist/types/pt-BR.labels.d.ts.map +1 -1
- package/dist/types-native/copy/labels.d.ts +6 -0
- package/dist/types-native/copy/labels.d.ts.map +1 -1
- package/dist/types-native/en-US.labels.d.ts.map +1 -1
- package/dist/typography/Code.js +2 -2
- package/dist/user-avatar.js +6 -6
- package/dist/utility/AnimatedIcon.js +2 -2
- package/dist/utility/InfiniteScroll.js +3 -3
- package/dist/utility/WorkflowStep.js +5 -5
- package/package.json +1 -1
- package/src/components/data-display/DataViews/data-views-day-input.tsx +4 -0
- package/src/components/form/Calendar/Calendar.band.ts +3 -0
- package/src/components/form/Calendar/Calendar.helpers.ts +2 -0
- package/src/components/form/Calendar/Calendar.hooks.ts +4 -2
- package/src/components/form/Calendar/Calendar.md +12 -1
- package/src/components/form/Calendar/Calendar.tsx +30 -10
- package/src/components/form/Calendar/Calendar.types.ts +27 -1
- package/src/components/form/Calendar/CalendarDay.tsx +85 -13
- package/src/components/form/Calendar/CalendarDayCell.tsx +17 -1
- package/src/components/form/Calendar/CalendarMonth.tsx +49 -6
- package/src/components/form/Calendar/CalendarSelectorsMonth.tsx +2 -2
- package/src/components/form/Calendar/index.ts +1 -0
- package/src/components/form/DateRangePicker/DateRangePicker.frame.ts +92 -0
- package/src/components/form/DateRangePicker/DateRangePicker.hooks.ts +43 -1
- package/src/components/form/DateRangePicker/DateRangePicker.layout.ts +69 -0
- package/src/components/form/DateRangePicker/DateRangePicker.md +77 -2
- package/src/components/form/DateRangePicker/DateRangePicker.range.ts +10 -2
- package/src/components/form/DateRangePicker/DateRangePicker.tsx +177 -57
- package/src/components/form/DateRangePicker/DateRangePicker.types.ts +88 -1
- package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +13 -2
- package/src/components/navigation/Tabs/Tabs.md +22 -1
- package/src/components/navigation/Tabs/Tabs.tsx +25 -9
- package/src/components/navigation/Tabs/Tabs.types.ts +18 -2
- package/src/copy/labels.ts +6 -0
- package/src/en-US.labels.ts +1 -0
- package/src/pt-BR.labels.ts +1 -0
- package/dist/chunk-3ZRK3BRN.js.map +0 -1
- package/dist/chunk-4L54KUZV.js.map +0 -1
- package/dist/chunk-FYAW5GBF.js.map +0 -1
- package/dist/chunk-H2UUMZQR.js.map +0 -1
- package/dist/chunk-I4K5JMS4.js.map +0 -1
- package/dist/chunk-J2GDA64N.js +0 -184
- package/dist/chunk-J2GDA64N.js.map +0 -1
- package/dist/chunk-MPWA55CF.js.map +0 -1
- package/dist/chunk-QPCHABOZ.js.map +0 -1
- package/dist/chunk-QSOCOXVL.js.map +0 -1
- package/dist/chunk-RZ3P4X2I.js.map +0 -1
- package/dist/chunk-TPMT3J32.js.map +0 -1
- package/dist/chunk-VCQFDQM3.js.map +0 -1
- package/dist/chunk-X37NTEVS.js.map +0 -1
- /package/dist/{chunk-UBVKMM3V.js.map → chunk-2A5GHOL3.js.map} +0 -0
- /package/dist/{chunk-YGLAGY74.js.map → chunk-332KWE5H.js.map} +0 -0
- /package/dist/{chunk-HNEZWVDR.js.map → chunk-364NT46L.js.map} +0 -0
- /package/dist/{chunk-RLTGD5WJ.js.map → chunk-3AKQHYTM.js.map} +0 -0
- /package/dist/{chunk-5I75WRXT.js.map → chunk-3CXRHRGE.js.map} +0 -0
- /package/dist/{chunk-G6NMSBSQ.js.map → chunk-3LD42RNV.js.map} +0 -0
- /package/dist/{chunk-24G3BWKD.js.map → chunk-3N2HWNKT.js.map} +0 -0
- /package/dist/{chunk-MSJP2AEN.js.map → chunk-3N3W4TID.js.map} +0 -0
- /package/dist/{chunk-YNVTUQ5B.js.map → chunk-3V7OTBUZ.js.map} +0 -0
- /package/dist/{chunk-LZNUBQ5I.js.map → chunk-4A454JZN.js.map} +0 -0
- /package/dist/{chunk-SW7JCF4Z.js.map → chunk-4P63RSSY.js.map} +0 -0
- /package/dist/{chunk-7QKFMMWK.js.map → chunk-4W4C4Q46.js.map} +0 -0
- /package/dist/{chunk-B32XH7NK.js.map → chunk-4WVUX7IU.js.map} +0 -0
- /package/dist/{chunk-Z6QFIRD7.js.map → chunk-4X2TOMK6.js.map} +0 -0
- /package/dist/{chunk-MYTV353T.js.map → chunk-4Y3QLISA.js.map} +0 -0
- /package/dist/{chunk-IMYKJTVX.js.map → chunk-5J6LN2O7.js.map} +0 -0
- /package/dist/{chunk-BMC5KGH2.js.map → chunk-5V7IZBRY.js.map} +0 -0
- /package/dist/{chunk-ZBUMGMWP.js.map → chunk-64LNNC54.js.map} +0 -0
- /package/dist/{chunk-T77OVQEO.js.map → chunk-6D7CASMK.js.map} +0 -0
- /package/dist/{chunk-YVDNCV2D.js.map → chunk-6RYSSNOO.js.map} +0 -0
- /package/dist/{chunk-CPQJFHNZ.js.map → chunk-74IH3ZGD.js.map} +0 -0
- /package/dist/{chunk-UQ5GJPVZ.js.map → chunk-76GAXLNC.js.map} +0 -0
- /package/dist/{chunk-X4J576GR.js.map → chunk-7LFST3PW.js.map} +0 -0
- /package/dist/{chunk-XCUHGPPZ.js.map → chunk-7MLT66DE.js.map} +0 -0
- /package/dist/{chunk-EOIRU62W.js.map → chunk-7P544IWT.js.map} +0 -0
- /package/dist/{chunk-XTYBJAZG.js.map → chunk-7TENMQNQ.js.map} +0 -0
- /package/dist/{chunk-C7IFBYIJ.js.map → chunk-A27J4CIZ.js.map} +0 -0
- /package/dist/{chunk-2KSFBZ2H.js.map → chunk-ABZJNKR6.js.map} +0 -0
- /package/dist/{chunk-6LOWZCH7.js.map → chunk-AHXQN4VL.js.map} +0 -0
- /package/dist/{chunk-Y7BOP7VZ.js.map → chunk-AP7GEUJS.js.map} +0 -0
- /package/dist/{chunk-U2SAW6DH.js.map → chunk-B4OZU7J4.js.map} +0 -0
- /package/dist/{chunk-DDGYTY4E.js.map → chunk-BIHZXB5P.js.map} +0 -0
- /package/dist/{chunk-4QGMUHAU.js.map → chunk-BWNZVMBT.js.map} +0 -0
- /package/dist/{chunk-CY4XIZNW.js.map → chunk-CAH5XNHT.js.map} +0 -0
- /package/dist/{chunk-KILA7LCC.js.map → chunk-CFDWKQZT.js.map} +0 -0
- /package/dist/{chunk-EWFBDAB7.js.map → chunk-CKGRSCRT.js.map} +0 -0
- /package/dist/{chunk-YOLLISEY.js.map → chunk-CRD2WCU7.js.map} +0 -0
- /package/dist/{chunk-L5KPBMMF.js.map → chunk-CXL3TT3K.js.map} +0 -0
- /package/dist/{chunk-KOGJBAFI.js.map → chunk-D3KLIC5N.js.map} +0 -0
- /package/dist/{chunk-2SBQ47RI.js.map → chunk-D4JL5725.js.map} +0 -0
- /package/dist/{chunk-NI3MC742.js.map → chunk-DBJLYURK.js.map} +0 -0
- /package/dist/{chunk-75GAQL2Q.js.map → chunk-DKPELKGL.js.map} +0 -0
- /package/dist/{chunk-NGXL4R54.js.map → chunk-E4MJA52O.js.map} +0 -0
- /package/dist/{chunk-5HXVXW22.js.map → chunk-EGBQR5GH.js.map} +0 -0
- /package/dist/{chunk-FTYOCFTV.js.map → chunk-EGYJUJMR.js.map} +0 -0
- /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
- /package/dist/{chunk-6AKDAQSS.js.map → chunk-ERAMSYPR.js.map} +0 -0
- /package/dist/{chunk-WYRH6OSN.js.map → chunk-F5EH5BJN.js.map} +0 -0
- /package/dist/{chunk-QCYQL3ST.js.map → chunk-FJLPVPRG.js.map} +0 -0
- /package/dist/{chunk-MAHY7PK3.js.map → chunk-FQMLTCXT.js.map} +0 -0
- /package/dist/{chunk-TMINUTQQ.js.map → chunk-FRQGZIYU.js.map} +0 -0
- /package/dist/{chunk-LV6AD6XC.js.map → chunk-FT3LJZWZ.js.map} +0 -0
- /package/dist/{chunk-ZPWPA6FR.js.map → chunk-FW5GTAUY.js.map} +0 -0
- /package/dist/{chunk-VMTOLAZ5.js.map → chunk-FZZMNKVF.js.map} +0 -0
- /package/dist/{chunk-FGZIEZEP.js.map → chunk-G6TKWNF2.js.map} +0 -0
- /package/dist/{chunk-I6IFUFLW.js.map → chunk-G7MHDZTL.js.map} +0 -0
- /package/dist/{chunk-KES3HNSU.js.map → chunk-GB2DQOZ7.js.map} +0 -0
- /package/dist/{chunk-HRES2S3Q.js.map → chunk-GFYDOH7D.js.map} +0 -0
- /package/dist/{chunk-M2M4IDFU.js.map → chunk-GXYOBTOY.js.map} +0 -0
- /package/dist/{chunk-OLHAUGVQ.js.map → chunk-GZQQSTKR.js.map} +0 -0
- /package/dist/{chunk-N2J24TJ3.js.map → chunk-HAWOS4SF.js.map} +0 -0
- /package/dist/{chunk-S2VZUBM7.js.map → chunk-HCTHY66U.js.map} +0 -0
- /package/dist/{chunk-ABVIMFSD.js.map → chunk-HG52QQ2L.js.map} +0 -0
- /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
- /package/dist/{chunk-OKDKKBLI.js.map → chunk-HOWAMSUY.js.map} +0 -0
- /package/dist/{chunk-3TZUZXY5.js.map → chunk-HTXYBKLK.js.map} +0 -0
- /package/dist/{chunk-WW3F7DCX.js.map → chunk-IFOHCY4O.js.map} +0 -0
- /package/dist/{chunk-S46LGAQ2.js.map → chunk-IJVBLU25.js.map} +0 -0
- /package/dist/{chunk-ARGVUTTL.js.map → chunk-IPVGWENM.js.map} +0 -0
- /package/dist/{chunk-MWXZXCVX.js.map → chunk-J43PARXM.js.map} +0 -0
- /package/dist/{chunk-UYKIUUWP.js.map → chunk-JJTJ7DCV.js.map} +0 -0
- /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
- /package/dist/{chunk-2365CQJU.js.map → chunk-KAQDWEG6.js.map} +0 -0
- /package/dist/{chunk-TB5CRHTF.js.map → chunk-KEPLO2AB.js.map} +0 -0
- /package/dist/{chunk-PVIQDBUN.js.map → chunk-KUQ4XHVV.js.map} +0 -0
- /package/dist/{chunk-DAFFZED3.js.map → chunk-KWBMM6MJ.js.map} +0 -0
- /package/dist/{chunk-JJYECKEL.js.map → chunk-LFECE4R7.js.map} +0 -0
- /package/dist/{chunk-LXIPBHNJ.js.map → chunk-LKTJ26ST.js.map} +0 -0
- /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
- /package/dist/{chunk-EYFDIUVR.js.map → chunk-M4G4LRQK.js.map} +0 -0
- /package/dist/{chunk-KMMFN24G.js.map → chunk-MKHNLRVX.js.map} +0 -0
- /package/dist/{chunk-4IG73U2X.js.map → chunk-MSPLIRBH.js.map} +0 -0
- /package/dist/{chunk-RNIJL54W.js.map → chunk-O4UXH7BM.js.map} +0 -0
- /package/dist/{chunk-DYHOBKPU.js.map → chunk-OA6T2ME3.js.map} +0 -0
- /package/dist/{chunk-VNMD6BA4.js.map → chunk-OFRQMFWD.js.map} +0 -0
- /package/dist/{chunk-LTJC7TGB.js.map → chunk-OHA2PAAA.js.map} +0 -0
- /package/dist/{chunk-ZANWHTXH.js.map → chunk-OVJV2ZN7.js.map} +0 -0
- /package/dist/{chunk-SKQPUAMK.js.map → chunk-PDWQJFMK.js.map} +0 -0
- /package/dist/{chunk-6EZQLNPK.js.map → chunk-PGJIWCQR.js.map} +0 -0
- /package/dist/{chunk-FRAFGRRD.js.map → chunk-PIELY4BJ.js.map} +0 -0
- /package/dist/{chunk-3Z6JX7UN.js.map → chunk-PZJEF232.js.map} +0 -0
- /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
- /package/dist/{chunk-4RF4BALN.js.map → chunk-R775ISK6.js.map} +0 -0
- /package/dist/{chunk-YBAK2WN5.js.map → chunk-RFMQBIE6.js.map} +0 -0
- /package/dist/{chunk-43EFQ3DU.js.map → chunk-RVBLOR32.js.map} +0 -0
- /package/dist/{chunk-XNAI7QGU.js.map → chunk-SA3KLZDZ.js.map} +0 -0
- /package/dist/{chunk-CAOL4AIB.js.map → chunk-SARK3GHS.js.map} +0 -0
- /package/dist/{chunk-37SNQQ7P.js.map → chunk-SOXO2VN3.js.map} +0 -0
- /package/dist/{chunk-6PU5P7QT.js.map → chunk-TDXEWGY2.js.map} +0 -0
- /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
- /package/dist/{chunk-OGSTMHT6.js.map → chunk-TTBLQZVT.js.map} +0 -0
- /package/dist/{chunk-KHDKG7XB.js.map → chunk-U4PV2ZKK.js.map} +0 -0
- /package/dist/{chunk-VHE7UEG5.js.map → chunk-UC7DLGMP.js.map} +0 -0
- /package/dist/{chunk-TI4FGQYV.js.map → chunk-UHLGJHTD.js.map} +0 -0
- /package/dist/{chunk-TAHO2LCU.js.map → chunk-UIZIEU4X.js.map} +0 -0
- /package/dist/{chunk-F7LBTMCA.js.map → chunk-ULC4SCFC.js.map} +0 -0
- /package/dist/{chunk-FORQEHRQ.js.map → chunk-UXVWGNPG.js.map} +0 -0
- /package/dist/{chunk-KF3Q3C3P.js.map → chunk-VGIBWJ72.js.map} +0 -0
- /package/dist/{chunk-I54YFYBS.js.map → chunk-VMACQT3T.js.map} +0 -0
- /package/dist/{chunk-EXEBN5ZP.js.map → chunk-W56KN53D.js.map} +0 -0
- /package/dist/{chunk-KURE5R7Z.js.map → chunk-WGK7VNCO.js.map} +0 -0
- /package/dist/{chunk-XALDXR3F.js.map → chunk-WK577LQL.js.map} +0 -0
- /package/dist/{chunk-LLPPIO3K.js.map → chunk-WNTXHLVJ.js.map} +0 -0
- /package/dist/{chunk-PEVBSNCD.js.map → chunk-WPRQPKLV.js.map} +0 -0
- /package/dist/{chunk-C347NNZJ.js.map → chunk-WVCHMTPG.js.map} +0 -0
- /package/dist/{chunk-CSD6SWBZ.js.map → chunk-WYNGH2WL.js.map} +0 -0
- /package/dist/{chunk-PJDAZG65.js.map → chunk-XA5ES25V.js.map} +0 -0
- /package/dist/{chunk-FWTVIRZZ.js.map → chunk-YLZXIR6B.js.map} +0 -0
- /package/dist/{chunk-JOQGKXR5.js.map → chunk-Z2J4MRTF.js.map} +0 -0
- /package/dist/{chunk-USHVG4UQ.js.map → chunk-ZKVSFVIA.js.map} +0 -0
- /package/dist/{chunk-TE6HAWDM.js.map → chunk-ZP2GPRNQ.js.map} +0 -0
- /package/dist/{chunk-3PQL2EN5.js.map → chunk-ZW7Q3IRL.js.map} +0 -0
- /package/dist/{chunk-M5Y42AZ4.js.map → chunk-ZX4ORMBC.js.map} +0 -0
- /package/dist/native/chunks/{chunk-FXA5DLKR.js.map → chunk-UQ272RI2.js.map} +0 -0
- /package/dist/native/chunks/{chunk-IN3XZ7EK.js.map → chunk-X65TVC3B.js.map} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The months' frame in the in-page (`beside`) layout, and the fields' column
|
|
3
|
+
* beside it: how wide each is, with and without `fullWidth`. Kept out of the
|
|
4
|
+
* component so that file stays a layout of parts.
|
|
5
|
+
*/
|
|
6
|
+
import type { Theme } from '@mui/material/styles/index.js';
|
|
7
|
+
|
|
8
|
+
import { rem, sxRem } from '../../../tokens/relative';
|
|
9
|
+
import { surfaces } from '../../../tokens/surfaces';
|
|
10
|
+
import { CARD_RADIUS_UNITS } from '../../layout/Card/Card.metrics';
|
|
11
|
+
|
|
12
|
+
import { framedMonthsWidth } from './DateRangePicker.layout';
|
|
13
|
+
|
|
14
|
+
export const CALENDAR_CLASS = 'date-range-picker__calendar';
|
|
15
|
+
|
|
16
|
+
// `Calendar` renders its own `Paper` with 24px of padding. Nested in this one
|
|
17
|
+
// that reads as a box inside a box, so the inner frame is flattened here
|
|
18
|
+
// through the className hook the component exposes for exactly this.
|
|
19
|
+
export const FLAT_CALENDAR = {
|
|
20
|
+
[`& .${CALENDAR_CLASS}`]: {
|
|
21
|
+
p: 0,
|
|
22
|
+
boxShadow: 'none',
|
|
23
|
+
backgroundColor: 'transparent',
|
|
24
|
+
backgroundImage: 'none',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The months' own frame in the `beside` layout: the picker is part of a page
|
|
30
|
+
* there, so the frame holds the calendar alone and the fields sit on the page
|
|
31
|
+
* beside or under it, as the form's other fields do.
|
|
32
|
+
*/
|
|
33
|
+
const BESIDE_FRAME_SX = {
|
|
34
|
+
p: 2,
|
|
35
|
+
maxWidth: '100%',
|
|
36
|
+
minWidth: 0,
|
|
37
|
+
// A card on the page, as the prototype draws it: the RAISED surface role
|
|
38
|
+
// (`background.paper` unless the host states one — a host whose paper is its
|
|
39
|
+
// page ground states a lighter card there) and the default `Card`'s radius,
|
|
40
|
+
// not a Paper's 4px (FUT-4156, round 3). In-page only: the popover keeps its own.
|
|
41
|
+
bgcolor: (theme: Theme) => surfaces(theme).raised,
|
|
42
|
+
borderRadius: (theme: Theme) => theme.spacing(CARD_RADIUS_UNITS.md),
|
|
43
|
+
...FLAT_CALENDAR,
|
|
44
|
+
} as const;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Under the fields' row the frame is as wide as its months and centred: a
|
|
48
|
+
* frame stretched across the page around one month left a third of itself
|
|
49
|
+
* blank (FUT-4156, 600 and 900 wide).
|
|
50
|
+
*/
|
|
51
|
+
const BELOW_FRAME_SX = {
|
|
52
|
+
...BESIDE_FRAME_SX,
|
|
53
|
+
alignSelf: 'center',
|
|
54
|
+
width: 'fit-content',
|
|
55
|
+
} as const;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* `fullWidth`: the frame's edges are the picker's. Under the fields it spans
|
|
59
|
+
* the picker; beside them it takes the row the fields' column leaves, and the
|
|
60
|
+
* months spread across it (FUT-4156: a fitted frame left blank bands of 10 to
|
|
61
|
+
* 77px each side at 390, 600 and 900 wide).
|
|
62
|
+
*/
|
|
63
|
+
/**
|
|
64
|
+
* Under the fields the frame gives up its side padding before its columns
|
|
65
|
+
* drop under 40 design px: seven 40px columns and the hairlines need 282, so
|
|
66
|
+
* the padding is what is left of the row past that, never more than its 16
|
|
67
|
+
* (FUT-4156, round 3: at 320 wide the columns were 36). `100%` is the row's
|
|
68
|
+
* width — padding percentages read the containing block.
|
|
69
|
+
*/
|
|
70
|
+
export const FILL_COLUMN_MIN = 40;
|
|
71
|
+
const sidePadding = (theme: Theme): string =>
|
|
72
|
+
`clamp(0px, calc((100% - ${rem(theme, 7 * FILL_COLUMN_MIN + 2)}) / 2), ${theme.spacing(2)})`;
|
|
73
|
+
const FILL_BELOW_FRAME_SX = { ...BESIDE_FRAME_SX, alignSelf: 'stretch', px: sidePadding } as const;
|
|
74
|
+
// Never narrower than its months at their full size: the fields' column gives
|
|
75
|
+
// way first, down to the room `besideLayout` chose this placement with.
|
|
76
|
+
const fillBesideFrameSx = (months: number) =>
|
|
77
|
+
({ ...BESIDE_FRAME_SX, flex: '1 1 auto', minWidth: sxRem(framedMonthsWidth(months)) }) as const;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The fields' column beside a filling frame stops at 320 design px: at 1920
|
|
81
|
+
* wide it ran to 694 for a ten-character date, with the room under it blank.
|
|
82
|
+
*/
|
|
83
|
+
const FILL_FIELDS_COLUMN = { flex: '0 1 auto', width: sxRem(320), minWidth: 0 } as const;
|
|
84
|
+
|
|
85
|
+
export const frameSx = (sideBySide: boolean, fill: boolean, months: number) => {
|
|
86
|
+
if (fill) return sideBySide ? fillBesideFrameSx(months) : FILL_BELOW_FRAME_SX;
|
|
87
|
+
return sideBySide ? { ...BESIDE_FRAME_SX, flex: '0 0 auto' } : BELOW_FRAME_SX;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const fieldsColumnSx = (sideBySide: boolean, fill: boolean) =>
|
|
91
|
+
fill && sideBySide ? FILL_FIELDS_COLUMN : { flex: 1, minWidth: 0 };
|
|
92
|
+
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* the component so that file is a layout and this one is the behaviour — the
|
|
4
4
|
* same split `Calendar.hooks.ts` uses next door.
|
|
5
5
|
*/
|
|
6
|
-
import { useId, useMemo, useState } from 'react';
|
|
6
|
+
import { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { toDayString, todayIn } from './DateRangePicker.dates';
|
|
9
9
|
import {
|
|
@@ -19,6 +19,42 @@ import type {
|
|
|
19
19
|
UseDateRangePickerArgs,
|
|
20
20
|
} from './DateRangePicker.types';
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Whether `value` is what the picker last handed out — or that tap's draft
|
|
24
|
+
* carried on by the consumer: every bound the tap chose kept, a bound it left
|
|
25
|
+
* open filled in (a consumer that keeps an end the tap would have dropped).
|
|
26
|
+
* Either way the grid under the pointer must not move, nor lose its focus.
|
|
27
|
+
*/
|
|
28
|
+
function cameFromPicker(value: DateRangeDraft, emitted: DateRangeDraft | null): boolean {
|
|
29
|
+
if (emitted === null) return false;
|
|
30
|
+
const kept = (bound: 'from' | 'to'): boolean => emitted[bound] === null || emitted[bound] === value[bound];
|
|
31
|
+
return kept('from') && kept('to');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Bump the view nonce when the value moves and the picker did not move it —
|
|
36
|
+
* a consumer's own field committed a day. Skips the mount and the picker's own
|
|
37
|
+
* emissions, so a click in the grid never remounts the grid under it. An
|
|
38
|
+
* emission is read once: the change after it is the consumer's own.
|
|
39
|
+
*/
|
|
40
|
+
function useFollowValue(
|
|
41
|
+
enabled: boolean,
|
|
42
|
+
value: DateRangeDraft,
|
|
43
|
+
lastEmitted: { current: DateRangeDraft | null },
|
|
44
|
+
setViewNonce: (update: (nonce: number) => number) => void,
|
|
45
|
+
): void {
|
|
46
|
+
const previous = useRef(value);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const before = previous.current;
|
|
49
|
+
previous.current = value;
|
|
50
|
+
if (!enabled || (before.from === value.from && before.to === value.to)) return;
|
|
51
|
+
const emitted = lastEmitted.current;
|
|
52
|
+
lastEmitted.current = null;
|
|
53
|
+
if (cameFromPicker(value, emitted)) return;
|
|
54
|
+
setViewNonce((nonce) => nonce + 1);
|
|
55
|
+
}, [enabled, value, lastEmitted, setViewNonce]);
|
|
56
|
+
}
|
|
57
|
+
|
|
22
58
|
export function useDateRangePicker({
|
|
23
59
|
value,
|
|
24
60
|
onChange,
|
|
@@ -28,6 +64,7 @@ export function useDateRangePicker({
|
|
|
28
64
|
weekStartsOn,
|
|
29
65
|
quickRanges,
|
|
30
66
|
messages,
|
|
67
|
+
followValue = false,
|
|
31
68
|
}: UseDateRangePickerArgs): DateRangePickerState {
|
|
32
69
|
const statusId = useId();
|
|
33
70
|
// `Calendar` reads which month to open on from the range it is handed, and
|
|
@@ -44,12 +81,17 @@ export function useDateRangePicker({
|
|
|
44
81
|
[quickRanges, today, weekStartsOn, maxRangeDays],
|
|
45
82
|
);
|
|
46
83
|
const status = useMemo(() => resolveDayRange(value, maxRangeDays), [value, maxRangeDays]);
|
|
84
|
+
// What the picker itself last handed out: a value equal to it came FROM here
|
|
85
|
+
// (a click in the grid), and must not move the grid under the pointer.
|
|
86
|
+
const lastEmitted = useRef<DateRangeDraft | null>(null);
|
|
87
|
+
useFollowValue(followValue, value, lastEmitted, setViewNonce);
|
|
47
88
|
|
|
48
89
|
const emit = (
|
|
49
90
|
next: DateRangeDraft,
|
|
50
91
|
source: DateRangeChangeMeta['source'],
|
|
51
92
|
quickRangeId?: string,
|
|
52
93
|
): void => {
|
|
94
|
+
lastEmitted.current = next;
|
|
53
95
|
onChange(next, {
|
|
54
96
|
source,
|
|
55
97
|
...(quickRangeId ? { quickRangeId } : {}),
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the typed half goes when the consumer asked for it BESIDE the months
|
|
3
|
+
* (`fieldsPlacement="beside"`), and how many months fit with it.
|
|
4
|
+
*
|
|
5
|
+
* Decided from the PICKER's own width, never the viewport's: the same form sits
|
|
6
|
+
* full width on a computer and in a 3/5 column beside a preview on the same
|
|
7
|
+
* computer, and only its own box knows which. The numbers are the design px the
|
|
8
|
+
* month grid is built to (`MONTH_SX` in `CalendarMonth`: 304 wide, 24 apart).
|
|
9
|
+
*/
|
|
10
|
+
import type { Theme } from '@mui/material/styles/index.js';
|
|
11
|
+
import { useLayoutEffect, useState, type RefObject } from 'react';
|
|
12
|
+
|
|
13
|
+
import { remPx } from '../../../tokens/relative';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The design px the layout is computed from, rendered through the theme
|
|
17
|
+
* (`remPx`) so a density that shrinks the grid shrinks the thresholds with it.
|
|
18
|
+
* Framed months: the grid's intrinsic 304 a month and 24 between two
|
|
19
|
+
* (`MONTH_SX`), plus the frame's 16px padding a side and its hairline. The
|
|
20
|
+
* column beside: the `gap: 4` to the frame and the 220 a `dd/mm/aaaa` field
|
|
21
|
+
* and its label read well in.
|
|
22
|
+
*/
|
|
23
|
+
const FRAMED_MONTHS: Readonly<Record<number, number>> = { 1: 338, 2: 666 };
|
|
24
|
+
const BESIDE_COLUMN = 252;
|
|
25
|
+
|
|
26
|
+
export type FieldsPlacement = 'beside' | 'below';
|
|
27
|
+
|
|
28
|
+
/** The design px a frame around `months` month grids needs (see FRAMED_MONTHS). */
|
|
29
|
+
export function framedMonthsWidth(months: number): number {
|
|
30
|
+
return FRAMED_MONTHS[months] ?? (FRAMED_MONTHS[2]! * months) / 2;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The layout for a picker `width` px wide asking for `requested` months, in
|
|
35
|
+
* order of preference: every month requested with the fields beside, then
|
|
36
|
+
* under them, then one month beside, then one under. A picker not measured yet
|
|
37
|
+
* (no `ResizeObserver`, a server render) keeps the default layout.
|
|
38
|
+
*/
|
|
39
|
+
export function besideLayout(
|
|
40
|
+
width: number | null,
|
|
41
|
+
requested: number,
|
|
42
|
+
theme: Theme,
|
|
43
|
+
): { months: number; placement: FieldsPlacement } {
|
|
44
|
+
if (width === null) return { months: requested, placement: 'below' };
|
|
45
|
+
const framed = (months: number): number => remPx(theme, framedMonthsWidth(months));
|
|
46
|
+
const beside = remPx(theme, BESIDE_COLUMN);
|
|
47
|
+
const counts = requested > 1 ? [requested, 1] : [requested];
|
|
48
|
+
for (const months of counts) {
|
|
49
|
+
if (width >= framed(months) + beside) return { months, placement: 'beside' };
|
|
50
|
+
if (width >= framed(months)) return { months, placement: 'below' };
|
|
51
|
+
}
|
|
52
|
+
return { months: 1, placement: 'below' };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** The element's content width, kept current; null until measured or when disabled. */
|
|
56
|
+
export function useMeasuredWidth(ref: RefObject<HTMLElement | null>, enabled: boolean): number | null {
|
|
57
|
+
const [width, setWidth] = useState<number | null>(null);
|
|
58
|
+
useLayoutEffect(() => {
|
|
59
|
+
const element = ref.current;
|
|
60
|
+
if (!enabled || element === null || typeof ResizeObserver === 'undefined') return undefined;
|
|
61
|
+
const observer = new ResizeObserver((entries) => {
|
|
62
|
+
const measured = entries[0]?.contentRect.width;
|
|
63
|
+
if (measured) setWidth(Math.round(measured));
|
|
64
|
+
});
|
|
65
|
+
observer.observe(element);
|
|
66
|
+
return () => observer.disconnect();
|
|
67
|
+
}, [ref, enabled]);
|
|
68
|
+
return width;
|
|
69
|
+
}
|
|
@@ -45,6 +45,13 @@ interface DateRangePickerProps {
|
|
|
45
45
|
messages?: Partial<DateRangePickerMessages>;
|
|
46
46
|
dataTestId?: string; // default 'date-range-picker'
|
|
47
47
|
className?: string;
|
|
48
|
+
// Opt-in, for a picker laid out IN a page (all off by default):
|
|
49
|
+
fieldsPlacement?: 'below' | 'beside'; // default 'below'
|
|
50
|
+
renderFields?: (args: { placement: 'beside' | 'below'; disabled: boolean }) => ReactNode;
|
|
51
|
+
openEnd?: boolean; // a start with no end is an answer
|
|
52
|
+
disabled?: boolean; // shown, not changeable (default false)
|
|
53
|
+
label?: string; // the disabled group's name (default: calendarLabel)
|
|
54
|
+
calendarLabels?: Partial<CalendarLabels>; // names for the month arrows
|
|
48
55
|
}
|
|
49
56
|
```
|
|
50
57
|
|
|
@@ -144,8 +151,14 @@ mounts. The picker remounts it when a **quick pick** or a **typed date** moves
|
|
|
144
151
|
the range, and never when a day inside the grid is clicked — a calendar that
|
|
145
152
|
jumped under the pointer picking in it would be unusable.
|
|
146
153
|
|
|
147
|
-
So the grid follows the range's **start
|
|
148
|
-
it to January, because that is
|
|
154
|
+
So the grid follows the range's **start** — or its **end** when only the end is
|
|
155
|
+
chosen. Picking "This year" in August moves it to January, because that is
|
|
156
|
+
where the range now begins.
|
|
157
|
+
|
|
158
|
+
A consumer that owns the draft may complete a tap into a different draft than
|
|
159
|
+
the one the picker handed it (keeping an end the tap would have dropped). That
|
|
160
|
+
is still the tap's own result: the grid stays on its month and focus stays on
|
|
161
|
+
the tapped day. Only a change that drops a bound the tap chose moves the grid.
|
|
149
162
|
|
|
150
163
|
## Layout
|
|
151
164
|
|
|
@@ -158,6 +171,68 @@ There is no `size` prop. The day grid has a fixed metric that a size scale would
|
|
|
158
171
|
not change, and a prop that only altered the padding of the quick entries would
|
|
159
172
|
be a scale in name only.
|
|
160
173
|
|
|
174
|
+
## A picker laid out in a page
|
|
175
|
+
|
|
176
|
+
The defaults above are a popover's: one framed block, fields underneath, a
|
|
177
|
+
summary line. A form that shows the range ALWAYS OPEN among its other fields
|
|
178
|
+
needs four more things, each opt-in so no existing screen changes:
|
|
179
|
+
|
|
180
|
+
- **`fieldsPlacement="beside"`** — the months get their own outlined frame and
|
|
181
|
+
the typed half sits on the page: in a column BESIDE the frame when the
|
|
182
|
+
picker's own width holds both, under it when it does not, and with one month
|
|
183
|
+
instead of two when two would not fit either. Measured on the picker
|
|
184
|
+
(`ResizeObserver`), never the viewport: a form column beside a preview is
|
|
185
|
+
narrow on the widest screen. The root carries `data-fields-placement`.
|
|
186
|
+
- **`renderFields({ placement, disabled })`** — the consumer's OWN fields instead of the
|
|
187
|
+
built-in pair, for a form whose fields carry rules this picker does not (a
|
|
188
|
+
half-typed date kept until submit, its own messages). The summary line goes
|
|
189
|
+
with the built-in pair: beside fields that say their own refusals it would
|
|
190
|
+
only repeat them. The calendar follows the value whenever the consumer moves
|
|
191
|
+
it, as it follows a typed date — never on a click in the grid.
|
|
192
|
+
- **`openEnd`** — a start with no end is a finished answer ("from this day
|
|
193
|
+
on"), and the summary says `messages.openEnded` (default `No end date.`)
|
|
194
|
+
instead of asking for the end. It does not repeat the date: the field beside
|
|
195
|
+
it shows it. `resolveDayRange` is unchanged; what an open end means is the
|
|
196
|
+
caller's.
|
|
197
|
+
- **`calendarLabels`** — names for the calendar's month arrows
|
|
198
|
+
(`PT_BR_UI_LABELS.calendar` in Portuguese); without them they stay unnamed,
|
|
199
|
+
as before. `PT_BR_UI_LABELS.dateRangePicker.openEnded` is the Portuguese
|
|
200
|
+
`openEnded`.
|
|
201
|
+
- **`disabled`** — the period is shown but cannot be changed now (a consumer
|
|
202
|
+
that cannot place its days, FUT-4482). Every day is disabled and a tap
|
|
203
|
+
writes nothing, the quick ranges are not offered, the built-in boxes are
|
|
204
|
+
disabled, `renderFields` receives `disabled: true` so the consumer's fields
|
|
205
|
+
follow, and the root is a `group` named by `label` (default: the calendar
|
|
206
|
+
label) carrying `aria-disabled`. The month arrows are disabled and today's
|
|
207
|
+
ring takes the disabled ink. The days INSIDE a shown range keep the
|
|
208
|
+
secondary ink (`text.secondary`), so the period stays legible on the band
|
|
209
|
+
(the disabled ink there was 1.56:1). That is the locked picker only: on a
|
|
210
|
+
live one, a day `isDateDisabled` blocks inside the range keeps the disabled
|
|
211
|
+
ink. The control cannot say why: say it beside the
|
|
212
|
+
picker, and make that sentence your fields' `aria-describedby`. **In a
|
|
213
|
+
popover the consumer disables its own trigger** — the button or field that
|
|
214
|
+
opens the popover is the consumer's, and this prop cannot reach it.
|
|
215
|
+
- **`showOutsideDays`, `todayIndicator`, `allowSameDayRange`** — `Calendar`'s
|
|
216
|
+
own options, passed through: hide the neighbouring months' days, ring today
|
|
217
|
+
(`'ring'`), or refuse one day as a whole range (a second tap on the start day
|
|
218
|
+
then does nothing). Defaults unchanged: drawn, bold, allowed.
|
|
219
|
+
|
|
220
|
+
Under the fields' row (`placement="below"`) the frame is as wide as its months
|
|
221
|
+
and centred, never stretched across the page around one month.
|
|
222
|
+
|
|
223
|
+
- **`fullWidth`** (with `fieldsPlacement="beside"`) — the frame's edges are the
|
|
224
|
+
picker's: under the fields it spans the picker, beside them it takes what the
|
|
225
|
+
fields' column leaves (never less than its months at full size), and that
|
|
226
|
+
column stops at 320 design px. The calendar's seven columns spread across the
|
|
227
|
+
frame; the day faces keep their 40 design px, and the rows stay 40 tall. Under
|
|
228
|
+
the fields the frame trims its side padding before a column drops under 40
|
|
229
|
+
design px (a phone's tap target). For a picker laid into a form section whose
|
|
230
|
+
heading and fields the frame must line up with. Ignored in the default
|
|
231
|
+
(popover) layout. Default off.
|
|
232
|
+
- **The in-page frame** is a card on the page: the raised surface role
|
|
233
|
+
(`surfaces(theme).raised`, `background.paper` unless the host states one) and the
|
|
234
|
+
default `Card`'s radius.
|
|
235
|
+
|
|
161
236
|
## Accessibility
|
|
162
237
|
|
|
163
238
|
- The quick entries are native `<button>`s with `aria-pressed`; the active one
|
|
@@ -64,6 +64,7 @@ export function defaultMessages(): DateRangePickerMessages {
|
|
|
64
64
|
to: 'End date',
|
|
65
65
|
quickRanges: 'Quick ranges',
|
|
66
66
|
incomplete: 'Choose both dates.',
|
|
67
|
+
openEnded: EN_US_UI_LABELS.dateRangePicker.openEnded,
|
|
67
68
|
reversed: 'The end date must be on or after the start date.',
|
|
68
69
|
overMax: ({ maxRangeDays }) => `Choose a range of at most ${maxRangeDays} days.`,
|
|
69
70
|
summary: ({ from, to }) => `${isoToMasked(from, dayMask)} – ${isoToMasked(to, dayMask)}`,
|
|
@@ -72,14 +73,21 @@ export function defaultMessages(): DateRangePickerMessages {
|
|
|
72
73
|
};
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* The line under the fields: the chosen window, or why there isn't one. With
|
|
78
|
+
* `openEnd`, a start with no end is an answer of its own and is said as one.
|
|
79
|
+
*/
|
|
76
80
|
export function statusMessage(
|
|
77
81
|
status: DateRangeStatus,
|
|
78
82
|
messages: DateRangePickerMessages,
|
|
79
83
|
maxRangeDays: number | undefined,
|
|
84
|
+
openEnd: { enabled: boolean; draft: DateRangeDraft } = { enabled: false, draft: { from: null, to: null } },
|
|
80
85
|
): string {
|
|
81
86
|
if (status.ok) return messages.summary(status.window);
|
|
82
|
-
if (status.problem === 'incomplete')
|
|
87
|
+
if (status.problem === 'incomplete') {
|
|
88
|
+
const openEnded = openEnd.enabled && openEnd.draft.from !== null && openEnd.draft.to === null;
|
|
89
|
+
return openEnded ? (messages.openEnded ?? messages.incomplete) : messages.incomplete;
|
|
90
|
+
}
|
|
83
91
|
if (status.problem === 'reversed') return messages.reversed;
|
|
84
92
|
return messages.overMax({ maxRangeDays: maxRangeDays ?? status.days, days: status.days });
|
|
85
93
|
}
|
|
@@ -27,34 +27,27 @@ import Paper from '@mui/material/Paper/index.js';
|
|
|
27
27
|
import useMediaQuery from '@mui/material/useMediaQuery/index.js';
|
|
28
28
|
import { useTheme } from '@mui/material/styles/index.js';
|
|
29
29
|
import type { SxProps, Theme } from '@mui/material/styles/index.js';
|
|
30
|
-
import React from 'react';
|
|
30
|
+
import React, { useRef } from 'react';
|
|
31
31
|
|
|
32
|
+
import type { CalendarLabels } from '../../../copy/labels';
|
|
32
33
|
import { Calendar } from '../Calendar';
|
|
33
34
|
|
|
34
35
|
import { toLocalDay } from './DateRangePicker.dates';
|
|
35
36
|
import { useDateRangePicker } from './DateRangePicker.hooks';
|
|
37
|
+
import { CALENDAR_CLASS, FLAT_CALENDAR, fieldsColumnSx, frameSx } from './DateRangePicker.frame';
|
|
38
|
+
import { besideLayout, useMeasuredWidth, type FieldsPlacement } from './DateRangePicker.layout';
|
|
36
39
|
import { DEFAULT_QUICK_RANGES } from './DateRangePicker.quick';
|
|
37
40
|
import type { DateRangeDraft, DateRangePickerProps, WeekStart } from './DateRangePicker.types';
|
|
38
41
|
import { DateRangeFields } from './DateRangePickerFields';
|
|
39
42
|
import { DateRangeQuickList } from './DateRangePickerQuickList';
|
|
40
43
|
|
|
41
|
-
const CALENDAR_CLASS = 'date-range-picker__calendar';
|
|
42
|
-
|
|
43
44
|
const ROOT_SX: SxProps<Theme> = {
|
|
44
45
|
display: 'inline-flex',
|
|
45
46
|
flexDirection: 'column',
|
|
46
47
|
gap: 2,
|
|
47
48
|
p: 2,
|
|
48
49
|
maxWidth: '100%',
|
|
49
|
-
|
|
50
|
-
// that reads as a box inside a box, so the inner frame is flattened here
|
|
51
|
-
// through the className hook the component exposes for exactly this.
|
|
52
|
-
[`& .${CALENDAR_CLASS}`]: {
|
|
53
|
-
p: 0,
|
|
54
|
-
boxShadow: 'none',
|
|
55
|
-
backgroundColor: 'transparent',
|
|
56
|
-
backgroundImage: 'none',
|
|
57
|
-
},
|
|
50
|
+
...FLAT_CALENDAR,
|
|
58
51
|
};
|
|
59
52
|
|
|
60
53
|
const BODY_SX: SxProps<Theme> = {
|
|
@@ -132,6 +125,15 @@ function useMonthCount(requested: number | undefined): number | undefined {
|
|
|
132
125
|
}
|
|
133
126
|
|
|
134
127
|
/** The grid, in range mode — `Calendar`, never a second implementation of one. */
|
|
128
|
+
/** The calendar options a picker passes through untouched. */
|
|
129
|
+
type CalendarDisplay = Pick<
|
|
130
|
+
DateRangePickerProps,
|
|
131
|
+
'showOutsideDays' | 'todayIndicator' | 'allowSameDayRange' | 'fullWidth' | 'disabled'
|
|
132
|
+
>;
|
|
133
|
+
|
|
134
|
+
/** Every day, for a picker that is `disabled`. */
|
|
135
|
+
const EVERY_DAY = (): boolean => true;
|
|
136
|
+
|
|
135
137
|
function RangeCalendar({
|
|
136
138
|
calendarLabel,
|
|
137
139
|
picker,
|
|
@@ -140,7 +142,11 @@ function RangeCalendar({
|
|
|
140
142
|
weekStartsOn,
|
|
141
143
|
months,
|
|
142
144
|
maxRangeDays,
|
|
145
|
+
labels,
|
|
146
|
+
display,
|
|
143
147
|
}: {
|
|
148
|
+
labels: Partial<CalendarLabels> | undefined;
|
|
149
|
+
display: CalendarDisplay;
|
|
144
150
|
picker: Picker;
|
|
145
151
|
value: DateRangeDraft;
|
|
146
152
|
locale: string;
|
|
@@ -169,6 +175,12 @@ function RangeCalendar({
|
|
|
169
175
|
// The same ceiling the quick list is judged against, so the calendar
|
|
170
176
|
// cannot hand back a window the control has just called too long.
|
|
171
177
|
maxRangeLength={maxRangeDays}
|
|
178
|
+
{...(labels ? { labels } : {})}
|
|
179
|
+
showOutsideDays={display.showOutsideDays}
|
|
180
|
+
todayIndicator={display.todayIndicator}
|
|
181
|
+
allowSameDayRange={display.allowSameDayRange}
|
|
182
|
+
fullWidth={display.fullWidth}
|
|
183
|
+
{...(display.disabled === true ? { isDateDisabled: EVERY_DAY, navigationDisabled: true } : {})}
|
|
172
184
|
/>
|
|
173
185
|
);
|
|
174
186
|
}
|
|
@@ -200,59 +212,167 @@ function QuickColumn({
|
|
|
200
212
|
);
|
|
201
213
|
}
|
|
202
214
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
/** The typed half: the consumer's own fields, or the built-in pair and its line. */
|
|
216
|
+
function TypedHalf({
|
|
217
|
+
props,
|
|
218
|
+
picker,
|
|
219
|
+
placement,
|
|
220
|
+
}: {
|
|
221
|
+
props: DateRangePickerProps;
|
|
222
|
+
picker: Picker;
|
|
223
|
+
placement: FieldsPlacement;
|
|
224
|
+
}): React.JSX.Element {
|
|
225
|
+
const disabled = props.disabled === true;
|
|
226
|
+
if (props.renderFields) return <>{props.renderFields({ placement, disabled })}</>;
|
|
227
|
+
return (
|
|
228
|
+
<DateRangeFields
|
|
229
|
+
value={props.value}
|
|
230
|
+
status={picker.status}
|
|
231
|
+
messages={picker.copy}
|
|
232
|
+
maxRangeDays={props.maxRangeDays}
|
|
233
|
+
onEdit={picker.editBound}
|
|
234
|
+
statusId={picker.statusId}
|
|
235
|
+
dataTestId={props.dataTestId ?? 'date-range-picker'}
|
|
236
|
+
openEnd={props.openEnd ?? false}
|
|
237
|
+
stacked={placement === 'beside'}
|
|
238
|
+
disabled={disabled}
|
|
239
|
+
/>
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* How many months, and where the typed half goes. The default layout counts
|
|
245
|
+
* months by the viewport, as it always did; `beside` measures the picker.
|
|
246
|
+
*/
|
|
247
|
+
function usePickerLayout(props: DateRangePickerProps): {
|
|
248
|
+
root: React.RefObject<HTMLDivElement | null>;
|
|
249
|
+
months: number | undefined;
|
|
250
|
+
placement: FieldsPlacement;
|
|
251
|
+
} {
|
|
252
|
+
const theme = useTheme();
|
|
253
|
+
const viewportMonths = useMonthCount(props.numberOfMonths);
|
|
254
|
+
const root = useRef<HTMLDivElement>(null);
|
|
255
|
+
const beside = props.fieldsPlacement === 'beside';
|
|
256
|
+
const width = useMeasuredWidth(root, beside);
|
|
257
|
+
if (!beside || width === null) return { root, months: viewportMonths, placement: 'below' };
|
|
258
|
+
const layout = besideLayout(width, props.numberOfMonths ?? 2, theme);
|
|
259
|
+
return { root, months: layout.months, placement: layout.placement };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** The `beside` layout: the months in their own frame, the fields on the page. */
|
|
263
|
+
function InPageLayout({
|
|
264
|
+
props,
|
|
265
|
+
picker,
|
|
266
|
+
layout,
|
|
267
|
+
body,
|
|
268
|
+
}: {
|
|
269
|
+
props: DateRangePickerProps;
|
|
270
|
+
picker: Picker;
|
|
271
|
+
layout: ReturnType<typeof usePickerLayout>;
|
|
272
|
+
body: React.ReactNode;
|
|
273
|
+
}): React.JSX.Element {
|
|
274
|
+
const sideBySide = layout.placement === 'beside';
|
|
275
|
+
return (
|
|
276
|
+
<Box
|
|
277
|
+
ref={layout.root}
|
|
278
|
+
className={props.className}
|
|
279
|
+
data-testid={props.dataTestId ?? 'date-range-picker'}
|
|
280
|
+
data-fields-placement={layout.placement}
|
|
281
|
+
{...disabledGroup(props, picker)}
|
|
282
|
+
sx={{
|
|
283
|
+
display: 'flex',
|
|
284
|
+
flexDirection: sideBySide ? 'row' : 'column',
|
|
285
|
+
alignItems: sideBySide ? 'flex-start' : 'stretch',
|
|
286
|
+
gap: sideBySide ? 4 : 2,
|
|
287
|
+
width: '100%',
|
|
288
|
+
minWidth: 0,
|
|
289
|
+
}}
|
|
290
|
+
>
|
|
291
|
+
<Paper variant="outlined" sx={frameSx(sideBySide, props.fullWidth === true, layout.months ?? 1)}>
|
|
292
|
+
{body}
|
|
293
|
+
</Paper>
|
|
294
|
+
<Box sx={fieldsColumnSx(sideBySide, props.fullWidth === true)}>
|
|
295
|
+
<TypedHalf props={props} picker={picker} placement={layout.placement} />
|
|
296
|
+
</Box>
|
|
297
|
+
</Box>
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* A disabled picker's root is a named GROUP (review round 6): `aria-disabled`
|
|
303
|
+
* is only valid on an element with a role, and the name says what is off.
|
|
304
|
+
* Enabled, the root carries neither, as it always did.
|
|
305
|
+
*/
|
|
306
|
+
function disabledGroup(props: DateRangePickerProps, picker: Picker) {
|
|
307
|
+
if (props.disabled !== true) return {};
|
|
308
|
+
return { role: 'group', 'aria-label': props.label ?? picker.copy.calendarLabel, 'aria-disabled': true } as const;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** The default layout: one framed block, the typed half under the months. */
|
|
312
|
+
function PopoverLayout({
|
|
313
|
+
props,
|
|
314
|
+
picker,
|
|
315
|
+
body,
|
|
316
|
+
}: {
|
|
317
|
+
props: DateRangePickerProps;
|
|
318
|
+
picker: Picker;
|
|
319
|
+
body: React.ReactNode;
|
|
320
|
+
}): React.JSX.Element {
|
|
321
|
+
const typed = <TypedHalf props={props} picker={picker} placement="below" />;
|
|
322
|
+
return (
|
|
323
|
+
<Paper
|
|
324
|
+
className={props.className}
|
|
325
|
+
data-testid={props.dataTestId ?? 'date-range-picker'}
|
|
326
|
+
{...disabledGroup(props, picker)}
|
|
327
|
+
sx={ROOT_SX}
|
|
328
|
+
>
|
|
329
|
+
{body}
|
|
330
|
+
{props.renderFields ? typed : <Box sx={FIELDS_DIVIDER_SX}>{typed}</Box>}
|
|
331
|
+
</Paper>
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export function DateRangePicker(props: DateRangePickerProps): React.JSX.Element {
|
|
336
|
+
const { value, maxRangeDays, weekStartsOn = 0, locale = 'en-US', dataTestId = 'date-range-picker' } = props;
|
|
217
337
|
const picker = useDateRangePicker({
|
|
218
338
|
value,
|
|
219
|
-
onChange,
|
|
220
|
-
timeZone,
|
|
221
|
-
now,
|
|
339
|
+
onChange: props.onChange,
|
|
340
|
+
timeZone: props.timeZone,
|
|
341
|
+
now: props.now,
|
|
222
342
|
maxRangeDays,
|
|
223
343
|
weekStartsOn,
|
|
224
|
-
quickRanges,
|
|
225
|
-
messages,
|
|
344
|
+
quickRanges: props.quickRanges ?? DEFAULT_QUICK_RANGES,
|
|
345
|
+
messages: props.messages,
|
|
346
|
+
followValue: props.renderFields !== undefined,
|
|
226
347
|
});
|
|
227
|
-
const
|
|
348
|
+
const layout = usePickerLayout(props);
|
|
228
349
|
|
|
229
|
-
|
|
230
|
-
<
|
|
231
|
-
<
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
350
|
+
const body = (
|
|
351
|
+
<Box sx={BODY_SX}>
|
|
352
|
+
<RangeCalendar
|
|
353
|
+
calendarLabel={picker.copy.calendarLabel}
|
|
354
|
+
picker={picker}
|
|
355
|
+
value={value}
|
|
356
|
+
locale={locale}
|
|
357
|
+
weekStartsOn={weekStartsOn}
|
|
358
|
+
months={layout.months}
|
|
359
|
+
maxRangeDays={maxRangeDays}
|
|
360
|
+
labels={props.calendarLabels}
|
|
361
|
+
// `fullWidth` fills the in-page frame; the popover's frame is as wide
|
|
362
|
+
// as its months, and a filling calendar in it spread past the quick
|
|
363
|
+
// column and the typed pair (FUT-4156, round 3).
|
|
364
|
+
display={{ ...props, fullWidth: props.fieldsPlacement === 'beside' && props.fullWidth === true }}
|
|
365
|
+
/>
|
|
366
|
+
{props.disabled === true ? null : (
|
|
241
367
|
<QuickColumn picker={picker} maxRangeDays={maxRangeDays} dataTestId={dataTestId} />
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
<DateRangeFields
|
|
245
|
-
value={value}
|
|
246
|
-
status={picker.status}
|
|
247
|
-
messages={picker.copy}
|
|
248
|
-
maxRangeDays={maxRangeDays}
|
|
249
|
-
onEdit={picker.editBound}
|
|
250
|
-
statusId={picker.statusId}
|
|
251
|
-
dataTestId={dataTestId}
|
|
252
|
-
/>
|
|
253
|
-
</Box>
|
|
254
|
-
</Paper>
|
|
368
|
+
)}
|
|
369
|
+
</Box>
|
|
255
370
|
);
|
|
371
|
+
|
|
372
|
+
if (props.fieldsPlacement === 'beside') {
|
|
373
|
+
return <InPageLayout props={props} picker={picker} layout={layout} body={body} />;
|
|
374
|
+
}
|
|
375
|
+
return <PopoverLayout props={props} picker={picker} body={body} />;
|
|
256
376
|
}
|
|
257
377
|
|
|
258
378
|
export default DateRangePicker;
|