@vuu-ui/vuu-ui-controls 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/calendar/Calendar.js.map +1 -1
- package/cjs/calendar/internal/CalendarCarousel.js.map +1 -1
- package/cjs/calendar/internal/CalendarContext.js.map +1 -1
- package/cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/cjs/calendar/internal/CalendarNavigation.js.map +1 -1
- package/cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
- package/cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/cjs/calendar/internal/utils.js.map +1 -1
- package/cjs/calendar/useCalendar.js.map +1 -1
- package/cjs/calendar/useCalendarDay.js.map +1 -1
- package/cjs/calendar/useSelection.js.map +1 -1
- package/cjs/column-picker/ColumnPicker.js.map +1 -1
- package/cjs/column-picker/ColumnSearch.js.map +1 -1
- package/cjs/common-hooks/collectionProvider.js.map +1 -1
- package/cjs/common-hooks/itemToString.js.map +1 -1
- package/cjs/common-hooks/selectionTypes.js.map +1 -1
- package/cjs/common-hooks/use-resize-observer.js.map +1 -1
- package/cjs/common-hooks/useCollectionItems.js.map +1 -1
- package/cjs/common-hooks/useControlled.js.map +1 -1
- package/cjs/common-hooks/useSelection.js.map +1 -1
- package/cjs/cycle-state-button/CycleStateButton.js.map +1 -1
- package/cjs/date-input/DateInput.js.map +1 -1
- package/cjs/date-picker/DatePicker.js.map +1 -1
- package/cjs/date-picker/DatePickerContext.js.map +1 -1
- package/cjs/date-picker/DatePickerPanel.js.map +1 -1
- package/cjs/drag-drop/DragDropProvider.js.map +1 -1
- package/cjs/drag-drop/DragDropState.js.map +1 -1
- package/cjs/drag-drop/Draggable.js +0 -5
- package/cjs/drag-drop/Draggable.js.map +1 -1
- package/cjs/drag-drop/dragDropTypes.js.map +1 -1
- package/cjs/drag-drop/drop-target-utils.js.map +1 -1
- package/cjs/drag-drop/useAutoScroll.js.map +1 -1
- package/cjs/drag-drop/useDragDisplacers.js.map +1 -1
- package/cjs/drag-drop/useDragDrop.js.map +1 -1
- package/cjs/drag-drop/useDragDropCopy.js.map +1 -1
- package/cjs/drag-drop/useDragDropIndicator.js.map +1 -1
- package/cjs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/cjs/drag-drop/useDropIndicator.js.map +1 -1
- package/cjs/drag-drop/useGlobalDragDrop.js.map +1 -1
- package/cjs/editable/useEditableText.js.map +1 -1
- package/cjs/editable-label/EditableLabel.css.js +1 -1
- package/cjs/editable-label/EditableLabel.js.map +1 -1
- package/cjs/expando-input/ExpandoInput.js +1 -1
- package/cjs/expando-input/ExpandoInput.js.map +1 -1
- package/cjs/icon-button/Icon.js.map +1 -1
- package/cjs/icon-button/IconButton.js.map +1 -1
- package/cjs/icon-button/ToggleIconButton.css.js +1 -1
- package/cjs/icon-button/ToggleIconButton.js.map +1 -1
- package/cjs/index.js +14 -5
- package/cjs/index.js.map +1 -1
- package/cjs/instrument-picker/TablePicker.js.map +1 -1
- package/cjs/instrument-picker/useTablePicker.js.map +1 -1
- package/cjs/list/Highlighter.js.map +1 -1
- package/cjs/list/List.js.map +1 -1
- package/cjs/list/ListItem.js.map +1 -1
- package/cjs/list/RadioIcon.js.map +1 -1
- package/cjs/list/common-hooks/keyUtils.js.map +1 -1
- package/cjs/list/common-hooks/list-dom-utils.js.map +1 -1
- package/cjs/list/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/cjs/list/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/cjs/list/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/cjs/list/common-hooks/useTypeahead.js.map +1 -1
- package/cjs/list/common-hooks/useViewportTracking.js.map +1 -1
- package/cjs/list/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/cjs/list/common-hooks/utils/filter-utils.js.map +1 -1
- package/cjs/list/common-hooks/utils/isSelected.js.map +1 -1
- package/cjs/list/useList.js.map +1 -1
- package/cjs/list/useListDrop.js.map +1 -1
- package/cjs/list/useListHeight.js.map +1 -1
- package/cjs/list/useScrollPosition.js.map +1 -1
- package/cjs/measured-container/MeasuredContainer.js +1 -0
- package/cjs/measured-container/MeasuredContainer.js.map +1 -1
- package/cjs/measured-container/useMeasuredContainer.js +4 -1
- package/cjs/measured-container/useMeasuredContainer.js.map +1 -1
- package/cjs/measured-container/useResizeObserver.js.map +1 -1
- package/cjs/overflow-container/OverflowContainer.js.map +1 -1
- package/cjs/overflow-container/overflow-utils.js.map +1 -1
- package/cjs/overflow-container/useOverflowContainer.js.map +1 -1
- package/cjs/price-ticker/PriceTicker.js.map +1 -1
- package/cjs/split-button/SplitButton.css.js +1 -1
- package/cjs/split-button/SplitButton.js.map +1 -1
- package/cjs/split-button/SplitStateButton.css.js +1 -1
- package/cjs/split-button/SplitStateButton.js.map +1 -1
- package/cjs/split-button/useSplitButton.js.map +1 -1
- package/cjs/table-search/SearchCell.css.js +1 -1
- package/cjs/table-search/SearchCell.js +8 -3
- package/cjs/table-search/SearchCell.js.map +1 -1
- package/cjs/table-search/TableSearch.js +11 -18
- package/cjs/table-search/TableSearch.js.map +1 -1
- package/cjs/table-search/useTableSearch.js +1 -1
- package/cjs/table-search/useTableSearch.js.map +1 -1
- package/cjs/tabs-next/TabBar.css.js +6 -0
- package/cjs/tabs-next/TabBar.css.js.map +1 -0
- package/cjs/tabs-next/TabBar.js +41 -0
- package/cjs/tabs-next/TabBar.js.map +1 -0
- package/cjs/tabs-next/TabListNext.css.js +6 -0
- package/cjs/tabs-next/TabListNext.css.js.map +1 -0
- package/cjs/tabs-next/TabListNext.js +124 -0
- package/cjs/tabs-next/TabListNext.js.map +1 -0
- package/cjs/tabs-next/TabNext.css.js +6 -0
- package/cjs/tabs-next/TabNext.css.js.map +1 -0
- package/cjs/tabs-next/TabNext.js +110 -0
- package/cjs/tabs-next/TabNext.js.map +1 -0
- package/cjs/tabs-next/TabNextAction.js +35 -0
- package/cjs/tabs-next/TabNextAction.js.map +1 -0
- package/cjs/tabs-next/TabNextContext.js +23 -0
- package/cjs/tabs-next/TabNextContext.js.map +1 -0
- package/cjs/tabs-next/TabNextPanel.css.js +6 -0
- package/cjs/tabs-next/TabNextPanel.css.js.map +1 -0
- package/cjs/tabs-next/TabNextPanel.js +77 -0
- package/cjs/tabs-next/TabNextPanel.js.map +1 -0
- package/cjs/tabs-next/TabNextTrigger.css.js +6 -0
- package/cjs/tabs-next/TabNextTrigger.css.js.map +1 -0
- package/cjs/tabs-next/TabNextTrigger.js +74 -0
- package/cjs/tabs-next/TabNextTrigger.js.map +1 -0
- package/cjs/tabs-next/TabOverflowList.css.js +6 -0
- package/cjs/tabs-next/TabOverflowList.css.js.map +1 -0
- package/cjs/tabs-next/TabOverflowList.js +130 -0
- package/cjs/tabs-next/TabOverflowList.js.map +1 -0
- package/cjs/tabs-next/TabsNext.js +174 -0
- package/cjs/tabs-next/TabsNext.js.map +1 -0
- package/cjs/tabs-next/TabsNextContext.js +33 -0
- package/cjs/tabs-next/TabsNextContext.js.map +1 -0
- package/cjs/tabs-next/hooks/useCollection.js +91 -0
- package/cjs/tabs-next/hooks/useCollection.js.map +1 -0
- package/cjs/tabs-next/hooks/useFocusOutside.js +24 -0
- package/cjs/tabs-next/hooks/useFocusOutside.js.map +1 -0
- package/cjs/tabs-next/hooks/useOverflow.js +138 -0
- package/cjs/tabs-next/hooks/useOverflow.js.map +1 -0
- package/cjs/tabstrip/Tab.js.map +1 -1
- package/cjs/tabstrip/TabMenu.js.map +1 -1
- package/cjs/tabstrip/TabMenuOptions.js.map +1 -1
- package/cjs/tabstrip/Tabstrip.css.js +1 -1
- package/cjs/tabstrip/Tabstrip.js.map +1 -1
- package/cjs/tabstrip/tabstrip-dom-utils.js.map +1 -1
- package/cjs/tabstrip/useAnimatedSelectionThumb.js.map +1 -1
- package/cjs/tabstrip/useKeyboardNavigation.js.map +1 -1
- package/cjs/tabstrip/useSelection.js.map +1 -1
- package/cjs/tabstrip/useTabstrip.js.map +1 -1
- package/cjs/toolbar/Toolbar.js.map +1 -1
- package/cjs/toolbar/toolbar-dom-utils.js.map +1 -1
- package/cjs/toolbar/useKeyboardNavigation.js.map +1 -1
- package/cjs/toolbar/useSelection.js.map +1 -1
- package/cjs/toolbar/useToolbar.js.map +1 -1
- package/cjs/utils/escapeRegExp.js.map +1 -1
- package/cjs/utils/forwardCallbackProps.js.map +1 -1
- package/cjs/utils/isOverflowElement.js.map +1 -1
- package/cjs/vuu-date-picker/VuuDatePicker.js.map +1 -1
- package/cjs/vuu-input/VuuInput.js.map +1 -1
- package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
- package/cjs/vuu-typeahead-input/useVuuTypeaheadInput.js.map +1 -1
- package/esm/calendar/Calendar.js.map +1 -1
- package/esm/calendar/internal/CalendarCarousel.js.map +1 -1
- package/esm/calendar/internal/CalendarContext.js.map +1 -1
- package/esm/calendar/internal/CalendarDay.js.map +1 -1
- package/esm/calendar/internal/CalendarMonth.js.map +1 -1
- package/esm/calendar/internal/CalendarNavigation.js.map +1 -1
- package/esm/calendar/internal/CalendarWeekHeader.js.map +1 -1
- package/esm/calendar/internal/useFocusManagement.js.map +1 -1
- package/esm/calendar/internal/utils.js.map +1 -1
- package/esm/calendar/useCalendar.js.map +1 -1
- package/esm/calendar/useCalendarDay.js.map +1 -1
- package/esm/calendar/useSelection.js.map +1 -1
- package/esm/column-picker/ColumnPicker.js.map +1 -1
- package/esm/column-picker/ColumnSearch.js.map +1 -1
- package/esm/common-hooks/collectionProvider.js.map +1 -1
- package/esm/common-hooks/itemToString.js.map +1 -1
- package/esm/common-hooks/selectionTypes.js.map +1 -1
- package/esm/common-hooks/use-resize-observer.js.map +1 -1
- package/esm/common-hooks/useCollectionItems.js.map +1 -1
- package/esm/common-hooks/useControlled.js.map +1 -1
- package/esm/common-hooks/useSelection.js.map +1 -1
- package/esm/cycle-state-button/CycleStateButton.js.map +1 -1
- package/esm/date-input/DateInput.js.map +1 -1
- package/esm/date-picker/DatePicker.js.map +1 -1
- package/esm/date-picker/DatePickerContext.js.map +1 -1
- package/esm/date-picker/DatePickerPanel.js.map +1 -1
- package/esm/drag-drop/DragDropProvider.js.map +1 -1
- package/esm/drag-drop/DragDropState.js.map +1 -1
- package/esm/drag-drop/Draggable.js +0 -5
- package/esm/drag-drop/Draggable.js.map +1 -1
- package/esm/drag-drop/dragDropTypes.js.map +1 -1
- package/esm/drag-drop/drop-target-utils.js.map +1 -1
- package/esm/drag-drop/useAutoScroll.js.map +1 -1
- package/esm/drag-drop/useDragDisplacers.js.map +1 -1
- package/esm/drag-drop/useDragDrop.js +1 -1
- package/esm/drag-drop/useDragDrop.js.map +1 -1
- package/esm/drag-drop/useDragDropCopy.js.map +1 -1
- package/esm/drag-drop/useDragDropIndicator.js +1 -1
- package/esm/drag-drop/useDragDropIndicator.js.map +1 -1
- package/esm/drag-drop/useDragDropNaturalMovement.js +1 -1
- package/esm/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/esm/drag-drop/useDropIndicator.js.map +1 -1
- package/esm/drag-drop/useGlobalDragDrop.js.map +1 -1
- package/esm/editable/useEditableText.js.map +1 -1
- package/esm/editable-label/EditableLabel.css.js +1 -1
- package/esm/editable-label/EditableLabel.js.map +1 -1
- package/esm/expando-input/ExpandoInput.js +1 -1
- package/esm/expando-input/ExpandoInput.js.map +1 -1
- package/esm/icon-button/Icon.js.map +1 -1
- package/esm/icon-button/IconButton.js.map +1 -1
- package/esm/icon-button/ToggleIconButton.css.js +1 -1
- package/esm/icon-button/ToggleIconButton.js.map +1 -1
- package/esm/index.js +7 -2
- package/esm/index.js.map +1 -1
- package/esm/instrument-picker/TablePicker.js.map +1 -1
- package/esm/instrument-picker/useTablePicker.js.map +1 -1
- package/esm/list/Highlighter.js.map +1 -1
- package/esm/list/List.js.map +1 -1
- package/esm/list/ListItem.js.map +1 -1
- package/esm/list/RadioIcon.js.map +1 -1
- package/esm/list/common-hooks/keyUtils.js.map +1 -1
- package/esm/list/common-hooks/list-dom-utils.js.map +1 -1
- package/esm/list/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/esm/list/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/esm/list/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/esm/list/common-hooks/useTypeahead.js.map +1 -1
- package/esm/list/common-hooks/useViewportTracking.js.map +1 -1
- package/esm/list/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/esm/list/common-hooks/utils/filter-utils.js.map +1 -1
- package/esm/list/common-hooks/utils/isSelected.js.map +1 -1
- package/esm/list/useList.js.map +1 -1
- package/esm/list/useListDrop.js.map +1 -1
- package/esm/list/useListHeight.js.map +1 -1
- package/esm/list/useScrollPosition.js.map +1 -1
- package/esm/measured-container/MeasuredContainer.js +1 -0
- package/esm/measured-container/MeasuredContainer.js.map +1 -1
- package/esm/measured-container/useMeasuredContainer.js +4 -1
- package/esm/measured-container/useMeasuredContainer.js.map +1 -1
- package/esm/measured-container/useResizeObserver.js.map +1 -1
- package/esm/overflow-container/OverflowContainer.js.map +1 -1
- package/esm/overflow-container/overflow-utils.js.map +1 -1
- package/esm/overflow-container/useOverflowContainer.js.map +1 -1
- package/esm/price-ticker/PriceTicker.js.map +1 -1
- package/esm/split-button/SplitButton.css.js +1 -1
- package/esm/split-button/SplitButton.js.map +1 -1
- package/esm/split-button/SplitStateButton.css.js +1 -1
- package/esm/split-button/SplitStateButton.js.map +1 -1
- package/esm/split-button/useSplitButton.js.map +1 -1
- package/esm/table-search/SearchCell.css.js +1 -1
- package/esm/table-search/SearchCell.js +8 -3
- package/esm/table-search/SearchCell.js.map +1 -1
- package/esm/table-search/TableSearch.js +12 -19
- package/esm/table-search/TableSearch.js.map +1 -1
- package/esm/table-search/useTableSearch.js +1 -1
- package/esm/table-search/useTableSearch.js.map +1 -1
- package/esm/tabs-next/TabBar.css.js +4 -0
- package/esm/tabs-next/TabBar.css.js.map +1 -0
- package/esm/tabs-next/TabBar.js +39 -0
- package/esm/tabs-next/TabBar.js.map +1 -0
- package/esm/tabs-next/TabListNext.css.js +4 -0
- package/esm/tabs-next/TabListNext.css.js.map +1 -0
- package/esm/tabs-next/TabListNext.js +122 -0
- package/esm/tabs-next/TabListNext.js.map +1 -0
- package/esm/tabs-next/TabNext.css.js +4 -0
- package/esm/tabs-next/TabNext.css.js.map +1 -0
- package/esm/tabs-next/TabNext.js +108 -0
- package/esm/tabs-next/TabNext.js.map +1 -0
- package/esm/tabs-next/TabNextAction.js +33 -0
- package/esm/tabs-next/TabNextAction.js.map +1 -0
- package/esm/tabs-next/TabNextContext.js +20 -0
- package/esm/tabs-next/TabNextContext.js.map +1 -0
- package/esm/tabs-next/TabNextPanel.css.js +4 -0
- package/esm/tabs-next/TabNextPanel.css.js.map +1 -0
- package/esm/tabs-next/TabNextPanel.js +75 -0
- package/esm/tabs-next/TabNextPanel.js.map +1 -0
- package/esm/tabs-next/TabNextTrigger.css.js +4 -0
- package/esm/tabs-next/TabNextTrigger.css.js.map +1 -0
- package/esm/tabs-next/TabNextTrigger.js +72 -0
- package/esm/tabs-next/TabNextTrigger.js.map +1 -0
- package/esm/tabs-next/TabOverflowList.css.js +4 -0
- package/esm/tabs-next/TabOverflowList.css.js.map +1 -0
- package/esm/tabs-next/TabOverflowList.js +128 -0
- package/esm/tabs-next/TabOverflowList.js.map +1 -0
- package/esm/tabs-next/TabsNext.js +172 -0
- package/esm/tabs-next/TabsNext.js.map +1 -0
- package/esm/tabs-next/TabsNextContext.js +30 -0
- package/esm/tabs-next/TabsNextContext.js.map +1 -0
- package/esm/tabs-next/hooks/useCollection.js +89 -0
- package/esm/tabs-next/hooks/useCollection.js.map +1 -0
- package/esm/tabs-next/hooks/useFocusOutside.js +22 -0
- package/esm/tabs-next/hooks/useFocusOutside.js.map +1 -0
- package/esm/tabs-next/hooks/useOverflow.js +136 -0
- package/esm/tabs-next/hooks/useOverflow.js.map +1 -0
- package/esm/tabstrip/Tab.js.map +1 -1
- package/esm/tabstrip/TabMenu.js.map +1 -1
- package/esm/tabstrip/TabMenuOptions.js.map +1 -1
- package/esm/tabstrip/Tabstrip.css.js +1 -1
- package/esm/tabstrip/Tabstrip.js.map +1 -1
- package/esm/tabstrip/tabstrip-dom-utils.js.map +1 -1
- package/esm/tabstrip/useAnimatedSelectionThumb.js.map +1 -1
- package/esm/tabstrip/useKeyboardNavigation.js.map +1 -1
- package/esm/tabstrip/useSelection.js.map +1 -1
- package/esm/tabstrip/useTabstrip.js.map +1 -1
- package/esm/toolbar/Toolbar.js.map +1 -1
- package/esm/toolbar/toolbar-dom-utils.js.map +1 -1
- package/esm/toolbar/useKeyboardNavigation.js.map +1 -1
- package/esm/toolbar/useSelection.js.map +1 -1
- package/esm/toolbar/useToolbar.js.map +1 -1
- package/esm/utils/escapeRegExp.js.map +1 -1
- package/esm/utils/forwardCallbackProps.js.map +1 -1
- package/esm/utils/isOverflowElement.js.map +1 -1
- package/esm/vuu-date-picker/VuuDatePicker.js.map +1 -1
- package/esm/vuu-input/VuuInput.js.map +1 -1
- package/esm/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
- package/esm/vuu-typeahead-input/useVuuTypeaheadInput.js.map +1 -1
- package/package.json +15 -14
- package/types/calendar/Calendar.d.ts +0 -1
- package/types/calendar/internal/CalendarCarousel.d.ts +0 -1
- package/types/calendar/internal/CalendarContext.d.ts +0 -1
- package/types/calendar/internal/CalendarWeekHeader.d.ts +1 -1
- package/types/calendar/useCalendar.d.ts +4 -4
- package/types/calendar/useCalendarDay.d.ts +2 -2
- package/types/column-picker/ColumnPicker.d.ts +0 -1
- package/types/common-hooks/collectionProvider.d.ts +1 -1
- package/types/common-hooks/selectionTypes.d.ts +1 -1
- package/types/cycle-state-button/CycleStateButton.d.ts +2 -2
- package/types/date-picker/DatePickerContext.d.ts +0 -1
- package/types/drag-drop/DragDropProvider.d.ts +1 -1
- package/types/drag-drop/DropIndicator.d.ts +1 -2
- package/types/drag-drop/drop-target-utils.d.ts +24 -20
- package/types/drag-drop/useAutoScroll.d.ts +4 -4
- package/types/drag-drop/useGlobalDragDrop.d.ts +0 -1
- package/types/expando-input/ExpandoInput.d.ts +2 -2
- package/types/icon-button/Icon.d.ts +1 -1
- package/types/icon-button/IconButton.d.ts +0 -1
- package/types/icon-button/ToggleIconButton.d.ts +1 -2
- package/types/index.d.ts +1 -1
- package/types/instrument-picker/SearchCell.d.ts +1 -2
- package/types/instrument-picker/TablePicker.d.ts +1 -1
- package/types/instrument-picker/useTablePicker.d.ts +3 -10
- package/types/list/ChevronIcon.d.ts +1 -1
- package/types/list/ListItem.d.ts +1 -1
- package/types/list/RadioIcon.d.ts +1 -2
- package/types/list/common-hooks/useTypeahead.d.ts +0 -1
- package/types/measured-container/MeasuredContainer.d.ts +1 -1
- package/types/overflow-container/useOverflowContainer.d.ts +4 -5
- package/types/price-ticker/PriceTicker.d.ts +1 -1
- package/types/split-button/SplitStateButton.d.ts +0 -1
- package/types/split-button/useSplitButton.d.ts +71 -60
- package/types/table-search/SearchCell.d.ts +1 -2
- package/types/table-search/TableSearch.d.ts +2 -4
- package/types/table-search/useTableSearch.d.ts +4 -2
- package/types/tabs-next/TabBar.d.ts +12 -0
- package/types/tabs-next/TabListNext.d.ts +12 -0
- package/types/tabs-next/TabNext.d.ts +12 -0
- package/types/tabs-next/TabNextAction.d.ts +5 -0
- package/types/tabs-next/TabNextContext.d.ts +12 -0
- package/types/tabs-next/TabNextPanel.d.ts +8 -0
- package/types/tabs-next/TabNextTrigger.d.ts +5 -0
- package/types/tabs-next/TabOverflowList.d.ts +11 -0
- package/types/tabs-next/TabsNext.d.ts +17 -0
- package/types/tabs-next/TabsNextContext.d.ts +21 -0
- package/types/tabs-next/hooks/useCollection.d.ts +18 -0
- package/types/tabs-next/hooks/useFocusOutside.d.ts +2 -0
- package/types/tabs-next/hooks/useOverflow.d.ts +11 -0
- package/types/tabs-next/index.d.ts +7 -0
- package/types/tabstrip/Tab.d.ts +23 -22
- package/types/tabstrip/TabMenu.d.ts +1 -2
- package/types/tabstrip/Tabstrip.d.ts +1 -2
- package/types/tabstrip/useSelection.d.ts +3 -3
- package/types/tabstrip/useTabstrip.d.ts +5 -5
- package/types/toolbar/Toolbar.d.ts +1 -2
- package/types/toolbar/useToolbar.d.ts +1 -1
- package/types/vuu-date-picker/VuuDatePicker.d.ts +4 -6
- package/types/vuu-input/VuuInput.d.ts +1 -1
- package/types/vuu-typeahead-input/VuuTypeaheadInput.d.ts +1 -2
- package/cjs/tree/Tree.css.js +0 -6
- package/cjs/tree/Tree.css.js.map +0 -1
- package/cjs/tree/Tree.js +0 -179
- package/cjs/tree/Tree.js.map +0 -1
- package/cjs/tree/hierarchical-data-utils.js +0 -72
- package/cjs/tree/hierarchical-data-utils.js.map +0 -1
- package/cjs/tree/key-code.js +0 -62
- package/cjs/tree/key-code.js.map +0 -1
- package/cjs/tree/list-dom-utils.js +0 -19
- package/cjs/tree/list-dom-utils.js.map +0 -1
- package/cjs/tree/treeTypeUtils.js +0 -6
- package/cjs/tree/treeTypeUtils.js.map +0 -1
- package/cjs/tree/use-collapsible-groups.js +0 -85
- package/cjs/tree/use-collapsible-groups.js.map +0 -1
- package/cjs/tree/use-hierarchical-data.js +0 -51
- package/cjs/tree/use-hierarchical-data.js.map +0 -1
- package/cjs/tree/use-items-with-ids.js +0 -100
- package/cjs/tree/use-items-with-ids.js.map +0 -1
- package/cjs/tree/use-keyboard-navigation.js +0 -144
- package/cjs/tree/use-keyboard-navigation.js.map +0 -1
- package/cjs/tree/use-selection.js +0 -154
- package/cjs/tree/use-selection.js.map +0 -1
- package/cjs/tree/use-tree-keyboard-navigation.js +0 -41
- package/cjs/tree/use-tree-keyboard-navigation.js.map +0 -1
- package/cjs/tree/use-viewport-tracking.js +0 -76
- package/cjs/tree/use-viewport-tracking.js.map +0 -1
- package/cjs/tree/useTree.js +0 -106
- package/cjs/tree/useTree.js.map +0 -1
- package/esm/tree/Tree.css.js +0 -4
- package/esm/tree/Tree.css.js.map +0 -1
- package/esm/tree/Tree.js +0 -176
- package/esm/tree/Tree.js.map +0 -1
- package/esm/tree/hierarchical-data-utils.js +0 -65
- package/esm/tree/hierarchical-data-utils.js.map +0 -1
- package/esm/tree/key-code.js +0 -54
- package/esm/tree/key-code.js.map +0 -1
- package/esm/tree/list-dom-utils.js +0 -15
- package/esm/tree/list-dom-utils.js.map +0 -1
- package/esm/tree/treeTypeUtils.js +0 -4
- package/esm/tree/treeTypeUtils.js.map +0 -1
- package/esm/tree/use-collapsible-groups.js +0 -83
- package/esm/tree/use-collapsible-groups.js.map +0 -1
- package/esm/tree/use-hierarchical-data.js +0 -49
- package/esm/tree/use-hierarchical-data.js.map +0 -1
- package/esm/tree/use-items-with-ids.js +0 -98
- package/esm/tree/use-items-with-ids.js.map +0 -1
- package/esm/tree/use-keyboard-navigation.js +0 -142
- package/esm/tree/use-keyboard-navigation.js.map +0 -1
- package/esm/tree/use-selection.js +0 -147
- package/esm/tree/use-selection.js.map +0 -1
- package/esm/tree/use-tree-keyboard-navigation.js +0 -39
- package/esm/tree/use-tree-keyboard-navigation.js.map +0 -1
- package/esm/tree/use-viewport-tracking.js +0 -74
- package/esm/tree/use-viewport-tracking.js.map +0 -1
- package/esm/tree/useTree.js +0 -104
- package/esm/tree/useTree.js.map +0 -1
- package/types/tree/Tree.d.ts +0 -19
- package/types/tree/hierarchical-data-utils.d.ts +0 -8
- package/types/tree/index.d.ts +0 -3
- package/types/tree/key-code.d.ts +0 -11
- package/types/tree/list-dom-utils.d.ts +0 -6
- package/types/tree/treeTypeUtils.d.ts +0 -2
- package/types/tree/use-collapsible-groups.d.ts +0 -18
- package/types/tree/use-hierarchical-data.d.ts +0 -6
- package/types/tree/use-items-with-ids.d.ts +0 -8
- package/types/tree/use-keyboard-navigation.d.ts +0 -26
- package/types/tree/use-selection.d.ts +0 -31
- package/types/tree/use-tree-keyboard-navigation.d.ts +0 -12
- package/types/tree/use-viewport-tracking.d.ts +0 -2
- package/types/tree/useTree.d.ts +0 -30
|
@@ -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 { forwardRef, useCallback } from \"react\";\nimport {\n CalendarCarousel,\n type CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n CalendarNavigation,\n type CalendarNavigationProps,\n} from \"./internal/CalendarNavigation\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\nimport { useCalendar, type useCalendarProps } from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\nimport calendarCss from \"./Calendar.css\";\nimport { getCurrentLocale } from \"./internal/utils\";\n\nexport type CalendarProps = useCalendarProps & {\n className?: string;\n id?: string;\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n hideYearDropdown?: CalendarNavigationProps[\"hideYearDropdown\"];\n borderedDropdown?: CalendarNavigationProps[\"borderedDropdown\"];\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\n};\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const {\n className,\n id,\n renderDayContents,\n hideYearDropdown,\n TooltipProps,\n borderedDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({\n hideYearDropdown,\n ...rest,\n });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(getCurrentLocale(), {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(getLocalTimeZone()));\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n id={id}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n >\n <CalendarNavigation\n borderedDropdown={borderedDropdown}\n hideYearDropdown={hideYearDropdown}\n />\n <CalendarWeekHeader />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Calendar","useWindow","useComponentCssInjection","calendarCss","useCalendar","useCallback","DateFormatter","getCurrentLocale","getLocalTimeZone","jsx","CalendarContext","jsxs","clsx","CalendarNavigation","CalendarWeekHeader","CalendarCarousel"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA
|
|
1
|
+
{"version":3,"file":"Calendar.js","sources":["../../src/calendar/Calendar.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, useCallback } from \"react\";\nimport {\n CalendarCarousel,\n type CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n CalendarNavigation,\n type CalendarNavigationProps,\n} from \"./internal/CalendarNavigation\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\nimport { useCalendar, type useCalendarProps } from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\nimport calendarCss from \"./Calendar.css\";\nimport { getCurrentLocale } from \"./internal/utils\";\n\nexport type CalendarProps = useCalendarProps & {\n className?: string;\n id?: string;\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n hideYearDropdown?: CalendarNavigationProps[\"hideYearDropdown\"];\n borderedDropdown?: CalendarNavigationProps[\"borderedDropdown\"];\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\n};\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const {\n className,\n id,\n renderDayContents,\n hideYearDropdown,\n TooltipProps,\n borderedDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({\n hideYearDropdown,\n ...rest,\n });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(getCurrentLocale(), {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(getLocalTimeZone()));\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n id={id}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n >\n <CalendarNavigation\n borderedDropdown={borderedDropdown}\n hideYearDropdown={hideYearDropdown}\n />\n <CalendarWeekHeader />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Calendar","useWindow","useComponentCssInjection","calendarCss","useCalendar","useCallback","DateFormatter","getCurrentLocale","getLocalTimeZone","jsx","CalendarContext","jsxs","clsx","CalendarNavigation","CalendarWeekHeader","CalendarCarousel"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,SAASC,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,EAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,gBAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAIC,uBAAY,CAAA;AAAA,MACrC,gBAAA;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAED,IAAM,MAAA,EAAE,oBAAuB,GAAA,OAAA;AAE/B,IAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,KACzB,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,IAAM,MAAA,UAAA,GAAaA,kBAAY,MAAM;AACnC,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,KAC1B,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,IAAA,MAAM,aAAgB,GAAA,IAAIC,kBAAc,CAAAC,sBAAA,EAAoB,EAAA;AAAA,MAC1D,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAAC,qBAAA,EAAkB,CAAC,CAAA;AACvD,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAC,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAC,OAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,YACzC,EAAA;AAAA,YACA,IAAK,EAAA,aAAA;AAAA,YACL,YAAY,EAAA,aAAA;AAAA,YACZ,GAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAH,cAAA;AAAA,gBAACI,qCAAA;AAAA,gBAAA;AAAA,kBACC,gBAAA;AAAA,kBACA;AAAA;AAAA,eACF;AAAA,6CACCC,qCAAmB,EAAA,EAAA,CAAA;AAAA,8BACpBL,cAAA;AAAA,gBAACM,iCAAA;AAAA,gBAAA;AAAA,kBACC,OAAS,EAAA,WAAA;AAAA,kBACT,MAAQ,EAAA,UAAA;AAAA,kBACR,iBAAA;AAAA,kBACA;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarCarousel.js","sources":["../../../src/calendar/internal/CalendarCarousel.tsx"],"sourcesContent":["import { type DateValue, isSameMonth } from \"@internationalized/date\";\nimport { makePrefixer, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport { CalendarMonth, type CalendarMonthProps } from \"./CalendarMonth\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarCarouselCss from \"./CalendarCarousel.css\";\nimport { formatDate, monthDiff } from \"./utils\";\n\nexport type CalendarCarouselProps = Omit<CalendarMonthProps, \"date\">;\n\nfunction getMonths(month: DateValue) {\n return [month.subtract({ months: 1 }), month, month.add({ months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarCarousel\");\n\nexport const CalendarCarousel = forwardRef<\n HTMLDivElement,\n CalendarCarouselProps\n>(function CalendarCarousel(props, ref) {\n const { ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-carousel\",\n css: calendarCarouselCss,\n window: targetWindow,\n });\n\n const {\n state: { visibleMonth },\n } = useCalendarContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const diffIndex = (a: DateValue, b: DateValue) => monthDiff(a, b);\n\n const { current: baseIndex } = useRef(visibleMonth);\n\n useIsomorphicLayoutEffect(() => {\n if (containerRef.current) {\n containerRef.current.style.transform = `translate3d(${\n diffIndex(baseIndex, visibleMonth) * -101 // needs to be higher than 100% so the next month doesn't show on the edges\n }%, 0, 0)`;\n }\n });\n\n const [months, setMonths] = useState(() => getMonths(visibleMonth));\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: uses formatData to change visibleMonth into string\n useEffect(() => {\n setMonths((oldMonths) => {\n const newMonths = getMonths(visibleMonth).filter((month) => {\n return !oldMonths.find((oldMonth) => isSameMonth(oldMonth, month));\n });\n\n return oldMonths.concat(newMonths);\n });\n setMonths(getMonths(visibleMonth));\n return undefined;\n }, [formatDate(visibleMonth)]);\n\n return (\n <div\n className={withBaseName()}\n tabIndex={-1} // https://bugzilla.mozilla.org/show_bug.cgi?id=1069739\n style={{\n overflowX: \"hidden\",\n position: \"relative\",\n }}\n ref={ref}\n >\n <div className={withBaseName(\"track\")} ref={containerRef}>\n {months.map((date, index) => (\n <div\n key={formatDate(date)}\n className={withBaseName(\"slide\")}\n style={{\n transform: `translateX(${diffIndex(date, baseIndex) * -101}%)`,\n }}\n aria-hidden={index !== 1 ? \"true\" : undefined}\n >\n <CalendarMonth {...rest} date={date} />\n </div>\n ))}\n </div>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","CalendarCarousel","useWindow","useComponentCssInjection","calendarCarouselCss","useCalendarContext","useRef","monthDiff","useIsomorphicLayoutEffect","useState","useEffect","isSameMonth","formatDate","jsx","CalendarMonth"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,UAAU,KAAkB,EAAA;AACnC,EAAA,OAAO,CAAC,KAAA,CAAM,QAAS,CAAA,EAAE,QAAQ,CAAE,EAAC,CAAG,EAAA,KAAA,EAAO,MAAM,GAAI,CAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,CAAC,CAAA
|
|
1
|
+
{"version":3,"file":"CalendarCarousel.js","sources":["../../../src/calendar/internal/CalendarCarousel.tsx"],"sourcesContent":["import { type DateValue, isSameMonth } from \"@internationalized/date\";\nimport { makePrefixer, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport { CalendarMonth, type CalendarMonthProps } from \"./CalendarMonth\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarCarouselCss from \"./CalendarCarousel.css\";\nimport { formatDate, monthDiff } from \"./utils\";\n\nexport type CalendarCarouselProps = Omit<CalendarMonthProps, \"date\">;\n\nfunction getMonths(month: DateValue) {\n return [month.subtract({ months: 1 }), month, month.add({ months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarCarousel\");\n\nexport const CalendarCarousel = forwardRef<\n HTMLDivElement,\n CalendarCarouselProps\n>(function CalendarCarousel(props, ref) {\n const { ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-carousel\",\n css: calendarCarouselCss,\n window: targetWindow,\n });\n\n const {\n state: { visibleMonth },\n } = useCalendarContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const diffIndex = (a: DateValue, b: DateValue) => monthDiff(a, b);\n\n const { current: baseIndex } = useRef(visibleMonth);\n\n useIsomorphicLayoutEffect(() => {\n if (containerRef.current) {\n containerRef.current.style.transform = `translate3d(${\n diffIndex(baseIndex, visibleMonth) * -101 // needs to be higher than 100% so the next month doesn't show on the edges\n }%, 0, 0)`;\n }\n });\n\n const [months, setMonths] = useState(() => getMonths(visibleMonth));\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: uses formatData to change visibleMonth into string\n useEffect(() => {\n setMonths((oldMonths) => {\n const newMonths = getMonths(visibleMonth).filter((month) => {\n return !oldMonths.find((oldMonth) => isSameMonth(oldMonth, month));\n });\n\n return oldMonths.concat(newMonths);\n });\n setMonths(getMonths(visibleMonth));\n return undefined;\n }, [formatDate(visibleMonth)]);\n\n return (\n <div\n className={withBaseName()}\n tabIndex={-1} // https://bugzilla.mozilla.org/show_bug.cgi?id=1069739\n style={{\n overflowX: \"hidden\",\n position: \"relative\",\n }}\n ref={ref}\n >\n <div className={withBaseName(\"track\")} ref={containerRef}>\n {months.map((date, index) => (\n <div\n key={formatDate(date)}\n className={withBaseName(\"slide\")}\n style={{\n transform: `translateX(${diffIndex(date, baseIndex) * -101}%)`,\n }}\n aria-hidden={index !== 1 ? \"true\" : undefined}\n >\n <CalendarMonth {...rest} date={date} />\n </div>\n ))}\n </div>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","CalendarCarousel","useWindow","useComponentCssInjection","calendarCarouselCss","useCalendarContext","useRef","monthDiff","useIsomorphicLayoutEffect","useState","useEffect","isSameMonth","formatDate","jsx","CalendarMonth"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarContext.js","sources":["../../../src/calendar/internal/CalendarContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { useCalendar } from \"../useCalendar\";\n\ninterface CalendarState {\n state: ReturnType<typeof useCalendar>[\"state\"];\n helpers: ReturnType<typeof useCalendar>[\"helpers\"];\n}\n\nconst CalendarContext = createContext<CalendarState | null>(null);\n\nif (process.env.NODE_ENV !== \"production\") {\n CalendarContext.displayName = \"CalendarContext\";\n}\n\nfunction useCalendarContext(): CalendarState {\n const context = useContext(CalendarContext);\n\n if (!context) {\n throw new Error(\"Unexpected usage\");\n }\n\n return context;\n}\n\nexport { CalendarContext, useCalendarContext };\n"],"names":["createContext","useContext"],"mappings":";;;;AAQM,MAAA,eAAA,GAAkBA,oBAAoC,IAAI
|
|
1
|
+
{"version":3,"file":"CalendarContext.js","sources":["../../../src/calendar/internal/CalendarContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { useCalendar } from \"../useCalendar\";\n\ninterface CalendarState {\n state: ReturnType<typeof useCalendar>[\"state\"];\n helpers: ReturnType<typeof useCalendar>[\"helpers\"];\n}\n\nconst CalendarContext = createContext<CalendarState | null>(null);\n\nif (process.env.NODE_ENV !== \"production\") {\n CalendarContext.displayName = \"CalendarContext\";\n}\n\nfunction useCalendarContext(): CalendarState {\n const context = useContext(CalendarContext);\n\n if (!context) {\n throw new Error(\"Unexpected usage\");\n }\n\n return context;\n}\n\nexport { CalendarContext, useCalendarContext };\n"],"names":["createContext","useContext"],"mappings":";;;;AAQM,MAAA,eAAA,GAAkBA,oBAAoC,IAAI;AAEhE,IAAI,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,EAAA,eAAA,CAAgB,WAAc,GAAA,iBAAA;AAChC;AAEA,SAAS,kBAAoC,GAAA;AAC3C,EAAM,MAAA,OAAA,GAAUC,iBAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAM,MAAA,IAAI,MAAM,kBAAkB,CAAA;AAAA;AAGpC,EAAO,OAAA,OAAA;AACT;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarDay.js","sources":["../../../src/calendar/internal/CalendarDay.tsx"],"sourcesContent":["import type { DateValue } from \"@internationalized/date\";\nimport {\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useForkRef,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type ReactElement,\n forwardRef,\n useRef,\n} from \"react\";\nimport { type DayStatus, useCalendarDay } from \"../useCalendarDay\";\nimport calendarDayCss from \"./CalendarDay.css\";\nimport { formatDate } from \"./utils\";\n\nexport type DateFormatter = (day: Date) => string | undefined;\n\nexport interface CalendarDayProps\n extends Omit<ComponentPropsWithRef<\"button\">, \"children\"> {\n day: DateValue;\n formatDate?: DateFormatter;\n renderDayContents?: (date: DateValue, status: DayStatus) => ReactElement;\n status?: DayStatus;\n month: DateValue;\n TooltipProps?: Partial<TooltipProps>;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport const CalendarDay = forwardRef<HTMLButtonElement, CalendarDayProps>(\n function CalendarDay(props, ref) {\n const { className, day, renderDayContents, month, TooltipProps, ...rest } =\n props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-day\",\n css: calendarDayCss,\n window: targetWindow,\n });\n\n const dayRef = useRef<HTMLButtonElement>(null);\n const buttonRef = useForkRef(ref, dayRef);\n const { status, dayProps, unselectableReason, highlightedReason } =\n useCalendarDay(\n {\n date: day,\n month,\n },\n dayRef,\n );\n const { outOfRange, today, unselectable, highlighted, hidden, disabled } =\n status;\n\n return (\n <Tooltip\n hideIcon\n status={unselectableReason ? \"error\" : \"info\"}\n content={\n unselectableReason || highlightedReason || \"Date is out of range\"\n }\n disabled={!unselectableReason && !highlightedReason}\n placement=\"top\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n {...TooltipProps}\n >\n <button\n aria-label={formatDate(day, {\n day: \"2-digit\",\n month: \"long\",\n year: \"numeric\",\n })}\n disabled={disabled}\n type=\"button\"\n {...dayProps}\n ref={buttonRef}\n {...rest}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"hidden\")]: hidden,\n [withBaseName(\"outOfRange\")]: outOfRange,\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"unselectable\")]: !!unselectable,\n [withBaseName(\"highlighted\")]: !!highlighted,\n },\n dayProps.className,\n className,\n )}\n >\n <span\n className={clsx(withBaseName(\"content\"), {\n [withBaseName(\"today\")]: today,\n })}\n >\n {renderDayContents\n ? renderDayContents(day, status)\n : formatDate(day, { day: \"numeric\" })}\n </span>\n </button>\n </Tooltip>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CalendarDay","useWindow","useComponentCssInjection","calendarDayCss","useRef","useForkRef","useCalendarDay","jsx","Tooltip","formatDate","clsx"],"mappings":";;;;;;;;;;;;AAgCA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA
|
|
1
|
+
{"version":3,"file":"CalendarDay.js","sources":["../../../src/calendar/internal/CalendarDay.tsx"],"sourcesContent":["import type { DateValue } from \"@internationalized/date\";\nimport {\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useForkRef,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type ReactElement,\n forwardRef,\n useRef,\n} from \"react\";\nimport { type DayStatus, useCalendarDay } from \"../useCalendarDay\";\nimport calendarDayCss from \"./CalendarDay.css\";\nimport { formatDate } from \"./utils\";\n\nexport type DateFormatter = (day: Date) => string | undefined;\n\nexport interface CalendarDayProps\n extends Omit<ComponentPropsWithRef<\"button\">, \"children\"> {\n day: DateValue;\n formatDate?: DateFormatter;\n renderDayContents?: (date: DateValue, status: DayStatus) => ReactElement;\n status?: DayStatus;\n month: DateValue;\n TooltipProps?: Partial<TooltipProps>;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport const CalendarDay = forwardRef<HTMLButtonElement, CalendarDayProps>(\n function CalendarDay(props, ref) {\n const { className, day, renderDayContents, month, TooltipProps, ...rest } =\n props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-day\",\n css: calendarDayCss,\n window: targetWindow,\n });\n\n const dayRef = useRef<HTMLButtonElement>(null);\n const buttonRef = useForkRef(ref, dayRef);\n const { status, dayProps, unselectableReason, highlightedReason } =\n useCalendarDay(\n {\n date: day,\n month,\n },\n dayRef,\n );\n const { outOfRange, today, unselectable, highlighted, hidden, disabled } =\n status;\n\n return (\n <Tooltip\n hideIcon\n status={unselectableReason ? \"error\" : \"info\"}\n content={\n unselectableReason || highlightedReason || \"Date is out of range\"\n }\n disabled={!unselectableReason && !highlightedReason}\n placement=\"top\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n {...TooltipProps}\n >\n <button\n aria-label={formatDate(day, {\n day: \"2-digit\",\n month: \"long\",\n year: \"numeric\",\n })}\n disabled={disabled}\n type=\"button\"\n {...dayProps}\n ref={buttonRef}\n {...rest}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"hidden\")]: hidden,\n [withBaseName(\"outOfRange\")]: outOfRange,\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"unselectable\")]: !!unselectable,\n [withBaseName(\"highlighted\")]: !!highlighted,\n },\n dayProps.className,\n className,\n )}\n >\n <span\n className={clsx(withBaseName(\"content\"), {\n [withBaseName(\"today\")]: today,\n })}\n >\n {renderDayContents\n ? renderDayContents(day, status)\n : formatDate(day, { day: \"numeric\" })}\n </span>\n </button>\n </Tooltip>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CalendarDay","useWindow","useComponentCssInjection","calendarDayCss","useRef","useForkRef","useCalendarDay","jsx","Tooltip","formatDate","clsx"],"mappings":";;;;;;;;;;;;AAgCA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAE5C,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,SAASC,YAAY,CAAA,KAAA,EAAO,GAAK,EAAA;AAC/B,IAAM,MAAA,EAAE,WAAW,GAAK,EAAA,iBAAA,EAAmB,OAAO,YAAc,EAAA,GAAG,MACjE,GAAA,KAAA;AACF,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,aAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA,MAAA,GAASC,aAA0B,IAAI,CAAA;AAC7C,IAAM,MAAA,SAAA,GAAYC,eAAW,CAAA,GAAA,EAAK,MAAM,CAAA;AACxC,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAU,EAAA,kBAAA,EAAoB,mBAC5C,GAAAC,6BAAA;AAAA,MACE;AAAA,QACE,IAAM,EAAA,GAAA;AAAA,QACN;AAAA,OACF;AAAA,MACA;AAAA,KACF;AACF,IAAA,MAAM,EAAE,UAAY,EAAA,KAAA,EAAO,cAAc,WAAa,EAAA,MAAA,EAAQ,UAC5D,GAAA,MAAA;AAEF,IACE,uBAAAC,cAAA;AAAA,MAACC,YAAA;AAAA,MAAA;AAAA,QACC,QAAQ,EAAA,IAAA;AAAA,QACR,MAAA,EAAQ,qBAAqB,OAAU,GAAA,MAAA;AAAA,QACvC,OAAA,EACE,sBAAsB,iBAAqB,IAAA,sBAAA;AAAA,QAE7C,QAAA,EAAU,CAAC,kBAAA,IAAsB,CAAC,iBAAA;AAAA,QAClC,SAAU,EAAA,KAAA;AAAA,QACV,UAAY,EAAA,CAAA;AAAA,QACZ,UAAY,EAAA,CAAA;AAAA,QACX,GAAG,YAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAYE,iBAAW,GAAK,EAAA;AAAA,cAC1B,GAAK,EAAA,SAAA;AAAA,cACL,KAAO,EAAA,MAAA;AAAA,cACP,IAAM,EAAA;AAAA,aACP,CAAA;AAAA,YACD,QAAA;AAAA,YACA,IAAK,EAAA,QAAA;AAAA,YACJ,GAAG,QAAA;AAAA,YACJ,GAAK,EAAA,SAAA;AAAA,YACJ,GAAG,IAAA;AAAA,YACJ,SAAW,EAAAC,OAAA;AAAA,cACT,YAAa,EAAA;AAAA,cACb;AAAA,gBACE,CAAC,YAAA,CAAa,QAAQ,CAAC,GAAG,MAAA;AAAA,gBAC1B,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,gBAC9B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAA;AAAA,gBAC5B,CAAC,YAAa,CAAA,cAAc,CAAC,GAAG,CAAC,CAAC,YAAA;AAAA,gBAClC,CAAC,YAAa,CAAA,aAAa,CAAC,GAAG,CAAC,CAAC;AAAA,eACnC;AAAA,cACA,QAAS,CAAA,SAAA;AAAA,cACT;AAAA,aACF;AAAA,YAEA,QAAA,kBAAAH,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAW,EAAAG,OAAA,CAAK,YAAa,CAAA,SAAS,CAAG,EAAA;AAAA,kBACvC,CAAC,YAAA,CAAa,OAAO,CAAC,GAAG;AAAA,iBAC1B,CAAA;AAAA,gBAEA,QAAA,EAAA,iBAAA,GACG,iBAAkB,CAAA,GAAA,EAAK,MAAM,CAAA,GAC7BD,iBAAW,GAAK,EAAA,EAAE,GAAK,EAAA,SAAA,EAAW;AAAA;AAAA;AACxC;AAAA;AACF;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarMonth.js","sources":["../../../src/calendar/internal/CalendarMonth.tsx"],"sourcesContent":["import type { DateValue } from \"@internationalized/date\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEvent,\n type SyntheticEvent,\n forwardRef,\n} from \"react\";\nimport { CalendarDay, type CalendarDayProps } from \"./CalendarDay\";\nimport { formatDate, generateVisibleDays } from \"./utils\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport calendarMonthCss from \"./CalendarMonth.css\";\n\nexport interface CalendarMonthProps extends ComponentPropsWithRef<\"div\"> {\n date: DateValue;\n hideOutOfRangeDates?: boolean;\n renderDayContents?: CalendarDayProps[\"renderDayContents\"];\n TooltipProps?: CalendarDayProps[\"TooltipProps\"];\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarMonth\");\n\nexport const CalendarMonth = forwardRef<HTMLDivElement, CalendarMonthProps>(\n function CalendarMonth(props, ref) {\n const {\n className,\n date,\n renderDayContents,\n onMouseLeave,\n TooltipProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-month\",\n css: calendarMonthCss,\n window: targetWindow,\n });\n\n const days = generateVisibleDays(date);\n const {\n helpers: { setHoveredDate },\n } = useCalendarContext();\n\n const handleMouseLeave = (event: SyntheticEvent) => {\n setHoveredDate(event, null);\n onMouseLeave?.(event as MouseEvent<HTMLDivElement>);\n };\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n ref={ref}\n onMouseLeave={handleMouseLeave}\n {...rest}\n >\n <div\n data-testid=\"CalendarDateGrid\"\n className={withBaseName(\"dateGrid\")}\n >\n {days.map((day) => {\n return (\n <CalendarDay\n key={formatDate(day.date)}\n day={day.date}\n renderDayContents={renderDayContents}\n month={date}\n TooltipProps={TooltipProps}\n />\n );\n })}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CalendarMonth","useWindow","useComponentCssInjection","calendarMonthCss","generateVisibleDays","useCalendarContext","jsx","clsx","CalendarDay","formatDate"],"mappings":";;;;;;;;;;;;;AAwBA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA
|
|
1
|
+
{"version":3,"file":"CalendarMonth.js","sources":["../../../src/calendar/internal/CalendarMonth.tsx"],"sourcesContent":["import type { DateValue } from \"@internationalized/date\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEvent,\n type SyntheticEvent,\n forwardRef,\n} from \"react\";\nimport { CalendarDay, type CalendarDayProps } from \"./CalendarDay\";\nimport { formatDate, generateVisibleDays } from \"./utils\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport calendarMonthCss from \"./CalendarMonth.css\";\n\nexport interface CalendarMonthProps extends ComponentPropsWithRef<\"div\"> {\n date: DateValue;\n hideOutOfRangeDates?: boolean;\n renderDayContents?: CalendarDayProps[\"renderDayContents\"];\n TooltipProps?: CalendarDayProps[\"TooltipProps\"];\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarMonth\");\n\nexport const CalendarMonth = forwardRef<HTMLDivElement, CalendarMonthProps>(\n function CalendarMonth(props, ref) {\n const {\n className,\n date,\n renderDayContents,\n onMouseLeave,\n TooltipProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-month\",\n css: calendarMonthCss,\n window: targetWindow,\n });\n\n const days = generateVisibleDays(date);\n const {\n helpers: { setHoveredDate },\n } = useCalendarContext();\n\n const handleMouseLeave = (event: SyntheticEvent) => {\n setHoveredDate(event, null);\n onMouseLeave?.(event as MouseEvent<HTMLDivElement>);\n };\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n ref={ref}\n onMouseLeave={handleMouseLeave}\n {...rest}\n >\n <div\n data-testid=\"CalendarDateGrid\"\n className={withBaseName(\"dateGrid\")}\n >\n {days.map((day) => {\n return (\n <CalendarDay\n key={formatDate(day.date)}\n day={day.date}\n renderDayContents={renderDayContents}\n month={date}\n TooltipProps={TooltipProps}\n />\n );\n })}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CalendarMonth","useWindow","useComponentCssInjection","calendarMonthCss","generateVisibleDays","useCalendarContext","jsx","clsx","CalendarDay","formatDate"],"mappings":";;;;;;;;;;;;;AAwBA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAE9C,MAAM,aAAgB,GAAAC,gBAAA;AAAA,EAC3B,SAASC,cAAc,CAAA,KAAA,EAAO,GAAK,EAAA;AACjC,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,IAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,qBAAA;AAAA,MACR,GAAK,EAAAC,eAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA,IAAA,GAAOC,0BAAoB,IAAI,CAAA;AACrC,IAAM,MAAA;AAAA,MACJ,OAAA,EAAS,EAAE,cAAe;AAAA,QACxBC,kCAAmB,EAAA;AAEvB,IAAM,MAAA,gBAAA,GAAmB,CAAC,KAA0B,KAAA;AAClD,MAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,MAAA,YAAA,GAAe,KAAmC,CAAA;AAAA,KACpD;AAEA,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,OAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,GAAA;AAAA,QACA,YAAc,EAAA,gBAAA;AAAA,QACb,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAY,EAAA,kBAAA;AAAA,YACZ,SAAA,EAAW,aAAa,UAAU,CAAA;AAAA,YAEjC,QAAA,EAAA,IAAA,CAAK,GAAI,CAAA,CAAC,GAAQ,KAAA;AACjB,cACE,uBAAAA,cAAA;AAAA,gBAACE,uBAAA;AAAA,gBAAA;AAAA,kBAEC,KAAK,GAAI,CAAA,IAAA;AAAA,kBACT,iBAAA;AAAA,kBACA,KAAO,EAAA,IAAA;AAAA,kBACP;AAAA,iBAAA;AAAA,gBAJKC,gBAAA,CAAW,IAAI,IAAI;AAAA,eAK1B;AAAA,aAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarNavigation.js","sources":["../../../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n makePrefixer,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n} from \"react\";\n\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport {\n type DateValue,\n isSameMonth,\n isSameYear,\n} from \"@internationalized/date\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\n\ntype dateDropdownProps = DropdownProps<DateValue>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n borderedDropdown?: dateDropdownProps[\"bordered\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\ninterface OptionWithTooltipProps extends OptionProps {\n value: DateValue;\n tooltipContent: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n),\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months: DateValue[] = monthsForLocale(visibleMonth);\n\n const years: DateValue[] = [-2, -1, 0, 1, 2]\n .map((delta) => visibleMonth.add({ years: delta }))\n .filter((year) => !isOutsideAllowedYears(year));\n\n const selectedMonth: DateValue | undefined = months.find((month: DateValue) =>\n isSameMonth(month, visibleMonth),\n );\n const selectedYear: DateValue | undefined = years.find((year: DateValue) =>\n isSameYear(year, visibleMonth),\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n };\n}\n\nconst OptionWithTooltip = ({\n value,\n children,\n disabled,\n tooltipContent,\n}: OptionWithTooltipProps) => {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n\n return (\n <Tooltip\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 </Tooltip>\n );\n};\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n borderedDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event,\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect = (event: SyntheticEvent, month: DateValue[]) => {\n moveToMonth(event, month[0]);\n };\n\n const handleYearSelect = (event: SyntheticEvent, year: DateValue[]) => {\n moveToMonth(event, year[0]);\n };\n\n const formatMonth = (date?: DateValue) => {\n return !date\n ? \"\"\n : formatDate(date, { month: hideYearDropdown ? \"long\" : \"short\" });\n };\n\n const formatYear = (date?: DateValue) => {\n return !date ? \"\" : formatDate(date, { year: \"numeric\" });\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 <Tooltip\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 variant=\"secondary\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <ChevronLeftIcon aria-label=\"Previous Month\" />\n </Button>\n </Tooltip>\n <div className={withBaseName(\"dropdowns\")}>\n <Dropdown\n bordered={borderedDropdown}\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 bordered={borderedDropdown}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip\n key={formatYear(year)}\n value={year}\n tooltipContent=\"This year is out of range\"\n >\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <Tooltip\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 variant=\"secondary\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <ChevronRightIcon aria-label=\"Next Month\" />\n </Button>\n </Tooltip>\n </div>\n );\n});\n"],"names":["makePrefixer","useCalendarContext","monthsForLocale","monthDiff","isSameMonth","isSameYear","useListControlContext","jsx","Tooltip","Option","forwardRef","CalendarNavigation","useWindow","useComponentCssInjection","calendarNavigationCss","formatDate","jsxs","clsx","Button","ChevronLeftIcon","Dropdown","ChevronRightIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CalendarNavigation.js","sources":["../../../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n makePrefixer,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n} from \"react\";\n\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport {\n type DateValue,\n isSameMonth,\n isSameYear,\n} from \"@internationalized/date\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\n\ntype dateDropdownProps = DropdownProps<DateValue>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n borderedDropdown?: dateDropdownProps[\"bordered\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\ninterface OptionWithTooltipProps extends OptionProps {\n value: DateValue;\n tooltipContent: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n),\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months: DateValue[] = monthsForLocale(visibleMonth);\n\n const years: DateValue[] = [-2, -1, 0, 1, 2]\n .map((delta) => visibleMonth.add({ years: delta }))\n .filter((year) => !isOutsideAllowedYears(year));\n\n const selectedMonth: DateValue | undefined = months.find((month: DateValue) =>\n isSameMonth(month, visibleMonth),\n );\n const selectedYear: DateValue | undefined = years.find((year: DateValue) =>\n isSameYear(year, visibleMonth),\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n };\n}\n\nconst OptionWithTooltip = ({\n value,\n children,\n disabled,\n tooltipContent,\n}: OptionWithTooltipProps) => {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n\n return (\n <Tooltip\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 </Tooltip>\n );\n};\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n borderedDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event,\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect = (event: SyntheticEvent, month: DateValue[]) => {\n moveToMonth(event, month[0]);\n };\n\n const handleYearSelect = (event: SyntheticEvent, year: DateValue[]) => {\n moveToMonth(event, year[0]);\n };\n\n const formatMonth = (date?: DateValue) => {\n return !date\n ? \"\"\n : formatDate(date, { month: hideYearDropdown ? \"long\" : \"short\" });\n };\n\n const formatYear = (date?: DateValue) => {\n return !date ? \"\" : formatDate(date, { year: \"numeric\" });\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 <Tooltip\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 variant=\"secondary\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <ChevronLeftIcon aria-label=\"Previous Month\" />\n </Button>\n </Tooltip>\n <div className={withBaseName(\"dropdowns\")}>\n <Dropdown\n bordered={borderedDropdown}\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 bordered={borderedDropdown}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip\n key={formatYear(year)}\n value={year}\n tooltipContent=\"This year is out of range\"\n >\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <Tooltip\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 variant=\"secondary\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <ChevronRightIcon aria-label=\"Next Month\" />\n </Button>\n </Tooltip>\n </div>\n );\n});\n"],"names":["makePrefixer","useCalendarContext","monthsForLocale","monthDiff","isSameMonth","isSameYear","useListControlContext","jsx","Tooltip","Option","forwardRef","CalendarNavigation","useWindow","useComponentCssInjection","calendarNavigationCss","formatDate","jsxs","clsx","Button","ChevronLeftIcon","Dropdown","ChevronRightIcon"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarWeekHeader.js","sources":["../../../src/calendar/internal/CalendarWeekHeader.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithRef, forwardRef } from \"react\";\nimport { daysForLocale } from \"./utils\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarWeekHeaderCss from \"./CalendarWeekHeader.css\";\n\nexport type CalendarWeekHeaderProps = ComponentPropsWithRef<\"div\">;\n\nconst withBaseName = makePrefixer(\"saltCalendarWeekHeader\");\n\nexport const CalendarWeekHeader = forwardRef<\n HTMLDivElement,\n CalendarWeekHeaderProps\n>(function CalendarWeekHeader({ className, ...rest }, ref) {\n const weekdaysShort = daysForLocale(\"narrow\");\n const weekdaysLong = daysForLocale(\"long\");\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarWeekHeaderCss,\n window: targetWindow,\n });\n\n return (\n <div\n data-testid=\"CalendarWeekHeader\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n >\n {weekdaysShort.map((day, index) => (\n <small\n aria-hidden\n key={weekdaysLong[index]}\n className={withBaseName(\"dayOfWeek\")}\n >\n {day}\n </small>\n ))}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","CalendarWeekHeader","daysForLocale","useWindow","useComponentCssInjection","calendarWeekHeaderCss","jsx","clsx"],"mappings":";;;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA
|
|
1
|
+
{"version":3,"file":"CalendarWeekHeader.js","sources":["../../../src/calendar/internal/CalendarWeekHeader.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithRef, forwardRef } from \"react\";\nimport { daysForLocale } from \"./utils\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarWeekHeaderCss from \"./CalendarWeekHeader.css\";\n\nexport type CalendarWeekHeaderProps = ComponentPropsWithRef<\"div\">;\n\nconst withBaseName = makePrefixer(\"saltCalendarWeekHeader\");\n\nexport const CalendarWeekHeader = forwardRef<\n HTMLDivElement,\n CalendarWeekHeaderProps\n>(function CalendarWeekHeader({ className, ...rest }, ref) {\n const weekdaysShort = daysForLocale(\"narrow\");\n const weekdaysLong = daysForLocale(\"long\");\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarWeekHeaderCss,\n window: targetWindow,\n });\n\n return (\n <div\n data-testid=\"CalendarWeekHeader\"\n className={clsx(withBaseName(), className)}\n ref={ref}\n {...rest}\n >\n {weekdaysShort.map((day, index) => (\n <small\n aria-hidden\n key={weekdaysLong[index]}\n className={withBaseName(\"dayOfWeek\")}\n >\n {day}\n </small>\n ))}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","CalendarWeekHeader","daysForLocale","useWindow","useComponentCssInjection","calendarWeekHeaderCss","jsx","clsx"],"mappings":";;;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA;AAE7C,MAAA,kBAAA,GAAqBC,iBAGhC,SAASC,mBAAAA,CAAmB,EAAE,SAAW,EAAA,GAAG,IAAK,EAAA,EAAG,GAAK,EAAA;AACzD,EAAM,MAAA,aAAA,GAAgBC,oBAAc,QAAQ,CAAA;AAC5C,EAAM,MAAA,YAAA,GAAeA,oBAAc,MAAM,CAAA;AAEzC,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,eAAA;AAAA,IACR,GAAK,EAAAC,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,oBAAA;AAAA,MACZ,SAAW,EAAAC,OAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAc,EAAA,aAAA,CAAA,GAAA,CAAI,CAAC,GAAA,EAAK,KACvB,qBAAAD,cAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,aAAW,EAAA,IAAA;AAAA,UAEX,SAAA,EAAW,aAAa,WAAW,CAAA;AAAA,UAElC,QAAA,EAAA;AAAA,SAAA;AAAA,QAHI,aAAa,KAAK;AAAA,OAK1B;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusManagement.js","sources":["../../../src/calendar/internal/useFocusManagement.ts"],"sourcesContent":["import {\n type DateValue,\n endOfWeek,\n startOfWeek,\n} from \"@internationalized/date\";\nimport type {\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport { getCurrentLocale } from \"./utils\";\n\nexport function useFocusManagement({ date }: { date: DateValue }) {\n const {\n helpers: { setFocusedDate },\n } = useCalendarContext();\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n let newDate = date;\n switch (event.key) {\n case \"ArrowUp\":\n newDate = date.subtract({ weeks: 1 });\n break;\n case \"ArrowDown\":\n newDate = date.add({ weeks: 1 });\n break;\n case \"ArrowLeft\":\n newDate = date.subtract({ days: 1 });\n break;\n case \"ArrowRight\":\n newDate = date.add({ days: 1 });\n break;\n case \"Home\":\n newDate = startOfWeek(date, getCurrentLocale());\n break;\n case \"End\":\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TODO bug in @internationalized/date\n newDate = endOfWeek(date, getCurrentLocale());\n break;\n case \"PageUp\":\n if (event.shiftKey) {\n newDate = date.subtract({ years: 1 });\n } else {\n newDate = date.subtract({ months: 1 });\n }\n break;\n case \"PageDown\":\n if (event.shiftKey) {\n newDate = date.add({ years: 1 });\n } else {\n newDate = date.add({ months: 1 });\n }\n break;\n default:\n }\n if (newDate.compare(date) !== 0) {\n event.preventDefault();\n }\n setFocusedDate(event, newDate);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n return {\n handleClick,\n handleKeyDown,\n handleFocus,\n };\n}\n"],"names":["date","useCalendarContext","startOfWeek","getCurrentLocale","endOfWeek"],"mappings":";;;;;;AAagB,SAAA,kBAAA,CAAmB,QAAEA,MAAA,EAA6B,EAAA;AAChE,EAAM,MAAA;AAAA,IACJ,OAAA,EAAS,EAAE,cAAe
|
|
1
|
+
{"version":3,"file":"useFocusManagement.js","sources":["../../../src/calendar/internal/useFocusManagement.ts"],"sourcesContent":["import {\n type DateValue,\n endOfWeek,\n startOfWeek,\n} from \"@internationalized/date\";\nimport type {\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useCalendarContext } from \"./CalendarContext\";\nimport { getCurrentLocale } from \"./utils\";\n\nexport function useFocusManagement({ date }: { date: DateValue }) {\n const {\n helpers: { setFocusedDate },\n } = useCalendarContext();\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n let newDate = date;\n switch (event.key) {\n case \"ArrowUp\":\n newDate = date.subtract({ weeks: 1 });\n break;\n case \"ArrowDown\":\n newDate = date.add({ weeks: 1 });\n break;\n case \"ArrowLeft\":\n newDate = date.subtract({ days: 1 });\n break;\n case \"ArrowRight\":\n newDate = date.add({ days: 1 });\n break;\n case \"Home\":\n newDate = startOfWeek(date, getCurrentLocale());\n break;\n case \"End\":\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore TODO bug in @internationalized/date\n newDate = endOfWeek(date, getCurrentLocale());\n break;\n case \"PageUp\":\n if (event.shiftKey) {\n newDate = date.subtract({ years: 1 });\n } else {\n newDate = date.subtract({ months: 1 });\n }\n break;\n case \"PageDown\":\n if (event.shiftKey) {\n newDate = date.add({ years: 1 });\n } else {\n newDate = date.add({ months: 1 });\n }\n break;\n default:\n }\n if (newDate.compare(date) !== 0) {\n event.preventDefault();\n }\n setFocusedDate(event, newDate);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n setFocusedDate(event, date);\n };\n\n return {\n handleClick,\n handleKeyDown,\n handleFocus,\n };\n}\n"],"names":["date","useCalendarContext","startOfWeek","getCurrentLocale","endOfWeek"],"mappings":";;;;;;AAagB,SAAA,kBAAA,CAAmB,QAAEA,MAAA,EAA6B,EAAA;AAChE,EAAM,MAAA;AAAA,IACJ,OAAA,EAAS,EAAE,cAAe;AAAA,MACxBC,kCAAmB,EAAA;AACvB,EAAM,MAAA,WAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAA,cAAA,CAAe,OAAOD,MAAI,CAAA;AAAA,GAC5B;AAEA,EAAM,MAAA,aAAA,GAAyD,CAAC,KAAU,KAAA;AACxE,IAAA,IAAI,OAAU,GAAAA,MAAA;AACd,IAAA,QAAQ,MAAM,GAAK;AAAA,MACjB,KAAK,SAAA;AACH,QAAA,OAAA,GAAUA,MAAK,CAAA,QAAA,CAAS,EAAE,KAAA,EAAO,GAAG,CAAA;AACpC,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,GAAUA,MAAK,CAAA,GAAA,CAAI,EAAE,KAAA,EAAO,GAAG,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,OAAA,GAAUA,MAAK,CAAA,QAAA,CAAS,EAAE,IAAA,EAAM,GAAG,CAAA;AACnC,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,OAAA,GAAUA,MAAK,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,GAAG,CAAA;AAC9B,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAU,OAAA,GAAAE,gBAAA,CAAYF,MAAM,EAAAG,sBAAA,EAAkB,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,KAAA;AAGH,QAAU,OAAA,GAAAC,cAAA,CAAUJ,MAAM,EAAAG,sBAAA,EAAkB,CAAA;AAC5C,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAI,MAAM,QAAU,EAAA;AAClB,UAAA,OAAA,GAAUH,MAAK,CAAA,QAAA,CAAS,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,SAC/B,MAAA;AACL,UAAA,OAAA,GAAUA,MAAK,CAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,GAAG,CAAA;AAAA;AAEvC,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,IAAI,MAAM,QAAU,EAAA;AAClB,UAAA,OAAA,GAAUA,MAAK,CAAA,GAAA,CAAI,EAAE,KAAA,EAAO,GAAG,CAAA;AAAA,SAC1B,MAAA;AACL,UAAA,OAAA,GAAUA,MAAK,CAAA,GAAA,CAAI,EAAE,MAAA,EAAQ,GAAG,CAAA;AAAA;AAElC,QAAA;AACF;AAEF,IAAA,IAAI,OAAQ,CAAA,OAAA,CAAQA,MAAI,CAAA,KAAM,CAAG,EAAA;AAC/B,MAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AAEvB,IAAA,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,GAC/B;AAEA,EAAM,MAAA,WAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAA,cAAA,CAAe,OAAOA,MAAI,CAAA;AAAA,GAC5B;AAEA,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/calendar/internal/utils.ts"],"sourcesContent":["import {\n DateFormatter,\n type DateValue,\n createCalendar,\n getLocalTimeZone,\n isSameMonth,\n startOfMonth,\n startOfWeek,\n startOfYear,\n today,\n} from \"@internationalized/date\";\n\nconst localTimezone = getLocalTimeZone();\n\nexport function getCurrentLocale() {\n return navigator.languages[0];\n}\n\nexport function getDateFormatter(options?: Intl.DateTimeFormatOptions) {\n return new DateFormatter(getCurrentLocale(), options);\n}\n\nexport function formatDate(\n date: DateValue,\n options?: Intl.DateTimeFormatOptions,\n) {\n const formatter = getDateFormatter(options);\n return formatter.format(date.toDate(localTimezone));\n}\n\nexport function getCalender() {\n const calendarIdentifier = getDateFormatter().resolvedOptions().calendar;\n return createCalendar(calendarIdentifier);\n}\n\ntype WeekdayFormat = Intl.DateTimeFormatOptions[\"weekday\"];\n\nexport function daysForLocale(weekday: WeekdayFormat = \"long\") {\n return [...Array(7).keys()].map((day) =>\n formatDate(\n startOfWeek(today(getLocalTimeZone()), getCurrentLocale()).add({\n days: day,\n }),\n { weekday },\n ),\n );\n}\n\nexport function monthsForLocale(currentYear: DateValue) {\n const calendar = getCalender();\n return [...Array(calendar.getMonthsInYear(currentYear)).keys()].map((month) =>\n startOfYear(currentYear).add({ months: month }),\n );\n}\n\nfunction mapDate(currentDate: DateValue, currentMonth: DateValue) {\n return {\n date: currentDate,\n dateOfMonth: currentDate.month,\n isCurrentMonth: isSameMonth(currentDate, currentMonth),\n };\n}\n\nexport function generateVisibleDays(currentMonth: DateValue) {\n const totalDays = 6 * 7;\n const currentLocale = getCurrentLocale();\n const startDate = startOfWeek(startOfMonth(currentMonth), currentLocale);\n\n return [...Array(totalDays).keys()].map((dayDelta) => {\n const day = startDate.add({ days: dayDelta });\n return mapDate(day, currentMonth);\n });\n}\n\nexport function monthDiff(a: DateValue, b: DateValue) {\n return b.month - a.month + 12 * (b.year - a.year);\n}\n"],"names":["getLocalTimeZone","DateFormatter","createCalendar","startOfWeek","today","startOfYear","isSameMonth","startOfMonth"],"mappings":";;;;AAYA,MAAM,gBAAgBA,qBAAiB,EAAA
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/calendar/internal/utils.ts"],"sourcesContent":["import {\n DateFormatter,\n type DateValue,\n createCalendar,\n getLocalTimeZone,\n isSameMonth,\n startOfMonth,\n startOfWeek,\n startOfYear,\n today,\n} from \"@internationalized/date\";\n\nconst localTimezone = getLocalTimeZone();\n\nexport function getCurrentLocale() {\n return navigator.languages[0];\n}\n\nexport function getDateFormatter(options?: Intl.DateTimeFormatOptions) {\n return new DateFormatter(getCurrentLocale(), options);\n}\n\nexport function formatDate(\n date: DateValue,\n options?: Intl.DateTimeFormatOptions,\n) {\n const formatter = getDateFormatter(options);\n return formatter.format(date.toDate(localTimezone));\n}\n\nexport function getCalender() {\n const calendarIdentifier = getDateFormatter().resolvedOptions().calendar;\n return createCalendar(calendarIdentifier);\n}\n\ntype WeekdayFormat = Intl.DateTimeFormatOptions[\"weekday\"];\n\nexport function daysForLocale(weekday: WeekdayFormat = \"long\") {\n return [...Array(7).keys()].map((day) =>\n formatDate(\n startOfWeek(today(getLocalTimeZone()), getCurrentLocale()).add({\n days: day,\n }),\n { weekday },\n ),\n );\n}\n\nexport function monthsForLocale(currentYear: DateValue) {\n const calendar = getCalender();\n return [...Array(calendar.getMonthsInYear(currentYear)).keys()].map((month) =>\n startOfYear(currentYear).add({ months: month }),\n );\n}\n\nfunction mapDate(currentDate: DateValue, currentMonth: DateValue) {\n return {\n date: currentDate,\n dateOfMonth: currentDate.month,\n isCurrentMonth: isSameMonth(currentDate, currentMonth),\n };\n}\n\nexport function generateVisibleDays(currentMonth: DateValue) {\n const totalDays = 6 * 7;\n const currentLocale = getCurrentLocale();\n const startDate = startOfWeek(startOfMonth(currentMonth), currentLocale);\n\n return [...Array(totalDays).keys()].map((dayDelta) => {\n const day = startDate.add({ days: dayDelta });\n return mapDate(day, currentMonth);\n });\n}\n\nexport function monthDiff(a: DateValue, b: DateValue) {\n return b.month - a.month + 12 * (b.year - a.year);\n}\n"],"names":["getLocalTimeZone","DateFormatter","createCalendar","startOfWeek","today","startOfYear","isSameMonth","startOfMonth"],"mappings":";;;;AAYA,MAAM,gBAAgBA,qBAAiB,EAAA;AAEhC,SAAS,gBAAmB,GAAA;AACjC,EAAO,OAAA,SAAA,CAAU,UAAU,CAAC,CAAA;AAC9B;AAEO,SAAS,iBAAiB,OAAsC,EAAA;AACrE,EAAA,OAAO,IAAIC,kBAAA,CAAc,gBAAiB,EAAA,EAAG,OAAO,CAAA;AACtD;AAEgB,SAAA,UAAA,CACd,MACA,OACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,iBAAiB,OAAO,CAAA;AAC1C,EAAA,OAAO,SAAU,CAAA,MAAA,CAAO,IAAK,CAAA,MAAA,CAAO,aAAa,CAAC,CAAA;AACpD;AAEO,SAAS,WAAc,GAAA;AAC5B,EAAA,MAAM,kBAAqB,GAAA,gBAAA,EAAmB,CAAA,eAAA,EAAkB,CAAA,QAAA;AAChE,EAAA,OAAOC,oBAAe,kBAAkB,CAAA;AAC1C;AAIgB,SAAA,aAAA,CAAc,UAAyB,MAAQ,EAAA;AAC7D,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,CAAC,CAAE,CAAA,IAAA,EAAM,CAAE,CAAA,GAAA;AAAA,IAAI,CAAC,GAC/B,KAAA,UAAA;AAAA,MACEC,gBAAA,CAAYC,WAAMJ,qBAAiB,EAAC,GAAG,gBAAiB,EAAC,EAAE,GAAI,CAAA;AAAA,QAC7D,IAAM,EAAA;AAAA,OACP,CAAA;AAAA,MACD,EAAE,OAAQ;AAAA;AACZ,GACF;AACF;AAEO,SAAS,gBAAgB,WAAwB,EAAA;AACtD,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAO,OAAA,CAAC,GAAG,KAAA,CAAM,QAAS,CAAA,eAAA,CAAgB,WAAW,CAAC,CAAA,CAAE,IAAK,EAAC,CAAE,CAAA,GAAA;AAAA,IAAI,CAAC,UACnEK,gBAAY,CAAA,WAAW,EAAE,GAAI,CAAA,EAAE,MAAQ,EAAA,KAAA,EAAO;AAAA,GAChD;AACF;AAEA,SAAS,OAAA,CAAQ,aAAwB,YAAyB,EAAA;AAChE,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,WAAA;AAAA,IACN,aAAa,WAAY,CAAA,KAAA;AAAA,IACzB,cAAA,EAAgBC,gBAAY,CAAA,WAAA,EAAa,YAAY;AAAA,GACvD;AACF;AAEO,SAAS,oBAAoB,YAAyB,EAAA;AAC3D,EAAA,MAAM,YAAY,CAAI,GAAA,CAAA;AACtB,EAAA,MAAM,gBAAgB,gBAAiB,EAAA;AACvC,EAAA,MAAM,SAAY,GAAAH,gBAAA,CAAYI,iBAAa,CAAA,YAAY,GAAG,aAAa,CAAA;AAEvE,EAAO,OAAA,CAAC,GAAG,KAAA,CAAM,SAAS,CAAA,CAAE,MAAM,CAAA,CAAE,GAAI,CAAA,CAAC,QAAa,KAAA;AACpD,IAAA,MAAM,MAAM,SAAU,CAAA,GAAA,CAAI,EAAE,IAAA,EAAM,UAAU,CAAA;AAC5C,IAAO,OAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,GACjC,CAAA;AACH;AAEgB,SAAA,SAAA,CAAU,GAAc,CAAc,EAAA;AACpD,EAAA,OAAO,EAAE,KAAQ,GAAA,CAAA,CAAE,QAAQ,EAAM,IAAA,CAAA,CAAE,OAAO,CAAE,CAAA,IAAA,CAAA;AAC9C;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendar.js","sources":["../../src/calendar/useCalendar.ts"],"sourcesContent":["import {\n type DateValue,\n endOfMonth,\n endOfYear,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n startOfMonth,\n startOfYear,\n today,\n} from \"@internationalized/date\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { type SyntheticEvent, useCallback, useEffect, useState } from \"react\";\nimport {\n type UseMultiSelectionCalendarProps,\n type UseOffsetSelectionCalendarProps,\n type UseRangeSelectionCalendarProps,\n type UseSingleSelectionCalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n useSelectionCalendar,\n type useSelectionCalendarProps,\n} from \"./useSelection\";\n\ninterface BaseUseCalendarProps {\n defaultVisibleMonth?: DateValue;\n onVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n isDayUnselectable?: (date: DateValue) => string | false | undefined;\n isDayHighlighted?: (date: DateValue) => string | false | undefined;\n isDayDisabled?: (date: DateValue) => boolean;\n visibleMonth?: DateValue;\n hideOutOfRangeDates?: boolean;\n hideYearDropdown?: boolean;\n minDate?: DateValue;\n maxDate?: DateValue;\n}\n\nexport type useCalendarProps = (\n | Omit<UseSingleSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseMultiSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseRangeSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseOffsetSelectionCalendarProps, \"isDaySelectable\">\n) &\n BaseUseCalendarProps;\n\nconst defaultIsDayUnselectable = (): string | false => false;\nconst defaultIsDayHighlighted = (): string | false => false;\nconst defaultIsDayDisabled = (): false => false;\n\nexport function useCalendar(props: useCalendarProps) {\n const {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n hideYearDropdown,\n hideOutOfRangeDates,\n defaultVisibleMonth = today(getLocalTimeZone()),\n onSelectedDateChange,\n onVisibleMonthChange,\n isDayUnselectable = defaultIsDayUnselectable,\n isDayHighlighted = defaultIsDayHighlighted,\n isDayDisabled = defaultIsDayDisabled,\n minDate = hideYearDropdown\n ? startOfYear(today(getLocalTimeZone()))\n : undefined,\n maxDate = hideYearDropdown\n ? endOfYear(today(getLocalTimeZone()))\n : undefined,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [visibleMonth, setVisibleMonthState] = useControlled({\n controlled: visibleMonthProp ? startOfMonth(visibleMonthProp) : undefined,\n default: startOfMonth(defaultVisibleMonth),\n name: \"Calendar\",\n state: \"visibleMonth\",\n });\n\n const isOutsideAllowedDates = useCallback(\n (date: DateValue) => {\n return (\n (minDate != null && date.compare(minDate) < 0) ||\n (maxDate != null && date.compare(maxDate) > 0)\n );\n },\n [maxDate, minDate],\n );\n\n const isOutsideAllowedMonths = (date: DateValue) => {\n return (\n (minDate != null && endOfMonth(date).compare(minDate) < 0) ||\n (maxDate != null && startOfMonth(date).compare(maxDate) > 0)\n );\n };\n\n const isOutsideAllowedYears = (date: DateValue) => {\n return (\n (minDate != null && endOfYear(date).compare(minDate) < 0) ||\n (maxDate != null && startOfYear(date).compare(maxDate) > 0)\n );\n };\n\n const isDaySelectable = useCallback(\n (date?: DateValue) =>\n !(\n date &&\n (isDayUnselectable(date) ||\n isDayDisabled(date) ||\n isOutsideAllowedDates(date))\n ),\n [isDayUnselectable, isDayDisabled, isOutsideAllowedDates],\n );\n\n const selectionManager = useSelectionCalendar({\n defaultSelectedDate: defaultSelectedDate,\n selectedDate,\n onSelectedDateChange,\n startDateOffset:\n props.selectionVariant === \"offset\"\n ? props.startDateOffset\n : (date) => date,\n endDateOffset:\n props.selectionVariant === \"offset\"\n ? props.endDateOffset\n : (date) => date,\n isDaySelectable,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n } as useSelectionCalendarProps);\n\n const [calendarFocused, setCalendarFocused] = useState(false);\n\n const isInVisibleMonth = (\n date: DateValue | undefined | null,\n ): date is DateValue => date != null && isSameMonth(date, visibleMonth);\n\n const getInitialFocusedDate = (): DateValue => {\n const selectedDate = selectionManager.state.selectedDate;\n // Case range or offset\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ) {\n if (isInVisibleMonth(selectedDate?.startDate)) {\n return selectedDate.startDate;\n }\n if (isInVisibleMonth(selectedDate?.endDate)) {\n return selectedDate.endDate;\n }\n if (\n selectedDate?.startDate &&\n selectedDate?.endDate &&\n visibleMonth.compare(selectedDate.startDate) < 0 &&\n visibleMonth.compare(selectedDate.endDate) > 0\n ) {\n return startOfMonth(visibleMonth);\n }\n }\n // Case multiselect\n if (selectionVariant === \"multiselect\" && Array.isArray(selectedDate)) {\n // return first selected day in visible month\n const selectionInMonth = selectedDate\n .filter((day) => isInVisibleMonth(day))\n .sort((a, b) => a.compare(b));\n if (selectionInMonth.length > 0) {\n return selectionInMonth[0];\n }\n }\n // Case single select\n if (\n selectionVariant === \"default\" &&\n !isRangeOrOffsetSelectionWithStartDate(selectedDate) &&\n !Array.isArray(selectedDate) &&\n isInVisibleMonth(selectedDate)\n ) {\n return selectedDate;\n }\n // default\n if (isInVisibleMonth(today(getLocalTimeZone()))) {\n return today(getLocalTimeZone());\n }\n return startOfMonth(visibleMonth);\n };\n\n const [focusedDate, setFocusedDateState] = useState<DateValue>(\n getInitialFocusedDate,\n );\n\n const isDayVisible = useCallback(\n (date: DateValue) => {\n const startInsideDays = startOfMonth(visibleMonth);\n\n if (date.compare(startInsideDays) < 0) return false;\n\n const endInsideDays = endOfMonth(visibleMonth);\n\n return !(date.compare(endInsideDays) > 0);\n },\n [visibleMonth],\n );\n\n const setVisibleMonth = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setVisibleMonthState(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange, setVisibleMonthState],\n );\n\n const setFocusedDate = useCallback(\n (event: SyntheticEvent, date: DateValue) => {\n if (isSameDay(date, focusedDate) || isOutsideAllowedDates(date)) return;\n\n setFocusedDateState(date);\n\n const shouldTransition =\n !isDayVisible(date) &&\n isDaySelectable(date) &&\n !isOutsideAllowedDates(date);\n if (shouldTransition) {\n setVisibleMonth(event, startOfMonth(date));\n }\n },\n [\n focusedDate,\n isDaySelectable,\n isDayVisible,\n isOutsideAllowedDates,\n setVisibleMonth,\n ],\n );\n\n useEffect(() => {\n if (!isDayVisible(focusedDate)) {\n setFocusedDateState(getInitialFocusedDate());\n }\n }, [isDayVisible, focusedDate, visibleMonth]);\n\n return {\n state: {\n visibleMonth,\n focusedDate,\n minDate,\n maxDate,\n selectionVariant,\n hideOutOfRangeDates,\n calendarFocused,\n ...selectionManager.state,\n },\n helpers: {\n setVisibleMonth,\n setFocusedDate,\n setCalendarFocused,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n ...selectionManager.helpers,\n },\n };\n}\n"],"names":["today","getLocalTimeZone","startOfYear","endOfYear","useControlled","startOfMonth","useCallback","date","endOfMonth","useSelectionCalendar","useState","isSameMonth","selectedDate","isRangeOrOffsetSelectionWithStartDate","isSameDay","useEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCalendar.js","sources":["../../src/calendar/useCalendar.ts"],"sourcesContent":["import {\n type DateValue,\n endOfMonth,\n endOfYear,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n startOfMonth,\n startOfYear,\n today,\n} from \"@internationalized/date\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { type SyntheticEvent, useCallback, useEffect, useState } from \"react\";\nimport {\n type UseMultiSelectionCalendarProps,\n type UseOffsetSelectionCalendarProps,\n type UseRangeSelectionCalendarProps,\n type UseSingleSelectionCalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n useSelectionCalendar,\n type useSelectionCalendarProps,\n} from \"./useSelection\";\n\ninterface BaseUseCalendarProps {\n defaultVisibleMonth?: DateValue;\n onVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n isDayUnselectable?: (date: DateValue) => string | false | undefined;\n isDayHighlighted?: (date: DateValue) => string | false | undefined;\n isDayDisabled?: (date: DateValue) => boolean;\n visibleMonth?: DateValue;\n hideOutOfRangeDates?: boolean;\n hideYearDropdown?: boolean;\n minDate?: DateValue;\n maxDate?: DateValue;\n}\n\nexport type useCalendarProps = (\n | Omit<UseSingleSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseMultiSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseRangeSelectionCalendarProps, \"isDaySelectable\">\n | Omit<UseOffsetSelectionCalendarProps, \"isDaySelectable\">\n) &\n BaseUseCalendarProps;\n\nconst defaultIsDayUnselectable = (): string | false => false;\nconst defaultIsDayHighlighted = (): string | false => false;\nconst defaultIsDayDisabled = (): false => false;\n\nexport function useCalendar(props: useCalendarProps) {\n const {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n hideYearDropdown,\n hideOutOfRangeDates,\n defaultVisibleMonth = today(getLocalTimeZone()),\n onSelectedDateChange,\n onVisibleMonthChange,\n isDayUnselectable = defaultIsDayUnselectable,\n isDayHighlighted = defaultIsDayHighlighted,\n isDayDisabled = defaultIsDayDisabled,\n minDate = hideYearDropdown\n ? startOfYear(today(getLocalTimeZone()))\n : undefined,\n maxDate = hideYearDropdown\n ? endOfYear(today(getLocalTimeZone()))\n : undefined,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [visibleMonth, setVisibleMonthState] = useControlled({\n controlled: visibleMonthProp ? startOfMonth(visibleMonthProp) : undefined,\n default: startOfMonth(defaultVisibleMonth),\n name: \"Calendar\",\n state: \"visibleMonth\",\n });\n\n const isOutsideAllowedDates = useCallback(\n (date: DateValue) => {\n return (\n (minDate != null && date.compare(minDate) < 0) ||\n (maxDate != null && date.compare(maxDate) > 0)\n );\n },\n [maxDate, minDate],\n );\n\n const isOutsideAllowedMonths = (date: DateValue) => {\n return (\n (minDate != null && endOfMonth(date).compare(minDate) < 0) ||\n (maxDate != null && startOfMonth(date).compare(maxDate) > 0)\n );\n };\n\n const isOutsideAllowedYears = (date: DateValue) => {\n return (\n (minDate != null && endOfYear(date).compare(minDate) < 0) ||\n (maxDate != null && startOfYear(date).compare(maxDate) > 0)\n );\n };\n\n const isDaySelectable = useCallback(\n (date?: DateValue) =>\n !(\n date &&\n (isDayUnselectable(date) ||\n isDayDisabled(date) ||\n isOutsideAllowedDates(date))\n ),\n [isDayUnselectable, isDayDisabled, isOutsideAllowedDates],\n );\n\n const selectionManager = useSelectionCalendar({\n defaultSelectedDate: defaultSelectedDate,\n selectedDate,\n onSelectedDateChange,\n startDateOffset:\n props.selectionVariant === \"offset\"\n ? props.startDateOffset\n : (date) => date,\n endDateOffset:\n props.selectionVariant === \"offset\"\n ? props.endDateOffset\n : (date) => date,\n isDaySelectable,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n } as useSelectionCalendarProps);\n\n const [calendarFocused, setCalendarFocused] = useState(false);\n\n const isInVisibleMonth = (\n date: DateValue | undefined | null,\n ): date is DateValue => date != null && isSameMonth(date, visibleMonth);\n\n const getInitialFocusedDate = (): DateValue => {\n const selectedDate = selectionManager.state.selectedDate;\n // Case range or offset\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ) {\n if (isInVisibleMonth(selectedDate?.startDate)) {\n return selectedDate.startDate;\n }\n if (isInVisibleMonth(selectedDate?.endDate)) {\n return selectedDate.endDate;\n }\n if (\n selectedDate?.startDate &&\n selectedDate?.endDate &&\n visibleMonth.compare(selectedDate.startDate) < 0 &&\n visibleMonth.compare(selectedDate.endDate) > 0\n ) {\n return startOfMonth(visibleMonth);\n }\n }\n // Case multiselect\n if (selectionVariant === \"multiselect\" && Array.isArray(selectedDate)) {\n // return first selected day in visible month\n const selectionInMonth = selectedDate\n .filter((day) => isInVisibleMonth(day))\n .sort((a, b) => a.compare(b));\n if (selectionInMonth.length > 0) {\n return selectionInMonth[0];\n }\n }\n // Case single select\n if (\n selectionVariant === \"default\" &&\n !isRangeOrOffsetSelectionWithStartDate(selectedDate) &&\n !Array.isArray(selectedDate) &&\n isInVisibleMonth(selectedDate)\n ) {\n return selectedDate;\n }\n // default\n if (isInVisibleMonth(today(getLocalTimeZone()))) {\n return today(getLocalTimeZone());\n }\n return startOfMonth(visibleMonth);\n };\n\n const [focusedDate, setFocusedDateState] = useState<DateValue>(\n getInitialFocusedDate,\n );\n\n const isDayVisible = useCallback(\n (date: DateValue) => {\n const startInsideDays = startOfMonth(visibleMonth);\n\n if (date.compare(startInsideDays) < 0) return false;\n\n const endInsideDays = endOfMonth(visibleMonth);\n\n return !(date.compare(endInsideDays) > 0);\n },\n [visibleMonth],\n );\n\n const setVisibleMonth = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setVisibleMonthState(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange, setVisibleMonthState],\n );\n\n const setFocusedDate = useCallback(\n (event: SyntheticEvent, date: DateValue) => {\n if (isSameDay(date, focusedDate) || isOutsideAllowedDates(date)) return;\n\n setFocusedDateState(date);\n\n const shouldTransition =\n !isDayVisible(date) &&\n isDaySelectable(date) &&\n !isOutsideAllowedDates(date);\n if (shouldTransition) {\n setVisibleMonth(event, startOfMonth(date));\n }\n },\n [\n focusedDate,\n isDaySelectable,\n isDayVisible,\n isOutsideAllowedDates,\n setVisibleMonth,\n ],\n );\n\n useEffect(() => {\n if (!isDayVisible(focusedDate)) {\n setFocusedDateState(getInitialFocusedDate());\n }\n }, [isDayVisible, focusedDate, visibleMonth]);\n\n return {\n state: {\n visibleMonth,\n focusedDate,\n minDate,\n maxDate,\n selectionVariant,\n hideOutOfRangeDates,\n calendarFocused,\n ...selectionManager.state,\n },\n helpers: {\n setVisibleMonth,\n setFocusedDate,\n setCalendarFocused,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n ...selectionManager.helpers,\n },\n };\n}\n"],"names":["today","getLocalTimeZone","startOfYear","endOfYear","useControlled","startOfMonth","useCallback","date","endOfMonth","useSelectionCalendar","useState","isSameMonth","selectedDate","isRangeOrOffsetSelectionWithStartDate","isSameDay","useEffect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendarDay.js","sources":["../../src/calendar/useCalendarDay.ts"],"sourcesContent":["import {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from \"@internationalized/date\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type RefObject,\n useEffect,\n} from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { useFocusManagement } from \"./internal/useFocusManagement\";\nimport { useSelectionDay } from \"./useSelection\";\n\nexport interface DayStatus {\n outOfRange?: boolean;\n selected?: boolean;\n today?: boolean;\n unselectable?: string | false;\n highlighted?: string | false;\n focused?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n}\n\nexport interface useCalendarDayProps {\n date: DateValue;\n month: DateValue;\n}\n\nexport function useCalendarDay(\n { date, month }: useCalendarDayProps,\n ref: RefObject<HTMLElement>,\n) {\n const {\n state: { focusedDate, hideOutOfRangeDates, calendarFocused },\n helpers: {\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n const selectionManager = useSelectionDay({ date });\n const focusManager = useFocusManagement({ date });\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager?.handleClick(event);\n focusManager.handleClick(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleKeyDown(event);\n selectionManager?.handleKeyDown(event);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleFocus(event);\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager.handleMouseOver?.(event);\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onFocus: handleFocus,\n onMouseOver: handleMouseOver,\n };\n\n const outOfRange = !isSameMonth(date, month);\n const focused =\n isSameDay(date, focusedDate) && calendarFocused && !outOfRange;\n const tabIndex = isSameDay(date, focusedDate) && !outOfRange ? 0 : -1;\n const today = isToday(date, getLocalTimeZone());\n\n const unselectableReason = isDayUnselectable(date);\n const highlightedReason = isDayHighlighted(date);\n\n const disabled =\n isDayDisabled(date) || (outOfRange && isOutsideAllowedMonths(date));\n const unselectable = Boolean(unselectableReason);\n const highlighted = Boolean(highlightedReason);\n const hidden = hideOutOfRangeDates && outOfRange;\n\n useEffect(() => {\n if (focused) {\n ref.current?.focus({ preventScroll: true });\n }\n }, [ref, focused]);\n\n return {\n status: {\n outOfRange,\n today,\n unselectable,\n focused,\n hidden,\n disabled,\n highlighted,\n ...selectionManager.status,\n } as DayStatus,\n dayProps: {\n tabIndex,\n \"aria-current\": today ? \"date\" : undefined,\n \"aria-hidden\": hidden ? \"true\" : undefined,\n ...eventHandlers,\n ...selectionManager.dayProps,\n } as ComponentPropsWithoutRef<\"button\">,\n unselectableReason,\n highlightedReason,\n };\n}\n"],"names":["date","useCalendarContext","useSelectionDay","useFocusManagement","isSameMonth","isSameDay","isToday","getLocalTimeZone","useEffect"],"mappings":";;;;;;;;AAmCO,SAAS,cACd,CAAA,QAAEA,MAAM,EAAA,KAAA,IACR,GACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,EAAE,WAAa,EAAA,mBAAA,EAAqB,eAAgB,EAAA;AAAA,IAC3D,OAAS,EAAA;AAAA,MACP,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA
|
|
1
|
+
{"version":3,"file":"useCalendarDay.js","sources":["../../src/calendar/useCalendarDay.ts"],"sourcesContent":["import {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from \"@internationalized/date\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type RefObject,\n useEffect,\n} from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { useFocusManagement } from \"./internal/useFocusManagement\";\nimport { useSelectionDay } from \"./useSelection\";\n\nexport interface DayStatus {\n outOfRange?: boolean;\n selected?: boolean;\n today?: boolean;\n unselectable?: string | false;\n highlighted?: string | false;\n focused?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n}\n\nexport interface useCalendarDayProps {\n date: DateValue;\n month: DateValue;\n}\n\nexport function useCalendarDay(\n { date, month }: useCalendarDayProps,\n ref: RefObject<HTMLElement>,\n) {\n const {\n state: { focusedDate, hideOutOfRangeDates, calendarFocused },\n helpers: {\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n const selectionManager = useSelectionDay({ date });\n const focusManager = useFocusManagement({ date });\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager?.handleClick(event);\n focusManager.handleClick(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleKeyDown(event);\n selectionManager?.handleKeyDown(event);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleFocus(event);\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager.handleMouseOver?.(event);\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onFocus: handleFocus,\n onMouseOver: handleMouseOver,\n };\n\n const outOfRange = !isSameMonth(date, month);\n const focused =\n isSameDay(date, focusedDate) && calendarFocused && !outOfRange;\n const tabIndex = isSameDay(date, focusedDate) && !outOfRange ? 0 : -1;\n const today = isToday(date, getLocalTimeZone());\n\n const unselectableReason = isDayUnselectable(date);\n const highlightedReason = isDayHighlighted(date);\n\n const disabled =\n isDayDisabled(date) || (outOfRange && isOutsideAllowedMonths(date));\n const unselectable = Boolean(unselectableReason);\n const highlighted = Boolean(highlightedReason);\n const hidden = hideOutOfRangeDates && outOfRange;\n\n useEffect(() => {\n if (focused) {\n ref.current?.focus({ preventScroll: true });\n }\n }, [ref, focused]);\n\n return {\n status: {\n outOfRange,\n today,\n unselectable,\n focused,\n hidden,\n disabled,\n highlighted,\n ...selectionManager.status,\n } as DayStatus,\n dayProps: {\n tabIndex,\n \"aria-current\": today ? \"date\" : undefined,\n \"aria-hidden\": hidden ? \"true\" : undefined,\n ...eventHandlers,\n ...selectionManager.dayProps,\n } as ComponentPropsWithoutRef<\"button\">,\n unselectableReason,\n highlightedReason,\n };\n}\n"],"names":["date","useCalendarContext","useSelectionDay","useFocusManagement","isSameMonth","isSameDay","isToday","getLocalTimeZone","useEffect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelection.js","sources":["../../src/calendar/useSelection.ts"],"sourcesContent":["import {\n CalendarDate,\n type DateValue,\n isSameDay,\n} from \"@internationalized/date\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { isPlainObject } from \"../utils\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\ninterface BaseUseSelectionCalendarProps<SelectionVariantType> {\n hoveredDate?: DateValue | null;\n selectedDate?: SelectionVariantType | null;\n defaultSelectedDate?: SelectionVariantType;\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType,\n ) => void;\n isDaySelectable: (date?: DateValue) => boolean;\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null,\n ) => void;\n}\n\nexport type SingleSelectionValueType = DateValue;\ntype MultiSelectionValueType = DateValue[];\nexport type RangeSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\ntype OffsetSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\n\ntype AllSelectionValueType =\n | SingleSelectionValueType\n | MultiSelectionValueType\n | RangeSelectionValueType\n | OffsetSelectionValueType\n | null;\n\nexport interface UseOffsetSelectionCalendarProps\n extends Omit<\n BaseUseSelectionCalendarProps<OffsetSelectionValueType>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n selectionVariant: \"offset\";\n startDateOffset?: (date: DateValue) => DateValue;\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\nexport interface UseRangeSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<RangeSelectionValueType> {\n selectionVariant: \"range\";\n}\n\nexport interface UseMultiSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<MultiSelectionValueType> {\n selectionVariant: \"multiselect\";\n}\n\nexport interface UseSingleSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<SingleSelectionValueType> {\n selectionVariant: \"default\";\n}\n\nexport type useSelectionCalendarProps =\n | UseSingleSelectionCalendarProps\n | UseMultiSelectionCalendarProps\n | UseRangeSelectionCalendarProps\n | UseOffsetSelectionCalendarProps;\n\nfunction addOrRemoveFromArray(\n array: AllSelectionValueType | null,\n item: DateValue,\n) {\n if (Array.isArray(array)) {\n if (array.find((element) => isSameDay(element, item))) {\n return array.filter((element) => !isSameDay(element, item));\n }\n return array.concat(item);\n }\n return [item];\n}\n\nconst defaultOffset = (date: DateValue) => date;\n\nexport function isRangeOrOffsetSelectionValue(\n selectionValue?: AllSelectionValueType,\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return selectionValue != null && isPlainObject(selectionValue);\n}\n\nexport function isRangeOrOffsetSelectionWithStartDate(\n selectionValue?: AllSelectionValueType,\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return (\n isRangeOrOffsetSelectionValue(selectionValue) &&\n Object.prototype.hasOwnProperty.call(selectionValue, \"startDate\")\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useSelectionCalendar(props: useSelectionCalendarProps) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n // onSelectedDateChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const getStartDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.startDateOffset) {\n return props.startDateOffset(date);\n }\n return defaultOffset(date);\n };\n\n const getEndDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.endDateOffset) {\n return props.endDateOffset(date);\n }\n return defaultOffset(date);\n };\n\n const setSelectedDate = (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateValue,\n ) => {\n if (isDaySelectable(newSelectedDate)) {\n switch (props.selectionVariant) {\n case \"default\":\n setSelectedDateState(newSelectedDate);\n props.onSelectedDateChange?.(event, newSelectedDate);\n break;\n case \"multiselect\": {\n const newDates = addOrRemoveFromArray(\n selectedDate ?? [],\n newSelectedDate,\n );\n setSelectedDateState(newDates);\n props.onSelectedDateChange?.(event, newDates);\n break;\n }\n case \"range\": {\n let base = selectedDate;\n if (isRangeOrOffsetSelectionValue(base)) {\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n newSelectedDate.compare(base.startDate) > 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n } else {\n base = { startDate: newSelectedDate };\n }\n setSelectedDateState(base);\n props.onSelectedDateChange?.(event, base);\n break;\n }\n case \"offset\": {\n const newRange = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newRange);\n props.onSelectedDateChange?.(event, newRange);\n }\n }\n }\n };\n\n const isSelected = (date: DateValue) => {\n switch (selectionVariant) {\n case \"default\":\n return (\n selectedDate instanceof CalendarDate && isSameDay(selectedDate, date)\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) => isSameDay(element, date))\n );\n default:\n return false;\n }\n };\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n };\n\n const isHovered = (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n };\n\n const isSelectedSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n date.compare(selectedDate.startDate) > 0 &&\n date.compare(selectedDate.endDate) < 0\n );\n }\n return false;\n };\n const isHoveredSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n hoveredDate.compare(selectedDate.startDate) > 0 &&\n ((date.compare(selectedDate.startDate) > 0 &&\n date.compare(hoveredDate) < 0) ||\n isSameDay(date, hoveredDate));\n\n const isValidDayHovered = isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n };\n\n const isSelectedStart = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n };\n\n const isSelectedEnd = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n };\n\n const isHoveredOffset = (date: DateValue) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n date.compare(startDate) >= 0 &&\n date.compare(endDate) <= 0 &&\n isDaySelectable(date)\n );\n }\n\n return false;\n };\n\n return {\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n },\n };\n}\n\nexport function useSelectionDay({ date }: { date: DateValue }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDayUnselectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setSelectedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, null);\n };\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\": isDayUnselectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["isSameDay","isPlainObject","makePrefixer","useControlled","date","CalendarDate","useCalendarContext","clsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSelection.js","sources":["../../src/calendar/useSelection.ts"],"sourcesContent":["import {\n CalendarDate,\n type DateValue,\n isSameDay,\n} from \"@internationalized/date\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { isPlainObject } from \"../utils\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\ninterface BaseUseSelectionCalendarProps<SelectionVariantType> {\n hoveredDate?: DateValue | null;\n selectedDate?: SelectionVariantType | null;\n defaultSelectedDate?: SelectionVariantType;\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType,\n ) => void;\n isDaySelectable: (date?: DateValue) => boolean;\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null,\n ) => void;\n}\n\nexport type SingleSelectionValueType = DateValue;\ntype MultiSelectionValueType = DateValue[];\nexport type RangeSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\ntype OffsetSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\n\ntype AllSelectionValueType =\n | SingleSelectionValueType\n | MultiSelectionValueType\n | RangeSelectionValueType\n | OffsetSelectionValueType\n | null;\n\nexport interface UseOffsetSelectionCalendarProps\n extends Omit<\n BaseUseSelectionCalendarProps<OffsetSelectionValueType>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n selectionVariant: \"offset\";\n startDateOffset?: (date: DateValue) => DateValue;\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\nexport interface UseRangeSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<RangeSelectionValueType> {\n selectionVariant: \"range\";\n}\n\nexport interface UseMultiSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<MultiSelectionValueType> {\n selectionVariant: \"multiselect\";\n}\n\nexport interface UseSingleSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<SingleSelectionValueType> {\n selectionVariant: \"default\";\n}\n\nexport type useSelectionCalendarProps =\n | UseSingleSelectionCalendarProps\n | UseMultiSelectionCalendarProps\n | UseRangeSelectionCalendarProps\n | UseOffsetSelectionCalendarProps;\n\nfunction addOrRemoveFromArray(\n array: AllSelectionValueType | null,\n item: DateValue,\n) {\n if (Array.isArray(array)) {\n if (array.find((element) => isSameDay(element, item))) {\n return array.filter((element) => !isSameDay(element, item));\n }\n return array.concat(item);\n }\n return [item];\n}\n\nconst defaultOffset = (date: DateValue) => date;\n\nexport function isRangeOrOffsetSelectionValue(\n selectionValue?: AllSelectionValueType,\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return selectionValue != null && isPlainObject(selectionValue);\n}\n\nexport function isRangeOrOffsetSelectionWithStartDate(\n selectionValue?: AllSelectionValueType,\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return (\n isRangeOrOffsetSelectionValue(selectionValue) &&\n Object.prototype.hasOwnProperty.call(selectionValue, \"startDate\")\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useSelectionCalendar(props: useSelectionCalendarProps) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n // onSelectedDateChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const getStartDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.startDateOffset) {\n return props.startDateOffset(date);\n }\n return defaultOffset(date);\n };\n\n const getEndDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.endDateOffset) {\n return props.endDateOffset(date);\n }\n return defaultOffset(date);\n };\n\n const setSelectedDate = (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateValue,\n ) => {\n if (isDaySelectable(newSelectedDate)) {\n switch (props.selectionVariant) {\n case \"default\":\n setSelectedDateState(newSelectedDate);\n props.onSelectedDateChange?.(event, newSelectedDate);\n break;\n case \"multiselect\": {\n const newDates = addOrRemoveFromArray(\n selectedDate ?? [],\n newSelectedDate,\n );\n setSelectedDateState(newDates);\n props.onSelectedDateChange?.(event, newDates);\n break;\n }\n case \"range\": {\n let base = selectedDate;\n if (isRangeOrOffsetSelectionValue(base)) {\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n newSelectedDate.compare(base.startDate) > 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n } else {\n base = { startDate: newSelectedDate };\n }\n setSelectedDateState(base);\n props.onSelectedDateChange?.(event, base);\n break;\n }\n case \"offset\": {\n const newRange = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newRange);\n props.onSelectedDateChange?.(event, newRange);\n }\n }\n }\n };\n\n const isSelected = (date: DateValue) => {\n switch (selectionVariant) {\n case \"default\":\n return (\n selectedDate instanceof CalendarDate && isSameDay(selectedDate, date)\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) => isSameDay(element, date))\n );\n default:\n return false;\n }\n };\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n };\n\n const isHovered = (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n };\n\n const isSelectedSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n date.compare(selectedDate.startDate) > 0 &&\n date.compare(selectedDate.endDate) < 0\n );\n }\n return false;\n };\n const isHoveredSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n hoveredDate.compare(selectedDate.startDate) > 0 &&\n ((date.compare(selectedDate.startDate) > 0 &&\n date.compare(hoveredDate) < 0) ||\n isSameDay(date, hoveredDate));\n\n const isValidDayHovered = isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n };\n\n const isSelectedStart = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n };\n\n const isSelectedEnd = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n };\n\n const isHoveredOffset = (date: DateValue) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n date.compare(startDate) >= 0 &&\n date.compare(endDate) <= 0 &&\n isDaySelectable(date)\n );\n }\n\n return false;\n };\n\n return {\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n },\n };\n}\n\nexport function useSelectionDay({ date }: { date: DateValue }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDayUnselectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setSelectedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, null);\n };\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\": isDayUnselectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["isSameDay","isPlainObject","makePrefixer","useControlled","date","CalendarDate","useCalendarContext","clsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnPicker.js","sources":["../../src/column-picker/ColumnPicker.tsx"],"sourcesContent":["import {\n flip,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n FloatingComponentProps,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useIdMemo,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cx from \"clsx\";\nimport { forwardRef, useState } from \"react\";\nimport { IconButton, IconButtonProps } from \"../icon-button\";\nimport { ColumnSearch, ColumnSearchProps } from \"./ColumnSearch\";\n\nimport columnPickerCss from \"./ColumnPicker.css\";\n\nconst classBase = \"vuuColumnPicker\";\n\ninterface FloatingColumnSearchProps extends FloatingComponentProps {\n collapsed?: boolean;\n}\n\nconst FloatingColumnSearch = forwardRef<\n HTMLDivElement,\n FloatingColumnSearchProps\n>(function FloatingColumnSearch(props, ref) {\n const { children, className, collapsed, open, ...rest } = props;\n\n const { Component: FloatingComponent } = useFloatingComponent();\n return (\n <FloatingComponent\n className={cx(\n classBase,\n {\n [`${classBase}-collapsed`]: collapsed,\n },\n className,\n )}\n role=\"listbox\"\n open={open}\n {...rest}\n ref={ref}\n >\n {children}\n </FloatingComponent>\n );\n});\n\nexport interface ColumnPickerProps\n extends Omit<IconButtonProps, \"icon\">,\n Pick<ColumnSearchProps, \"columns\" | \"onSelectionChange\" | \"selected\"> {\n icon?: string;\n iconSize?: number;\n}\n\nexport const ColumnPicker = forwardRef<HTMLButtonElement, ColumnPickerProps>(\n function ColumnPicker(\n {\n columns,\n icon = \"add\",\n iconSize,\n onSelectionChange,\n selected,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: columnPickerCss,\n window: targetWindow,\n });\n\n const [open, setOpen] = useState(false);\n\n const listId = useIdMemo();\n const { context, x, y, strategy, elements, floating, reference } =\n useFloatingUI({\n open,\n onOpenChange: setOpen,\n placement: \"bottom-start\",\n strategy: \"fixed\",\n middleware: [\n size({\n apply({ rects, elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n minWidth: `${rects.reference.width}px`,\n maxHeight: `max(calc(${availableHeight}px - var(--salt-spacing-100)), calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5))`,\n });\n },\n }),\n flip({ fallbackStrategy: \"initialPlacement\" }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useDismiss(context),\n useClick(context, { keyboardHandlers: false, toggle: false }),\n ]);\n\n const handleButtonClick = () => {\n setOpen((isOpen) => !isOpen);\n };\n\n const forkedRef = useForkRef<HTMLButtonElement>(reference, forwardedRef);\n\n const handleChange = () => {\n console.log(\"handleChange\");\n };\n const handleMoveListItem = () => {\n console.log(\"handleMoveListItem\");\n };\n\n return (\n <>\n <IconButton\n {...htmlAttributes}\n {...getReferenceProps()}\n icon={icon}\n size={iconSize}\n onClick={handleButtonClick}\n ref={forkedRef}\n variant=\"secondary\"\n />\n <FloatingColumnSearch\n {...getFloatingProps()}\n open={open}\n collapsed={!open}\n id={listId}\n left={x}\n position={strategy}\n ref={floating}\n top={y}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <ColumnSearch\n columns={columns}\n onChange={handleChange}\n onMoveListItem={handleMoveListItem}\n onSelectionChange={onSelectionChange}\n selected={selected}\n style={{ width: 220, height: 300 }}\n />\n </FloatingColumnSearch>\n </>\n );\n },\n);\n"],"names":["forwardRef","FloatingColumnSearch","useFloatingComponent","jsx","ColumnPicker","useWindow","useComponentCssInjection","columnPickerCss","useState","useIdMemo","useFloatingUI","size","elements","flip","useInteractions","useDismiss","useClick","useForkRef","jsxs","Fragment","IconButton","ColumnSearch"],"mappings":";;;;;;;;;;;;;AAwBA,MAAM,SAAY,GAAA,iBAAA
|
|
1
|
+
{"version":3,"file":"ColumnPicker.js","sources":["../../src/column-picker/ColumnPicker.tsx"],"sourcesContent":["import {\n flip,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n FloatingComponentProps,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useIdMemo,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cx from \"clsx\";\nimport { forwardRef, useState } from \"react\";\nimport { IconButton, IconButtonProps } from \"../icon-button\";\nimport { ColumnSearch, ColumnSearchProps } from \"./ColumnSearch\";\n\nimport columnPickerCss from \"./ColumnPicker.css\";\n\nconst classBase = \"vuuColumnPicker\";\n\ninterface FloatingColumnSearchProps extends FloatingComponentProps {\n collapsed?: boolean;\n}\n\nconst FloatingColumnSearch = forwardRef<\n HTMLDivElement,\n FloatingColumnSearchProps\n>(function FloatingColumnSearch(props, ref) {\n const { children, className, collapsed, open, ...rest } = props;\n\n const { Component: FloatingComponent } = useFloatingComponent();\n return (\n <FloatingComponent\n className={cx(\n classBase,\n {\n [`${classBase}-collapsed`]: collapsed,\n },\n className,\n )}\n role=\"listbox\"\n open={open}\n {...rest}\n ref={ref}\n >\n {children}\n </FloatingComponent>\n );\n});\n\nexport interface ColumnPickerProps\n extends Omit<IconButtonProps, \"icon\">,\n Pick<ColumnSearchProps, \"columns\" | \"onSelectionChange\" | \"selected\"> {\n icon?: string;\n iconSize?: number;\n}\n\nexport const ColumnPicker = forwardRef<HTMLButtonElement, ColumnPickerProps>(\n function ColumnPicker(\n {\n columns,\n icon = \"add\",\n iconSize,\n onSelectionChange,\n selected,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: columnPickerCss,\n window: targetWindow,\n });\n\n const [open, setOpen] = useState(false);\n\n const listId = useIdMemo();\n const { context, x, y, strategy, elements, floating, reference } =\n useFloatingUI({\n open,\n onOpenChange: setOpen,\n placement: \"bottom-start\",\n strategy: \"fixed\",\n middleware: [\n size({\n apply({ rects, elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n minWidth: `${rects.reference.width}px`,\n maxHeight: `max(calc(${availableHeight}px - var(--salt-spacing-100)), calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5))`,\n });\n },\n }),\n flip({ fallbackStrategy: \"initialPlacement\" }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useDismiss(context),\n useClick(context, { keyboardHandlers: false, toggle: false }),\n ]);\n\n const handleButtonClick = () => {\n setOpen((isOpen) => !isOpen);\n };\n\n const forkedRef = useForkRef<HTMLButtonElement>(reference, forwardedRef);\n\n const handleChange = () => {\n console.log(\"handleChange\");\n };\n const handleMoveListItem = () => {\n console.log(\"handleMoveListItem\");\n };\n\n return (\n <>\n <IconButton\n {...htmlAttributes}\n {...getReferenceProps()}\n icon={icon}\n size={iconSize}\n onClick={handleButtonClick}\n ref={forkedRef}\n variant=\"secondary\"\n />\n <FloatingColumnSearch\n {...getFloatingProps()}\n open={open}\n collapsed={!open}\n id={listId}\n left={x}\n position={strategy}\n ref={floating}\n top={y}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <ColumnSearch\n columns={columns}\n onChange={handleChange}\n onMoveListItem={handleMoveListItem}\n onSelectionChange={onSelectionChange}\n selected={selected}\n style={{ width: 220, height: 300 }}\n />\n </FloatingColumnSearch>\n </>\n );\n },\n);\n"],"names":["forwardRef","FloatingColumnSearch","useFloatingComponent","jsx","ColumnPicker","useWindow","useComponentCssInjection","columnPickerCss","useState","useIdMemo","useFloatingUI","size","elements","flip","useInteractions","useDismiss","useClick","useForkRef","jsxs","Fragment","IconButton","ColumnSearch"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSearch.js","sources":["../../src/column-picker/ColumnSearch.tsx"],"sourcesContent":["import { Input } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, RefCallback, forwardRef, useCallback } from \"react\";\nimport { List, ListProps } from \"../list\";\n\nimport searchableListCss from \"./ColumnSearch.css\";\n\nconst classBase = \"vuuColumnSearch\";\n\nexport interface ColumnSearchProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<\n ListProps<string, \"multiple\">,\n \"onMoveListItem\" | \"onSelectionChange\" | \"selected\"\n > {\n columns: string[];\n}\n\nconst searchIcon = <span data-icon=\"search\" />;\n\nexport const ColumnSearch = forwardRef<HTMLDivElement, ColumnSearchProps>(\n function ColumnSearch(\n {\n autoFocus = false,\n className,\n columns,\n onChange,\n onMoveListItem,\n onSelectionChange,\n selected,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: searchableListCss,\n window: targetWindow,\n });\n\n const searchCallbackRef = useCallback<RefCallback<HTMLElement>>((el) => {\n setTimeout(() => {\n el?.querySelector(\"input\")?.focus();\n }, 100);\n }, []);\n\n const handleChange = () => {\n console.log(`handle change`);\n };\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <div className={`${classBase}-inputField`}>\n <Input\n // inputProps={{ onKeyDown }}\n startAdornment={searchIcon}\n ref={autoFocus ? searchCallbackRef : null}\n // value={searchState.searchText}\n // onChange={onChange}\n />\n </div>\n\n <List<string, \"multiple\">\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onMoveListItem={onMoveListItem}\n onSelectionChange={onSelectionChange}\n selected={selected}\n selectionStrategy=\"multiple\"\n source={columns}\n itemHeight={33}\n />\n </div>\n );\n }\n);\n"],"names":["jsx","forwardRef","ColumnSearch","useWindow","useComponentCssInjection","searchableListCss","useCallback","jsxs","Input","List"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,MAAM,SAAY,GAAA,iBAAA
|
|
1
|
+
{"version":3,"file":"ColumnSearch.js","sources":["../../src/column-picker/ColumnSearch.tsx"],"sourcesContent":["import { Input } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, RefCallback, forwardRef, useCallback } from \"react\";\nimport { List, ListProps } from \"../list\";\n\nimport searchableListCss from \"./ColumnSearch.css\";\n\nconst classBase = \"vuuColumnSearch\";\n\nexport interface ColumnSearchProps\n extends HTMLAttributes<HTMLDivElement>,\n Pick<\n ListProps<string, \"multiple\">,\n \"onMoveListItem\" | \"onSelectionChange\" | \"selected\"\n > {\n columns: string[];\n}\n\nconst searchIcon = <span data-icon=\"search\" />;\n\nexport const ColumnSearch = forwardRef<HTMLDivElement, ColumnSearchProps>(\n function ColumnSearch(\n {\n autoFocus = false,\n className,\n columns,\n onChange,\n onMoveListItem,\n onSelectionChange,\n selected,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: searchableListCss,\n window: targetWindow,\n });\n\n const searchCallbackRef = useCallback<RefCallback<HTMLElement>>((el) => {\n setTimeout(() => {\n el?.querySelector(\"input\")?.focus();\n }, 100);\n }, []);\n\n const handleChange = () => {\n console.log(`handle change`);\n };\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <div className={`${classBase}-inputField`}>\n <Input\n // inputProps={{ onKeyDown }}\n startAdornment={searchIcon}\n ref={autoFocus ? searchCallbackRef : null}\n // value={searchState.searchText}\n // onChange={onChange}\n />\n </div>\n\n <List<string, \"multiple\">\n allowDragDrop\n height=\"auto\"\n onChange={handleChange}\n onMoveListItem={onMoveListItem}\n onSelectionChange={onSelectionChange}\n selected={selected}\n selectionStrategy=\"multiple\"\n source={columns}\n itemHeight={33}\n />\n </div>\n );\n }\n);\n"],"names":["jsx","forwardRef","ColumnSearch","useWindow","useComponentCssInjection","searchableListCss","useCallback","jsxs","Input","List"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,MAAM,SAAY,GAAA,iBAAA;AAWlB,MAAM,UAAa,mBAAAA,cAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,QAAS,EAAA,CAAA;AAErC,MAAM,YAAe,GAAAC,gBAAA;AAAA,EAC1B,SAASC,aACP,CAAA;AAAA,IACE,SAAY,GAAA,KAAA;AAAA,IACZ,SAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,YACA,EAAA;AACA,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,cAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA,iBAAA,GAAoBC,iBAAsC,CAAA,CAAC,EAAO,KAAA;AACtE,MAAA,UAAA,CAAW,MAAM;AACf,QAAI,EAAA,EAAA,aAAA,CAAc,OAAO,CAAA,EAAG,KAAM,EAAA;AAAA,SACjC,GAAG,CAAA;AAAA,KACR,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,OAAA,CAAQ,IAAI,CAAe,aAAA,CAAA,CAAA;AAAA,KAC7B;AAEA,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,QAClC,GAAK,EAAA,YAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAAP,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,WAAA,CAAA,EAAA,QAAA,kBAAAA,cAAA;AAAA,YAACQ,UAAA;AAAA,YAAA;AAAA,cAEC,cAAgB,EAAA,UAAA;AAAA,cAChB,GAAA,EAAK,YAAY,iBAAoB,GAAA;AAAA;AAAA,WAIzC,EAAA,CAAA;AAAA,0BAEAR,cAAA;AAAA,YAACS,SAAA;AAAA,YAAA;AAAA,cACC,aAAa,EAAA,IAAA;AAAA,cACb,MAAO,EAAA,MAAA;AAAA,cACP,QAAU,EAAA,YAAA;AAAA,cACV,cAAA;AAAA,cACA,iBAAA;AAAA,cACA,QAAA;AAAA,cACA,iBAAkB,EAAA,UAAA;AAAA,cAClB,MAAQ,EAAA,OAAA;AAAA,cACR,UAAY,EAAA;AAAA;AAAA;AACd;AAAA;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collectionProvider.js","sources":["../../src/common-hooks/collectionProvider.tsx"],"sourcesContent":["import { cloneElement, createContext, ReactElement, useContext } from \"react\";\nimport { CollectionHookResult } from \"./collectionTypes\";\n\nexport interface collectionContext<T> {\n collection: CollectionHookResult<T>;\n}\n\nexport const CollectionContext = createContext<\n CollectionHookResult<any> | undefined\n>(undefined);\n\ninterface ContextProviderProps<Item> {\n children: ReactElement;\n collectionHook: CollectionHookResult<Item>;\n}\n\nexport function CollectionProvider<Item>({\n children,\n collectionHook,\n ...props\n}: ContextProviderProps<Item>) {\n return (\n <CollectionContext.Provider value={collectionHook}>\n {Object.keys(props).length > 0 ? cloneElement(children, props) : children}\n </CollectionContext.Provider>\n );\n}\n\nexport function useCollection<Item>(): CollectionHookResult<Item> | undefined {\n const collection = useContext(CollectionContext);\n if (collection) {\n return collection as CollectionHookResult<Item>;\n }\n}\n"],"names":["createContext","cloneElement","useContext"],"mappings":";;;;;AAOa,MAAA,iBAAA,GAAoBA,oBAE/B,KAAS,CAAA
|
|
1
|
+
{"version":3,"file":"collectionProvider.js","sources":["../../src/common-hooks/collectionProvider.tsx"],"sourcesContent":["import { cloneElement, createContext, ReactElement, useContext } from \"react\";\nimport { CollectionHookResult } from \"./collectionTypes\";\n\nexport interface collectionContext<T> {\n collection: CollectionHookResult<T>;\n}\n\nexport const CollectionContext = createContext<\n CollectionHookResult<any> | undefined\n>(undefined);\n\ninterface ContextProviderProps<Item> {\n children: ReactElement;\n collectionHook: CollectionHookResult<Item>;\n}\n\nexport function CollectionProvider<Item>({\n children,\n collectionHook,\n ...props\n}: ContextProviderProps<Item>) {\n return (\n <CollectionContext.Provider value={collectionHook}>\n {Object.keys(props).length > 0 ? cloneElement(children, props) : children}\n </CollectionContext.Provider>\n );\n}\n\nexport function useCollection<Item>(): CollectionHookResult<Item> | undefined {\n const collection = useContext(CollectionContext);\n if (collection) {\n return collection as CollectionHookResult<Item>;\n }\n}\n"],"names":["createContext","cloneElement","useContext"],"mappings":";;;;;AAOa,MAAA,iBAAA,GAAoBA,oBAE/B,KAAS,CAAA;AAOJ,SAAS,kBAAyB,CAAA;AAAA,EACvC,QAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAG;AACL,CAA+B,EAAA;AAC7B,EAAA,sCACG,iBAAkB,CAAA,QAAA,EAAlB,EAA2B,KAAA,EAAO,gBAChC,QAAO,EAAA,MAAA,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAI,GAAAC,kBAAA,CAAa,QAAU,EAAA,KAAK,IAAI,QACnE,EAAA,CAAA;AAEJ;AAEO,SAAS,aAA8D,GAAA;AAC5E,EAAM,MAAA,UAAA,GAAaC,iBAAW,iBAAiB,CAAA;AAC/C,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,OAAA,UAAA;AAAA;AAEX;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemToString.js","sources":["../../src/common-hooks/itemToString.ts"],"sourcesContent":["import { isPlainObject } from \"./isPlainObject\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":["isPlainObject"],"mappings":";;;;AAKO,SAAS,aAAa,IAAuB,EAAA;AAClD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAO,OAAA,IAAA
|
|
1
|
+
{"version":3,"file":"itemToString.js","sources":["../../src/common-hooks/itemToString.ts"],"sourcesContent":["import { isPlainObject } from \"./isPlainObject\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ItemToStringFunction = (item: any) => string;\n\nexport function itemToString(item: unknown): string {\n if (typeof item === \"string\") {\n return item;\n } else if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.prototype.hasOwnProperty.call(item, \"label\")) {\n return String((item as { label?: string }).label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\")\n );\n\n return \"\";\n}\n"],"names":["isPlainObject"],"mappings":";;;;AAKO,SAAS,aAAa,IAAuB,EAAA;AAClD,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,CAACA,2BAAc,CAAA,IAAI,CAAG,EAAA;AAC/B,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA;AAGpB,EAAA,IAAI,OAAO,SAAU,CAAA,cAAA,CAAe,IAAK,CAAA,IAAA,EAAM,OAAO,CAAG,EAAA;AACvD,IAAO,OAAA,MAAA,CAAQ,KAA4B,KAAK,CAAA;AAAA;AAGlD,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,iFAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI;AAAA,GACb;AAEA,EAAO,OAAA,EAAA;AACT;;;;"}
|