@salt-ds/date-components 1.1.1 → 1.1.3

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/css/salt-date-components.css +2 -2
  3. package/dist-cjs/calendar/Calendar.js +1 -1
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarGrid.js +1 -1
  6. package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
  7. package/dist-cjs/calendar/CalendarMonthHeader.js +1 -1
  8. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
  9. package/dist-cjs/calendar/CalendarNavigation.js +1 -1
  10. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  11. package/dist-cjs/calendar/internal/createAnnouncement.js +3 -3
  12. package/dist-cjs/calendar/internal/createAnnouncement.js.map +1 -1
  13. package/dist-cjs/calendar/useCalendarSelection.js +1 -1
  14. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  15. package/dist-cjs/date-input/DateInput.css.js +1 -1
  16. package/dist-cjs/date-input/DateInputRange.js +9 -10
  17. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  18. package/dist-cjs/date-input/DateInputSingle.js +1 -1
  19. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  20. package/dist-cjs/date-picker/DatePicker.js +1 -1
  21. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  22. package/dist-cjs/date-picker/DatePickerActions.js +3 -3
  23. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  24. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +3 -1
  25. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  26. package/dist-cjs/date-picker/DatePickerRangeInput.js +2 -2
  27. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  28. package/dist-cjs/date-picker/DatePickerSingleInput.js +2 -2
  29. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  30. package/dist-cjs/date-picker/DatePickerTrigger.js +1 -1
  31. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  32. package/dist-cjs/date-picker/useDatePicker.js +1 -1
  33. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  34. package/dist-es/calendar/Calendar.js +1 -1
  35. package/dist-es/calendar/Calendar.js.map +1 -1
  36. package/dist-es/calendar/CalendarGrid.js +1 -1
  37. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  38. package/dist-es/calendar/CalendarMonthHeader.js +1 -1
  39. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  40. package/dist-es/calendar/CalendarNavigation.js +1 -1
  41. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  42. package/dist-es/calendar/internal/createAnnouncement.js +3 -3
  43. package/dist-es/calendar/internal/createAnnouncement.js.map +1 -1
  44. package/dist-es/calendar/useCalendarSelection.js +1 -1
  45. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  46. package/dist-es/date-input/DateInput.css.js +1 -1
  47. package/dist-es/date-input/DateInputRange.js +9 -10
  48. package/dist-es/date-input/DateInputRange.js.map +1 -1
  49. package/dist-es/date-input/DateInputSingle.js +1 -1
  50. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  51. package/dist-es/date-picker/DatePicker.js +1 -1
  52. package/dist-es/date-picker/DatePicker.js.map +1 -1
  53. package/dist-es/date-picker/DatePickerActions.js +3 -3
  54. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  55. package/dist-es/date-picker/DatePickerOverlayProvider.js +3 -1
  56. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  57. package/dist-es/date-picker/DatePickerRangeInput.js +2 -2
  58. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  59. package/dist-es/date-picker/DatePickerSingleInput.js +2 -2
  60. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  61. package/dist-es/date-picker/DatePickerTrigger.js +1 -1
  62. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  63. package/dist-es/date-picker/useDatePicker.js +1 -1
  64. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  65. package/dist-types/date-input/DateInputRange.d.ts +9 -4
  66. package/package.json +4 -4
@@ -1 +1 @@
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 {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} 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<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\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: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\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?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\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: DateFrameworkType) => DateFrameworkType;\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: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\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 selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n const formattedDate = dateAdapter.format(date, \"dddd D MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":["useLocalization","useControlled","useCallback","useMemo","makePrefixer","useCalendarContext","clsx"],"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 {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} 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<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\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: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\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?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\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: DateFrameworkType) => DateFrameworkType;\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: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\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 selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n // Use a two-digit day so the accessible name contains the visible day text (WCAG 2.5.3 Label in Name).\n const formattedDate = dateAdapter.format(date, \"dddd DD MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":["useLocalization","useControlled","useCallback","useMemo","makePrefixer","useCalendarContext","clsx"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- 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 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 box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\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-borderStyle-solid);\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-borderStyle-solid);\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-borderStyle-solid);\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-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\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-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\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-borderStyle-solid);\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 /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-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-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-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=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-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-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-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-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 cursor: var(--salt-cursor-text);\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-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-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-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 column-gap: var(--salt-spacing-50);\n align-items: flex-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-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\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, var(--salt-text-letterSpacing));\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\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\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
3
+ 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 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 box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\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-borderStyle-solid);\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-borderStyle-solid);\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-borderStyle-solid);\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-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\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-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\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-borderStyle-solid);\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 /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-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-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-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=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-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-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-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-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 cursor: var(--salt-cursor-text);\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-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-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-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 column-gap: var(--salt-spacing-50);\n align-items: flex-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-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\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, var(--salt-text-letterSpacing));\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\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-lighter);\n}\n\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DateInput.css.js.map
@@ -10,13 +10,12 @@ var LocalizationProvider = require('../localization-provider/LocalizationProvide
10
10
  var DateInput = require('./DateInput.css.js');
11
11
 
12
12
  const withBaseName = core.makePrefixer("saltDateInput");
13
- var DateParserField = /* @__PURE__ */ ((DateParserField2) => {
14
- DateParserField2["START"] = "start";
15
- DateParserField2["END"] = "end";
16
- return DateParserField2;
17
- })(DateParserField || {});
13
+ const DateParserField = {
14
+ START: "start",
15
+ END: "end"
16
+ };
18
17
  const DateInputRange = react.forwardRef(
19
- (props, ref) => {
18
+ function DateInputRange2(props, ref) {
20
19
  const { dateAdapter } = LocalizationProvider.useLocalization();
21
20
  const {
22
21
  "aria-label": ariaLabel,
@@ -88,8 +87,8 @@ const DateInputRange = react.forwardRef(
88
87
  if (!defaultValue) {
89
88
  return void 0;
90
89
  }
91
- const { date: startDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.startDate, "start" /* START */) ?? {};
92
- const { date: endDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.endDate, "end" /* END */) ?? {};
90
+ const { date: startDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.startDate, DateParserField.START) ?? {};
91
+ const { date: endDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.endDate, DateParserField.END) ?? {};
93
92
  return {
94
93
  startDate,
95
94
  endDate
@@ -206,8 +205,8 @@ const DateInputRange = react.forwardRef(
206
205
  const endInputIsRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : endInputPropsRequired;
207
206
  const apply = (event) => {
208
207
  var _a, _b;
209
- const { date: startDate = void 0, ...startDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.startDate, "start" /* START */) ?? {};
210
- const { date: endDate = void 0, ...endDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.endDate, "end" /* END */) ?? {};
208
+ const { date: startDate = void 0, ...startDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.startDate, DateParserField.START) ?? {};
209
+ const { date: endDate = void 0, ...endDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.endDate, DateParserField.END) ?? {};
211
210
  const updatedDateRange = {
212
211
  startDate: ((_a = dateValue == null ? void 0 : dateValue.startDate) == null ? void 0 : _a.length) ? startDate : null,
213
212
  endDate: ((_b = dateValue == null ? void 0 : dateValue.endDate) == null ? void 0 : _b.length) ? endDate : null
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<\n InputProps,\n \"defaultValue\" | \"inputRef\" | \"name\" | \"value\" | \"onChange\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the start date input.\n */\n startName?: string;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the end date input.\n */\n endName?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n (props: DateInputRangeProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n startName,\n endInputProps = {},\n endName,\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={startName}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={endName}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","DateParserField","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Identifies the field being parsed\n */\nexport const DateParserField = {\n START: \"start\",\n END: \"end\",\n} as const;\n\nexport type DateParserField =\n (typeof DateParserField)[keyof typeof DateParserField];\n\n// Keeps `DateParserField.START` and `DateParserField.END` usable as types, as they were with the enum.\nexport declare namespace DateParserField {\n type START = typeof DateParserField.START;\n type END = typeof DateParserField.END;\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<\n InputProps,\n \"defaultValue\" | \"inputRef\" | \"name\" | \"value\" | \"onChange\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the start date input.\n */\n startName?: string;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the end date input.\n */\n endName?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n function DateInputRange(props, ref) {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n startName,\n endInputProps = {},\n endName,\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={startName}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={endName}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DateInputRange","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":";;;;;;;;;;;AAwCA,MAAM,YAAA,GAAeA,kBAAa,eAAe,CAAA;AAuB1C,MAAM,eAAA,GAAkB;AAAA,EAC7B,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK;AACP;AA2IO,MAAM,cAAA,GAAiBC,gBAAA;AAAA,EAC5B,SAASC,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,oCAAA,EAAgB;AACxC,IAAA,MAAM;AAAA,MACJ,YAAA,EAAc,SAAA;AAAA,MACd,iBAAA,EAAmB,kBAAA;AAAA,MACnB,kBAAA,EAAoB,mBAAA;AAAA,MACpB,QAAA,GAAW,KAAA;AAAA,MACX,SAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,EAAM,QAAA;AAAA,MACN,WAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,GAAS,aAAA;AAAA,MACT,YAAA,GAAe;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACX;AAAA,MACA,QAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,mBAAA,GAAsB,QAAA;AAAA,MACtB,YAAA;AAAA,MACA,kBAAkB,EAAC;AAAA,MACnB,SAAA;AAAA,MACA,gBAAgB,EAAC;AAAA,MACjB,OAAA;AAAA,MACA,aAAA,EAAe,iBAAA;AAAA,MACf,WAAA,EAAa,eAAA;AAAA,MACb,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,GAAc,OAAO,WAAA,EAAY;AAAA,MACjC,QAAA,EAAU,YAAA;AAAA,MACV,gBAAA,EAAkB,oBAAA;AAAA,MAClB,OAAA,GAAU,SAAA;AAAA,MACV,QAAA,GAAA,CAAW,qCAAU,SAAA,MACrB,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,aACV,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,SAAA,CAAA,KACb,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA,CAAA,GACT,WAAA,CAAY,WAAA;AAAA,QAAA,CACT,qCAAU,SAAA,MACT,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,OAAA,CAAA,KACV,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,eACb,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,OAAA;AAAA,OACjB,GACA,SAAA;AAAA,MACJ,GAAG;AAAA,KACL,GAAI,KAAA;AACJ,IAAA,MAAM,UAAA,GAAaC,aAAO,IAAI,CAAA;AAC9B,IAAA,MAAM,gBAAA,GAAmBC,eAAA,CAA2B,GAAA,EAAK,UAAU,CAAA;AAEnE,IAAA,MAAM,aAAA,GAAgBD,aAAyB,IAAI,CAAA;AACnD,IAAA,MAAM,mBAAA,GAAsBC,eAAA,CAAW,aAAA,EAAe,iBAAiB,CAAA;AACvE,IAAA,MAAM,WAAA,GAAcD,aAAyB,IAAI,CAAA;AACjD,IAAA,MAAM,iBAAA,GAAoBC,eAAA,CAAW,WAAA,EAAa,eAAe,CAAA;AAEjE,IAAA,MAAM,YAAA,GAAeC,UAAA,CAAM,eAAA,CAAgB,EAAE,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAaA,UAAA,CAAM,aAAA,CAAc,EAAE,CAAA;AACzC,IAAA,MAAM,mBAAmBA,UAAA,EAAM;AAC/B,IAAA,MAAM,iBAAiBA,UAAA,EAAM;AAE7B,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAKC,SAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,iBAAiB,CACrBC,UAAAA,EACA,UAEA,SAAA,GACI,SAAA,CAAUA,cAAa,EAAA,EAAI,KAAA,EAAO,MAAM,CAAA,GACxC,YAAY,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,CAAEA,UAAAA,IAAa,IAAI,MAAM,CAAA;AAEjE,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,kBAAA,CAAc;AAAA,MAC9C,UAAA,EAAY,SAAA;AAAA,MACZ,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,gBAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,kBAAA,CAAc;AAAA,MACpC,UAAA,EAAY,QAAA;AAAA;AAAA,MAEZ,OAAA,EAASC,cAAQ,MAAM;AACrB,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,OAAO,WAAA;AAAA,QACT;AACA,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,OAAO,MAAA;AAAA,QACT;AACA,QAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,MAAA,EAAU,GAClC,cAAA,CAAe,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,SAAA,EAAW,eAAA,CAAgB,KAAK,CAAA,IAAK,EAAC;AACrE,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,MAAA,EAAU,GAChC,cAAA,CAAe,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,OAAA,EAAS,eAAA,CAAgB,GAAG,CAAA,IAAK,EAAC;AACjE,QAAA,OAAO;AAAA,UACL,SAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,EAAG,EAAE,CAAA;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmBR,aAA4B,SAAS,CAAA;AAC9D,IAAA,MAAM,gBAAgBA,YAAA,CAGnB,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AACrC,IAAA,aAAA,CAAc,OAAA,GAAU;AAAA,MACtB,SAAA,EAAA,CACE,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAA,KAAa,WAAA,CAAY,OAAA,CAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAS,CAAA,GAClD,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,GAClC,IAAA;AAAA,MACN,OAAA,EAAA,CACE,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAA,KAAW,WAAA,CAAY,OAAA,CAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAO,CAAA,GAC9C,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAChC;AAAA,KACR;AACA,IAAA,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAyB;AACrD,MAAA,IAAI,YAAA,GAAe,EAAE,SAAA,EAAW,EAAA,EAAI,SAAS,EAAA,EAAG;AAChD,MAAA,IAAI,EAAC,mCAAS,SAAA,CAAA,EAAW;AACvB,QAAA,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,SAAA,EAAW,EAAA,EAAG;AAAA,MAClD,WAAW,CAAC,WAAA,CAAY,OAAA,CAAQ,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,SAAS,CAAA,EAAG;AACnD,QAAA,YAAA,GAAe;AAAA,UACb,GAAG,YAAA;AAAA,UACH,SAAA,EAAA,CAAW,uCAAW,SAAA,KAAa;AAAA,SACrC;AAAA,MACF,CAAA,MAAA,IAAW,mCAAS,SAAA,EAAW;AAC7B,QAAA,MAAM,0BAA0B,WAAA,CAAY,MAAA;AAAA,UAC1C,OAAA,CAAQ,SAAA;AAAA,UACR;AAAA,SACF;AACA,QAAA,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,SAAA,EAAW,uBAAA,EAAwB;AAAA,MACvE;AACA,MAAA,IAAI,EAAC,mCAAS,OAAA,CAAA,EAAS;AACrB,QAAA,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,EAAA,EAAG;AAAA,MAChD,WAAW,CAAC,WAAA,CAAY,OAAA,CAAQ,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,OAAO,CAAA,EAAG;AACjD,QAAA,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,OAAA,EAAA,CAAS,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,YAAW,EAAA,EAAG;AAAA,MACtE,YAAW,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,OAAA,KAAW,YAAY,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnE,QAAA,MAAM,wBAAwB,WAAA,CAAY,MAAA;AAAA,UACxC,OAAA,CAAQ,OAAA;AAAA,UACR;AAAA,SACF;AACA,QAAA,YAAA,GAAe,EAAE,GAAG,YAAA,EAAc,OAAA,EAAS,qBAAA,EAAsB;AAAA,MACnE;AAEA,MAAA,IACG,EAAC,6CAAc,SAAA,CAAA,IAAa,CAAC,EAAC,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,SAAA,CAAA,IACzC,CAAC,YAAA,CAAa,OAAA,IAAW,CAAC,EAAC,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aACvC,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,SAAA,OAAc,uCAAW,SAAA,CAAA,IAAA,CACvC,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,OAAA,OAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,CAAA,EACrC;AACA,QAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,IAAA,EAAM,YAAA,CAAA;AAC1B,QAAA,YAAA,CAAa,YAAY,CAAA;AAAA,MAC3B;AACA,MAAA,OAAO,YAAA;AAAA,IACT,CAAA;AAGA,IAAAS,eAAA,CAAU,MAAM;AACd,MAAA,gBAAA,CAAiB,OAAA,GAAU,qBAAqB,IAAI,CAAA;AAAA,IACtD,CAAA,EAAG,CAAC,IAAA,EAAM,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAA,EAAW,6BAAM,OAAA,EAAS,WAAA,CAAY,MAAA,EAAQ,MAAM,CAAC,CAAA;AAErE,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA;AAE5C,IAAA,MAAM;AAAA,MACJ,SAAA,EAAW;AAAA,QACT,kBAAA,EAAoB,oBAAA;AAAA,QACpB,iBAAA,EAAmB;AAAA,UACjB,EAAC;AAAA,MACL,QAAA,EAAU,iBAAA;AAAA,MACV,QAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,iBAAA;AAAA,MACX,gBAAA,EAAkB;AAAA,QAChBC,sBAAA,EAAkB;AAEtB,IAAA,MAAM,aAAa,YAAA,IAAgB,iBAAA;AACnC,IAAA,MAAM,aAAa,QAAA,IAAY,iBAAA;AAE/B,IAAA,MAAM,mBAAmB,yBAAA,IAA6B,oBAAA;AAEtD,IAAA,MAAM;AAAA,MACJ,kBAAA,EAAoB,0BAAA;AAAA,MACpB,iBAAA,EAAmB,yBAAA;AAAA,MACnB,YAAA,EAAc,wBAAA;AAAA,MACd,MAAA,EAAQ,qBAAA;AAAA,MACR,QAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAW,wBAAA;AAAA,MACX,OAAA,EAAS,sBAAA;AAAA,MACT,QAAA,EAAU,uBAAA;AAAA,MACV,GAAG;AAAA,KACL,GAAI,eAAA;AAEJ,IAAA,MAAM,oBAAA,GAAuB,oBACzB,CAAC,UAAA,EAAY,UAAU,CAAA,CAAE,QAAA,CAAS,iBAAiB,CAAA,GACnD,uBAAA;AAEJ,IAAA,MAAM;AAAA,MACJ,kBAAA,EAAoB,wBAAA;AAAA,MACpB,iBAAA,EAAmB,uBAAA;AAAA,MACnB,YAAA,EAAc,sBAAA;AAAA,MACd,MAAA,EAAQ,mBAAA;AAAA,MACR,QAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,sBAAA;AAAA,MACX,OAAA,EAAS,oBAAA;AAAA,MACT,QAAA,EAAU,qBAAA;AAAA,MACV,GAAG;AAAA,KACL,GAAI,aAAA;AAEJ,IAAA,MAAM,yBAAA,GACJ,wBAAA,KAA6B,MAAA,IAAa,SAAA,KAAc,MAAA;AAC1D,IAAA,MAAM,uBAAA,GACJ,sBAAA,KAA2B,MAAA,IAAa,SAAA,KAAc,MAAA;AAExD,IAAA,MAAM,mBAAA,GAAsB,4BACxB,MAAA,GACAC,SAAA;AAAA,MACE,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACF,IAAK,MAAA;AACT,IAAA,MAAM,iBAAA,GAAoB,0BACtB,MAAA,GACAA,SAAA;AAAA,MACE,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA,KACF,IAAK,MAAA;AACT,IAAA,MAAM,oBAAA,GACJA,SAAA;AAAA,MACE,oBAAA;AAAA,MACA,0BAAA;AAAA,MACA;AAAA,KACF,IAAK,MAAA;AACP,IAAA,MAAM,kBAAA,GACJA,SAAA;AAAA,MACE,oBAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA,KACF,IAAK,MAAA;AAEP,IAAA,MAAM,cAAA,GACJ,wBAAA,KACC,SAAA,GAAY,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,GAAK,YAAA,CAAA;AAE3C,IAAA,MAAM,YAAA,GACJ,sBAAA,KACC,SAAA,GAAY,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,GAAK,UAAA,CAAA;AAEzC,IAAA,MAAM,kBAAA,GAAqB,oBACvB,CAAC,UAAA,EAAY,UAAU,CAAA,CAAE,QAAA,CAAS,iBAAiB,CAAA,GACnD,qBAAA;AAEJ,IAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,KAA0B;AA/c7C,MAAA,IAAA,EAAA,EAAA,EAAA;AAgdM,MAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,MAAA,EAAW,GAAG,qBAAA,EAAsB,GAC5D,cAAA,CAAe,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,SAAA,EAAW,eAAA,CAAgB,KAAK,KAAK,EAAC;AAClE,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,MAAA,EAAW,GAAG,mBAAA,EAAoB,GACxD,cAAA,CAAe,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,EAAS,eAAA,CAAgB,GAAG,KAAK,EAAC;AAE9D,MAAA,MAAM,gBAAA,GAAuC;AAAA,QAC3C,SAAA,EAAA,CAAA,CAAW,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,SAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,UAAS,SAAA,GAAY,IAAA;AAAA,QACtD,OAAA,EAAA,CAAA,CAAS,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,UAAS,OAAA,GAAU;AAAA,OAClD;AACA,MAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,SAAS,CAAA,EAAG;AAClC,QAAA,gBAAA,CAAiB,YAAY,WAAA,CAAY,WAAA;AAAA,UACvC,SAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,aAAA,CAAc,QAAQ,SAAA,EAAW;AACnC,UAAA,gBAAA,CAAiB,YAAY,WAAA,CAAY,GAAA;AAAA,YACvC,gBAAA,CAAiB,SAAA;AAAA,YACjB,cAAc,OAAA,CAAQ;AAAA,WACxB;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA,EAAG;AAChC,QAAA,gBAAA,CAAiB,OAAA,GAAU,WAAA,CAAY,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AACpE,QAAA,IAAI,aAAA,CAAc,QAAQ,OAAA,EAAS;AACjC,UAAA,gBAAA,CAAiB,UAAU,WAAA,CAAY,GAAA;AAAA,YACrC,gBAAA,CAAiB,OAAA;AAAA,YACjB,cAAc,OAAA,CAAQ;AAAA,WACxB;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,gBAAA,GAAmB,qBAAqB,gBAAgB,CAAA;AAE9D,MAAA,OAAA,CAAQ,gBAAgB,CAAA;AAExB,MAAA,IACE,gBAAA,CAAiB,QAAQ,SAAA,KAAc,gBAAA,CAAiB,aACxD,gBAAA,CAAiB,OAAA,CAAQ,OAAA,KAAY,gBAAA,CAAiB,OAAA,EACtD;AACA,QAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,OAAO,gBAAA,EAAkB;AAAA,UACtC,SAAA,EAAW,qBAAA;AAAA,UACX,OAAA,EAAS;AAAA,SACX,CAAA;AACA,QAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,KAAA,EAAO,gBAAA,CAAA;AAC3B,QAAA,gBAAA,CAAiB,OAAA,GAAU,gBAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,sBAAA,GAA+D,CACnE,KAAA,KACG;AACH,MAAA,MAAM,eAAe,EAAE,GAAG,WAAW,SAAA,EAAW,KAAA,CAAM,OAAO,KAAA,EAAM;AACnE,MAAA,YAAA,CAAa,YAAY,CAAA;AACzB,MAAA,uBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,uBAAA,CAA0B,KAAA,CAAA;AAC1B,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AACX,MAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,KAAA,EAAO,YAAA,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,MAAM,oBAAA,GAA6D,CACjE,KAAA,KACG;AACH,MAAA,MAAM,eAAe,EAAE,GAAG,WAAW,OAAA,EAAS,KAAA,CAAM,OAAO,KAAA,EAAM;AACjE,MAAA,YAAA,CAAa,YAAY,CAAA;AACzB,MAAA,qBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,qBAAA,CAAwB,KAAA,CAAA;AACxB,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AACX,MAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,KAAA,EAAO,YAAA,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,MAAM,qBAAA,GAA6D,CACjE,KAAA,KACG;AACH,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,sBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,sBAAA,CAAyB,KAAA,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,mBAAA,GAA2D,CAC/D,KAAA,KACG;AACH,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,oBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,oBAAA,CAAuB,KAAA,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,MAAM,oBAAA,GAA4D,CAChE,KAAA,KACG;AACH,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,CAAA;AACX,MAAA,qBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,qBAAA,CAAwB,KAAA,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,kBAAA,GAA0D,CAAC,KAAA,KAAU;AACzE,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,CAAA;AACX,MAAA,mBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,mBAAA,CAAsB,KAAA,CAAA;AAAA,IACxB,CAAA;AAEA,IAAA,MAAM,uBAAA,GAAkE,CACtE,KAAA,KACG;AACH,MAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA;AAAA,MACb;AACA,MAAA,wBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,wBAAA,CAA2B,KAAA,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,MAAM,qBAAA,GAAgE,CACpE,KAAA,KACG;AACH,MAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA;AAAA,MACb;AACA,MAAA,sBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,sBAAA,CAAyB,KAAA,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,MAAM,sBAAA,GAA4D,CAChE,KAAA,KACG;AACH,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,UAAA,CAAW,OAAA,EAAS;AACvC,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,MAAM,QAAQ,aAAA,CAAc,OAAA;AAC5B,QAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,EAAA;AACP,QAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,iBAAA,CAAkB,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA,CAAA;AAAA,MAC3D;AACA,MAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,KAAA,CAAA;AAAA,IAChB,CAAA;AAEA,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWD,SAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb,aAAa,OAAO,CAAA;AAAA,UACpB;AAAA,YACE,CAAC,YAAA,CAAa,SAAS,CAAC,GAAG,CAAC,UAAA,IAAc,OAAA;AAAA,YAC1C,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,gBAAA,IAAoB,EAAE,CAAC,GAAG,gBAAA;AAAA,YACxC,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG;AAAA,WAC9B;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA,EAAK,gBAAA;AAAA,QACL,WAAA,EAAa,sBAAA;AAAA,QACZ,GAAG,IAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAE,cAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAa,KAAA;AAAA,cACb,kBAAA,EAAkB,oBAAA;AAAA,cAClB,iBAAA,EAAiB,mBAAA;AAAA,cACjB,cAAA,EACG,CAAC,UAAA,IAAc,gBAAA,KAAqB,OAAA,IAAY,MAAA;AAAA,cAEnD,YAAA,EAAY,cAAA;AAAA,cACZ,EAAA,EAAI,YAAA;AAAA,cACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAC/B,QAAA,EAAU,UAAA;AAAA,cACV,IAAA,EAAM,SAAA;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,mBAAA;AAAA,cACL,QAAA,EAAU,aAAa,EAAA,GAAK,CAAA;AAAA,cAC5B,WAAA;AAAA,cACA,KAAA,EACE,UAAA,IAAc,EAAC,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,SAAA,CAAA,GACtB,mBAAA,GACC,SAAA,CAAU,SAAA,IAAa,WAAA,CAAY,MAAA,CAAO,MAAA,EAAW,MAAM,CAAA;AAAA,cAEjE,GAAG,mBAAA;AAAA,cACJ,MAAA,EAAQ,oBAAA;AAAA,cACR,QAAA,EAAU,sBAAA;AAAA,cACV,SAAA,EAAW,uBAAA;AAAA,cACX,OAAA,EAAS,CAAC,UAAA,GAAa,qBAAA,GAAwB,MAAA;AAAA,cAC/C,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,yCACC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,MAAM,GAAG,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,0BACxCA,cAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAa,KAAA;AAAA,cACb,kBAAA,EAAkB,kBAAA;AAAA,cAClB,iBAAA,EAAiB,iBAAA;AAAA,cACjB,cAAA,EACG,CAAC,UAAA,IAAc,gBAAA,KAAqB,OAAA,IAAY,MAAA;AAAA,cAEnD,YAAA,EAAY,YAAA;AAAA,cACZ,EAAA,EAAI,UAAA;AAAA,cACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAC/B,QAAA,EAAU,UAAA;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,QAAA,EAAU,UAAA;AAAA,cACV,GAAA,EAAK,iBAAA;AAAA,cACL,QAAA,EAAU,aAAa,EAAA,GAAK,CAAA;AAAA,cAC5B,WAAA;AAAA,cACA,KAAA,EACE,UAAA,IAAc,EAAC,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,CAAA,GACtB,mBAAA,GACC,SAAA,CAAU,OAAA,IAAW,WAAA,CAAY,MAAA,CAAO,MAAA,EAAW,MAAM,CAAA;AAAA,cAE/D,GAAG,iBAAA;AAAA,cACJ,MAAA,EAAQ,kBAAA;AAAA,cACR,QAAA,EAAU,oBAAA;AAAA,cACV,SAAA,EAAW,qBAAA;AAAA,cACX,OAAA,EAAS,CAAC,UAAA,GAAa,mBAAA,GAAsB,MAAA;AAAA,cAC7C,QAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,uBAAuB,CAAA,EACjD,QAAA,EAAA;AAAA,YAAA,CAAC,UAAA,IAAc,gBAAA,oBACdC,cAAA,CAACC,oBAAA,EAAA,EAAgB,QAAQ,gBAAA,EAAkB,CAAA;AAAA,YAE5C;AAAA,WAAA,EACH,CAAA;AAAA,0BACAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,qBAAqB,CAAA,EAAG,CAAA;AAAA,0BACrDA,cAAA,CAAC,UAAK,EAAA,EAAI,gBAAA,EAAkB,WAAW,YAAA,CAAa,gBAAgB,GAAG,QAAA,EAAA,YAAA,EAEvE,CAAA;AAAA,0BACAA,cAAA,CAAC,UAAK,EAAA,EAAI,cAAA,EAAgB,WAAW,YAAA,CAAa,gBAAgB,GAAG,QAAA,EAAA,UAAA,EAErE;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;;;;;"}
@@ -11,7 +11,7 @@ var DateInput = require('./DateInput.css.js');
11
11
 
12
12
  const withBaseName = core.makePrefixer("saltDateInput");
13
13
  const DateInputSingle = react.forwardRef(
14
- (props, ref) => {
14
+ function DateInputSingle2(props, ref) {
15
15
  const { dateAdapter } = LocalizationProvider.useLocalization();
16
16
  const {
17
17
  bordered = false,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n (props: DateInputSingleProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n name,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={name}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n function DateInputSingle(props, ref) {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n name,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={name}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DateInputSingle","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
@@ -22,7 +22,7 @@ function hasDatePickerActions(children) {
22
22
  });
23
23
  }
24
24
  const DatePickerMain = react.forwardRef(
25
- (props, ref) => {
25
+ function DatePickerMain2(props, ref) {
26
26
  var _a, _b;
27
27
  const {
28
28
  createAnnouncement,