@salt-ds/lab 1.0.0-alpha.67 → 1.0.0-alpha.68
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/CHANGELOG.md +172 -0
- package/css/salt-lab.css +24 -190
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
- package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
- package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
- package/dist-cjs/button-bar/internal/useDescendant.js.map +1 -1
- package/dist-cjs/calendar/Calendar.js +23 -8
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarGrid.js +56 -80
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
- package/dist-cjs/calendar/CalendarMonthHeader.css.js +6 -0
- package/dist-cjs/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js +48 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.js +30 -39
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.js +2 -6
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarContext.js +3 -1
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js +88 -76
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js +13 -23
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js +5 -6
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-cjs/calendar/internal/utils.js +8 -12
- package/dist-cjs/calendar/internal/utils.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +69 -109
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarDay.js +21 -18
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +146 -34
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/carousel/CarouselContext.js.map +1 -1
- package/dist-cjs/carousel/CarouselControls.js.map +1 -1
- package/dist-cjs/carousel/CarouselReducer.js.map +1 -1
- package/dist-cjs/carousel/CarouselSlide.js.map +1 -1
- package/dist-cjs/carousel/CarouselSlider.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/keydownHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useStateReducer.js.map +1 -1
- package/dist-cjs/cascading-menu/stateChangeTypes.js +0 -1
- package/dist-cjs/cascading-menu/stateChangeTypes.js.map +1 -1
- package/dist-cjs/color-chooser/Color.js.map +1 -1
- package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
- package/dist-cjs/color-chooser/ColorHelpers.js.map +1 -1
- package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
- package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
- package/dist-cjs/color-chooser/HexInput.js.map +1 -1
- package/dist-cjs/color-chooser/Swatch.js.map +1 -1
- package/dist-cjs/color-chooser/Swatches.js.map +1 -1
- package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-cjs/combo-box/ComboBox.js +0 -2
- package/dist-cjs/combo-box/ComboBox.js.map +1 -1
- package/dist-cjs/combo-box/useCombobox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js +0 -4
- package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js +0 -4
- package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
- package/dist-cjs/common-hooks/calcPreferredHeight.js.map +1 -1
- package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
- package/dist-cjs/common-hooks/list-dom-utils.js.map +1 -1
- package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
- package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
- package/dist-cjs/common-hooks/useSelection.js.map +1 -1
- package/dist-cjs/common-hooks/useTypeahead.js +1 -1
- package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
- package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
- package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-cjs/date-input/DateInputRange.js +61 -51
- package/dist-cjs/date-input/DateInputRange.js.map +1 -1
- package/dist-cjs/date-input/DateInputSingle.js +33 -18
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +9 -1
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerHelperText.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js +36 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +40 -16
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +247 -0
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js +38 -6
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +188 -32
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +255 -0
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js +13 -5
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +6 -105
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-cjs/date-picker/useDatePicker.js +71 -11
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
- package/dist-cjs/date-picker/useFocusOut.js +43 -0
- package/dist-cjs/date-picker/useFocusOut.js.map +1 -0
- package/dist-cjs/date-picker/useKeyboard.js +4 -5
- package/dist-cjs/date-picker/useKeyboard.js.map +1 -1
- package/dist-cjs/deck-item/DeckItem.js.map +1 -1
- package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
- package/dist-cjs/dropdown/Dropdown.js +0 -1
- package/dist-cjs/dropdown/Dropdown.js.map +1 -1
- package/dist-cjs/dropdown/DropdownBase.js +0 -1
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
- package/dist-cjs/dropdown/useClickAway.js.map +1 -1
- package/dist-cjs/dropdown/useDropdown.js.map +1 -1
- package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
- package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
- package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
- package/dist-cjs/index.js +8 -8
- package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
- package/dist-cjs/input-legacy/useCursorOnFocus.js.map +1 -1
- package/dist-cjs/list/Highlighter.js.map +1 -1
- package/dist-cjs/list/List.js.map +1 -1
- package/dist-cjs/list/ListItem.js.map +1 -1
- package/dist-cjs/list/VirtualizedList.js.map +1 -1
- package/dist-cjs/list/useList.js +0 -1
- package/dist-cjs/list/useList.js.map +1 -1
- package/dist-cjs/list/useListHeight.js.map +1 -1
- package/dist-cjs/list-deprecated/ListBase.js +1 -3
- package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItemContext.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/useWidth.js.map +1 -1
- package/dist-cjs/list-deprecated/useList.js.map +1 -1
- package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
- package/dist-cjs/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-cjs/list-next/ListItemNext.js.map +1 -1
- package/dist-cjs/list-next/ListNext.js.map +1 -1
- package/dist-cjs/list-next/ListNextContext.js.map +1 -1
- package/dist-cjs/list-next/useList.js.map +1 -1
- package/dist-cjs/localization-provider/LocalizationProvider.js +5 -2
- package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -1
- package/dist-cjs/menu-button/MenuButton.js.map +1 -1
- package/dist-cjs/metric/MetricContent.js.map +1 -1
- package/dist-cjs/number-input/NumberInput.js.map +1 -1
- package/dist-cjs/number-input/useNumberInput.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryListContext.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-cjs/query-input/internal/usePopperStatus.js +2 -2
- package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
- package/dist-cjs/query-input/useQueryInput.js +0 -1
- package/dist-cjs/query-input/useQueryInput.js.map +1 -1
- package/dist-cjs/responsive/OverflowReducer.js +1 -3
- package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
- package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
- package/dist-cjs/responsive/useInstantCollapse.js.map +1 -1
- package/dist-cjs/responsive/useOverflow.js.map +1 -1
- package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
- package/dist-cjs/responsive/useOverflowLayout.js +0 -3
- package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
- package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
- package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
- package/dist-cjs/responsive/useWidth.js.map +1 -1
- package/dist-cjs/responsive/utils.js.map +1 -1
- package/dist-cjs/search-input/SearchInput.js.map +1 -1
- package/dist-cjs/tabs/Tab.js.map +1 -1
- package/dist-cjs/tabs/Tabs.js.map +1 -1
- package/dist-cjs/tabs/Tabstrip.js +0 -1
- package/dist-cjs/tabs/Tabstrip.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
- package/dist-cjs/tabs/useEditableItem.js.map +1 -1
- package/dist-cjs/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-cjs/tabs/useSelection.js.map +1 -1
- package/dist-cjs/tabs/useTabs.js.map +1 -1
- package/dist-cjs/tabs/useTabstrip.js.map +1 -1
- package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextAction.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextPanel.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useCollection.js +2 -2
- package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useFocusOutside.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
- package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/getCursorPosition.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/useResizeObserver.js.map +1 -1
- package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js +1 -1
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
- package/dist-cjs/toolbar/Tooltray.js.map +1 -1
- package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
- package/dist-cjs/tree/Tree.js +2 -6
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-cjs/tree/TreeNode.js.map +1 -1
- package/dist-cjs/tree/use-tree-keyboard-navigation.js.map +1 -1
- package/dist-cjs/tree/useTree.js.map +1 -1
- package/dist-cjs/utils/useClickOutside.js.map +1 -1
- package/dist-cjs/utils/useSlideSelection.js.map +1 -1
- package/dist-cjs/window/ElectronWindow.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
- package/dist-es/button-bar/ButtonBar.js.map +1 -1
- package/dist-es/button-bar/OrderedButton.js.map +1 -1
- package/dist-es/button-bar/internal/useDescendant.js.map +1 -1
- package/dist-es/calendar/Calendar.js +24 -9
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarGrid.js +59 -83
- package/dist-es/calendar/CalendarGrid.js.map +1 -1
- package/dist-es/calendar/CalendarMonthHeader.css.js +4 -0
- package/dist-es/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-es/calendar/CalendarMonthHeader.js +46 -0
- package/dist-es/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.js +30 -39
- package/dist-es/calendar/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/CalendarWeekHeader.js +2 -6
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-es/calendar/internal/CalendarContext.js +3 -1
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +90 -78
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js +13 -23
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js +5 -6
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-es/calendar/internal/utils.js +8 -12
- package/dist-es/calendar/internal/utils.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +72 -112
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarDay.js +21 -18
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +146 -34
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/carousel/CarouselContext.js.map +1 -1
- package/dist-es/carousel/CarouselControls.js.map +1 -1
- package/dist-es/carousel/CarouselReducer.js.map +1 -1
- package/dist-es/carousel/CarouselSlide.js.map +1 -1
- package/dist-es/carousel/CarouselSlider.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-es/cascading-menu/internal/keydownHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/useStateReducer.js.map +1 -1
- package/dist-es/cascading-menu/stateChangeTypes.js +0 -1
- package/dist-es/cascading-menu/stateChangeTypes.js.map +1 -1
- package/dist-es/color-chooser/Color.js.map +1 -1
- package/dist-es/color-chooser/ColorChooser.js.map +1 -1
- package/dist-es/color-chooser/ColorHelpers.js.map +1 -1
- package/dist-es/color-chooser/ColorPicker.js.map +1 -1
- package/dist-es/color-chooser/DictTabs.js.map +1 -1
- package/dist-es/color-chooser/HexInput.js.map +1 -1
- package/dist-es/color-chooser/Swatch.js.map +1 -1
- package/dist-es/color-chooser/Swatches.js.map +1 -1
- package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-es/combo-box/ComboBox.js +0 -2
- package/dist-es/combo-box/ComboBox.js.map +1 -1
- package/dist-es/combo-box/useCombobox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js +1 -5
- package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js +1 -5
- package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/useComboBox.js +1 -1
- package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -1
- package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
- package/dist-es/common-hooks/calcPreferredHeight.js.map +1 -1
- package/dist-es/common-hooks/collectionProvider.js +1 -1
- package/dist-es/common-hooks/collectionProvider.js.map +1 -1
- package/dist-es/common-hooks/list-dom-utils.js.map +1 -1
- package/dist-es/common-hooks/selectionTypes.js.map +1 -1
- package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-es/common-hooks/useCollectionItems.js +1 -1
- package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/dist-es/common-hooks/useKeyboardNavigation.js +1 -1
- package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
- package/dist-es/common-hooks/useSelection.js.map +1 -1
- package/dist-es/common-hooks/useTypeahead.js +1 -1
- package/dist-es/common-hooks/useTypeahead.js.map +1 -1
- package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
- package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-es/date-input/DateInputRange.js +61 -51
- package/dist-es/date-input/DateInputRange.js.map +1 -1
- package/dist-es/date-input/DateInputSingle.js +34 -19
- package/dist-es/date-input/DateInputSingle.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +9 -1
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- package/dist-es/date-picker/DatePickerHelperText.css.js +4 -0
- package/dist-es/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerHelperText.js +34 -0
- package/dist-es/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlayProvider.js +41 -17
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +245 -0
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangeInput.js +39 -7
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +190 -34
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +253 -0
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleInput.js +13 -5
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerSinglePanel.js +8 -107
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-es/date-picker/useDatePicker.js +71 -11
- package/dist-es/date-picker/useDatePicker.js.map +1 -1
- package/dist-es/date-picker/useFocusOut.js +41 -0
- package/dist-es/date-picker/useFocusOut.js.map +1 -0
- package/dist-es/date-picker/useKeyboard.js +4 -5
- package/dist-es/date-picker/useKeyboard.js.map +1 -1
- package/dist-es/deck-item/DeckItem.js.map +1 -1
- package/dist-es/deck-layout/DeckLayout.js.map +1 -1
- package/dist-es/dropdown/Dropdown.js +0 -1
- package/dist-es/dropdown/Dropdown.js.map +1 -1
- package/dist-es/dropdown/DropdownBase.js +1 -2
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown/DropdownButton.js.map +1 -1
- package/dist-es/dropdown/useClickAway.js.map +1 -1
- package/dist-es/dropdown/useDropdown.js.map +1 -1
- package/dist-es/dropdown/useDropdownBase.js.map +1 -1
- package/dist-es/editable-label/EditableLabel.js.map +1 -1
- package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
- package/dist-es/form-field-legacy/StatusIndicator.js +1 -1
- package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-es/formatted-input/FormattedInput.js +1 -1
- package/dist-es/formatted-input/FormattedInput.js.map +1 -1
- package/dist-es/index.js +4 -4
- package/dist-es/input-legacy/InputLegacy.js.map +1 -1
- package/dist-es/input-legacy/useCursorOnFocus.js.map +1 -1
- package/dist-es/list/Highlighter.js.map +1 -1
- package/dist-es/list/List.js.map +1 -1
- package/dist-es/list/ListItem.js.map +1 -1
- package/dist-es/list/VirtualizedList.js.map +1 -1
- package/dist-es/list/useList.js +0 -1
- package/dist-es/list/useList.js.map +1 -1
- package/dist-es/list/useListHeight.js.map +1 -1
- package/dist-es/list-deprecated/ListBase.js +1 -3
- package/dist-es/list-deprecated/ListBase.js.map +1 -1
- package/dist-es/list-deprecated/ListItem.js.map +1 -1
- package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-es/list-deprecated/ListItemContext.js.map +1 -1
- package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-es/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
- package/dist-es/list-deprecated/internal/useWidth.js.map +1 -1
- package/dist-es/list-deprecated/useList.js.map +1 -1
- package/dist-es/list-deprecated/useListItem.js.map +1 -1
- package/dist-es/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-es/list-next/ListItemNext.js.map +1 -1
- package/dist-es/list-next/ListNext.js.map +1 -1
- package/dist-es/list-next/ListNextContext.js.map +1 -1
- package/dist-es/list-next/useList.js.map +1 -1
- package/dist-es/localization-provider/LocalizationProvider.js +6 -3
- package/dist-es/localization-provider/LocalizationProvider.js.map +1 -1
- package/dist-es/menu-button/MenuButton.js.map +1 -1
- package/dist-es/metric/MetricContent.js +2 -2
- package/dist-es/metric/MetricContent.js.map +1 -1
- package/dist-es/number-input/NumberInput.js +1 -1
- package/dist-es/number-input/NumberInput.js.map +1 -1
- package/dist-es/number-input/useNumberInput.js.map +1 -1
- package/dist-es/query-input/internal/CategoryListContext.js.map +1 -1
- package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-es/query-input/internal/usePopperStatus.js +2 -2
- package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
- package/dist-es/query-input/useQueryInput.js +0 -1
- package/dist-es/query-input/useQueryInput.js.map +1 -1
- package/dist-es/responsive/OverflowReducer.js +1 -3
- package/dist-es/responsive/OverflowReducer.js.map +1 -1
- package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
- package/dist-es/responsive/useInstantCollapse.js.map +1 -1
- package/dist-es/responsive/useOverflow.js +1 -1
- package/dist-es/responsive/useOverflow.js.map +1 -1
- package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
- package/dist-es/responsive/useOverflowLayout.js +0 -3
- package/dist-es/responsive/useOverflowLayout.js.map +1 -1
- package/dist-es/responsive/useReclaimSpace.js.map +1 -1
- package/dist-es/responsive/useResizeObserver.js.map +1 -1
- package/dist-es/responsive/useWidth.js.map +1 -1
- package/dist-es/responsive/utils.js.map +1 -1
- package/dist-es/search-input/SearchInput.js.map +1 -1
- package/dist-es/tabs/Tab.js.map +1 -1
- package/dist-es/tabs/Tabs.js.map +1 -1
- package/dist-es/tabs/Tabstrip.js +0 -1
- package/dist-es/tabs/Tabstrip.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js +1 -1
- package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
- package/dist-es/tabs/useEditableItem.js.map +1 -1
- package/dist-es/tabs/useKeyboardNavigation.js +1 -1
- package/dist-es/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-es/tabs/useSelection.js.map +1 -1
- package/dist-es/tabs/useTabs.js.map +1 -1
- package/dist-es/tabs/useTabstrip.js.map +1 -1
- package/dist-es/tabs-next/TabListNext.js.map +1 -1
- package/dist-es/tabs-next/TabNext.js.map +1 -1
- package/dist-es/tabs-next/TabNextAction.js.map +1 -1
- package/dist-es/tabs-next/TabNextContext.js.map +1 -1
- package/dist-es/tabs-next/TabNextPanel.js.map +1 -1
- package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-es/tabs-next/TabsNext.js.map +1 -1
- package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
- package/dist-es/tabs-next/hooks/useCollection.js +2 -2
- package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
- package/dist-es/tabs-next/hooks/useFocusOutside.js.map +1 -1
- package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
- package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
- package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input/internal/getCursorPosition.js.map +1 -1
- package/dist-es/tokenized-input/internal/useResizeObserver.js.map +1 -1
- package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js +1 -1
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
- package/dist-es/toolbar/Tooltray.js.map +1 -1
- package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
- package/dist-es/tree/Tree.js +2 -6
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-es/tree/TreeNode.js.map +1 -1
- package/dist-es/tree/use-tree-keyboard-navigation.js.map +1 -1
- package/dist-es/tree/useTree.js.map +1 -1
- package/dist-es/utils/useClickOutside.js.map +1 -1
- package/dist-es/utils/useSlideSelection.js.map +1 -1
- package/dist-es/window/ElectronWindow.js +1 -1
- package/dist-es/window/ElectronWindow.js.map +1 -1
- package/dist-types/calendar/Calendar.d.ts +22 -3
- package/dist-types/calendar/CalendarGrid.d.ts +19 -3
- package/dist-types/calendar/CalendarMonthHeader.d.ts +18 -0
- package/dist-types/calendar/CalendarNavigation.d.ts +9 -0
- package/dist-types/calendar/index.d.ts +1 -0
- package/dist-types/calendar/internal/CalendarDay.d.ts +25 -6
- package/dist-types/calendar/internal/CalendarMonth.d.ts +2 -6
- package/dist-types/calendar/internal/utils.d.ts +3 -7
- package/dist-types/calendar/useCalendar.d.ts +34 -30
- package/dist-types/calendar/useCalendarDay.d.ts +3 -2
- package/dist-types/calendar/useCalendarSelection.d.ts +60 -8
- package/dist-types/date-input/DateInputRange.d.ts +12 -8
- package/dist-types/date-input/DateInputSingle.d.ts +12 -8
- package/dist-types/date-picker/DatePicker.d.ts +14 -6
- package/dist-types/date-picker/DatePickerContext.d.ts +29 -1
- package/dist-types/date-picker/DatePickerHelperText.d.ts +4 -0
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +9 -2
- package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +17 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +1 -0
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +24 -20
- package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +65 -0
- package/dist-types/date-picker/DatePickerSingleInput.d.ts +1 -0
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +6 -48
- package/dist-types/date-picker/index.d.ts +4 -1
- package/dist-types/date-picker/useDatePicker.d.ts +29 -9
- package/dist-types/date-picker/useFocusOut.d.ts +9 -0
- package/dist-types/date-picker/useKeyboard.d.ts +7 -1
- package/dist-types/index.d.ts +0 -1
- package/package.json +3 -4
- package/dist-cjs/calendar/CalendarGrid.css.js +0 -6
- package/dist-cjs/calendar/CalendarGrid.css.js.map +0 -1
- package/dist-cjs/combo-box-deprecated/internal/getAnnouncement.js +0 -8
- package/dist-cjs/combo-box-deprecated/internal/getAnnouncement.js.map +0 -1
- package/dist-cjs/splitter/SplitHandle.css.js +0 -6
- package/dist-cjs/splitter/SplitHandle.css.js.map +0 -1
- package/dist-cjs/splitter/SplitHandle.js +0 -60
- package/dist-cjs/splitter/SplitHandle.js.map +0 -1
- package/dist-cjs/splitter/SplitPanel.css.js +0 -6
- package/dist-cjs/splitter/SplitPanel.css.js.map +0 -1
- package/dist-cjs/splitter/SplitPanel.js +0 -37
- package/dist-cjs/splitter/SplitPanel.js.map +0 -1
- package/dist-cjs/splitter/Splitter.js +0 -31
- package/dist-cjs/splitter/Splitter.js.map +0 -1
- package/dist-cjs/splitter/utils.js +0 -18
- package/dist-cjs/splitter/utils.js.map +0 -1
- package/dist-es/calendar/CalendarGrid.css.js +0 -4
- package/dist-es/calendar/CalendarGrid.css.js.map +0 -1
- package/dist-es/combo-box-deprecated/internal/getAnnouncement.js +0 -6
- package/dist-es/combo-box-deprecated/internal/getAnnouncement.js.map +0 -1
- package/dist-es/splitter/SplitHandle.css.js +0 -4
- package/dist-es/splitter/SplitHandle.css.js.map +0 -1
- package/dist-es/splitter/SplitHandle.js +0 -58
- package/dist-es/splitter/SplitHandle.js.map +0 -1
- package/dist-es/splitter/SplitPanel.css.js +0 -4
- package/dist-es/splitter/SplitPanel.css.js.map +0 -1
- package/dist-es/splitter/SplitPanel.js +0 -35
- package/dist-es/splitter/SplitPanel.js.map +0 -1
- package/dist-es/splitter/Splitter.js +0 -27
- package/dist-es/splitter/Splitter.js.map +0 -1
- package/dist-es/splitter/utils.js +0 -15
- package/dist-es/splitter/utils.js.map +0 -1
- package/dist-types/splitter/SplitHandle.d.ts +0 -21
- package/dist-types/splitter/SplitPanel.d.ts +0 -10
- package/dist-types/splitter/Splitter.d.ts +0 -22
- package/dist-types/splitter/index.d.ts +0 -4
- package/dist-types/splitter/utils.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n type UseCalendarMultiSelectProps,\n type UseCalendarOffsetProps,\n type UseCalendarRangeProps,\n type UseCalendarSingleProps,\n useCalendar,\n} from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarCss from \"./Calendar.css\";\n\n/**\n * Base props for the Calendar component.\n */\nexport interface CalendarBaseProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the Calendar.\n */\n children: ReactNode;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * Locale for date formatting\n */\n locale?: any;\n}\n\n/**\n * Props for the Calendar component with single date selection.\n */\nexport interface CalendarSingleProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarSingleProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the Calendar component with date range selection.\n */\nexport interface CalendarRangeProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarRangeProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the Calendar component with multi-select date selection.\n */\nexport interface CalendarMultiSelectProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiSelectProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Props for the Calendar component with offset date selection.\n */\nexport interface CalendarOffsetProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarOffsetProps<TDate> {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n}\n\n/**\n * Type representing the props for the Calendar component with various selection variants.\n */\nexport type CalendarProps<TDate extends DateFrameworkType> =\n | CalendarSingleProps<TDate>\n | CalendarRangeProps<TDate>\n | CalendarMultiSelectProps<TDate>\n | CalendarOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps<any>>(\n <TDate extends DateFrameworkType>(\n props: CalendarProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const targetWindow = useWindow();\n const { dateAdapter } = useLocalization<TDate>();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n const {\n children,\n className,\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n hideOutOfRangeDates,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n locale,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n ...propsRest\n } = props;\n let startDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let endDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let rest: Partial<typeof props>;\n if (selectionVariant === \"offset\") {\n ({ startDateOffset, endDateOffset, ...rest } =\n propsRest as CalendarOffsetProps<TDate>);\n } else {\n rest = propsRest;\n }\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useCalendarProps: any = {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n locale,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hideOutOfRangeDates,\n hoveredDate,\n startDateOffset,\n endDateOffset,\n };\n const { state, helpers } = useCalendar<TDate>(useCalendarProps);\n const calendarLabel = dateAdapter.format(\n state.visibleMonth,\n \"MMMM YYYY\",\n locale,\n );\n\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useLocalization","useComponentCssInjection","calendarCss","useCalendar","jsx","CalendarContext","clsx"],"mappings":";;;;;;;;;;;;;AAkGA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,CACE,OACA,GACG,KAAA;AACH,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAC/C,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AACJ,IAAI,IAAA,eAAA;AACJ,IAAI,IAAA,aAAA;AACJ,IAAI,IAAA,IAAA;AACJ,IAAA,IAAI,qBAAqB,QAAU,EAAA;AACjC,MAAA,CAAC,EAAE,eAAA,EAAiB,aAAe,EAAA,GAAG,MACpC,GAAA,SAAA;AAAA,KACG,MAAA;AACL,MAAO,IAAA,GAAA,SAAA;AAAA;AAGT,IAAA,MAAM,gBAAwB,GAAA;AAAA,MAC5B,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAIC,wBAAmB,gBAAgB,CAAA;AAC9D,IAAA,MAAM,gBAAgB,WAAY,CAAA,MAAA;AAAA,MAChC,KAAM,CAAA,YAAA;AAAA,MACN,WAAA;AAAA,MACA;AAAA,KACF;AAEA,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAE,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,YACzC,IAAK,EAAA,aAAA;AAAA,YACL,YAAY,EAAA,aAAA;AAAA,YACZ,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { type ResponsiveProp, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n useRef,\n} from \"react\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n type UseCalendarMultiSelectProps,\n type UseCalendarOffsetProps,\n type UseCalendarRangeProps,\n type UseCalendarSingleProps,\n useCalendar,\n} from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarCss from \"./Calendar.css\";\n\n/**\n * Base props for the Calendar component.\n */\nexport interface CalendarBaseProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the Calendar.\n */\n children: ReactNode;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * Ref to attach to the focused element,enabling focus to be controlled.\n */\n focusedDateRef?: React.MutableRefObject<HTMLElement | null>;\n /**\n * Number of visible months, maximum 12, defaults to 1\n */\n numberOfVisibleMonths?: ResponsiveProp<\n 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n >;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\n/**\n * Props for the Calendar component with single date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarSingleProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarSingleProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the Calendar component with date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarRangeProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarRangeProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the Calendar component with multi-select date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarMultiSelectProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiSelectProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Props for the Calendar component with offset date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarOffsetProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarOffsetProps<TDate> {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n}\n\n/**\n * Type representing the props for the Calendar component with various selection variants.\n * @template TDate - The type of the date object.\n */\nexport type CalendarProps<TDate extends DateFrameworkType> =\n | CalendarSingleProps<TDate>\n | CalendarRangeProps<TDate>\n | CalendarMultiSelectProps<TDate>\n | CalendarOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<\n HTMLDivElement,\n CalendarProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const targetWindow = useWindow();\n const { dateAdapter } = useLocalization<TDate>();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n const {\n children,\n className,\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onFocusedDateChange,\n onSelectionChange,\n onVisibleMonthChange,\n hideOutOfRangeDates,\n focusedDate,\n focusedDateRef,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n minDate,\n maxDate,\n numberOfVisibleMonths = 1,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n timezone: timezoneProp,\n ...propsRest\n } = props;\n\n let timezone: Timezone = \"default\";\n if (timezoneProp) {\n timezone = timezoneProp;\n } else if (selectionVariant === \"range\") {\n const defaultRangeTimezoneDate =\n selectedDate?.startDate ??\n selectedDate?.endDate ??\n defaultSelectedDate?.startDate ??\n defaultSelectedDate?.endDate;\n timezone = defaultRangeTimezoneDate\n ? dateAdapter.getTimezone(defaultRangeTimezoneDate)\n : \"default\";\n } else if (selectionVariant === \"single\") {\n const defaultSingleTimezoneDate = selectedDate ?? defaultSelectedDate;\n timezone = defaultSingleTimezoneDate\n ? dateAdapter.getTimezone(defaultSingleTimezoneDate)\n : \"default\";\n }\n\n let startDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let endDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let rest: Partial<typeof props>;\n if (selectionVariant === \"offset\") {\n ({ startDateOffset, endDateOffset, ...rest } =\n propsRest as CalendarOffsetProps<TDate>);\n } else {\n rest = propsRest;\n }\n const defaultFocusedDateRef = useRef(null);\n\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useCalendarProps: any = {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n focusedDate,\n focusedDateRef:\n focusedDateRef !== undefined ? focusedDateRef : defaultFocusedDateRef,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n minDate,\n maxDate,\n numberOfVisibleMonths,\n selectionVariant,\n onFocusedDateChange,\n onHoveredDateChange,\n hideOutOfRangeDates,\n hoveredDate,\n startDateOffset,\n endDateOffset,\n timezone,\n };\n const { state, helpers } = useCalendar<TDate>(useCalendarProps);\n const calendarLabel = dateAdapter.format(state.visibleMonth, \"MMMM YYYY\");\n\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useLocalization","useComponentCssInjection","calendarCss","useRef","useCalendar","jsx","CalendarContext","clsx"],"mappings":";;;;;;;;;;;;;AAuHA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EAItB,CACE,OACA,GACG,KAAA;AACH,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAC/C,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,qBAAwB,GAAA,CAAA;AAAA,MACxB,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAU,EAAA,YAAA;AAAA,MACV,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,IAAI,QAAqB,GAAA,SAAA;AACzB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAW,QAAA,GAAA,YAAA;AAAA,KACb,MAAA,IAAW,qBAAqB,OAAS,EAAA;AACvC,MAAA,MAAM,4BACJ,YAAc,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAA,SAAA,MACd,6CAAc,OACd,CAAA,KAAA,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAqB,eACrB,mBAAqB,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAA,OAAA,CAAA;AACvB,MAAA,QAAA,GAAW,wBACP,GAAA,WAAA,CAAY,WAAY,CAAA,wBAAwB,CAChD,GAAA,SAAA;AAAA,KACN,MAAA,IAAW,qBAAqB,QAAU,EAAA;AACxC,MAAA,MAAM,4BAA4B,YAAgB,IAAA,mBAAA;AAClD,MAAA,QAAA,GAAW,yBACP,GAAA,WAAA,CAAY,WAAY,CAAA,yBAAyB,CACjD,GAAA,SAAA;AAAA;AAGN,IAAI,IAAA,eAAA;AACJ,IAAI,IAAA,aAAA;AACJ,IAAI,IAAA,IAAA;AACJ,IAAA,IAAI,qBAAqB,QAAU,EAAA;AACjC,MAAA,CAAC,EAAE,eAAA,EAAiB,aAAe,EAAA,GAAG,MACpC,GAAA,SAAA;AAAA,KACG,MAAA;AACL,MAAO,IAAA,GAAA,SAAA;AAAA;AAET,IAAM,MAAA,qBAAA,GAAwBC,aAAO,IAAI,CAAA;AAGzC,IAAA,MAAM,gBAAwB,GAAA;AAAA,MAC5B,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA,EACE,cAAmB,KAAA,MAAA,GAAY,cAAiB,GAAA,qBAAA;AAAA,MAClD,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,qBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAIC,wBAAmB,gBAAgB,CAAA;AAC9D,IAAA,MAAM,aAAgB,GAAA,WAAA,CAAY,MAAO,CAAA,KAAA,CAAM,cAAc,WAAW,CAAA;AAExE,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAE,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,YACzC,IAAK,EAAA,aAAA;AAAA,YACL,YAAY,EAAA,aAAA;AAAA,YACZ,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -5,99 +5,75 @@ var core = require('@salt-ds/core');
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var CalendarContext = require('./internal/CalendarContext.js');
|
|
7
7
|
var CalendarMonth = require('./internal/CalendarMonth.js');
|
|
8
|
-
var styles = require('@salt-ds/styles');
|
|
9
|
-
var window = require('@salt-ds/window');
|
|
10
8
|
var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
|
|
11
|
-
var
|
|
12
|
-
var
|
|
9
|
+
var CalendarMonthHeader = require('./CalendarMonthHeader.js');
|
|
10
|
+
var CalendarWeekHeader = require('./CalendarWeekHeader.js');
|
|
13
11
|
|
|
14
|
-
const withBaseName = core.makePrefixer("saltCalendarGrid");
|
|
15
12
|
const CalendarGrid = react.forwardRef(
|
|
16
13
|
(props, ref) => {
|
|
17
14
|
const {
|
|
18
|
-
|
|
15
|
+
CalendarDayProps,
|
|
16
|
+
CalendarWeekHeaderProps,
|
|
17
|
+
CalendarMonthHeaderProps,
|
|
18
|
+
columns = 1,
|
|
19
19
|
onBlur,
|
|
20
|
-
getCalendarMonthProps = () => void 0,
|
|
21
20
|
...rest
|
|
22
21
|
} = props;
|
|
23
22
|
const { dateAdapter } = LocalizationProvider.useLocalization();
|
|
24
|
-
const targetWindow = window.useWindow();
|
|
25
|
-
styles.useComponentCssInjection({
|
|
26
|
-
testId: "salt-calendar-grid",
|
|
27
|
-
css: CalendarGrid$1,
|
|
28
|
-
window: targetWindow
|
|
29
|
-
});
|
|
30
23
|
const {
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
helpers: { setFocusedDate, setHoveredDate },
|
|
25
|
+
state: { visibleMonth, numberOfVisibleMonths = 1 }
|
|
33
26
|
} = CalendarContext.useCalendarContext();
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
];
|
|
49
|
-
},
|
|
50
|
-
[dateAdapter.subtract]
|
|
51
|
-
);
|
|
52
|
-
const handleFocus = react.useCallback(
|
|
53
|
-
(event) => {
|
|
54
|
-
setCalendarFocused(true);
|
|
55
|
-
onFocus == null ? void 0 : onFocus(event);
|
|
56
|
-
},
|
|
57
|
-
[setCalendarFocused, onFocus]
|
|
58
|
-
);
|
|
59
|
-
const handleBlur = react.useCallback(
|
|
60
|
-
(event) => {
|
|
61
|
-
setCalendarFocused(false);
|
|
62
|
-
onBlur == null ? void 0 : onBlur(event);
|
|
63
|
-
},
|
|
64
|
-
[setCalendarFocused, onBlur]
|
|
65
|
-
);
|
|
66
|
-
const months = react.useMemo(() => {
|
|
67
|
-
return getMonths(visibleMonth);
|
|
68
|
-
}, [dateAdapter.format(visibleMonth)]);
|
|
27
|
+
const calendarGridRef = react.useRef(null);
|
|
28
|
+
const containerRef = core.useForkRef(ref, calendarGridRef);
|
|
29
|
+
const handleCalendarGridBlur = (event) => {
|
|
30
|
+
event.stopPropagation();
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
var _a;
|
|
33
|
+
if ((_a = calendarGridRef == null ? void 0 : calendarGridRef.current) == null ? void 0 : _a.contains(document.activeElement)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
setFocusedDate(event, null);
|
|
37
|
+
setHoveredDate(event, null);
|
|
38
|
+
}, 0);
|
|
39
|
+
onBlur == null ? void 0 : onBlur(event);
|
|
40
|
+
};
|
|
69
41
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
-
|
|
42
|
+
core.GridLayout,
|
|
71
43
|
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
44
|
+
columns,
|
|
45
|
+
gap: 1,
|
|
46
|
+
ref: containerRef,
|
|
47
|
+
onBlur: handleCalendarGridBlur,
|
|
48
|
+
...rest,
|
|
49
|
+
children: Array.from({ length: numberOfVisibleMonths }, (_value, index) => {
|
|
50
|
+
const gridItemVisibleMonth = dateAdapter.add(visibleMonth, {
|
|
51
|
+
months: index
|
|
52
|
+
});
|
|
53
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
54
|
+
core.GridItem,
|
|
55
|
+
{
|
|
56
|
+
children: [
|
|
57
|
+
numberOfVisibleMonths > 1 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
+
CalendarMonthHeader.CalendarMonthHeader,
|
|
59
|
+
{
|
|
60
|
+
...CalendarMonthHeaderProps,
|
|
61
|
+
month: gridItemVisibleMonth
|
|
62
|
+
}
|
|
63
|
+
) : null,
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarWeekHeader.CalendarWeekHeader, { ...CalendarWeekHeaderProps }),
|
|
65
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
66
|
+
CalendarMonth.CalendarMonth,
|
|
67
|
+
{
|
|
68
|
+
date: gridItemVisibleMonth,
|
|
69
|
+
CalendarDayProps
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
`calendar-grid-item-${dateAdapter.format(gridItemVisibleMonth, "MMMM YYYY")}`
|
|
75
|
+
);
|
|
76
|
+
})
|
|
101
77
|
}
|
|
102
78
|
);
|
|
103
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarGrid.js","sources":["../src/calendar/CalendarGrid.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"CalendarGrid.js","sources":["../src/calendar/CalendarGrid.tsx"],"sourcesContent":["import {\n GridItem,\n GridLayout,\n type ResponsiveProp,\n useForkRef,\n} from \"@salt-ds/core\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n useRef,\n} from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport type { CalendarDayProps } from \"./internal/CalendarDay\";\nimport { CalendarMonth } from \"./internal/CalendarMonth\";\n\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n CalendarMonthHeader,\n type CalendarMonthHeaderProps,\n} from \"./CalendarMonthHeader\";\nimport {\n CalendarWeekHeader,\n type CalendarWeekHeaderProps,\n} from \"./CalendarWeekHeader\";\n\n/**\n * Props for the CalendarGrid component.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarGridProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Number of columns\n */\n columns?: ResponsiveProp<number | string>;\n /**\n * Props for `CalendarWeekHeader`\n */\n CalendarWeekHeaderProps?: Partial<CalendarWeekHeaderProps>;\n /**\n * Props for `CalendarMonthHeader`\n */\n CalendarMonthHeaderProps?: Partial<CalendarMonthHeaderProps<TDate>>;\n /**\n * Props for `CalendarDay`\n */\n CalendarDayProps?: Partial<CalendarDayProps<TDate>>;\n}\n\nexport const CalendarGrid = forwardRef<\n HTMLDivElement,\n CalendarGridProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarGridProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n CalendarDayProps,\n CalendarWeekHeaderProps,\n CalendarMonthHeaderProps,\n columns = 1,\n onBlur,\n ...rest\n } = props;\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const {\n helpers: { setFocusedDate, setHoveredDate },\n state: { visibleMonth, numberOfVisibleMonths = 1 },\n } = useCalendarContext<TDate>();\n const calendarGridRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, calendarGridRef);\n\n const handleCalendarGridBlur: FocusEventHandler<HTMLDivElement> = (\n event,\n ) => {\n event.stopPropagation();\n setTimeout(() => {\n if (calendarGridRef?.current?.contains(document.activeElement)) {\n return;\n }\n setFocusedDate(event, null);\n setHoveredDate(event, null);\n }, 0);\n onBlur?.(event);\n };\n\n return (\n <GridLayout\n columns={columns}\n gap={1}\n ref={containerRef}\n onBlur={handleCalendarGridBlur}\n {...rest}\n >\n {Array.from({ length: numberOfVisibleMonths }, (_value, index) => {\n const gridItemVisibleMonth: TDate = dateAdapter.add(visibleMonth, {\n months: index,\n });\n return (\n <GridItem\n key={`calendar-grid-item-${dateAdapter.format(gridItemVisibleMonth, \"MMMM YYYY\")}`}\n >\n {numberOfVisibleMonths > 1 ? (\n <CalendarMonthHeader\n {...CalendarMonthHeaderProps}\n month={gridItemVisibleMonth}\n />\n ) : null}\n <CalendarWeekHeader {...CalendarWeekHeaderProps} />\n <CalendarMonth\n date={gridItemVisibleMonth}\n CalendarDayProps={CalendarDayProps}\n />\n </GridItem>\n );\n })}\n </GridLayout>\n );\n },\n);\n"],"names":["forwardRef","useLocalization","useCalendarContext","useRef","useForkRef","jsx","GridLayout","jsxs","GridItem","CalendarMonthHeader","CalendarWeekHeader","CalendarMonth"],"mappings":";;;;;;;;;;;AAmDO,MAAM,YAAe,GAAAA,gBAAA;AAAA,EAI1B,CACE,OACA,GACG,KAAA;AACH,IAAM,MAAA;AAAA,MACJ,gBAAA;AAAA,MACA,uBAAA;AAAA,MACA,wBAAA;AAAA,MACA,OAAU,GAAA,CAAA;AAAA,MACV,MAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAE/C,IAAM,MAAA;AAAA,MACJ,OAAA,EAAS,EAAE,cAAA,EAAgB,cAAe,EAAA;AAAA,MAC1C,KAAO,EAAA,EAAE,YAAc,EAAA,qBAAA,GAAwB,CAAE;AAAA,QAC/CC,kCAA0B,EAAA;AAC9B,IAAM,MAAA,eAAA,GAAkBC,aAAuB,IAAI,CAAA;AACnD,IAAM,MAAA,YAAA,GAAeC,eAAW,CAAA,GAAA,EAAK,eAAe,CAAA;AAEpD,IAAM,MAAA,sBAAA,GAA4D,CAChE,KACG,KAAA;AACH,MAAA,KAAA,CAAM,eAAgB,EAAA;AACtB,MAAA,UAAA,CAAW,MAAM;AAjFvB,QAAA,IAAA,EAAA;AAkFQ,QAAA,IAAA,CAAI,EAAiB,GAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAA,OAAA,KAAjB,IAA0B,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,CAAS,SAAS,aAAgB,CAAA,EAAA;AAC9D,UAAA;AAAA;AAEF,QAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,QAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA,SACzB,CAAC,CAAA;AACJ,MAAS,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,KAAA,CAAA;AAAA,KACX;AAEA,IACE,uBAAAC,cAAA;AAAA,MAACC,eAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,GAAK,EAAA,CAAA;AAAA,QACL,GAAK,EAAA,YAAA;AAAA,QACL,MAAQ,EAAA,sBAAA;AAAA,QACP,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,uBAAyB,EAAA,CAAC,QAAQ,KAAU,KAAA;AAChE,UAAM,MAAA,oBAAA,GAA8B,WAAY,CAAA,GAAA,CAAI,YAAc,EAAA;AAAA,YAChE,MAAQ,EAAA;AAAA,WACT,CAAA;AACD,UACE,uBAAAC,eAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cAGE,QAAA,EAAA;AAAA,gBAAA,qBAAA,GAAwB,CACvB,mBAAAH,cAAA;AAAA,kBAACI,uCAAA;AAAA,kBAAA;AAAA,oBACE,GAAG,wBAAA;AAAA,oBACJ,KAAO,EAAA;AAAA;AAAA,iBAEP,GAAA,IAAA;AAAA,gCACJJ,cAAA,CAACK,qCAAoB,EAAA,EAAA,GAAG,uBAAyB,EAAA,CAAA;AAAA,gCACjDL,cAAA;AAAA,kBAACM,2BAAA;AAAA,kBAAA;AAAA,oBACC,IAAM,EAAA,oBAAA;AAAA,oBACN;AAAA;AAAA;AACF;AAAA,aAAA;AAAA,YAZK,CAAsB,mBAAA,EAAA,WAAA,CAAY,MAAO,CAAA,oBAAA,EAAsB,WAAW,CAAC,CAAA;AAAA,WAalF;AAAA,SAEH;AAAA;AAAA,KACH;AAAA;AAGN;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalendarMonthHeader.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var core = require('@salt-ds/core');
|
|
5
|
+
var clsx = require('clsx');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var styles = require('@salt-ds/styles');
|
|
8
|
+
var window = require('@salt-ds/window');
|
|
9
|
+
var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
|
|
10
|
+
var CalendarMonthHeader$1 = require('./CalendarMonthHeader.css.js');
|
|
11
|
+
|
|
12
|
+
const withBaseName = core.makePrefixer("saltCalendarMonthHeader");
|
|
13
|
+
const CalendarMonthHeader = react.forwardRef(
|
|
14
|
+
(props, ref) => {
|
|
15
|
+
const {
|
|
16
|
+
className,
|
|
17
|
+
format: formatMonthProp = "MMMM",
|
|
18
|
+
month,
|
|
19
|
+
...rest
|
|
20
|
+
} = props;
|
|
21
|
+
const { dateAdapter } = LocalizationProvider.useLocalization();
|
|
22
|
+
const targetWindow = window.useWindow();
|
|
23
|
+
styles.useComponentCssInjection({
|
|
24
|
+
testId: "salt-calendar-month-header",
|
|
25
|
+
css: CalendarMonthHeader$1,
|
|
26
|
+
window: targetWindow
|
|
27
|
+
});
|
|
28
|
+
const formatMonth = react.useCallback(
|
|
29
|
+
(date) => {
|
|
30
|
+
return dateAdapter.format(date, formatMonthProp);
|
|
31
|
+
},
|
|
32
|
+
[dateAdapter, formatMonthProp]
|
|
33
|
+
);
|
|
34
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
"data-testid": "CalendarMonthHeader",
|
|
38
|
+
className: clsx.clsx(withBaseName(), className),
|
|
39
|
+
ref,
|
|
40
|
+
...rest,
|
|
41
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.Text, { children: /* @__PURE__ */ jsxRuntime.jsx("small", { children: formatMonth(month) }) })
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
exports.CalendarMonthHeader = CalendarMonthHeader;
|
|
48
|
+
//# sourceMappingURL=CalendarMonthHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalendarMonthHeader.js","sources":["../src/calendar/CalendarMonthHeader.tsx"],"sourcesContent":["import { Text, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithRef, forwardRef, useCallback } from \"react\";\n\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarMonthHeaderCss from \"./CalendarMonthHeader.css\";\n\n/**\n * Props for the CalendarMonthHeader component.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarMonthHeaderProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithRef<\"div\"> {\n /**\n * Month value\n */\n month: TDate;\n /**\n * Format the month value\n * @param date\n */\n format?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarMonthHeader\");\n\nexport const CalendarMonthHeader = forwardRef<\n HTMLDivElement,\n CalendarMonthHeaderProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarMonthHeaderProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n className,\n format: formatMonthProp = \"MMMM\",\n month,\n ...rest\n } = props;\n const { dateAdapter } = useLocalization<TDate>();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-month-header\",\n css: calendarMonthHeaderCss,\n window: targetWindow,\n });\n\n const formatMonth = useCallback(\n (date?: TDate) => {\n return dateAdapter.format(date, formatMonthProp);\n },\n [dateAdapter, formatMonthProp],\n );\n\n return (\n <div\n data-testid=\"CalendarMonthHeader\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n >\n <Text>\n <small>{formatMonth(month)}</small>\n </Text>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useWindow","useComponentCssInjection","calendarMonthHeaderCss","useCallback","jsx","clsx","Text"],"mappings":";;;;;;;;;;;AA2BA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAEpD,MAAM,mBAAsB,GAAAC,gBAAA;AAAA,EAIjC,CACE,OACA,GACG,KAAA;AACH,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,QAAQ,eAAkB,GAAA,MAAA;AAAA,MAC1B,KAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AACJ,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAE/C,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,4BAAA;AAAA,MACR,GAAK,EAAAC,qBAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,MAClB,CAAC,IAAiB,KAAA;AAChB,QAAO,OAAA,WAAA,CAAY,MAAO,CAAA,IAAA,EAAM,eAAe,CAAA;AAAA,OACjD;AAAA,MACA,CAAC,aAAa,eAAe;AAAA,KAC/B;AAEA,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAY,EAAA,qBAAA;AAAA,QACZ,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,yCAACC,SACC,EAAA,EAAA,QAAA,kBAAAF,cAAA,CAAC,WAAO,QAAY,EAAA,WAAA,CAAA,KAAK,GAAE,CAC7B,EAAA;AAAA;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -22,10 +22,10 @@ const ConditionalTooltip = ({
|
|
|
22
22
|
}
|
|
23
23
|
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { ...rest, children });
|
|
24
24
|
};
|
|
25
|
-
function generateYearsBetweenRange(dateAdapter, minYear, maxYear) {
|
|
25
|
+
function generateYearsBetweenRange(dateAdapter, minYear, maxYear, timezone = "default") {
|
|
26
26
|
const years = [];
|
|
27
|
+
let startOfYear = dateAdapter.today(timezone);
|
|
27
28
|
for (let year = minYear; year <= maxYear; year++) {
|
|
28
|
-
let startOfYear = dateAdapter.today();
|
|
29
29
|
startOfYear = dateAdapter.set(startOfYear, { day: 1, month: 1, year });
|
|
30
30
|
years.push(startOfYear);
|
|
31
31
|
}
|
|
@@ -33,13 +33,8 @@ function generateYearsBetweenRange(dateAdapter, minYear, maxYear) {
|
|
|
33
33
|
}
|
|
34
34
|
function useCalendarNavigation() {
|
|
35
35
|
const {
|
|
36
|
-
state: { visibleMonth,
|
|
37
|
-
helpers: {
|
|
38
|
-
setVisibleMonth,
|
|
39
|
-
isDayVisible,
|
|
40
|
-
isOutsideAllowedYears,
|
|
41
|
-
isOutsideAllowedMonths
|
|
42
|
-
}
|
|
36
|
+
state: { visibleMonth, timezone, minDate, maxDate },
|
|
37
|
+
helpers: { setVisibleMonth, isDayVisible, isOutsideAllowedMonths }
|
|
43
38
|
} = CalendarContext.useCalendarContext();
|
|
44
39
|
const { dateAdapter } = LocalizationProvider.useLocalization();
|
|
45
40
|
const moveToNextMonth = react.useCallback(
|
|
@@ -71,17 +66,11 @@ function useCalendarNavigation() {
|
|
|
71
66
|
}
|
|
72
67
|
setVisibleMonth(event, newMonth);
|
|
73
68
|
},
|
|
74
|
-
[
|
|
75
|
-
dateAdapter,
|
|
76
|
-
isOutsideAllowedYears,
|
|
77
|
-
isOutsideAllowedMonths,
|
|
78
|
-
setVisibleMonth,
|
|
79
|
-
visibleMonth
|
|
80
|
-
]
|
|
69
|
+
[dateAdapter, isOutsideAllowedMonths, setVisibleMonth, visibleMonth]
|
|
81
70
|
);
|
|
82
71
|
const months = react.useMemo(
|
|
83
72
|
() => utils.generateMonthsForYear(dateAdapter, visibleMonth),
|
|
84
|
-
[visibleMonth]
|
|
73
|
+
[dateAdapter, visibleMonth]
|
|
85
74
|
);
|
|
86
75
|
const years = react.useMemo(
|
|
87
76
|
() => generateYearsBetweenRange(
|
|
@@ -93,9 +82,10 @@ function useCalendarNavigation() {
|
|
|
93
82
|
Math.max(
|
|
94
83
|
dateAdapter.getYear(maxDate),
|
|
95
84
|
dateAdapter.getYear(visibleMonth)
|
|
96
|
-
)
|
|
85
|
+
),
|
|
86
|
+
timezone
|
|
97
87
|
),
|
|
98
|
-
[dateAdapter, minDate, maxDate, visibleMonth]
|
|
88
|
+
[dateAdapter, minDate, maxDate, visibleMonth, timezone]
|
|
99
89
|
);
|
|
100
90
|
const selectedMonth = months.find(
|
|
101
91
|
(month) => dateAdapter.isSame(month, visibleMonth, "month")
|
|
@@ -103,33 +93,31 @@ function useCalendarNavigation() {
|
|
|
103
93
|
const selectedYear = years.find(
|
|
104
94
|
(year) => dateAdapter.isSame(year, visibleMonth, "year")
|
|
105
95
|
);
|
|
106
|
-
const
|
|
107
|
-
const
|
|
96
|
+
const disableNavigatePrevious = isDayVisible(minDate);
|
|
97
|
+
const disableNavigateNext = isDayVisible(maxDate);
|
|
108
98
|
return react.useMemo(
|
|
109
99
|
() => ({
|
|
110
100
|
moveToNextMonth,
|
|
111
101
|
moveToPreviousMonth,
|
|
112
102
|
moveToMonth,
|
|
113
103
|
visibleMonth,
|
|
114
|
-
locale,
|
|
115
104
|
months,
|
|
116
105
|
years,
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
disableNavigateNext,
|
|
107
|
+
disableNavigatePrevious,
|
|
119
108
|
selectedMonth,
|
|
120
109
|
selectedYear,
|
|
121
110
|
isOutsideAllowedMonths
|
|
122
111
|
}),
|
|
123
112
|
[
|
|
124
|
-
locale,
|
|
125
113
|
months,
|
|
126
114
|
moveToPreviousMonth,
|
|
127
115
|
moveToNextMonth,
|
|
128
116
|
moveToMonth,
|
|
129
117
|
visibleMonth,
|
|
130
118
|
years,
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
disableNavigateNext,
|
|
120
|
+
disableNavigatePrevious,
|
|
133
121
|
selectedMonth,
|
|
134
122
|
selectedYear,
|
|
135
123
|
isOutsideAllowedMonths
|
|
@@ -161,6 +149,8 @@ const CalendarNavigation = react.forwardRef(
|
|
|
161
149
|
(props, ref) => {
|
|
162
150
|
const {
|
|
163
151
|
className,
|
|
152
|
+
disableNavigatePrevious: disableNavigatePreviousProp,
|
|
153
|
+
disableNavigateNext: disableNavigateNextProp,
|
|
164
154
|
formatMonth: formatMonthProp,
|
|
165
155
|
formatYear: formatYearProp,
|
|
166
156
|
MonthDropdownProps,
|
|
@@ -178,14 +168,13 @@ const CalendarNavigation = react.forwardRef(
|
|
|
178
168
|
});
|
|
179
169
|
const { NextIcon, PreviousIcon } = core.useIcon();
|
|
180
170
|
const {
|
|
181
|
-
locale,
|
|
182
171
|
moveToPreviousMonth,
|
|
183
172
|
moveToNextMonth,
|
|
184
173
|
moveToMonth,
|
|
185
174
|
months,
|
|
186
175
|
years,
|
|
187
|
-
|
|
188
|
-
|
|
176
|
+
disableNavigateNext,
|
|
177
|
+
disableNavigatePrevious,
|
|
189
178
|
selectedMonth,
|
|
190
179
|
selectedYear,
|
|
191
180
|
isOutsideAllowedMonths,
|
|
@@ -217,16 +206,16 @@ const CalendarNavigation = react.forwardRef(
|
|
|
217
206
|
});
|
|
218
207
|
moveToMonth(event, newVisibleMonth);
|
|
219
208
|
},
|
|
220
|
-
[moveToMonth, visibleMonth]
|
|
209
|
+
[dateAdapter, moveToMonth, visibleMonth]
|
|
221
210
|
);
|
|
222
211
|
const formatMonth = react.useCallback(
|
|
223
212
|
(date) => {
|
|
224
213
|
if (date && formatMonthProp) {
|
|
225
|
-
return dateAdapter.format(date, formatMonthProp
|
|
214
|
+
return dateAdapter.format(date, formatMonthProp);
|
|
226
215
|
}
|
|
227
216
|
return date ? dateAdapter.format(date, hideYearDropdown ? "MMMM" : "MMM") : "";
|
|
228
217
|
},
|
|
229
|
-
[dateAdapter, formatMonthProp,
|
|
218
|
+
[dateAdapter, formatMonthProp, hideYearDropdown]
|
|
230
219
|
);
|
|
231
220
|
const formatYear = react.useCallback(
|
|
232
221
|
(date) => {
|
|
@@ -252,19 +241,20 @@ const CalendarNavigation = react.forwardRef(
|
|
|
252
241
|
ConditionalTooltip,
|
|
253
242
|
{
|
|
254
243
|
placement: "top",
|
|
255
|
-
disabled:
|
|
244
|
+
disabled: !(disableNavigatePreviousProp || disableNavigatePrevious),
|
|
256
245
|
content: "Past dates are out of range",
|
|
257
246
|
enterDelay: 0,
|
|
258
247
|
leaveDelay: 0,
|
|
259
248
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
260
249
|
core.Button,
|
|
261
250
|
{
|
|
262
|
-
|
|
251
|
+
"aria-label": "Previous Month",
|
|
252
|
+
disabled: disableNavigatePreviousProp || disableNavigatePrevious,
|
|
263
253
|
appearance: "transparent",
|
|
264
254
|
sentiment: "neutral",
|
|
265
255
|
onClick: handleNavigatePrevious,
|
|
266
256
|
focusableWhenDisabled: true,
|
|
267
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-
|
|
257
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-hidden": true })
|
|
268
258
|
}
|
|
269
259
|
)
|
|
270
260
|
}
|
|
@@ -312,19 +302,20 @@ const CalendarNavigation = react.forwardRef(
|
|
|
312
302
|
ConditionalTooltip,
|
|
313
303
|
{
|
|
314
304
|
placement: "top",
|
|
315
|
-
disabled:
|
|
305
|
+
disabled: !(disableNavigateNextProp || disableNavigateNext),
|
|
316
306
|
content: "Future dates are out of range",
|
|
317
307
|
enterDelay: 0,
|
|
318
308
|
leaveDelay: 0,
|
|
319
309
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
320
310
|
core.Button,
|
|
321
311
|
{
|
|
322
|
-
|
|
312
|
+
"aria-label": "Next Month",
|
|
313
|
+
disabled: disableNavigateNextProp || disableNavigateNext,
|
|
323
314
|
appearance: "transparent",
|
|
324
315
|
sentiment: "neutral",
|
|
325
316
|
onClick: handleNavigateNext,
|
|
326
317
|
focusableWhenDisabled: true,
|
|
327
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-
|
|
318
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-hidden": true })
|
|
328
319
|
}
|
|
329
320
|
)
|
|
330
321
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useIcon,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { generateMonthsForYear, monthDiff } from \"./internal/utils\";\n\n/**\n * Props for the CalendarNavigation component.\n */\nexport interface CalendarNavigationProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithRef<\"div\"> {\n /**\n * Props for the month dropdown component.\n */\n MonthDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Props for the year dropdown component.\n */\n YearDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Callback fired when a month is selected.\n * @param event - The change event.\n */\n onMonthSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when a year is selected.\n * @param event - The change event.\n */\n onYearSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when navigating to the next month.\n * @param event - The click event.\n */\n onNavigateNext?: ButtonProps[\"onClick\"];\n\n /**\n * Callback fired when navigating to the previous month.\n * @param event - The click event.\n */\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n\n /**\n * If `true`, hides the year dropdown.\n */\n hideYearDropdown?: boolean;\n\n /**\n * The step value for navigation. Defaults to 1.\n */\n step?: number;\n /**\n * Format the month dropdown values\n * @param date\n */\n formatMonth?: string;\n /**\n * Format the year dropdown values\n * @param date\n */\n formatYear?: string;\n}\n\ninterface OptionWithTooltipProps<TDate> extends OptionProps {\n value: TDate;\n tooltipContent?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nconst ConditionalTooltip: React.FC<TooltipProps> = ({\n children,\n disabled = true,\n ...rest\n}) => {\n if (disabled) {\n return <>{children}</>;\n }\n return <Tooltip {...rest}>{children}</Tooltip>;\n};\n\nfunction generateYearsBetweenRange<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n minYear: number,\n maxYear: number,\n): TDate[] {\n const years: TDate[] = [];\n for (let year = minYear; year <= maxYear; year++) {\n let startOfYear = dateAdapter.today();\n startOfYear = dateAdapter.set(startOfYear, { day: 1, month: 1, year });\n years.push(startOfYear);\n }\n return years;\n}\n\nfunction useCalendarNavigation<TDate extends DateFrameworkType>() {\n const {\n state: { visibleMonth, locale, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext<TDate>();\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const moveToNextMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(event, dateAdapter.add(visibleMonth, { months: step }));\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToPreviousMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(\n event,\n dateAdapter.subtract(visibleMonth, { months: step }),\n );\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToMonth = useCallback(\n (event: SyntheticEvent, month: TDate) => {\n let newMonth = month;\n\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = generateMonthsForYear(\n dateAdapter,\n visibleMonth,\n ).filter((n) => !isOutsideAllowedMonths(n));\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(dateAdapter, currentMonth, newMonth)) <\n Math.abs(monthDiff(dateAdapter, closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n },\n [\n dateAdapter,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n setVisibleMonth,\n visibleMonth,\n ],\n );\n\n const months: TDate[] = useMemo(\n () => generateMonthsForYear<TDate>(dateAdapter, visibleMonth),\n [visibleMonth],\n );\n\n const years: TDate[] = useMemo(\n () =>\n generateYearsBetweenRange<TDate>(\n dateAdapter,\n Math.min(\n dateAdapter.getYear(minDate),\n dateAdapter.getYear(visibleMonth),\n ),\n Math.max(\n dateAdapter.getYear(maxDate),\n dateAdapter.getYear(visibleMonth),\n ),\n ),\n [dateAdapter, minDate, maxDate, visibleMonth],\n );\n\n const selectedMonth: TDate | undefined = months.find((month: TDate) =>\n dateAdapter.isSame(month, visibleMonth, \"month\"),\n );\n const selectedYear: TDate | undefined = years.find((year: TDate) =>\n dateAdapter.isSame(year, visibleMonth, \"year\"),\n );\n\n const canNavigatePrevious = !isDayVisible(minDate);\n const canNavigateNext = !isDayVisible(maxDate);\n\n return useMemo(\n () => ({\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n locale,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n }),\n [\n locale,\n months,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n visibleMonth,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n ],\n );\n}\n\nfunction OptionWithTooltip<TDate extends DateFrameworkType>({\n value,\n children,\n disabled = false,\n tooltipContent,\n}: OptionWithTooltipProps<TDate>) {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n return (\n <ConditionalTooltip\n placement=\"right\"\n open={open && openState}\n disabled={!disabled}\n content={tooltipContent}\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Option value={value} disabled={disabled}>\n {children}\n </Option>\n </ConditionalTooltip>\n );\n}\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps<any>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarNavigationProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n className,\n formatMonth: formatMonthProp,\n formatYear: formatYearProp,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n step = 1,\n ...rest\n } = props;\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const { NextIcon, PreviousIcon } = useIcon();\n\n const {\n locale,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n visibleMonth,\n } = useCalendarNavigation<TDate>();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToPreviousMonth(event, step);\n },\n [moveToPreviousMonth, step],\n );\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToNextMonth(event, step);\n },\n [moveToNextMonth, step],\n );\n\n const handleMonthSelect = useCallback(\n (event: SyntheticEvent, month: TDate[]) => {\n moveToMonth(event, month[0]);\n },\n [moveToMonth],\n );\n\n const handleYearSelect = useCallback(\n (event: SyntheticEvent, year: TDate[]) => {\n let newVisibleMonth = dateAdapter.clone(visibleMonth);\n newVisibleMonth = dateAdapter.set(newVisibleMonth, {\n year: dateAdapter.getYear(year[0]),\n });\n moveToMonth(event, newVisibleMonth);\n },\n [moveToMonth, visibleMonth],\n );\n\n const formatMonth = useCallback(\n (date?: TDate) => {\n if (date && formatMonthProp) {\n return dateAdapter.format(date, formatMonthProp, locale);\n }\n return date\n ? dateAdapter.format(date, hideYearDropdown ? \"MMMM\" : \"MMM\")\n : \"\";\n },\n [dateAdapter, formatMonthProp, locale],\n );\n\n const formatYear = useCallback(\n (date?: TDate) => {\n if (date && formatYearProp) {\n return dateAdapter.format(date, formatYearProp);\n }\n return !date ? \"\" : `${dateAdapter.format(date, \"YYYY\")}`;\n },\n [dateAdapter, formatYearProp],\n );\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigatePrevious}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <PreviousIcon aria-label=\"Previous Month\" />\n </Button>\n </ConditionalTooltip>\n <div\n className={clsx({ [withBaseName(\"dropdowns\")]: !hideYearDropdown })}\n >\n <Dropdown\n aria-label=\"Month Dropdown\"\n selected={selectedMonth ? [selectedMonth] : []}\n value={formatMonth(selectedMonth)}\n onSelectionChange={handleMonthSelect}\n {...MonthDropdownProps}\n >\n {months.map((month) => (\n <OptionWithTooltip\n key={formatMonth(month)}\n value={month}\n disabled={isOutsideAllowedMonths(month)}\n tooltipContent=\"This month is out of range\"\n >\n {formatMonth(month)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n {!hideYearDropdown && (\n <Dropdown\n aria-label=\"Year Dropdown\"\n selected={selectedYear ? [selectedYear] : []}\n value={formatYear(selectedYear)}\n onSelectionChange={handleYearSelect}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip key={formatYear(year)} value={year}>\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigateNext}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <NextIcon aria-label=\"Next Month\" />\n </Button>\n </ConditionalTooltip>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","jsx","Tooltip","useCalendarContext","useLocalization","useCallback","generateMonthsForYear","monthDiff","useMemo","useListControlContext","Option","forwardRef","useWindow","useComponentCssInjection","calendarNavigationCss","useIcon","jsxs","clsx","Button","Dropdown"],"mappings":";;;;;;;;;;;;;AAkGA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA;AAE1D,MAAM,qBAA6C,CAAC;AAAA,EAClD,QAAA;AAAA,EACA,QAAW,GAAA,IAAA;AAAA,EACX,GAAG;AACL,CAAM,KAAA;AACJ,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,6DAAU,QAAS,EAAA,CAAA;AAAA;AAErB,EAAA,uBAAQC,cAAA,CAAAC,YAAA,EAAA,EAAS,GAAG,IAAA,EAAO,QAAS,EAAA,CAAA;AACtC,CAAA;AAEA,SAAS,yBAAA,CACP,WACA,EAAA,OAAA,EACA,OACS,EAAA;AACT,EAAA,MAAM,QAAiB,EAAC;AACxB,EAAA,KAAA,IAAS,IAAO,GAAA,OAAA,EAAS,IAAQ,IAAA,OAAA,EAAS,IAAQ,EAAA,EAAA;AAChD,IAAI,IAAA,WAAA,GAAc,YAAY,KAAM,EAAA;AACpC,IAAc,WAAA,GAAA,WAAA,CAAY,IAAI,WAAa,EAAA,EAAE,KAAK,CAAG,EAAA,KAAA,EAAO,CAAG,EAAA,IAAA,EAAM,CAAA;AACrE,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA;AAExB,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,qBAAyD,GAAA;AAChE,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,EAAE,YAAc,EAAA,MAAA,EAAQ,SAAS,OAAQ,EAAA;AAAA,IAChD,OAAS,EAAA;AAAA,MACP,eAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA;AACF,MACEC,kCAA0B,EAAA;AAE9B,EAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAE/C,EAAA,MAAM,eAAkB,GAAAC,iBAAA;AAAA,IACtB,CAAC,KAAuB,EAAA,IAAA,GAAO,CAAM,KAAA;AACnC,MAAgB,eAAA,CAAA,KAAA,EAAO,YAAY,GAAI,CAAA,YAAA,EAAc,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA,KACxE;AAAA,IACA,CAAC,WAAa,EAAA,eAAA,EAAiB,YAAY;AAAA,GAC7C;AAEA,EAAA,MAAM,mBAAsB,GAAAA,iBAAA;AAAA,IAC1B,CAAC,KAAuB,EAAA,IAAA,GAAO,CAAM,KAAA;AACnC,MAAA,eAAA;AAAA,QACE,KAAA;AAAA,QACA,YAAY,QAAS,CAAA,YAAA,EAAc,EAAE,MAAA,EAAQ,MAAM;AAAA,OACrD;AAAA,KACF;AAAA,IACA,CAAC,WAAa,EAAA,eAAA,EAAiB,YAAY;AAAA,GAC7C;AAEA,EAAA,MAAM,WAAc,GAAAA,iBAAA;AAAA,IAClB,CAAC,OAAuB,KAAiB,KAAA;AACvC,MAAA,IAAI,QAAW,GAAA,KAAA;AAEf,MAAI,IAAA,sBAAA,CAAuB,QAAQ,CAAG,EAAA;AAEpC,QAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,UACtB,WAAA;AAAA,UACA;AAAA,UACA,MAAO,CAAA,CAAC,MAAM,CAAC,sBAAA,CAAuB,CAAC,CAAC,CAAA;AAC1C,QAAA,QAAA,GAAW,eAAgB,CAAA,MAAA;AAAA,UAAO,CAAC,YAAc,EAAA,YAAA,KAC/C,KAAK,GAAI,CAAAC,eAAA,CAAU,aAAa,YAAc,EAAA,QAAQ,CAAC,CACvD,GAAA,IAAA,CAAK,IAAIA,eAAU,CAAA,WAAA,EAAa,cAAc,QAAQ,CAAC,IACnD,YACA,GAAA;AAAA,SACN;AAAA;AAEF,MAAA,eAAA,CAAgB,OAAO,QAAQ,CAAA;AAAA,KACjC;AAAA,IACA;AAAA,MACE,WAAA;AAAA,MACA,qBAAA;AAAA,MACA,sBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,MAAkB,GAAAC,aAAA;AAAA,IACtB,MAAMF,2BAA6B,CAAA,WAAA,EAAa,YAAY,CAAA;AAAA,IAC5D,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,KAAiB,GAAAE,aAAA;AAAA,IACrB,MACE,yBAAA;AAAA,MACE,WAAA;AAAA,MACA,IAAK,CAAA,GAAA;AAAA,QACH,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,QAC3B,WAAA,CAAY,QAAQ,YAAY;AAAA,OAClC;AAAA,MACA,IAAK,CAAA,GAAA;AAAA,QACH,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,QAC3B,WAAA,CAAY,QAAQ,YAAY;AAAA;AAClC,KACF;AAAA,IACF,CAAC,WAAA,EAAa,OAAS,EAAA,OAAA,EAAS,YAAY;AAAA,GAC9C;AAEA,EAAA,MAAM,gBAAmC,MAAO,CAAA,IAAA;AAAA,IAAK,CAAC,KACpD,KAAA,WAAA,CAAY,MAAO,CAAA,KAAA,EAAO,cAAc,OAAO;AAAA,GACjD;AACA,EAAA,MAAM,eAAkC,KAAM,CAAA,IAAA;AAAA,IAAK,CAAC,IAClD,KAAA,WAAA,CAAY,MAAO,CAAA,IAAA,EAAM,cAAc,MAAM;AAAA,GAC/C;AAEA,EAAM,MAAA,mBAAA,GAAsB,CAAC,YAAA,CAAa,OAAO,CAAA;AACjD,EAAM,MAAA,eAAA,GAAkB,CAAC,YAAA,CAAa,OAAO,CAAA;AAE7C,EAAO,OAAAA,aAAA;AAAA,IACL,OAAO;AAAA,MACL,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,MAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,SAAS,iBAAmD,CAAA;AAAA,EAC1D,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAW,GAAA,KAAA;AAAA,EACX;AACF,CAAkC,EAAA;AAChC,EAAA,MAAM,EAAE,WAAA,EAAa,SAAU,EAAA,GAAIC,0BAAsB,EAAA;AACzD,EAAM,MAAA,IAAA,GAAA,CAAO,2CAAa,KAAU,MAAA,KAAA;AACpC,EACE,uBAAAR,cAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,OAAA;AAAA,MACV,MAAM,IAAQ,IAAA,SAAA;AAAA,MACd,UAAU,CAAC,QAAA;AAAA,MACX,OAAS,EAAA,cAAA;AAAA,MACT,UAAY,EAAA,CAAA;AAAA,MACZ,UAAY,EAAA,CAAA;AAAA,MAEZ,QAAC,kBAAAA,cAAA,CAAAS,WAAA,EAAA,EAAO,KAAc,EAAA,QAAA,EACnB,QACH,EAAA;AAAA;AAAA,GACF;AAEJ;AAEO,MAAM,kBAAqB,GAAAC,gBAAA;AAAA,EAIhC,CACE,OACA,GACG,KAAA;AACH,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,WAAa,EAAA,eAAA;AAAA,MACb,UAAY,EAAA,cAAA;AAAA,MACZ,kBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,IAAO,GAAA,CAAA;AAAA,MACP,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIP,oCAAuB,EAAA;AAE/C,IAAA,MAAM,eAAeQ,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,0BAAA;AAAA,MACR,GAAK,EAAAC,oBAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,QAAA,EAAU,YAAa,EAAA,GAAIC,YAAQ,EAAA;AAE3C,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,eAAA;AAAA,MACA,mBAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,QACE,qBAA6B,EAAA;AAEjC,IAAA,MAAM,sBACJ,GAAAV,iBAAA;AAAA,MACE,CAAC,KAAU,KAAA;AACT,QAAA,mBAAA,CAAoB,OAAO,IAAI,CAAA;AAAA,OACjC;AAAA,MACA,CAAC,qBAAqB,IAAI;AAAA,KAC5B;AAEF,IAAA,MAAM,kBACJ,GAAAA,iBAAA;AAAA,MACE,CAAC,KAAU,KAAA;AACT,QAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,OAC7B;AAAA,MACA,CAAC,iBAAiB,IAAI;AAAA,KACxB;AAEF,IAAA,MAAM,iBAAoB,GAAAA,iBAAA;AAAA,MACxB,CAAC,OAAuB,KAAmB,KAAA;AACzC,QAAY,WAAA,CAAA,KAAA,EAAO,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,OAC7B;AAAA,MACA,CAAC,WAAW;AAAA,KACd;AAEA,IAAA,MAAM,gBAAmB,GAAAA,iBAAA;AAAA,MACvB,CAAC,OAAuB,IAAkB,KAAA;AACxC,QAAI,IAAA,eAAA,GAAkB,WAAY,CAAA,KAAA,CAAM,YAAY,CAAA;AACpD,QAAkB,eAAA,GAAA,WAAA,CAAY,IAAI,eAAiB,EAAA;AAAA,UACjD,IAAM,EAAA,WAAA,CAAY,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAC;AAAA,SAClC,CAAA;AACD,QAAA,WAAA,CAAY,OAAO,eAAe,CAAA;AAAA,OACpC;AAAA,MACA,CAAC,aAAa,YAAY;AAAA,KAC5B;AAEA,IAAA,MAAM,WAAc,GAAAA,iBAAA;AAAA,MAClB,CAAC,IAAiB,KAAA;AAChB,QAAA,IAAI,QAAQ,eAAiB,EAAA;AAC3B,UAAA,OAAO,WAAY,CAAA,MAAA,CAAO,IAAM,EAAA,eAAA,EAAiB,MAAM,CAAA;AAAA;AAEzD,QAAA,OAAO,OACH,WAAY,CAAA,MAAA,CAAO,MAAM,gBAAmB,GAAA,MAAA,GAAS,KAAK,CAC1D,GAAA,EAAA;AAAA,OACN;AAAA,MACA,CAAC,WAAa,EAAA,eAAA,EAAiB,MAAM;AAAA,KACvC;AAEA,IAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,MACjB,CAAC,IAAiB,KAAA;AAChB,QAAA,IAAI,QAAQ,cAAgB,EAAA;AAC1B,UAAO,OAAA,WAAA,CAAY,MAAO,CAAA,IAAA,EAAM,cAAc,CAAA;AAAA;AAEhD,QAAO,OAAA,CAAC,OAAO,EAAK,GAAA,CAAA,EAAG,YAAY,MAAO,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAAA,OACzD;AAAA,MACA,CAAC,aAAa,cAAc;AAAA,KAC9B;AAEA,IACE,uBAAAW,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,EAAE,CAAC,YAAA,CAAa,kBAAkB,CAAC,GAAG,gBAAiB,EAAA;AAAA,UACvD;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAhB,cAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,SAAU,EAAA,KAAA;AAAA,cACV,QAAU,EAAA,mBAAA;AAAA,cACV,OAAQ,EAAA,6BAAA;AAAA,cACR,UAAY,EAAA,CAAA;AAAA,cACZ,UAAY,EAAA,CAAA;AAAA,cAEZ,QAAA,kBAAAA,cAAA;AAAA,gBAACiB,WAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC,mBAAA;AAAA,kBACX,UAAW,EAAA,aAAA;AAAA,kBACX,SAAU,EAAA,SAAA;AAAA,kBACV,OAAS,EAAA,sBAAA;AAAA,kBACT,qBAAuB,EAAA,IAAA;AAAA,kBAEvB,QAAA,kBAAAjB,cAAA,CAAC,YAAa,EAAA,EAAA,YAAA,EAAW,gBAAiB,EAAA;AAAA;AAAA;AAC5C;AAAA,WACF;AAAA,0BACAe,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWC,SAAK,CAAA,EAAE,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG,CAAC,gBAAA,EAAkB,CAAA;AAAA,cAElE,QAAA,EAAA;AAAA,gCAAAhB,cAAA;AAAA,kBAACkB,aAAA;AAAA,kBAAA;AAAA,oBACC,YAAW,EAAA,gBAAA;AAAA,oBACX,QAAU,EAAA,aAAA,GAAgB,CAAC,aAAa,IAAI,EAAC;AAAA,oBAC7C,KAAA,EAAO,YAAY,aAAa,CAAA;AAAA,oBAChC,iBAAmB,EAAA,iBAAA;AAAA,oBAClB,GAAG,kBAAA;AAAA,oBAEH,QAAA,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KACX,qBAAAlB,cAAA;AAAA,sBAAC,iBAAA;AAAA,sBAAA;AAAA,wBAEC,KAAO,EAAA,KAAA;AAAA,wBACP,QAAA,EAAU,uBAAuB,KAAK,CAAA;AAAA,wBACtC,cAAe,EAAA,4BAAA;AAAA,wBAEd,sBAAY,KAAK;AAAA,uBAAA;AAAA,sBALb,YAAY,KAAK;AAAA,qBAOzB;AAAA;AAAA,iBACH;AAAA,gBACC,CAAC,gBACA,oBAAAA,cAAA;AAAA,kBAACkB,aAAA;AAAA,kBAAA;AAAA,oBACC,YAAW,EAAA,eAAA;AAAA,oBACX,QAAU,EAAA,YAAA,GAAe,CAAC,YAAY,IAAI,EAAC;AAAA,oBAC3C,KAAA,EAAO,WAAW,YAAY,CAAA;AAAA,oBAC9B,iBAAmB,EAAA,gBAAA;AAAA,oBAClB,GAAG,iBAAA;AAAA,oBAEH,QAAM,EAAA,KAAA,CAAA,GAAA,CAAI,CAAC,IAAA,oCACT,iBAAyC,EAAA,EAAA,KAAA,EAAO,IAC9C,EAAA,QAAA,EAAA,UAAA,CAAW,IAAI,CAAA,EAAA,EADM,UAAW,CAAA,IAAI,CAEvC,CACD;AAAA;AAAA;AACH;AAAA;AAAA,WAEJ;AAAA,0BACAlB,cAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,SAAU,EAAA,KAAA;AAAA,cACV,QAAU,EAAA,eAAA;AAAA,cACV,OAAQ,EAAA,+BAAA;AAAA,cACR,UAAY,EAAA,CAAA;AAAA,cACZ,UAAY,EAAA,CAAA;AAAA,cAEZ,QAAA,kBAAAA,cAAA;AAAA,gBAACiB,WAAA;AAAA,gBAAA;AAAA,kBACC,UAAU,CAAC,eAAA;AAAA,kBACX,UAAW,EAAA,aAAA;AAAA,kBACX,SAAU,EAAA,SAAA;AAAA,kBACV,OAAS,EAAA,kBAAA;AAAA,kBACT,qBAAuB,EAAA,IAAA;AAAA,kBAEvB,QAAA,kBAAAjB,cAAA,CAAC,QAAS,EAAA,EAAA,YAAA,EAAW,YAAa,EAAA;AAAA;AAAA;AACpC;AAAA;AACF;AAAA;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
1
|
+
{"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useIcon,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { generateMonthsForYear, monthDiff } from \"./internal/utils\";\n\n/**\n * Props for the CalendarNavigation component.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarNavigationProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithRef<\"div\"> {\n /**\n * Props for the month dropdown component.\n */\n MonthDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Props for the year dropdown component.\n */\n YearDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Callback fired when a month is selected.\n * @param event - The change event.\n */\n onMonthSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when a year is selected.\n * @param event - The change event.\n */\n onYearSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when navigating to the next month.\n * @param event - The click event.\n */\n onNavigateNext?: ButtonProps[\"onClick\"];\n\n /**\n * If `true` then navigate next button is enabled\n */\n disableNavigateNext?: boolean;\n\n /**\n * Callback fired when navigating to the previous month.\n * @param event - The click event.\n */\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n\n /**\n * If `true` then navigate previous button is enabled\n */\n disableNavigatePrevious?: boolean;\n\n /**\n * If `true`, hides the year dropdown.\n */\n hideYearDropdown?: boolean;\n\n /**\n * The step value for navigation. Defaults to 1.\n */\n step?: number;\n /**\n * Format the month dropdown values\n * @param date\n */\n formatMonth?: string;\n /**\n * Format the year dropdown values\n * @param date\n */\n formatYear?: string;\n}\n\ninterface OptionWithTooltipProps<TDate> extends OptionProps {\n value: TDate;\n tooltipContent?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nconst ConditionalTooltip: React.FC<TooltipProps> = ({\n children,\n disabled = true,\n ...rest\n}) => {\n if (disabled) {\n return <>{children}</>;\n }\n return <Tooltip {...rest}>{children}</Tooltip>;\n};\n\nfunction generateYearsBetweenRange<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n minYear: number,\n maxYear: number,\n timezone: Timezone = \"default\",\n): TDate[] {\n const years: TDate[] = [];\n let startOfYear = dateAdapter.today(timezone);\n for (let year = minYear; year <= maxYear; year++) {\n startOfYear = dateAdapter.set(startOfYear, { day: 1, month: 1, year });\n years.push(startOfYear);\n }\n return years;\n}\n\nfunction useCalendarNavigation<TDate extends DateFrameworkType>() {\n const {\n state: { visibleMonth, timezone, minDate, maxDate },\n helpers: { setVisibleMonth, isDayVisible, isOutsideAllowedMonths },\n } = useCalendarContext<TDate>();\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const moveToNextMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(event, dateAdapter.add(visibleMonth, { months: step }));\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToPreviousMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(\n event,\n dateAdapter.subtract(visibleMonth, { months: step }),\n );\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToMonth = useCallback(\n (event: SyntheticEvent, month: TDate) => {\n let newMonth = month;\n\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = generateMonthsForYear(\n dateAdapter,\n visibleMonth,\n ).filter((n) => !isOutsideAllowedMonths(n));\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(dateAdapter, currentMonth, newMonth)) <\n Math.abs(monthDiff(dateAdapter, closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n },\n [dateAdapter, isOutsideAllowedMonths, setVisibleMonth, visibleMonth],\n );\n\n const months: TDate[] = useMemo(\n () => generateMonthsForYear<TDate>(dateAdapter, visibleMonth),\n [dateAdapter, visibleMonth],\n );\n\n const years: TDate[] = useMemo(\n () =>\n generateYearsBetweenRange<TDate>(\n dateAdapter,\n Math.min(\n dateAdapter.getYear(minDate),\n dateAdapter.getYear(visibleMonth),\n ),\n Math.max(\n dateAdapter.getYear(maxDate),\n dateAdapter.getYear(visibleMonth),\n ),\n timezone,\n ),\n [dateAdapter, minDate, maxDate, visibleMonth, timezone],\n );\n\n const selectedMonth: TDate | undefined = months.find((month: TDate) =>\n dateAdapter.isSame(month, visibleMonth, \"month\"),\n );\n const selectedYear: TDate | undefined = years.find((year: TDate) =>\n dateAdapter.isSame(year, visibleMonth, \"year\"),\n );\n\n const disableNavigatePrevious = isDayVisible(minDate);\n const disableNavigateNext = isDayVisible(maxDate);\n\n return useMemo(\n () => ({\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n disableNavigateNext,\n disableNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n }),\n [\n months,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n visibleMonth,\n years,\n disableNavigateNext,\n disableNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n ],\n );\n}\n\nfunction OptionWithTooltip<TDate extends DateFrameworkType>({\n value,\n children,\n disabled = false,\n tooltipContent,\n}: OptionWithTooltipProps<TDate>) {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n return (\n <ConditionalTooltip\n placement=\"right\"\n open={open && openState}\n disabled={!disabled}\n content={tooltipContent}\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Option value={value} disabled={disabled}>\n {children}\n </Option>\n </ConditionalTooltip>\n );\n}\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarNavigationProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n className,\n disableNavigatePrevious: disableNavigatePreviousProp,\n disableNavigateNext: disableNavigateNextProp,\n formatMonth: formatMonthProp,\n formatYear: formatYearProp,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n step = 1,\n ...rest\n } = props;\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const { NextIcon, PreviousIcon } = useIcon();\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n disableNavigateNext,\n disableNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n visibleMonth,\n } = useCalendarNavigation<TDate>();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToPreviousMonth(event, step);\n },\n [moveToPreviousMonth, step],\n );\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToNextMonth(event, step);\n },\n [moveToNextMonth, step],\n );\n\n const handleMonthSelect = useCallback(\n (event: SyntheticEvent, month: TDate[]) => {\n moveToMonth(event, month[0]);\n },\n [moveToMonth],\n );\n\n const handleYearSelect = useCallback(\n (event: SyntheticEvent, year: TDate[]) => {\n let newVisibleMonth = dateAdapter.clone(visibleMonth);\n newVisibleMonth = dateAdapter.set(newVisibleMonth, {\n year: dateAdapter.getYear(year[0]),\n });\n moveToMonth(event, newVisibleMonth);\n },\n [dateAdapter, moveToMonth, visibleMonth],\n );\n\n const formatMonth = useCallback(\n (date?: TDate) => {\n if (date && formatMonthProp) {\n return dateAdapter.format(date, formatMonthProp);\n }\n return date\n ? dateAdapter.format(date, hideYearDropdown ? \"MMMM\" : \"MMM\")\n : \"\";\n },\n [dateAdapter, formatMonthProp, hideYearDropdown],\n );\n\n const formatYear = useCallback(\n (date?: TDate) => {\n if (date && formatYearProp) {\n return dateAdapter.format(date, formatYearProp);\n }\n return !date ? \"\" : `${dateAdapter.format(date, \"YYYY\")}`;\n },\n [dateAdapter, formatYearProp],\n );\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <ConditionalTooltip\n placement=\"top\"\n disabled={!(disableNavigatePreviousProp || disableNavigatePrevious)}\n content=\"Past dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n aria-label=\"Previous Month\"\n disabled={disableNavigatePreviousProp || disableNavigatePrevious}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <PreviousIcon aria-hidden />\n </Button>\n </ConditionalTooltip>\n <div\n className={clsx({ [withBaseName(\"dropdowns\")]: !hideYearDropdown })}\n >\n <Dropdown\n aria-label=\"Month Dropdown\"\n selected={selectedMonth ? [selectedMonth] : []}\n value={formatMonth(selectedMonth)}\n onSelectionChange={handleMonthSelect}\n {...MonthDropdownProps}\n >\n {months.map((month) => (\n <OptionWithTooltip\n key={formatMonth(month)}\n value={month}\n disabled={isOutsideAllowedMonths(month)}\n tooltipContent=\"This month is out of range\"\n >\n {formatMonth(month)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n {!hideYearDropdown && (\n <Dropdown\n aria-label=\"Year Dropdown\"\n selected={selectedYear ? [selectedYear] : []}\n value={formatYear(selectedYear)}\n onSelectionChange={handleYearSelect}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip key={formatYear(year)} value={year}>\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <ConditionalTooltip\n placement=\"top\"\n disabled={!(disableNavigateNextProp || disableNavigateNext)}\n content=\"Future dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n aria-label=\"Next Month\"\n disabled={disableNavigateNextProp || disableNavigateNext}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <NextIcon aria-hidden />\n </Button>\n </ConditionalTooltip>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","jsx","Tooltip","useCalendarContext","useLocalization","useCallback","generateMonthsForYear","monthDiff","useMemo","useListControlContext","Option","forwardRef","useWindow","useComponentCssInjection","calendarNavigationCss","useIcon","jsxs","clsx","Button","Dropdown"],"mappings":"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"}
|