@12-apps/ui 6.97.1 → 6.98.1
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/Alert/Alert.content.js +4 -2
- package/dist/_internal/components/data-display/Alert/Alert.ink.js +27 -0
- package/dist/_internal/components/data-display/Alert/Alert.js +5 -4
- package/dist/_internal/components/data-display/Alert/Alert.metrics.js +5 -1
- package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
- 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/Banner/Banner.js +3 -3
- package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -2
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +7 -6
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +15 -14
- 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 +72 -71
- 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 +22 -21
- 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 +97 -93
- 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/NotificationStatusNotice/NotificationStatusNotice.js +6 -5
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.frame.js +3 -3
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +12 -11
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +8 -7
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +7 -6
- 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 +30 -29
- 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 +178 -172
- 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-QIP37Y2C.js → chunk-2RC6EAGD.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-3BMG6VMB.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-ZBUMGMWP.js → chunk-3R5MCSYO.js} +6 -6
- 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-RCTHCXS6.js → chunk-4N4M237A.js} +2 -2
- 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-QWI7IPYJ.js → chunk-5V7IZBRY.js} +4 -4
- package/dist/{chunk-Y7BOP7VZ.js → chunk-67GTAPK6.js} +3 -3
- package/dist/{chunk-T77OVQEO.js → chunk-6D7CASMK.js} +2 -2
- package/dist/{chunk-YNZUYZ2O.js → chunk-6FGP7RMV.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-EB25XITI.js → chunk-A27J4CIZ.js} +10 -10
- package/dist/{chunk-2KSFBZ2H.js → chunk-ABZJNKR6.js} +2 -2
- package/dist/{chunk-GTE4TW3W.js → chunk-AESKKFA5.js} +6 -6
- package/dist/chunk-AG4F6NVT.js +1 -0
- package/dist/chunk-AG4F6NVT.js.map +1 -0
- package/dist/{chunk-6LOWZCH7.js → chunk-AHXQN4VL.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-USHVG4UQ.js → chunk-CGLMWS7K.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-HBRBIPNF.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-IS3L67TF.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-7HZ36QDH.js → chunk-GDWU7WF4.js} +9 -3
- package/dist/chunk-GDWU7WF4.js.map +1 -0
- package/dist/{chunk-W3IFJA35.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-F5OERPU4.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-LNZJJFZQ.js +41 -0
- package/dist/chunk-LNZJJFZQ.js.map +1 -0
- 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-55MYYWOV.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-6D5AMANO.js → chunk-OV5NM4FY.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-BQBEN44R.js → chunk-PNAKRHRT.js} +2 -2
- 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-NQCTANF3.js → chunk-RKAX37F4.js} +14 -7
- package/dist/chunk-RKAX37F4.js.map +1 -0
- 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-CQOJUYTT.js → chunk-SOXO2VN3.js} +3 -3
- package/dist/{chunk-Z4ZFJ565.js → chunk-SRAIV6U6.js} +3 -3
- package/dist/{chunk-5ZY3IIIG.js → chunk-TBQR5VCN.js} +11 -1
- package/dist/chunk-TBQR5VCN.js.map +1 -0
- 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-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/{chunk-XOXXG7Q5.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-UIS3E72B.js → chunk-WK577LQL.js} +3 -3
- package/dist/{chunk-G3WG77QY.js → chunk-WN6LR4HX.js} +21 -6
- 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-L5RS6QAT.js → chunk-YBF2WUGQ.js} +2 -2
- package/dist/{chunk-FWTVIRZZ.js → chunk-YLZXIR6B.js} +4 -4
- package/dist/{chunk-STOZ6JB5.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-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/Alert.js +9 -5
- 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/Banner.js +3 -3
- package/dist/data-display/CardKit.js +19 -18
- 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 +78 -77
- 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/NotificationStatusNotice.js +6 -5
- package/dist/feedback/SequenceResolver.js +12 -11
- 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/native/chunks/{chunk-QHW7JEPZ.js → 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/Alert.js +10 -0
- package/dist/native/data-display/Alert.js.map +1 -1
- 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/Alert/Alert.content.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.ink.d.ts +65 -0
- package/dist/types/components/data-display/Alert/Alert.ink.d.ts.map +1 -0
- package/dist/types/components/data-display/Alert/Alert.metrics.d.ts +73 -5
- package/dist/types/components/data-display/Alert/Alert.metrics.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/index.d.ts +1 -0
- package/dist/types/components/data-display/Alert/index.d.ts.map +1 -1
- 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 +22 -0
- 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/components/data-display/Alert/Alert.metrics.d.ts +73 -5
- package/dist/types-native/components/data-display/Alert/Alert.metrics.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/Alert/Alert.content.tsx +16 -1
- package/src/components/data-display/Alert/Alert.ink.ts +106 -0
- package/src/components/data-display/Alert/Alert.md +40 -0
- package/src/components/data-display/Alert/Alert.metrics.ts +57 -5
- package/src/components/data-display/Alert/Alert.tsx +18 -7
- package/src/components/data-display/Alert/index.ts +1 -0
- 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 +40 -4
- 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-3CSKB57B.js +0 -184
- package/dist/chunk-3CSKB57B.js.map +0 -1
- package/dist/chunk-3ZRK3BRN.js.map +0 -1
- package/dist/chunk-4L54KUZV.js.map +0 -1
- package/dist/chunk-5ZY3IIIG.js.map +0 -1
- package/dist/chunk-7HZ36QDH.js.map +0 -1
- package/dist/chunk-G3WG77QY.js.map +0 -1
- package/dist/chunk-H2UUMZQR.js.map +0 -1
- package/dist/chunk-HBRBIPNF.js.map +0 -1
- package/dist/chunk-I4K5JMS4.js.map +0 -1
- package/dist/chunk-MPWA55CF.js.map +0 -1
- package/dist/chunk-NQCTANF3.js.map +0 -1
- package/dist/chunk-NUGT7LMR.js +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-STOZ6JB5.js.map +0 -1
- package/dist/chunk-TPMT3J32.js.map +0 -1
- /package/dist/{chunk-NUGT7LMR.js.map → _internal/components/data-display/Alert/Alert.ink.js.map} +0 -0
- /package/dist/{chunk-UBVKMM3V.js.map → chunk-2A5GHOL3.js.map} +0 -0
- /package/dist/{chunk-QIP37Y2C.js.map → chunk-2RC6EAGD.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-3BMG6VMB.js.map → chunk-3N2HWNKT.js.map} +0 -0
- /package/dist/{chunk-MSJP2AEN.js.map → chunk-3N3W4TID.js.map} +0 -0
- /package/dist/{chunk-ZBUMGMWP.js.map → chunk-3R5MCSYO.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-RCTHCXS6.js.map → chunk-4N4M237A.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-QWI7IPYJ.js.map → chunk-5V7IZBRY.js.map} +0 -0
- /package/dist/{chunk-Y7BOP7VZ.js.map → chunk-67GTAPK6.js.map} +0 -0
- /package/dist/{chunk-T77OVQEO.js.map → chunk-6D7CASMK.js.map} +0 -0
- /package/dist/{chunk-YNZUYZ2O.js.map → chunk-6FGP7RMV.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-EB25XITI.js.map → chunk-A27J4CIZ.js.map} +0 -0
- /package/dist/{chunk-2KSFBZ2H.js.map → chunk-ABZJNKR6.js.map} +0 -0
- /package/dist/{chunk-GTE4TW3W.js.map → chunk-AESKKFA5.js.map} +0 -0
- /package/dist/{chunk-6LOWZCH7.js.map → chunk-AHXQN4VL.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-USHVG4UQ.js.map → chunk-CGLMWS7K.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-IS3L67TF.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-W3IFJA35.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-F5OERPU4.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-55MYYWOV.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-6D5AMANO.js.map → chunk-OV5NM4FY.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-BQBEN44R.js.map → chunk-PNAKRHRT.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-CQOJUYTT.js.map → chunk-SOXO2VN3.js.map} +0 -0
- /package/dist/{chunk-Z4ZFJ565.js.map → chunk-SRAIV6U6.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-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-UIS3E72B.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-L5RS6QAT.js.map → chunk-YBF2WUGQ.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-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
|
@@ -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;
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
* "1 August" is the same day in every zone, and only the question "which day is
|
|
5
5
|
* TODAY" needs a zone to answer.
|
|
6
6
|
*/
|
|
7
|
-
import type
|
|
7
|
+
import type React from 'react';
|
|
8
|
+
|
|
9
|
+
import type { CalendarLabels } from '../../../copy/labels';
|
|
10
|
+
import type { CalendarTodayIndicator, DateRange } from '../Calendar';
|
|
8
11
|
|
|
9
12
|
/** One inclusive calendar day as `AAAA-MM-DD`. Sorts lexicographically. */
|
|
10
13
|
export type DayString = string;
|
|
@@ -90,6 +93,12 @@ export interface DateRangePickerMessages {
|
|
|
90
93
|
quickRanges: string;
|
|
91
94
|
/** Shown while only one end is chosen. */
|
|
92
95
|
incomplete: string;
|
|
96
|
+
/**
|
|
97
|
+
* Shown, with `openEnd`, for a start with no end: a finished answer ("no end
|
|
98
|
+
* date"), worded WITHOUT the date, which the field beside it already shows.
|
|
99
|
+
* Optional so a full messages object written before it still type-checks.
|
|
100
|
+
*/
|
|
101
|
+
openEnded?: string;
|
|
93
102
|
/** Shown when the start is after the end. */
|
|
94
103
|
reversed: string;
|
|
95
104
|
/** Shown when the range — typed or quick-picked — exceeds the cap. */
|
|
@@ -164,6 +173,78 @@ export interface DateRangePickerProps {
|
|
|
164
173
|
numberOfMonths?: number;
|
|
165
174
|
/** Copy overrides, merged over the English defaults. */
|
|
166
175
|
messages?: Partial<DateRangePickerMessages>;
|
|
176
|
+
/**
|
|
177
|
+
* Where the typed half sits. `below` (default) is the layout this picker
|
|
178
|
+
* always had. `beside` is for a picker laid out in a page rather than a
|
|
179
|
+
* popover: the months sit in their own frame and the fields in a column
|
|
180
|
+
* beside them when the PICKER's own width has room for both, under them when
|
|
181
|
+
* it has not — and one month instead of two when two would not fit either.
|
|
182
|
+
* Decided by measuring the picker, not the viewport, because a form column
|
|
183
|
+
* beside a preview is narrow on the widest screen.
|
|
184
|
+
*/
|
|
185
|
+
fieldsPlacement?: 'below' | 'beside';
|
|
186
|
+
/**
|
|
187
|
+
* With `fieldsPlacement="beside"`: the months' frame meets the picker's own
|
|
188
|
+
* edges instead of hugging its months. Under the fields' row the frame spans
|
|
189
|
+
* the picker; beside them it takes what the fields' column leaves, and that
|
|
190
|
+
* column stops at 320 design px — a `dd/mm/aaaa` date and its message need
|
|
191
|
+
* no more. The calendar's seven columns spread across the frame and the day
|
|
192
|
+
* faces keep their size (`Calendar` `fullWidth`). For a picker laid into a
|
|
193
|
+
* form section whose edges the frame must line up with. Under the fields the
|
|
194
|
+
* frame trims its side padding before a column drops under 40 design px.
|
|
195
|
+
* Ignored without `fieldsPlacement="beside"`: the popover's frame is as wide
|
|
196
|
+
* as its months. Default: false — the frame as wide as its months, centred
|
|
197
|
+
* under the fields.
|
|
198
|
+
*/
|
|
199
|
+
fullWidth?: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* The consumer's OWN typed fields, in place of the built-in pair and the
|
|
202
|
+
* summary line under it — for a form whose fields carry its own rules (a
|
|
203
|
+
* half-typed date kept until submit, its own messages), which a second line
|
|
204
|
+
* would only repeat. Told where it sits, so it can lay its fields out for it.
|
|
205
|
+
* The calendar follows the value when the consumer changes it, as it follows
|
|
206
|
+
* a typed date.
|
|
207
|
+
*/
|
|
208
|
+
renderFields?: (args: { placement: 'beside' | 'below'; disabled: boolean }) => React.ReactNode;
|
|
209
|
+
/**
|
|
210
|
+
* The period is shown but cannot be changed now — its consumer cannot place
|
|
211
|
+
* its days (FUT-4482). Every day of the grid is disabled and a tap writes
|
|
212
|
+
* nothing, the quick ranges are not offered, the built-in boxes are
|
|
213
|
+
* disabled, `renderFields` is told (`disabled`) so the consumer's own fields
|
|
214
|
+
* follow, and the root is a `group` named by `label` that carries
|
|
215
|
+
* `aria-disabled`. The month arrows are disabled too and today's ring takes
|
|
216
|
+
* the disabled ink (review round 6). Say WHY next to the picker; the control
|
|
217
|
+
* cannot — and describe the consumer's own fields with that sentence.
|
|
218
|
+
*
|
|
219
|
+
* In a popover, the picker is only what opens: the consumer disables its OWN
|
|
220
|
+
* trigger (the button or field that opens the popover); this prop cannot
|
|
221
|
+
* reach it. Default: false.
|
|
222
|
+
*/
|
|
223
|
+
disabled?: boolean;
|
|
224
|
+
/**
|
|
225
|
+
* The picker's accessible name while it is `disabled` and its root is a
|
|
226
|
+
* group. Default: `messages.calendarLabel`.
|
|
227
|
+
*/
|
|
228
|
+
label?: string;
|
|
229
|
+
/**
|
|
230
|
+
* A start with no end is a finished answer — "from this day on" — rather
|
|
231
|
+
* than half a range: the summary says `messages.openEnded` instead of asking
|
|
232
|
+
* for the end. `resolveDayRange` is unchanged; the caller decides what an
|
|
233
|
+
* open end means to it.
|
|
234
|
+
*/
|
|
235
|
+
openEnd?: boolean;
|
|
236
|
+
/**
|
|
237
|
+
* The calendar's display options, passed through (`Calendar`'s own):
|
|
238
|
+
* whether a month shows its neighbours' days (default true), how today is
|
|
239
|
+
* marked (default `'bold'`), and whether one day may be the whole range
|
|
240
|
+
* (default true). With `allowSameDayRange={false}` a second tap on the start
|
|
241
|
+
* day does nothing.
|
|
242
|
+
*/
|
|
243
|
+
showOutsideDays?: boolean;
|
|
244
|
+
todayIndicator?: CalendarTodayIndicator;
|
|
245
|
+
allowSameDayRange?: boolean;
|
|
246
|
+
/** Names for the calendar's own controls (the month arrows), in the host's language. */
|
|
247
|
+
calendarLabels?: Partial<CalendarLabels>;
|
|
167
248
|
/** Root test id; every part derives from it (`-from`, `-quick-today`, …). */
|
|
168
249
|
dataTestId?: string;
|
|
169
250
|
className?: string;
|
|
@@ -182,6 +263,12 @@ export interface UseDateRangePickerArgs {
|
|
|
182
263
|
weekStartsOn: WeekStart;
|
|
183
264
|
quickRanges: QuickRange[];
|
|
184
265
|
messages: Partial<DateRangePickerMessages> | undefined;
|
|
266
|
+
/**
|
|
267
|
+
* Remount the calendar onto the range whenever the CONSUMER moves it, not
|
|
268
|
+
* only when a typed field or a quick pick does — true when the consumer owns
|
|
269
|
+
* the fields (`renderFields`), whose edits never pass through the picker.
|
|
270
|
+
*/
|
|
271
|
+
followValue?: boolean;
|
|
185
272
|
}
|
|
186
273
|
|
|
187
274
|
/** Everything the component renders from, and every way the range can move. */
|
|
@@ -38,6 +38,12 @@ export interface DateRangeFieldsProps {
|
|
|
38
38
|
/** Id of the status line, so both fields can point at it. */
|
|
39
39
|
statusId: string;
|
|
40
40
|
dataTestId: string;
|
|
41
|
+
/** A start with no end is an answer (`openEnd`), not a half-chosen range. */
|
|
42
|
+
openEnd?: boolean;
|
|
43
|
+
/** Beside the months the pair stacks; under them it sits side by side. */
|
|
44
|
+
stacked?: boolean;
|
|
45
|
+
/** The picker is `disabled`: both boxes are. */
|
|
46
|
+
disabled?: boolean;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
export function DateRangeFields({
|
|
@@ -48,6 +54,9 @@ export function DateRangeFields({
|
|
|
48
54
|
onEdit,
|
|
49
55
|
statusId,
|
|
50
56
|
dataTestId,
|
|
57
|
+
openEnd = false,
|
|
58
|
+
stacked = false,
|
|
59
|
+
disabled = false,
|
|
51
60
|
}: DateRangeFieldsProps): React.JSX.Element {
|
|
52
61
|
// "Incomplete" is not an error — it is a range that is not finished yet, and
|
|
53
62
|
// painting it red would make the first click on a two-click control look like
|
|
@@ -56,7 +65,7 @@ export function DateRangeFields({
|
|
|
56
65
|
|
|
57
66
|
return (
|
|
58
67
|
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
|
|
59
|
-
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>
|
|
68
|
+
<Box sx={{ display: 'flex', flexDirection: stacked ? 'column' : 'row', flexWrap: 'wrap', gap: 2 }}>
|
|
60
69
|
<DayBoundInput
|
|
61
70
|
mask={messages.dayMask}
|
|
62
71
|
label={messages.from}
|
|
@@ -65,6 +74,7 @@ export function DateRangeFields({
|
|
|
65
74
|
testId={`${dataTestId}-from`}
|
|
66
75
|
error={rejected}
|
|
67
76
|
describedBy={statusId}
|
|
77
|
+
disabled={disabled}
|
|
68
78
|
/>
|
|
69
79
|
<DayBoundInput
|
|
70
80
|
mask={messages.dayMask}
|
|
@@ -74,6 +84,7 @@ export function DateRangeFields({
|
|
|
74
84
|
testId={`${dataTestId}-to`}
|
|
75
85
|
error={rejected}
|
|
76
86
|
describedBy={statusId}
|
|
87
|
+
disabled={disabled}
|
|
77
88
|
/>
|
|
78
89
|
</Box>
|
|
79
90
|
<Typography
|
|
@@ -86,7 +97,7 @@ export function DateRangeFields({
|
|
|
86
97
|
color={rejected ? 'error.main' : 'text.secondary'}
|
|
87
98
|
data-testid={`${dataTestId}-status`}
|
|
88
99
|
>
|
|
89
|
-
{statusMessage(status, messages, maxRangeDays)}
|
|
100
|
+
{statusMessage(status, messages, maxRangeDays, { enabled: openEnd, draft: value })}
|
|
90
101
|
</Typography>
|
|
91
102
|
</Box>
|
|
92
103
|
);
|
|
@@ -78,7 +78,8 @@ The Tabs component provides an intuitive way to organize related content into se
|
|
|
78
78
|
| Prop | Type | Default | Description |
|
|
79
79
|
| ---------------- | --------------------------------------- | -------- | ------------------------------ |
|
|
80
80
|
| `scrollable` | `boolean` | `false` | Enable scrolling for many tabs |
|
|
81
|
-
| `scrollButtons` | `'auto' \| 'desktop' \| 'on' \| 'off'`
|
|
81
|
+
| `scrollButtons` | `boolean \| 'auto' \| 'desktop' \| 'on' \| 'off'` | `'auto'` | The ‹ › buttons of a `scrollable` strip: `'auto'` while it overflows, `true` always, `false` never (swipe/wheel/keyboard still scroll). `'desktop'`, `'on'`, `'off'` are deprecated and behave as `'auto'` |
|
|
82
|
+
| `allowScrollButtonsMobile` | `boolean` | `scrollable` | Show the scroll buttons on phone widths too; `false` keeps MUI's hide-below-`sm` rule |
|
|
82
83
|
| `sticky` | `boolean` | `false` | Pin the tab list while panels scroll beneath it |
|
|
83
84
|
| `stickyOffset` | `number` | `0` | Top offset (px) when `sticky` — e.g. a fixed header height |
|
|
84
85
|
|
|
@@ -270,6 +271,26 @@ function ScrollableTabsExample() {
|
|
|
270
271
|
}
|
|
271
272
|
```
|
|
272
273
|
|
|
274
|
+
### Scrollable Tabs Without Scroll Buttons
|
|
275
|
+
|
|
276
|
+
`scrollButtons={false}` keeps the strip scrollable (swipe, wheel, keyboard) but
|
|
277
|
+
renders no ‹ › buttons, so the tabs run edge to edge and nothing shifts when the
|
|
278
|
+
strip leaves its start. A host that wants arrows draws its own, for example
|
|
279
|
+
overlaid on a fade at the side with more tabs.
|
|
280
|
+
|
|
281
|
+
```tsx
|
|
282
|
+
<Tabs
|
|
283
|
+
items={items}
|
|
284
|
+
value={activeTab}
|
|
285
|
+
onChange={handleChange}
|
|
286
|
+
scrollable
|
|
287
|
+
scrollButtons={false}
|
|
288
|
+
/>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Note that `scrollButtons="off"` does **not** do this: the legacy strings
|
|
292
|
+
`'desktop'`, `'on'` and `'off'` all behave as `'auto'`, as they always have.
|
|
293
|
+
|
|
273
294
|
### Sticky, Scrollable Tabs
|
|
274
295
|
|
|
275
296
|
Pin the tab list under a fixed header while the panels scroll, and let the row
|