@salt-ds/lab 1.0.0-alpha.55 → 1.0.0-alpha.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +167 -0
- package/css/salt-lab.css +44 -7
- package/dist-cjs/calendar/Calendar.js +12 -12
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarGrid.css.js +6 -0
- package/dist-cjs/calendar/CalendarGrid.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarGrid.js +107 -0
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.js +219 -201
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.js +10 -4
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarContext.js +6 -2
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js +6 -9
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js +47 -54
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js +18 -18
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-cjs/calendar/internal/utils.js +33 -48
- package/dist-cjs/calendar/internal/utils.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +46 -38
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarDay.js +15 -21
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +44 -35
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/date-input/DateInput.css.js +1 -1
- package/dist-cjs/date-input/DateInputRange.js +102 -107
- package/dist-cjs/date-input/DateInputRange.js.map +1 -1
- package/dist-cjs/date-input/DateInputSingle.js +39 -51
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +15 -13
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js +3 -8
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerContext.js +6 -2
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlay.js +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +21 -8
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +77 -28
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +45 -40
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js +123 -84
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +17 -20
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-cjs/date-picker/useDatePicker.js +60 -110
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
- package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
- package/dist-cjs/index.js +19 -20
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/localization-provider/LocalizationProvider.js +48 -0
- package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-cjs/overlay/OverlayHeader.css.js +6 -0
- package/dist-cjs/overlay/OverlayHeader.css.js.map +1 -0
- package/dist-cjs/overlay/OverlayHeader.js +35 -0
- package/dist-cjs/overlay/OverlayHeader.js.map +1 -0
- package/dist-cjs/system-status/SystemStatus.css.js +1 -1
- package/dist-cjs/tabs-next/TabListNext.css.js +1 -1
- package/dist-cjs/tabs-next/TabListNext.js +4 -0
- package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
- package/dist-es/calendar/Calendar.js +12 -12
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarGrid.css.js +4 -0
- package/dist-es/calendar/CalendarGrid.css.js.map +1 -0
- package/dist-es/calendar/CalendarGrid.js +105 -0
- package/dist-es/calendar/CalendarGrid.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.js +220 -202
- package/dist-es/calendar/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/CalendarWeekHeader.js +11 -5
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-es/calendar/internal/CalendarContext.js +6 -2
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +6 -9
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js +48 -55
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js +15 -15
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-es/calendar/internal/utils.js +32 -45
- package/dist-es/calendar/internal/utils.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +40 -32
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarDay.js +11 -17
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +40 -29
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/date-input/DateInput.css.js +1 -1
- package/dist-es/date-input/DateInputRange.js +101 -107
- package/dist-es/date-input/DateInputRange.js.map +1 -1
- package/dist-es/date-input/DateInputSingle.js +39 -51
- package/dist-es/date-input/DateInputSingle.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +15 -13
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js +3 -8
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/date-picker/DatePickerContext.js +6 -2
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlay.js +1 -0
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlayProvider.js +21 -8
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +78 -30
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +44 -39
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js +124 -85
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerSinglePanel.js +17 -20
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerTrigger.js +30 -0
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-es/date-picker/useDatePicker.js +61 -111
- package/dist-es/date-picker/useDatePicker.js.map +1 -1
- package/dist-es/dropdown/DropdownButton.js.map +1 -1
- package/dist-es/index.js +8 -7
- package/dist-es/index.js.map +1 -1
- package/dist-es/localization-provider/LocalizationProvider.js +44 -0
- package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-es/overlay/OverlayHeader.css.js +4 -0
- package/dist-es/overlay/OverlayHeader.css.js.map +1 -0
- package/dist-es/overlay/OverlayHeader.js +33 -0
- package/dist-es/overlay/OverlayHeader.js.map +1 -0
- package/dist-es/system-status/SystemStatus.css.js +1 -1
- package/dist-es/tabs-next/TabListNext.css.js +1 -1
- package/dist-es/tabs-next/TabListNext.js +5 -1
- package/dist-es/tabs-next/TabListNext.js.map +1 -1
- package/dist-types/calendar/Calendar.d.ts +11 -6
- package/dist-types/calendar/CalendarGrid.d.ts +13 -0
- package/dist-types/calendar/CalendarNavigation.d.ts +9 -11
- package/dist-types/calendar/CalendarWeekHeader.d.ts +4 -3
- package/dist-types/calendar/index.d.ts +1 -2
- package/dist-types/calendar/internal/CalendarContext.d.ts +5 -6
- package/dist-types/calendar/internal/CalendarDay.d.ts +6 -8
- package/dist-types/calendar/internal/CalendarMonth.d.ts +5 -6
- package/dist-types/calendar/internal/useFocusManagement.d.ts +3 -4
- package/dist-types/calendar/internal/utils.d.ts +7 -11
- package/dist-types/calendar/useCalendar.d.ts +207 -55
- package/dist-types/calendar/useCalendarDay.d.ts +5 -7
- package/dist-types/calendar/useCalendarSelection.d.ts +92 -58
- package/dist-types/date-input/DateInputRange.d.ts +38 -56
- package/dist-types/date-input/DateInputSingle.d.ts +32 -49
- package/dist-types/date-input/index.d.ts +0 -1
- package/dist-types/date-picker/DatePicker.d.ts +23 -5
- package/dist-types/date-picker/DatePickerActions.d.ts +13 -12
- package/dist-types/date-picker/DatePickerContext.d.ts +42 -59
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +10 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +13 -3
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +17 -17
- package/dist-types/date-picker/DatePickerSingleInput.d.ts +12 -3
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +11 -11
- package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
- package/dist-types/date-picker/index.d.ts +3 -2
- package/dist-types/date-picker/useDatePicker.d.ts +52 -59
- package/dist-types/index.d.ts +2 -0
- package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
- package/dist-types/localization-provider/index.d.ts +1 -0
- package/dist-types/overlay/OverlayHeader.d.ts +20 -0
- package/dist-types/overlay/index.d.ts +1 -0
- package/package.json +11 -3
- package/dist-cjs/calendar/CalendarDateGrid.css.js +0 -6
- package/dist-cjs/calendar/CalendarDateGrid.css.js.map +0 -1
- package/dist-cjs/calendar/CalendarDateGrid.js +0 -105
- package/dist-cjs/calendar/CalendarDateGrid.js.map +0 -1
- package/dist-cjs/calendar/formatDate.js +0 -51
- package/dist-cjs/calendar/formatDate.js.map +0 -1
- package/dist-cjs/date-input/utils.js +0 -63
- package/dist-cjs/date-input/utils.js.map +0 -1
- package/dist-es/calendar/CalendarDateGrid.css.js +0 -4
- package/dist-es/calendar/CalendarDateGrid.css.js.map +0 -1
- package/dist-es/calendar/CalendarDateGrid.js +0 -103
- package/dist-es/calendar/CalendarDateGrid.js.map +0 -1
- package/dist-es/calendar/formatDate.js +0 -48
- package/dist-es/calendar/formatDate.js.map +0 -1
- package/dist-es/date-input/utils.js +0 -57
- package/dist-es/date-input/utils.js.map +0 -1
- package/dist-types/calendar/CalendarDateGrid.d.ts +0 -10
- package/dist-types/calendar/formatDate.d.ts +0 -14
- package/dist-types/date-input/utils.d.ts +0 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import {\n CalendarDate,\n CalendarDateTime,\n type DateValue,\n ZonedDateTime,\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 { useCallback, useMemo } from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection = DateValue;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection = DateValue[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection = {\n /**\n * The start date of the range.\n */\n startDate?: DateValue | null;\n /**\n * The end date of the range.\n */\n endDate?: DateValue | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType =\n | SingleDateSelection\n | MultipleDateSelection\n | DateRangeSelection\n | null;\n\n/**\n * The default minimum year used by the calendar.\n */\nexport const CALENDAR_MIN_YEAR = 1900;\n\n/**\n * The default maximum year used by the calendar.\n */\nexport const CALENDAR_MAX_YEAR = 2100;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType(value: any): value is DateValue {\n return (\n value instanceof CalendarDate ||\n value instanceof CalendarDateTime ||\n value instanceof ZonedDateTime\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection(value: any): value is DateRangeSelection {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<SelectionVariantType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: DateValue | null;\n /**\n * The currently selected date.\n */\n selectedDate?: SelectionVariantType | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SelectionVariantType;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType | null,\n ) => void;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateValue) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps\n extends Omit<\n UseCalendarSelectionBaseProps<DateRangeSelection>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateValue) => DateValue;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps\n extends UseCalendarSelectionBaseProps<DateRangeSelection> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps\n extends UseCalendarSelectionBaseProps<MultipleDateSelection> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps\n extends UseCalendarSelectionBaseProps<SingleDateSelection> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiSelectProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionOffsetProps;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray(array: AllSelectionValueType, item: DateValue) {\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 updateRangeSelection = (\n currentSelectedDate: DateRangeSelection,\n newSelectedDate: DateValue,\n): DateRangeSelection => {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (base?.startDate && newSelectedDate.compare(base.startDate) < 0) {\n base = { startDate: newSelectedDate };\n } else if (base?.startDate && newSelectedDate.compare(base.startDate) >= 0) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n};\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\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 startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: DateValue) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: DateValue) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: DateValue) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectedDateChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray(\n selectedDate as DateValue[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectedDateChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection(\n selectedDate as DateRangeSelection,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectedDateChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectedDateChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectedDateChange],\n );\n\n const isSelected = useCallback(\n (date: DateValue) => {\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n 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 [selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(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 [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(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 =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (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 || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\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 isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay({ 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 isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\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\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<TDate extends DateFrameworkType> = TDate;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection<TDate extends DateFrameworkType> = TDate[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection<TDate extends DateFrameworkType> = {\n /**\n * The start date of the range.\n */\n startDate?: TDate | null;\n /**\n * The end date of the range.\n */\n endDate?: TDate | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType<TDate extends DateFrameworkType> =\n | SingleDateSelection<TDate>\n | MultipleDateSelection<TDate>\n | DateRangeSelection<TDate>\n | null;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType<TDate extends DateFrameworkType>(\n value: any,\n): value is TDate {\n return (\n !isMultipleDateSelection<TDate>(value) &&\n !isDateRangeSelection<TDate>(value)\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection<TDate extends DateFrameworkType>(\n value: any,\n): value is DateRangeSelection<TDate> {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection<TDate extends DateFrameworkType>(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection<TDate> {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<TDate extends DateFrameworkType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: TDate | null;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: TDate) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: TDate | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps<\n TDate extends DateFrameworkType,\n> extends Omit<\n UseCalendarSelectionBaseProps<TDate>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: TDate) => TDate;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: TDate) => TDate;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n /**\n * The currently selected date.\n */\n selectedDate?: MultipleDateSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: MultipleDateSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: MultipleDateSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * The currently selected date.\n */\n selectedDate?: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate> | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: SingleDateSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps<TDate extends DateFrameworkType> =\n | UseCalendarSelectionSingleProps<TDate>\n | UseCalendarSelectionMultiSelectProps<TDate>\n | UseCalendarSelectionRangeProps<TDate>\n | UseCalendarSelectionOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n array: AllSelectionValueType<TDate>,\n item: TDate,\n) {\n if (Array.isArray(array)) {\n const filteredArray = array.filter(\n (element) => !dateAdapter.isSame(element, item, \"day\"),\n );\n if (filteredArray.length === array.length) {\n return array.concat(item);\n }\n return filteredArray;\n }\n return [item];\n}\n\nfunction updateRangeSelection<TDate extends DateFrameworkType>(\n datePicker: SaltDateAdapter<TDate>,\n currentSelectedDate: DateRangeSelection<TDate> | undefined,\n newSelectedDate: TDate,\n): DateRangeSelection<TDate> {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) < 0\n ) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) >= 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n}\n\nexport function useCalendarSelection<TDate extends DateFrameworkType>(\n props: UseCalendarSelectionProps<TDate>,\n) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: TDate) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectionChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray<TDate>(\n dateAdapter,\n selectedDate as TDate[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectionChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection<TDate>(\n dateAdapter,\n selectedDate as DateRangeSelection<TDate>,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectionChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection<TDate> = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectionChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectionChange],\n );\n\n const isSelected = useCallback(\n (date: TDate) => {\n if (!selectedDate) {\n return false;\n }\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n dateAdapter.isSame(selectedDate, date, \"day\")\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) =>\n dateAdapter.isSame(element, date, \"day\"),\n )\n );\n default:\n return false;\n }\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: TDate | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: TDate) => {\n return !!hoveredDate && dateAdapter.isSame(date, hoveredDate, \"day\");\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, selectedDate.endDate) < 0\n );\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n dateAdapter.compare(hoveredDate, selectedDate.startDate) > 0 &&\n ((dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, hoveredDate) < 0) ||\n dateAdapter.isSame(date, hoveredDate, \"day\"));\n\n const isValidDayHovered =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return dateAdapter.isSame(selectedDate.startDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return dateAdapter.isSame(selectedDate.endDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (date: TDate) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n dateAdapter.compare(date, startDate) >= 0 &&\n dateAdapter.compare(date, endDate) <= 0 &&\n (!isDaySelectable || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\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 isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay<TDate extends DateFrameworkType>({\n date,\n}: { date: TDate }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDaySelectable,\n },\n } = useCalendarContext<TDate>();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\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\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n gap: var(--salt-spacing-50);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.saltDateInput:hover {\n background: var(--saltDateInput-background-hover, var(--input-background-hover));\n cursor: var(--salt-editable-cursor-hover);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-editable-borderStyle-hover);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-editable-borderStyle-active);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-editable-borderStyle-readonly);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-editable-borderStyle-disabled);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-hover);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-border-strong) var(--salt-editable-borderStyle-active) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-readonly);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-disabled);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n border-bottom-width: calc(var(--salt-size-border-strong) - var(--salt-size-border));\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-active: var(--salt-editable-primary-background-active);\n --input-background-hover: var(--salt-editable-primary-background-hover);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-primary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-active: var(--salt-editable-secondary-background-active);\n --input-background-hover: var(--salt-editable-secondary-background-active);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-secondary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-active: var(--salt-status-error-background);\n --input-background-hover: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-active: var(--salt-status-warning-background);\n --input-background-hover: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-active: var(--salt-status-success-background);\n --input-background-hover: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n background: var(--saltDateInput-background-active, var(--input-background-active));\n cursor: var(--salt-editable-cursor-active);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-editable-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-editable-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n margin-left: auto;\n align-items: end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: var(--salt-spacing-50);\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: min-content;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input */\n.saltDateInput-input::selection {\n background: var(--salt-content-foreground-highlight);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n";
|
|
1
|
+
var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n gap: var(--salt-spacing-50);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.saltDateInput:hover {\n background: var(--saltDateInput-background-hover, var(--input-background-hover));\n cursor: var(--salt-editable-cursor-hover);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-editable-borderStyle-hover);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-editable-borderStyle-active);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-editable-borderStyle-readonly);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-editable-borderStyle-disabled);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-hover);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-border-strong) var(--salt-editable-borderStyle-active) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-readonly);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-disabled);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n border-bottom-width: calc(var(--salt-size-border-strong) - var(--salt-size-border));\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-active: var(--salt-editable-primary-background-active);\n --input-background-hover: var(--salt-editable-primary-background-hover);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-primary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-active: var(--salt-editable-secondary-background-active);\n --input-background-hover: var(--salt-editable-secondary-background-active);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-secondary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-active: var(--salt-status-error-background);\n --input-background-hover: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-active: var(--salt-status-warning-background);\n --input-background-hover: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-active: var(--salt-status-success-background);\n --input-background-hover: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n background: var(--saltDateInput-background-active, var(--input-background-active));\n cursor: var(--salt-editable-cursor-active);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-editable-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-editable-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n margin-left: auto;\n align-items: end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: var(--salt-spacing-50);\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: min-content;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input */\n.saltDateInput-input::selection {\n background: var(--salt-content-foreground-highlight);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n";
|
|
2
2
|
|
|
3
3
|
export { css_248z as default };
|
|
4
4
|
//# sourceMappingURL=DateInput.css.js.map
|
|
@@ -1,58 +1,54 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { getLocalTimeZone } from '@internationalized/date';
|
|
3
2
|
import { makePrefixer, useForkRef, useId, useControlled, useFormFieldProps, StatusAdornment } from '@salt-ds/core';
|
|
4
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
4
|
import { useWindow } from '@salt-ds/window';
|
|
6
5
|
import { clsx } from 'clsx';
|
|
7
|
-
import { forwardRef, useRef,
|
|
8
|
-
import '../
|
|
9
|
-
import '../calendar/CalendarNavigation.js';
|
|
10
|
-
import '../calendar/CalendarWeekHeader.js';
|
|
11
|
-
import '../calendar/CalendarDateGrid.js';
|
|
12
|
-
import '../calendar/internal/CalendarContext.js';
|
|
13
|
-
import { getCurrentLocale, formatDate } from '../calendar/formatDate.js';
|
|
14
|
-
import '../calendar/useCalendarSelection.js';
|
|
6
|
+
import { forwardRef, useRef, useMemo, useEffect, useState } from 'react';
|
|
7
|
+
import { useLocalization } from '../localization-provider/LocalizationProvider.js';
|
|
15
8
|
import css_248z from './DateInput.css.js';
|
|
16
|
-
import { parseCalendarDate, extractTimeFieldsFromDateRange } from './utils.js';
|
|
17
9
|
|
|
18
10
|
const withBaseName = makePrefixer("saltDateInput");
|
|
11
|
+
var DateParserField = /* @__PURE__ */ ((DateParserField2) => {
|
|
12
|
+
DateParserField2["START"] = "start";
|
|
13
|
+
DateParserField2["END"] = "end";
|
|
14
|
+
return DateParserField2;
|
|
15
|
+
})(DateParserField || {});
|
|
19
16
|
const DateInputRange = forwardRef(
|
|
20
|
-
|
|
17
|
+
(props, ref) => {
|
|
18
|
+
const { dateAdapter } = useLocalization();
|
|
21
19
|
const {
|
|
22
20
|
bordered = false,
|
|
23
21
|
className,
|
|
24
22
|
disabled,
|
|
25
23
|
"aria-label": ariaLabel,
|
|
26
24
|
date: dateProp,
|
|
27
|
-
defaultDate
|
|
25
|
+
defaultDate,
|
|
28
26
|
onDateChange,
|
|
29
27
|
value: valueProp,
|
|
30
|
-
|
|
28
|
+
locale,
|
|
29
|
+
format = "DD MMM YYYY",
|
|
30
|
+
defaultValue = {
|
|
31
|
+
startDate: dateAdapter.format(void 0, format, locale),
|
|
32
|
+
endDate: dateAdapter.format(void 0, format, locale)
|
|
33
|
+
},
|
|
31
34
|
onChange,
|
|
32
35
|
onClick,
|
|
33
36
|
onDateValueChange,
|
|
34
37
|
emptyReadOnlyMarker = "\u2014",
|
|
35
38
|
endAdornment,
|
|
36
|
-
format: formatProp,
|
|
37
39
|
startInputProps = {},
|
|
38
40
|
endInputProps = {},
|
|
39
41
|
startInputRef: startInputRefProp,
|
|
40
42
|
endInputRef: endInputRefProp,
|
|
41
|
-
parse
|
|
42
|
-
placeholder =
|
|
43
|
+
parse: parseProp,
|
|
44
|
+
placeholder = format.toLowerCase(),
|
|
43
45
|
readOnly: readOnlyProp,
|
|
44
46
|
validationStatus: validationStatusProp,
|
|
45
47
|
variant = "primary",
|
|
46
|
-
locale = getCurrentLocale(),
|
|
47
|
-
timeZone = getLocalTimeZone(),
|
|
48
48
|
...rest
|
|
49
49
|
} = props;
|
|
50
50
|
const wrapperRef = useRef(null);
|
|
51
51
|
const handleWrapperRef = useForkRef(ref, wrapperRef);
|
|
52
|
-
const lastError = useRef({
|
|
53
|
-
startDate: false,
|
|
54
|
-
endDate: false
|
|
55
|
-
});
|
|
56
52
|
const startInputRef = useRef(null);
|
|
57
53
|
const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);
|
|
58
54
|
const endInputRef = useRef(null);
|
|
@@ -65,40 +61,73 @@ const DateInputRange = forwardRef(
|
|
|
65
61
|
css: css_248z,
|
|
66
62
|
window: targetWindow
|
|
67
63
|
});
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
});
|
|
64
|
+
const parseDateValue = (dateValue2, field) => {
|
|
65
|
+
const parseResult = parseProp ? parseProp(dateValue2 ?? "", field, format, locale) : dateAdapter.parse.bind(dateAdapter)(dateValue2 ?? "", format, locale);
|
|
66
|
+
const { date: date2, ...parseDetails } = parseResult;
|
|
67
|
+
return { date: date2, ...parseDetails };
|
|
68
|
+
};
|
|
74
69
|
const [dateValue, setDateValue] = useControlled({
|
|
75
70
|
controlled: valueProp,
|
|
76
71
|
default: defaultValue,
|
|
77
72
|
name: "DateInputRange",
|
|
78
73
|
state: "dateValue"
|
|
79
74
|
});
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
|
|
75
|
+
const fallbackDate = useMemo(() => {
|
|
76
|
+
if (!defaultValue) {
|
|
77
|
+
return void 0;
|
|
78
|
+
}
|
|
79
|
+
const { date: startDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.startDate, "start" /* START */) ?? {};
|
|
80
|
+
const { date: endDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.endDate, "end" /* END */) ?? {};
|
|
81
|
+
return {
|
|
82
|
+
startDate,
|
|
83
|
+
endDate
|
|
84
|
+
};
|
|
85
|
+
}, [defaultValue, dateAdapter, parseProp, format]);
|
|
86
|
+
const [date, setDate] = useControlled({
|
|
87
|
+
controlled: dateProp,
|
|
88
|
+
default: defaultDate ?? fallbackDate,
|
|
89
|
+
name: "DateInputRange",
|
|
90
|
+
state: "date"
|
|
91
|
+
});
|
|
92
|
+
const lastAppliedValue = useRef(dateValue);
|
|
93
|
+
const preservedTime = useRef({ startTime: null, endTime: null });
|
|
94
|
+
preservedTime.current = {
|
|
95
|
+
startTime: (date == null ? void 0 : date.startDate) && dateAdapter.isValid(date == null ? void 0 : date.startDate) ? dateAdapter.getTime(date.startDate) : null,
|
|
96
|
+
endTime: (date == null ? void 0 : date.endDate) && dateAdapter.isValid(date == null ? void 0 : date.endDate) ? dateAdapter.getTime(date.endDate) : null
|
|
97
|
+
};
|
|
88
98
|
const setDateValueFromDate = (newDate) => {
|
|
89
99
|
let newDateValue = { ...dateValue };
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
100
|
+
if ((newDate == null ? void 0 : newDate.startDate) && dateAdapter.isValid(newDate == null ? void 0 : newDate.startDate)) {
|
|
101
|
+
const formattedStartDateValue = dateAdapter.format(
|
|
102
|
+
newDate == null ? void 0 : newDate.startDate,
|
|
103
|
+
format,
|
|
104
|
+
locale
|
|
105
|
+
);
|
|
106
|
+
newDateValue = { ...dateValue, startDate: formattedStartDateValue };
|
|
107
|
+
} else if (!(newDate == null ? void 0 : newDate.startDate)) {
|
|
108
|
+
newDateValue = {
|
|
109
|
+
...dateValue,
|
|
110
|
+
startDate: dateAdapter.format(void 0, format, locale)
|
|
111
|
+
};
|
|
93
112
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
113
|
+
if ((newDate == null ? void 0 : newDate.endDate) && dateAdapter.isValid(newDate.endDate)) {
|
|
114
|
+
const formattedEndDateValue = dateAdapter.format(
|
|
115
|
+
newDate == null ? void 0 : newDate.endDate,
|
|
116
|
+
format,
|
|
117
|
+
locale
|
|
118
|
+
);
|
|
119
|
+
newDateValue = { ...newDateValue, endDate: formattedEndDateValue };
|
|
120
|
+
} else if (!(newDate == null ? void 0 : newDate.endDate)) {
|
|
121
|
+
newDateValue = {
|
|
122
|
+
...newDateValue,
|
|
123
|
+
endDate: dateAdapter.format(void 0, format, locale)
|
|
124
|
+
};
|
|
97
125
|
}
|
|
98
126
|
if ((newDateValue == null ? void 0 : newDateValue.startDate) !== (dateValue == null ? void 0 : dateValue.startDate) || (newDateValue == null ? void 0 : newDateValue.endDate) !== (dateValue == null ? void 0 : dateValue.endDate)) {
|
|
99
|
-
onDateValueChange == null ? void 0 : onDateValueChange(
|
|
127
|
+
onDateValueChange == null ? void 0 : onDateValueChange(null, newDateValue);
|
|
128
|
+
setDateValue(newDateValue);
|
|
100
129
|
}
|
|
101
|
-
|
|
130
|
+
return newDateValue;
|
|
102
131
|
};
|
|
103
132
|
useEffect(() => {
|
|
104
133
|
setDateValueFromDate(date);
|
|
@@ -140,80 +169,47 @@ const DateInputRange = forwardRef(
|
|
|
140
169
|
} = endInputProps;
|
|
141
170
|
const endInputIsRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : endInputPropsRequired;
|
|
142
171
|
const apply = (event) => {
|
|
143
|
-
const { date:
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
);
|
|
149
|
-
const hasDateChanged = (newDate2, oldDate) => {
|
|
150
|
-
if (newDate2 && oldDate) {
|
|
151
|
-
return newDate2.compare(oldDate) !== 0;
|
|
152
|
-
}
|
|
153
|
-
return newDate2 !== oldDate;
|
|
172
|
+
const { date: startDate = void 0, ...startDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.startDate, "start" /* START */) ?? {};
|
|
173
|
+
const { date: endDate = void 0, ...endDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.endDate, "end" /* END */) ?? {};
|
|
174
|
+
const updatedDateRange = {
|
|
175
|
+
startDate,
|
|
176
|
+
endDate
|
|
154
177
|
};
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
dateRange.endDate = endDate;
|
|
162
|
-
return dateRange;
|
|
163
|
-
};
|
|
164
|
-
const hasStartDateChanged = hasDateChanged(
|
|
165
|
-
newStartDate,
|
|
166
|
-
(date == null ? void 0 : date.startDate) || null
|
|
167
|
-
);
|
|
168
|
-
const hasEndDateChanged = hasDateChanged(
|
|
169
|
-
newEndDate,
|
|
170
|
-
(date == null ? void 0 : date.endDate) || null
|
|
171
|
-
);
|
|
172
|
-
const hasStartOrEndDateChanged = hasStartDateChanged || hasEndDateChanged;
|
|
173
|
-
const newDate = createNewDateRange(
|
|
174
|
-
newStartDate,
|
|
175
|
-
newEndDate
|
|
176
|
-
);
|
|
177
|
-
if ((newDate == null ? void 0 : newDate.startDate) || (newDate == null ? void 0 : newDate.endDate)) {
|
|
178
|
-
setDateValueFromDate(newDate);
|
|
179
|
-
}
|
|
180
|
-
if (hasStartOrEndDateChanged) {
|
|
181
|
-
setDate(newDate);
|
|
182
|
-
if ((newDate == null ? void 0 : newDate.startDate) && preservedTime.current.startTime) {
|
|
183
|
-
newDate.startDate = newDate.startDate.set(
|
|
178
|
+
const newDateValue = setDateValueFromDate(updatedDateRange);
|
|
179
|
+
setDate(updatedDateRange);
|
|
180
|
+
if (lastAppliedValue.current.startDate !== dateValue.startDate || lastAppliedValue.current.endDate !== dateValue.endDate) {
|
|
181
|
+
if (dateAdapter.isValid(updatedDateRange == null ? void 0 : updatedDateRange.startDate) && preservedTime.current.startTime) {
|
|
182
|
+
updatedDateRange.startDate = dateAdapter.set(
|
|
183
|
+
updatedDateRange.startDate,
|
|
184
184
|
preservedTime.current.startTime
|
|
185
185
|
);
|
|
186
186
|
}
|
|
187
|
-
if ((
|
|
188
|
-
|
|
187
|
+
if (dateAdapter.isValid(updatedDateRange == null ? void 0 : updatedDateRange.endDate) && preservedTime.current.endTime) {
|
|
188
|
+
updatedDateRange.endDate = dateAdapter.set(
|
|
189
|
+
updatedDateRange.endDate,
|
|
190
|
+
preservedTime.current.endTime
|
|
191
|
+
);
|
|
189
192
|
}
|
|
193
|
+
onDateChange == null ? void 0 : onDateChange(event, updatedDateRange, {
|
|
194
|
+
startDate: startDateParseDetails,
|
|
195
|
+
endDate: endDateParseDetails
|
|
196
|
+
});
|
|
190
197
|
}
|
|
191
|
-
|
|
192
|
-
startDate: startDateError,
|
|
193
|
-
endDate: endDateError
|
|
194
|
-
};
|
|
195
|
-
if (hasStartOrEndDateChanged || lastError.current.startDate !== error.startDate || lastError.current.endDate !== error.endDate) {
|
|
196
|
-
const error2 = {
|
|
197
|
-
startDate: startDateError,
|
|
198
|
-
endDate: endDateError
|
|
199
|
-
};
|
|
200
|
-
onDateChange == null ? void 0 : onDateChange(event, newDate, error2);
|
|
201
|
-
lastError.current = error2;
|
|
202
|
-
}
|
|
198
|
+
lastAppliedValue.current = { ...newDateValue };
|
|
203
199
|
};
|
|
204
200
|
const handleStartInputChange = (event) => {
|
|
205
201
|
const newDateValue = { ...dateValue, startDate: event.target.value };
|
|
206
202
|
setDateValue(newDateValue);
|
|
207
203
|
startInputPropsOnChange == null ? void 0 : startInputPropsOnChange(event);
|
|
208
|
-
onChange == null ? void 0 : onChange(event
|
|
209
|
-
onDateValueChange == null ? void 0 : onDateValueChange(
|
|
204
|
+
onChange == null ? void 0 : onChange(event);
|
|
205
|
+
onDateValueChange == null ? void 0 : onDateValueChange(event, newDateValue);
|
|
210
206
|
};
|
|
211
207
|
const handleEndInputChange = (event) => {
|
|
212
208
|
const newDateValue = { ...dateValue, endDate: event.target.value };
|
|
213
209
|
setDateValue(newDateValue);
|
|
214
210
|
endInputPropsOnChange == null ? void 0 : endInputPropsOnChange(event);
|
|
215
|
-
onChange == null ? void 0 : onChange(event
|
|
216
|
-
onDateValueChange == null ? void 0 : onDateValueChange(
|
|
211
|
+
onChange == null ? void 0 : onChange(event);
|
|
212
|
+
onDateValueChange == null ? void 0 : onDateValueChange(event, newDateValue);
|
|
217
213
|
};
|
|
218
214
|
const handleStartInputFocus = (event) => {
|
|
219
215
|
setFocused(true);
|
|
@@ -293,8 +289,7 @@ const DateInputRange = forwardRef(
|
|
|
293
289
|
ref: handleStartInputRef,
|
|
294
290
|
tabIndex: isDisabled ? -1 : 0,
|
|
295
291
|
placeholder,
|
|
296
|
-
|
|
297
|
-
value: isReadOnly && !(dateValue == null ? void 0 : dateValue.startDate) ? emptyReadOnlyMarker : dateValue.startDate ?? "",
|
|
292
|
+
value: isReadOnly && !(dateValue == null ? void 0 : dateValue.startDate) ? emptyReadOnlyMarker : dateValue.startDate ?? dateAdapter.format(void 0, format, locale),
|
|
298
293
|
...restStartInputProps,
|
|
299
294
|
onBlur: handleStartInputBlur,
|
|
300
295
|
onChange: handleStartInputChange,
|
|
@@ -325,8 +320,7 @@ const DateInputRange = forwardRef(
|
|
|
325
320
|
ref: handleEndInputRef,
|
|
326
321
|
tabIndex: isDisabled ? -1 : 0,
|
|
327
322
|
placeholder,
|
|
328
|
-
|
|
329
|
-
value: isReadOnly && !(dateValue == null ? void 0 : dateValue.endDate) ? emptyReadOnlyMarker : dateValue.endDate ?? "",
|
|
323
|
+
value: isReadOnly && !(dateValue == null ? void 0 : dateValue.endDate) ? emptyReadOnlyMarker : dateValue.endDate ?? dateAdapter.format(void 0, format, locale),
|
|
330
324
|
...restEndInputProps,
|
|
331
325
|
onBlur: handleEndInputBlur,
|
|
332
326
|
onChange: handleEndInputChange,
|
|
@@ -346,5 +340,5 @@ const DateInputRange = forwardRef(
|
|
|
346
340
|
}
|
|
347
341
|
);
|
|
348
342
|
|
|
349
|
-
export { DateInputRange };
|
|
343
|
+
export { DateInputRange, DateParserField };
|
|
350
344
|
//# sourceMappingURL=DateInputRange.js.map
|