@salt-ds/lab 1.0.0-alpha.55 → 1.0.0-alpha.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/css/salt-lab.css +44 -7
  3. package/dist-cjs/calendar/Calendar.js +12 -12
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarGrid.css.js +6 -0
  6. package/dist-cjs/calendar/CalendarGrid.css.js.map +1 -0
  7. package/dist-cjs/calendar/CalendarGrid.js +107 -0
  8. package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
  9. package/dist-cjs/calendar/CalendarNavigation.js +219 -201
  10. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  11. package/dist-cjs/calendar/CalendarWeekHeader.js +10 -4
  12. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  13. package/dist-cjs/calendar/internal/CalendarContext.js +6 -2
  14. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  15. package/dist-cjs/calendar/internal/CalendarDay.js +6 -9
  16. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  17. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  18. package/dist-cjs/calendar/internal/CalendarMonth.js +47 -54
  19. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  20. package/dist-cjs/calendar/internal/useFocusManagement.js +18 -18
  21. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  22. package/dist-cjs/calendar/internal/utils.js +33 -48
  23. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  24. package/dist-cjs/calendar/useCalendar.js +46 -38
  25. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  26. package/dist-cjs/calendar/useCalendarDay.js +15 -21
  27. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  28. package/dist-cjs/calendar/useCalendarSelection.js +44 -35
  29. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  30. package/dist-cjs/date-input/DateInput.css.js +1 -1
  31. package/dist-cjs/date-input/DateInputRange.js +102 -107
  32. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  33. package/dist-cjs/date-input/DateInputSingle.js +39 -51
  34. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  35. package/dist-cjs/date-picker/DatePicker.js +15 -13
  36. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  37. package/dist-cjs/date-picker/DatePickerActions.js +3 -8
  38. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  39. package/dist-cjs/date-picker/DatePickerContext.js +6 -2
  40. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  41. package/dist-cjs/date-picker/DatePickerOverlay.js +1 -0
  42. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  43. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +21 -8
  44. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  45. package/dist-cjs/date-picker/DatePickerRangeInput.js +77 -28
  46. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  47. package/dist-cjs/date-picker/DatePickerRangePanel.js +45 -40
  48. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  49. package/dist-cjs/date-picker/DatePickerSingleInput.js +123 -84
  50. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  51. package/dist-cjs/date-picker/DatePickerSinglePanel.js +17 -20
  52. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  53. package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
  54. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
  55. package/dist-cjs/date-picker/useDatePicker.js +60 -110
  56. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  57. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  58. package/dist-cjs/index.js +19 -20
  59. package/dist-cjs/index.js.map +1 -1
  60. package/dist-cjs/localization-provider/LocalizationProvider.js +48 -0
  61. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
  62. package/dist-cjs/overlay/OverlayHeader.css.js +6 -0
  63. package/dist-cjs/overlay/OverlayHeader.css.js.map +1 -0
  64. package/dist-cjs/overlay/OverlayHeader.js +35 -0
  65. package/dist-cjs/overlay/OverlayHeader.js.map +1 -0
  66. package/dist-cjs/system-status/SystemStatus.css.js +1 -1
  67. package/dist-cjs/tabs-next/TabListNext.css.js +1 -1
  68. package/dist-cjs/tabs-next/TabListNext.js +4 -0
  69. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  70. package/dist-es/calendar/Calendar.js +12 -12
  71. package/dist-es/calendar/Calendar.js.map +1 -1
  72. package/dist-es/calendar/CalendarGrid.css.js +4 -0
  73. package/dist-es/calendar/CalendarGrid.css.js.map +1 -0
  74. package/dist-es/calendar/CalendarGrid.js +105 -0
  75. package/dist-es/calendar/CalendarGrid.js.map +1 -0
  76. package/dist-es/calendar/CalendarNavigation.js +220 -202
  77. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  78. package/dist-es/calendar/CalendarWeekHeader.js +11 -5
  79. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  80. package/dist-es/calendar/internal/CalendarContext.js +6 -2
  81. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  82. package/dist-es/calendar/internal/CalendarDay.js +6 -9
  83. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  84. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  85. package/dist-es/calendar/internal/CalendarMonth.js +48 -55
  86. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  87. package/dist-es/calendar/internal/useFocusManagement.js +15 -15
  88. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  89. package/dist-es/calendar/internal/utils.js +32 -45
  90. package/dist-es/calendar/internal/utils.js.map +1 -1
  91. package/dist-es/calendar/useCalendar.js +40 -32
  92. package/dist-es/calendar/useCalendar.js.map +1 -1
  93. package/dist-es/calendar/useCalendarDay.js +11 -17
  94. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  95. package/dist-es/calendar/useCalendarSelection.js +40 -29
  96. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  97. package/dist-es/date-input/DateInput.css.js +1 -1
  98. package/dist-es/date-input/DateInputRange.js +101 -107
  99. package/dist-es/date-input/DateInputRange.js.map +1 -1
  100. package/dist-es/date-input/DateInputSingle.js +39 -51
  101. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  102. package/dist-es/date-picker/DatePicker.js +15 -13
  103. package/dist-es/date-picker/DatePicker.js.map +1 -1
  104. package/dist-es/date-picker/DatePickerActions.js +3 -8
  105. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  106. package/dist-es/date-picker/DatePickerContext.js +6 -2
  107. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  108. package/dist-es/date-picker/DatePickerOverlay.js +1 -0
  109. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  110. package/dist-es/date-picker/DatePickerOverlayProvider.js +21 -8
  111. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  112. package/dist-es/date-picker/DatePickerRangeInput.js +78 -30
  113. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  114. package/dist-es/date-picker/DatePickerRangePanel.js +44 -39
  115. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  116. package/dist-es/date-picker/DatePickerSingleInput.js +124 -85
  117. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  118. package/dist-es/date-picker/DatePickerSinglePanel.js +17 -20
  119. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  120. package/dist-es/date-picker/DatePickerTrigger.js +30 -0
  121. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
  122. package/dist-es/date-picker/useDatePicker.js +61 -111
  123. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  124. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  125. package/dist-es/index.js +8 -7
  126. package/dist-es/index.js.map +1 -1
  127. package/dist-es/localization-provider/LocalizationProvider.js +44 -0
  128. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
  129. package/dist-es/overlay/OverlayHeader.css.js +4 -0
  130. package/dist-es/overlay/OverlayHeader.css.js.map +1 -0
  131. package/dist-es/overlay/OverlayHeader.js +33 -0
  132. package/dist-es/overlay/OverlayHeader.js.map +1 -0
  133. package/dist-es/system-status/SystemStatus.css.js +1 -1
  134. package/dist-es/tabs-next/TabListNext.css.js +1 -1
  135. package/dist-es/tabs-next/TabListNext.js +5 -1
  136. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  137. package/dist-types/calendar/Calendar.d.ts +11 -6
  138. package/dist-types/calendar/CalendarGrid.d.ts +13 -0
  139. package/dist-types/calendar/CalendarNavigation.d.ts +9 -11
  140. package/dist-types/calendar/CalendarWeekHeader.d.ts +4 -3
  141. package/dist-types/calendar/index.d.ts +1 -2
  142. package/dist-types/calendar/internal/CalendarContext.d.ts +5 -6
  143. package/dist-types/calendar/internal/CalendarDay.d.ts +6 -8
  144. package/dist-types/calendar/internal/CalendarMonth.d.ts +5 -6
  145. package/dist-types/calendar/internal/useFocusManagement.d.ts +3 -4
  146. package/dist-types/calendar/internal/utils.d.ts +7 -11
  147. package/dist-types/calendar/useCalendar.d.ts +207 -55
  148. package/dist-types/calendar/useCalendarDay.d.ts +5 -7
  149. package/dist-types/calendar/useCalendarSelection.d.ts +92 -58
  150. package/dist-types/date-input/DateInputRange.d.ts +38 -56
  151. package/dist-types/date-input/DateInputSingle.d.ts +32 -49
  152. package/dist-types/date-input/index.d.ts +0 -1
  153. package/dist-types/date-picker/DatePicker.d.ts +23 -5
  154. package/dist-types/date-picker/DatePickerActions.d.ts +13 -12
  155. package/dist-types/date-picker/DatePickerContext.d.ts +42 -59
  156. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +10 -0
  157. package/dist-types/date-picker/DatePickerRangeInput.d.ts +13 -3
  158. package/dist-types/date-picker/DatePickerRangePanel.d.ts +17 -17
  159. package/dist-types/date-picker/DatePickerSingleInput.d.ts +12 -3
  160. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +11 -11
  161. package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
  162. package/dist-types/date-picker/index.d.ts +3 -2
  163. package/dist-types/date-picker/useDatePicker.d.ts +52 -59
  164. package/dist-types/index.d.ts +2 -0
  165. package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
  166. package/dist-types/localization-provider/index.d.ts +1 -0
  167. package/dist-types/overlay/OverlayHeader.d.ts +20 -0
  168. package/dist-types/overlay/index.d.ts +1 -0
  169. package/package.json +11 -3
  170. package/dist-cjs/calendar/CalendarDateGrid.css.js +0 -6
  171. package/dist-cjs/calendar/CalendarDateGrid.css.js.map +0 -1
  172. package/dist-cjs/calendar/CalendarDateGrid.js +0 -105
  173. package/dist-cjs/calendar/CalendarDateGrid.js.map +0 -1
  174. package/dist-cjs/calendar/formatDate.js +0 -51
  175. package/dist-cjs/calendar/formatDate.js.map +0 -1
  176. package/dist-cjs/date-input/utils.js +0 -63
  177. package/dist-cjs/date-input/utils.js.map +0 -1
  178. package/dist-es/calendar/CalendarDateGrid.css.js +0 -4
  179. package/dist-es/calendar/CalendarDateGrid.css.js.map +0 -1
  180. package/dist-es/calendar/CalendarDateGrid.js +0 -103
  181. package/dist-es/calendar/CalendarDateGrid.js.map +0 -1
  182. package/dist-es/calendar/formatDate.js +0 -48
  183. package/dist-es/calendar/formatDate.js.map +0 -1
  184. package/dist-es/date-input/utils.js +0 -57
  185. package/dist-es/date-input/utils.js.map +0 -1
  186. package/dist-types/calendar/CalendarDateGrid.d.ts +0 -10
  187. package/dist-types/calendar/formatDate.d.ts +0 -14
  188. package/dist-types/date-input/utils.d.ts +0 -43
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import {\n CalendarDate,\n CalendarDateTime,\n type DateValue,\n ZonedDateTime,\n isSameDay,\n} from \"@internationalized/date\";\nimport { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection = DateValue;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection = DateValue[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection = {\n /**\n * The start date of the range.\n */\n startDate?: DateValue | null;\n /**\n * The end date of the range.\n */\n endDate?: DateValue | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType =\n | SingleDateSelection\n | MultipleDateSelection\n | DateRangeSelection\n | null;\n\n/**\n * The default minimum year used by the calendar.\n */\nexport const CALENDAR_MIN_YEAR = 1900;\n\n/**\n * The default maximum year used by the calendar.\n */\nexport const CALENDAR_MAX_YEAR = 2100;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType(value: any): value is DateValue {\n return (\n value instanceof CalendarDate ||\n value instanceof CalendarDateTime ||\n value instanceof ZonedDateTime\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection(value: any): value is DateRangeSelection {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<SelectionVariantType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: DateValue | null;\n /**\n * The currently selected date.\n */\n selectedDate?: SelectionVariantType | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SelectionVariantType;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType | null,\n ) => void;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateValue) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps\n extends Omit<\n UseCalendarSelectionBaseProps<DateRangeSelection>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateValue) => DateValue;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps\n extends UseCalendarSelectionBaseProps<DateRangeSelection> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps\n extends UseCalendarSelectionBaseProps<MultipleDateSelection> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps\n extends UseCalendarSelectionBaseProps<SingleDateSelection> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiSelectProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionOffsetProps;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray(array: AllSelectionValueType, item: DateValue) {\n if (Array.isArray(array)) {\n if (array.find((element) => isSameDay(element, item))) {\n return array.filter((element) => !isSameDay(element, item));\n }\n return array.concat(item);\n }\n return [item];\n}\n\nconst updateRangeSelection = (\n currentSelectedDate: DateRangeSelection,\n newSelectedDate: DateValue,\n): DateRangeSelection => {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (base?.startDate && newSelectedDate.compare(base.startDate) < 0) {\n base = { startDate: newSelectedDate };\n } else if (base?.startDate && newSelectedDate.compare(base.startDate) >= 0) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n};\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectedDateChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: DateValue) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: DateValue) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: DateValue) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectedDateChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray(\n selectedDate as DateValue[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectedDateChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection(\n selectedDate as DateRangeSelection,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectedDateChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectedDateChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectedDateChange],\n );\n\n const isSelected = useCallback(\n (date: DateValue) => {\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n isSameDay(selectedDate, date)\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) => isSameDay(element, date))\n );\n default:\n return false;\n }\n },\n [selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n date.compare(selectedDate.startDate) > 0 &&\n date.compare(selectedDate.endDate) < 0\n );\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n hoveredDate.compare(selectedDate.startDate) > 0 &&\n ((date.compare(selectedDate.startDate) > 0 &&\n date.compare(hoveredDate) < 0) ||\n isSameDay(date, hoveredDate));\n\n const isValidDayHovered =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (date: DateValue) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n date.compare(startDate) >= 0 &&\n date.compare(endDate) <= 0 &&\n (!isDaySelectable || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay({ date }: { date: DateValue }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\n );\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["CalendarDate","CalendarDateTime","ZonedDateTime","makePrefixer","isSameDay","useControlled","useCallback","date","useMemo","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 type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<TDate extends DateFrameworkType> = TDate;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection<TDate extends DateFrameworkType> = TDate[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection<TDate extends DateFrameworkType> = {\n /**\n * The start date of the range.\n */\n startDate?: TDate | null;\n /**\n * The end date of the range.\n */\n endDate?: TDate | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType<TDate extends DateFrameworkType> =\n | SingleDateSelection<TDate>\n | MultipleDateSelection<TDate>\n | DateRangeSelection<TDate>\n | null;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType<TDate extends DateFrameworkType>(\n value: any,\n): value is TDate {\n return (\n !isMultipleDateSelection<TDate>(value) &&\n !isDateRangeSelection<TDate>(value)\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection<TDate extends DateFrameworkType>(\n value: any,\n): value is DateRangeSelection<TDate> {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection<TDate extends DateFrameworkType>(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection<TDate> {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<TDate extends DateFrameworkType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: TDate | null;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: TDate) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: TDate | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps<\n TDate extends DateFrameworkType,\n> extends Omit<\n UseCalendarSelectionBaseProps<TDate>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: TDate) => TDate;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: TDate) => TDate;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n /**\n * The currently selected date.\n */\n selectedDate?: MultipleDateSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: MultipleDateSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: MultipleDateSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * The currently selected date.\n */\n selectedDate?: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate> | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: SingleDateSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps<TDate extends DateFrameworkType> =\n | UseCalendarSelectionSingleProps<TDate>\n | UseCalendarSelectionMultiSelectProps<TDate>\n | UseCalendarSelectionRangeProps<TDate>\n | UseCalendarSelectionOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n array: AllSelectionValueType<TDate>,\n item: TDate,\n) {\n if (Array.isArray(array)) {\n const filteredArray = array.filter(\n (element) => !dateAdapter.isSame(element, item, \"day\"),\n );\n if (filteredArray.length === array.length) {\n return array.concat(item);\n }\n return filteredArray;\n }\n return [item];\n}\n\nfunction updateRangeSelection<TDate extends DateFrameworkType>(\n datePicker: SaltDateAdapter<TDate>,\n currentSelectedDate: DateRangeSelection<TDate> | undefined,\n newSelectedDate: TDate,\n): DateRangeSelection<TDate> {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) < 0\n ) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) >= 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n}\n\nexport function useCalendarSelection<TDate extends DateFrameworkType>(\n props: UseCalendarSelectionProps<TDate>,\n) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: TDate) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectionChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray<TDate>(\n dateAdapter,\n selectedDate as TDate[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectionChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection<TDate>(\n dateAdapter,\n selectedDate as DateRangeSelection<TDate>,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectionChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection<TDate> = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectionChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectionChange],\n );\n\n const isSelected = useCallback(\n (date: TDate) => {\n if (!selectedDate) {\n return false;\n }\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n dateAdapter.isSame(selectedDate, date, \"day\")\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) =>\n dateAdapter.isSame(element, date, \"day\"),\n )\n );\n default:\n return false;\n }\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: TDate | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: TDate) => {\n return !!hoveredDate && dateAdapter.isSame(date, hoveredDate, \"day\");\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, selectedDate.endDate) < 0\n );\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n dateAdapter.compare(hoveredDate, selectedDate.startDate) > 0 &&\n ((dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, hoveredDate) < 0) ||\n dateAdapter.isSame(date, hoveredDate, \"day\"));\n\n const isValidDayHovered =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return dateAdapter.isSame(selectedDate.startDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return dateAdapter.isSame(selectedDate.endDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (date: TDate) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n dateAdapter.compare(date, startDate) >= 0 &&\n dateAdapter.compare(date, endDate) <= 0 &&\n (!isDaySelectable || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay<TDate extends DateFrameworkType>({\n date,\n}: { date: TDate }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDaySelectable,\n },\n } = useCalendarContext<TDate>();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\n );\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["makePrefixer","useLocalization","useControlled","useCallback","useMemo","useCalendarContext","clsx"],"mappings":";;;;;;;;AAsDO,SAAS,2BACd,KACgB,EAAA;AAChB,EAAA,OACE,CAAC,uBAA+B,CAAA,KAAK,CACrC,IAAA,CAAC,qBAA4B,KAAK,CAAA;AAEtC;AAQO,SAAS,qBACd,KACoC,EAAA;AACpC,EAAA,OACE,SACA,OAAO,KAAA,KAAU,QAChB,KAAA,WAAA,IAAe,SAAS,SAAa,IAAA,KAAA,CAAA;AAE1C;AAOO,SAAS,wBAEd,KACuC,EAAA;AACvC,EACE,OAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CACnB,IAAA,KAAA,CAAM,MAAM,CAAC,IAAA,KAAS,0BAA2B,CAAA,IAAI,CAAC,CAAA;AAE1D;AAuKA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAEnD,SAAS,oBAAA,CACP,WACA,EAAA,KAAA,EACA,IACA,EAAA;AACA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,IAAA,MAAM,gBAAgB,KAAM,CAAA,MAAA;AAAA,MAC1B,CAAC,OAAY,KAAA,CAAC,YAAY,MAAO,CAAA,OAAA,EAAS,MAAM,KAAK;AAAA,KACvD;AACA,IAAI,IAAA,aAAA,CAAc,MAAW,KAAA,KAAA,CAAM,MAAQ,EAAA;AACzC,MAAO,OAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA;AAE1B,IAAO,OAAA,aAAA;AAAA;AAET,EAAA,OAAO,CAAC,IAAI,CAAA;AACd;AAEA,SAAS,oBAAA,CACP,UACA,EAAA,mBAAA,EACA,eAC2B,EAAA;AAC3B,EAAI,IAAA,IAAA,GAAO,EAAE,GAAG,mBAAoB,EAAA;AACpC,EAAI,IAAA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,SAAa,MAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,OAAS,CAAA,EAAA;AACpC,IAAO,IAAA,GAAA,EAAE,WAAW,eAAgB,EAAA;AAAA,GACtC,MAAA,IAAA,CACE,6BAAM,SACN,KAAA,UAAA,CAAW,QAAQ,eAAiB,EAAA,IAAA,CAAK,SAAS,CAAA,GAAI,CACtD,EAAA;AACA,IAAO,IAAA,GAAA,EAAE,WAAW,eAAgB,EAAA;AAAA,GACtC,MAAA,IAAA,CACE,6BAAM,SACN,KAAA,UAAA,CAAW,QAAQ,eAAiB,EAAA,IAAA,CAAK,SAAS,CAAA,IAAK,CACvD,EAAA;AACA,IAAA,IAAA,GAAO,EAAE,GAAG,IAAM,EAAA,OAAA,EAAS,eAAgB,EAAA;AAAA,GACtC,MAAA;AACL,IAAO,IAAA,GAAA,EAAE,WAAW,eAAgB,EAAA;AAAA;AAEtC,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,qBACd,KACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,eAAA;AAAA,IACb,YAAc,EAAA,gBAAA;AAAA,IACd,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA;AAAA;AAAA,GAGE,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAC/C,EAAA,MAAM,CAAC,YAAA,EAAc,oBAAoB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IACzD,UAAY,EAAA,gBAAA;AAAA,IACZ,OAAS,EAAA,mBAAA;AAAA,IACT,IAAM,EAAA,UAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,eACJ,GAAA,gBAAA,KAAqB,QAAW,GAAA,KAAA,CAAM,eAAkB,GAAA,KAAA,CAAA;AAC1D,EAAA,MAAM,aACJ,GAAA,gBAAA,KAAqB,QAAW,GAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,CAAA;AAExD,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,IAAgB,KAAA;AACf,MAAI,IAAA,gBAAA,KAAqB,YAAY,eAAiB,EAAA;AACpD,QAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA;AAE7B,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,CAAC,kBAAkB,eAAe;AAAA,GACpC;AAEA,EAAA,MAAM,gBAAmB,GAAAA,iBAAA;AAAA,IACvB,CAAC,IAAgB,KAAA;AACf,MAAI,IAAA,gBAAA,KAAqB,YAAY,aAAe,EAAA;AAClD,QAAA,OAAO,cAAc,IAAI,CAAA;AAAA;AAE3B,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,GAClC;AAEA,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,OAA0C,eAA2B,KAAA;AA9V1E,MAAA,IAAA,EAAA;AA+VM,MAAA,IAAI,CAAC,eAAA,IAAmB,eAAgB,CAAA,eAAe,CAAG,EAAA;AACxD,QAAA,QAAQ,gBAAkB;AAAA,UACxB,KAAK,QAAU,EAAA;AACb,YAAA,oBAAA,CAAqB,eAAe,CAAA;AACpC,YAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,eAAA,CAAA;AAC3B,YAAA;AAAA;AACF,UACA,KAAK,aAAe,EAAA;AAClB,YAAA,MAAM,kBAAqB,GAAA,oBAAA;AAAA,cACzB,WAAA;AAAA,cACA,YAAA;AAAA,cACA;AAAA,aACF;AACA,YAAA,oBAAA,CAAqB,kBAAkB,CAAA;AACvC,YAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,kBAAA,CAAA;AAC3B,YAAA;AAAA;AACF,UACA,KAAK,OAAS,EAAA;AACZ,YAAA,MAAM,YAAe,GAAA,oBAAA;AAAA,cACnB,WAAA;AAAA,cACA,YAAA;AAAA,cACA;AAAA,aACF;AACA,YAAA,oBAAA,CAAqB,YAAY,CAAA;AACjC,YAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,YAAA,CAAA;AAC3B,YAAA;AAAA;AACF,UACA,KAAK,QAAU,EAAA;AACb,YAAA,MAAM,aAA2C,GAAA;AAAA,cAC/C,SAAA,EAAW,mBAAmB,eAAe,CAAA;AAAA,cAC7C,OAAA,EAAS,iBAAiB,eAAe;AAAA,aAC3C;AACA,YAAA,oBAAA,CAAqB,aAAa,CAAA;AAClC,YAAM,CAAA,EAAA,GAAA,KAAA,CAAA,iBAAA,KAAN,+BAA0B,KAAO,EAAA,aAAA,CAAA;AACjC,YAAA;AAAA;AACF;AACF;AACF,KACF;AAAA,IACA,CAAC,eAAA,EAAiB,YAAc,EAAA,gBAAA,EAAkB,iBAAiB;AAAA,GACrE;AAEA,EAAA,MAAM,UAAa,GAAAA,iBAAA;AAAA,IACjB,CAAC,IAAgB,KAAA;AACf,MAAA,IAAI,CAAC,YAAc,EAAA;AACjB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,QAAQ,gBAAkB;AAAA,QACxB,KAAK,QAAA;AACH,UAAA,OACE,2BAA2B,YAAY,CAAA,IACvC,YAAY,MAAO,CAAA,YAAA,EAAc,MAAM,KAAK,CAAA;AAAA,QAEhD,KAAK,aAAA;AACH,UAAA,OACE,MAAM,OAAQ,CAAA,YAAY,CAC1B,IAAA,CAAC,CAAC,YAAa,CAAA,IAAA;AAAA,YAAK,CAAC,OACnB,KAAA,WAAA,CAAY,MAAO,CAAA,OAAA,EAAS,MAAM,KAAK;AAAA,WACzC;AAAA,QAEJ;AACE,UAAO,OAAA,KAAA;AAAA;AACX,KACF;AAAA,IACA,CAAC,WAAa,EAAA,gBAAA,EAAkB,YAAY;AAAA,GAC9C;AAEA,EAAA,MAAM,CAAC,WAAA,EAAa,mBAAmB,CAAA,GAAID,kBAAc,CAAA;AAAA,IACvD,UAAY,EAAA,eAAA;AAAA,IACZ,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,IAAM,EAAA,UAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,cAAiB,GAAAC,iBAAA;AAAA,IACrB,CAAC,OAAuB,IAAuB,KAAA;AAC7C,MAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,MAAA,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAsB,KAAO,EAAA,IAAA,CAAA;AAAA,KAC/B;AAAA,IACA,CAAC,mBAAmB;AAAA,GACtB;AAEA,EAAA,MAAM,SAAY,GAAAA,iBAAA;AAAA,IAChB,CAAC,IAAgB,KAAA;AACf,MAAA,OAAO,CAAC,CAAC,WAAA,IAAe,YAAY,MAAO,CAAA,IAAA,EAAM,aAAa,KAAK,CAAA;AAAA,KACrE;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,IAAgB,KAAA;AACf,MACG,IAAA,CAAA,gBAAA,KAAqB,OAAW,IAAA,gBAAA,KAAqB,QACtD,KAAA,oBAAA,CAAqB,YAAY,CACjC,KAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,SACd,CAAA,KAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,OACd,CAAA,EAAA;AACA,QAAA,OACE,WAAY,CAAA,OAAA,CAAQ,IAAM,EAAA,YAAA,CAAa,SAAS,CAAA,GAAI,CACpD,IAAA,WAAA,CAAY,OAAQ,CAAA,IAAA,EAAM,YAAa,CAAA,OAAO,CAAI,GAAA,CAAA;AAAA;AAGtD,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,GACjC;AACA,EAAA,MAAM,aAAgB,GAAAA,iBAAA;AAAA,IACpB,CAAC,IAAgB,KAAA;AACf,MAAA,IAAA,CACG,gBAAqB,KAAA,OAAA,IAAW,gBAAqB,KAAA,QAAA,KACtD,oBAAqB,CAAA,YAAY,CACjC,IAAA,YAAA,CAAa,SACb,IAAA,CAAC,YAAa,CAAA,OAAA,IACd,WACA,EAAA;AACA,QAAM,MAAA,cAAA,GACJ,WAAY,CAAA,OAAA,CAAQ,WAAa,EAAA,YAAA,CAAa,SAAS,CAAI,GAAA,CAAA,KACzD,WAAY,CAAA,OAAA,CAAQ,IAAM,EAAA,YAAA,CAAa,SAAS,CAAI,GAAA,CAAA,IACpD,WAAY,CAAA,OAAA,CAAQ,IAAM,EAAA,WAAW,CAAI,GAAA,CAAA,IACzC,WAAY,CAAA,MAAA,CAAO,IAAM,EAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAE/C,QAAA,MAAM,iBACJ,GAAA,CAAC,eAAmB,IAAA,eAAA,CAAgB,WAAW,CAAA;AAEjD,QAAA,OAAO,cAAkB,IAAA,iBAAA;AAAA;AAE3B,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA,CAAC,gBAAA,EAAkB,YAAc,EAAA,WAAA,EAAa,eAAe;AAAA,GAC/D;AAEA,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,IAAgB,KAAA;AACf,MACG,IAAA,CAAA,gBAAA,KAAqB,WAAW,gBAAqB,KAAA,QAAA,KACtD,qBAAqB,YAAY,CAAA,IACjC,aAAa,SACb,EAAA;AACA,QAAA,OAAO,WAAY,CAAA,MAAA,CAAO,YAAa,CAAA,SAAA,EAAW,MAAM,KAAK,CAAA;AAAA;AAE/D,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAA,MAAM,aAAgB,GAAAA,iBAAA;AAAA,IACpB,CAAC,IAAgB,KAAA;AACf,MACG,IAAA,CAAA,gBAAA,KAAqB,WAAW,gBAAqB,KAAA,QAAA,KACtD,qBAAqB,YAAY,CAAA,IACjC,aAAa,OACb,EAAA;AACA,QAAA,OAAO,WAAY,CAAA,MAAA,CAAO,YAAa,CAAA,OAAA,EAAS,MAAM,KAAK,CAAA;AAAA;AAE7D,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA,CAAC,kBAAkB,YAAY;AAAA,GACjC;AAEA,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,IAAgB,KAAA;AACf,MAAI,IAAA,WAAA,IAAe,qBAAqB,QAAU,EAAA;AAChD,QAAM,MAAA,SAAA,GAAY,mBAAmB,WAAW,CAAA;AAChD,QAAM,MAAA,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAE5C,QAAA,OACE,WAAY,CAAA,OAAA,CAAQ,IAAM,EAAA,SAAS,KAAK,CACxC,IAAA,WAAA,CAAY,OAAQ,CAAA,IAAA,EAAM,OAAO,CAAK,IAAA,CAAA,KACrC,CAAC,eAAA,IAAmB,gBAAgB,IAAI,CAAA,CAAA;AAAA;AAI7C,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA;AAAA,MACE,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAO,OAAAC,aAAA;AAAA,IACL,OAAO;AAAA,MACL,KAAO,EAAA;AAAA,QACL,YAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAS,EAAA;AAAA,QACP,eAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,eAAA;AAAA,QACA,aAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AACF,KACF,CAAA;AAAA,IACA;AAAA,MACE,YAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEO,SAAS,uBAAyD,CAAA;AAAA,EACvE;AACF,CAAoB,EAAA;AAClB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA;AAAA,MACP,eAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,eAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AACF,MACEC,kCAA0B,EAAA;AAE9B,EAAA,MAAM,WAAoD,GAAAF,iBAAA;AAAA,IACxD,CAAC,KAAU,KAAA;AACT,MAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAAA,KAC7B;AAAA,IACA,CAAC,MAAM,eAAe;AAAA,GACxB;AAEA,EAAA,MAAM,aAAyD,GAAAA,iBAAA;AAAA,IAC7D,CAAC,KAAU,KAAA;AACT,MAAA,QAAQ,MAAM,GAAK;AAAA,QACjB,KAAK,OAAA;AAAA,QACL,KAAK,OAAA;AACH,UAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAC3B,UAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AACzB,KACF;AAAA,IACA,CAAC,MAAM,eAAe;AAAA,GACxB;AAEA,EAAA,MAAM,eAAwD,GAAAA,iBAAA;AAAA,IAC5D,CAAC,KAAU,KAAA;AACT,MAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,MAAM,cAAc;AAAA,GACvB;AAEA,EAAA,MAAM,gBAAyD,GAAAA,iBAAA;AAAA,IAC7D,CAAC,KAAU,KAAA;AACT,MAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAM,MAAA,QAAA,GAAW,WAAW,IAAI,CAAA;AAChC,EAAM,MAAA,YAAA,GAAe,eAAe,IAAI,CAAA;AACxC,EAAM,MAAA,WAAA,GAAc,cAAc,IAAI,CAAA;AACtC,EAAM,MAAA,aAAA,GAAgB,gBAAgB,IAAI,CAAA;AAC1C,EAAM,MAAA,WAAA,GAAc,cAAc,IAAI,CAAA;AACtC,EAAM,MAAA,OAAA,GAAU,UAAU,IAAI,CAAA;AAC9B,EAAM,MAAA,aAAA,GAAgB,gBAAgB,IAAI,CAAA;AAE1C,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,QAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAU,EAAA;AAAA,MACR,WAAWG,SAAK,CAAA;AAAA,QACd,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAA;AAAA,QAC5B,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAA;AAAA,QAChC,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG,WAAA;AAAA,QAC/B,CAAC,YAAA,CAAa,eAAe,CAAC,GAAG,aAAA;AAAA,QACjC,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG,WAAA;AAAA,QAC/B,CAAC,YAAA,CAAa,SAAS,CAAC,GAAG,OAAA;AAAA,QAC3B,CAAC,YAAA,CAAa,eAAe,CAAC,GAAG;AAAA,OAClC,CAAA;AAAA,MACD,cACE,EAAA,QAAA,IAAY,WAAe,IAAA,aAAA,IAAiB,eACxC,MACA,GAAA,KAAA,CAAA;AAAA,MACN,iBACE,eAAmB,IAAA,CAAC,eAAgB,CAAA,IAAI,IAAI,MAAS,GAAA,KAAA;AAAA;AACzD,GACF;AACF;;;;;;;;"}
@@ -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 gap: var(--salt-spacing-50);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.saltDateInput:hover {\n background: var(--saltDateInput-background-hover, var(--input-background-hover));\n cursor: var(--salt-editable-cursor-hover);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-editable-borderStyle-hover);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-editable-borderStyle-active);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-editable-borderStyle-readonly);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-editable-borderStyle-disabled);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-hover);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-border-strong) var(--salt-editable-borderStyle-active) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-readonly);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-disabled);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n border-bottom-width: calc(var(--salt-size-border-strong) - var(--salt-size-border));\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-active: var(--salt-editable-primary-background-active);\n --input-background-hover: var(--salt-editable-primary-background-hover);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-primary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-active: var(--salt-editable-secondary-background-active);\n --input-background-hover: var(--salt-editable-secondary-background-active);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-secondary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-active: var(--salt-status-error-background);\n --input-background-hover: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-active: var(--salt-status-warning-background);\n --input-background-hover: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-active: var(--salt-status-success-background);\n --input-background-hover: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n background: var(--saltDateInput-background-active, var(--input-background-active));\n cursor: var(--salt-editable-cursor-active);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-editable-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-editable-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n margin-left: auto;\n align-items: end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: var(--salt-spacing-50);\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: min-content;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input */\n.saltDateInput-input::selection {\n background: var(--salt-content-foreground-highlight);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n";
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 gap: var(--salt-spacing-50);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.saltDateInput:hover {\n background: var(--saltDateInput-background-hover, var(--input-background-hover));\n cursor: var(--salt-editable-cursor-hover);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-editable-borderStyle-hover);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-editable-borderStyle-active);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-editable-borderStyle-readonly);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-editable-borderStyle-disabled);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-border) var(--salt-editable-borderStyle) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-hover);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-border-strong) var(--salt-editable-borderStyle-active) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-readonly);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-editable-borderStyle-disabled);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n border-bottom-width: calc(var(--salt-size-border-strong) - var(--salt-size-border));\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-active: var(--salt-editable-primary-background-active);\n --input-background-hover: var(--salt-editable-primary-background-hover);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-primary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-active: var(--salt-editable-secondary-background-active);\n --input-background-hover: var(--salt-editable-secondary-background-active);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-secondary-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-active: var(--salt-status-error-background);\n --input-background-hover: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-active: var(--salt-status-warning-background);\n --input-background-hover: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-active: var(--salt-status-success-background);\n --input-background-hover: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n background: var(--saltDateInput-background-active, var(--input-background-active));\n cursor: var(--salt-editable-cursor-active);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-editable-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-editable-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n margin-left: auto;\n align-items: end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: var(--salt-spacing-50);\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: min-content;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input */\n.saltDateInput-input::selection {\n background: var(--salt-content-foreground-highlight);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DateInput.css.js.map
@@ -1,60 +1,56 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var date = require('@internationalized/date');
5
4
  var core = require('@salt-ds/core');
6
5
  var styles = require('@salt-ds/styles');
7
6
  var window = require('@salt-ds/window');
8
7
  var clsx = require('clsx');
9
8
  var react = require('react');
10
- require('../calendar/Calendar.js');
11
- require('../calendar/CalendarNavigation.js');
12
- require('../calendar/CalendarWeekHeader.js');
13
- require('../calendar/CalendarDateGrid.js');
14
- require('../calendar/internal/CalendarContext.js');
15
- var formatDate = require('../calendar/formatDate.js');
16
- require('../calendar/useCalendarSelection.js');
9
+ var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
17
10
  var DateInput = require('./DateInput.css.js');
18
- var utils = require('./utils.js');
19
11
 
20
12
  const withBaseName = core.makePrefixer("saltDateInput");
13
+ var DateParserField = /* @__PURE__ */ ((DateParserField2) => {
14
+ DateParserField2["START"] = "start";
15
+ DateParserField2["END"] = "end";
16
+ return DateParserField2;
17
+ })(DateParserField || {});
21
18
  const DateInputRange = react.forwardRef(
22
- function DateInputRange2(props, ref) {
19
+ (props, ref) => {
20
+ const { dateAdapter } = LocalizationProvider.useLocalization();
23
21
  const {
24
22
  bordered = false,
25
23
  className,
26
24
  disabled,
27
25
  "aria-label": ariaLabel,
28
26
  date: dateProp,
29
- defaultDate = {},
27
+ defaultDate,
30
28
  onDateChange,
31
29
  value: valueProp,
32
- defaultValue = { startDate: "", endDate: "" },
30
+ locale,
31
+ format = "DD MMM YYYY",
32
+ defaultValue = {
33
+ startDate: dateAdapter.format(void 0, format, locale),
34
+ endDate: dateAdapter.format(void 0, format, locale)
35
+ },
33
36
  onChange,
34
37
  onClick,
35
38
  onDateValueChange,
36
39
  emptyReadOnlyMarker = "\u2014",
37
40
  endAdornment,
38
- format: formatProp,
39
41
  startInputProps = {},
40
42
  endInputProps = {},
41
43
  startInputRef: startInputRefProp,
42
44
  endInputRef: endInputRefProp,
43
- parse = utils.parseCalendarDate,
44
- placeholder = "dd mmm yyyy",
45
+ parse: parseProp,
46
+ placeholder = format.toLowerCase(),
45
47
  readOnly: readOnlyProp,
46
48
  validationStatus: validationStatusProp,
47
49
  variant = "primary",
48
- locale = formatDate.getCurrentLocale(),
49
- timeZone = date.getLocalTimeZone(),
50
50
  ...rest
51
51
  } = props;
52
52
  const wrapperRef = react.useRef(null);
53
53
  const handleWrapperRef = core.useForkRef(ref, wrapperRef);
54
- const lastError = react.useRef({
55
- startDate: false,
56
- endDate: false
57
- });
58
54
  const startInputRef = react.useRef(null);
59
55
  const handleStartInputRef = core.useForkRef(startInputRef, startInputRefProp);
60
56
  const endInputRef = react.useRef(null);
@@ -67,44 +63,77 @@ const DateInputRange = react.forwardRef(
67
63
  css: DateInput,
68
64
  window: targetWindow
69
65
  });
70
- const [date$1, setDate] = core.useControlled({
71
- controlled: dateProp,
72
- default: defaultDate,
73
- name: "DateInputRange",
74
- state: "date"
75
- });
66
+ const parseDateValue = (dateValue2, field) => {
67
+ const parseResult = parseProp ? parseProp(dateValue2 ?? "", field, format, locale) : dateAdapter.parse.bind(dateAdapter)(dateValue2 ?? "", format, locale);
68
+ const { date: date2, ...parseDetails } = parseResult;
69
+ return { date: date2, ...parseDetails };
70
+ };
76
71
  const [dateValue, setDateValue] = core.useControlled({
77
72
  controlled: valueProp,
78
73
  default: defaultValue,
79
74
  name: "DateInputRange",
80
75
  state: "dateValue"
81
76
  });
82
- const preservedTime = react.useRef({});
83
- preservedTime.current = utils.extractTimeFieldsFromDateRange(date$1);
84
- const format = react.useCallback(
85
- (date2) => {
86
- return formatProp ? formatProp(date2) : formatDate.formatDate(date2, locale, { timeZone });
87
- },
88
- [formatProp, locale, timeZone]
89
- );
77
+ const fallbackDate = react.useMemo(() => {
78
+ if (!defaultValue) {
79
+ return void 0;
80
+ }
81
+ const { date: startDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.startDate, "start" /* START */) ?? {};
82
+ const { date: endDate = void 0 } = parseDateValue(defaultValue == null ? void 0 : defaultValue.endDate, "end" /* END */) ?? {};
83
+ return {
84
+ startDate,
85
+ endDate
86
+ };
87
+ }, [defaultValue, dateAdapter, parseProp, format]);
88
+ const [date, setDate] = core.useControlled({
89
+ controlled: dateProp,
90
+ default: defaultDate ?? fallbackDate,
91
+ name: "DateInputRange",
92
+ state: "date"
93
+ });
94
+ const lastAppliedValue = react.useRef(dateValue);
95
+ const preservedTime = react.useRef({ startTime: null, endTime: null });
96
+ preservedTime.current = {
97
+ startTime: (date == null ? void 0 : date.startDate) && dateAdapter.isValid(date == null ? void 0 : date.startDate) ? dateAdapter.getTime(date.startDate) : null,
98
+ endTime: (date == null ? void 0 : date.endDate) && dateAdapter.isValid(date == null ? void 0 : date.endDate) ? dateAdapter.getTime(date.endDate) : null
99
+ };
90
100
  const setDateValueFromDate = (newDate) => {
91
101
  let newDateValue = { ...dateValue };
92
- const formattedStartDate = format((newDate == null ? void 0 : newDate.startDate) ?? null);
93
- if (formattedStartDate) {
94
- newDateValue = { ...newDateValue, startDate: formattedStartDate };
102
+ if ((newDate == null ? void 0 : newDate.startDate) && dateAdapter.isValid(newDate == null ? void 0 : newDate.startDate)) {
103
+ const formattedStartDateValue = dateAdapter.format(
104
+ newDate == null ? void 0 : newDate.startDate,
105
+ format,
106
+ locale
107
+ );
108
+ newDateValue = { ...dateValue, startDate: formattedStartDateValue };
109
+ } else if (!(newDate == null ? void 0 : newDate.startDate)) {
110
+ newDateValue = {
111
+ ...dateValue,
112
+ startDate: dateAdapter.format(void 0, format, locale)
113
+ };
95
114
  }
96
- const formattedEndDate = format((newDate == null ? void 0 : newDate.endDate) ?? null);
97
- if (formattedEndDate) {
98
- newDateValue = { ...newDateValue, endDate: formattedEndDate };
115
+ if ((newDate == null ? void 0 : newDate.endDate) && dateAdapter.isValid(newDate.endDate)) {
116
+ const formattedEndDateValue = dateAdapter.format(
117
+ newDate == null ? void 0 : newDate.endDate,
118
+ format,
119
+ locale
120
+ );
121
+ newDateValue = { ...newDateValue, endDate: formattedEndDateValue };
122
+ } else if (!(newDate == null ? void 0 : newDate.endDate)) {
123
+ newDateValue = {
124
+ ...newDateValue,
125
+ endDate: dateAdapter.format(void 0, format, locale)
126
+ };
99
127
  }
100
128
  if ((newDateValue == null ? void 0 : newDateValue.startDate) !== (dateValue == null ? void 0 : dateValue.startDate) || (newDateValue == null ? void 0 : newDateValue.endDate) !== (dateValue == null ? void 0 : dateValue.endDate)) {
101
- onDateValueChange == null ? void 0 : onDateValueChange(newDateValue, true);
129
+ onDateValueChange == null ? void 0 : onDateValueChange(null, newDateValue);
130
+ setDateValue(newDateValue);
102
131
  }
103
- setDateValue(newDateValue);
132
+ return newDateValue;
104
133
  };
105
134
  react.useEffect(() => {
106
- setDateValueFromDate(date$1);
107
- }, [date$1, date$1 == null ? void 0 : date$1.startDate, date$1 == null ? void 0 : date$1.endDate]);
135
+ setDateValueFromDate(date);
136
+ }, [date, date == null ? void 0 : date.startDate, date == null ? void 0 : date.endDate]);
108
137
  const [focused, setFocused] = react.useState(false);
109
138
  const {
110
139
  a11yProps: {
@@ -142,80 +171,47 @@ const DateInputRange = react.forwardRef(
142
171
  } = endInputProps;
143
172
  const endInputIsRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : endInputPropsRequired;
144
173
  const apply = (event) => {
145
- const { date: newStartDate, error: startDateError } = parse(
146
- dateValue.startDate ?? ""
147
- );
148
- const { date: newEndDate, error: endDateError } = parse(
149
- dateValue.endDate || ""
150
- );
151
- const hasDateChanged = (newDate2, oldDate) => {
152
- if (newDate2 && oldDate) {
153
- return newDate2.compare(oldDate) !== 0;
154
- }
155
- return newDate2 !== oldDate;
174
+ const { date: startDate = void 0, ...startDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.startDate, "start" /* START */) ?? {};
175
+ const { date: endDate = void 0, ...endDateParseDetails } = parseDateValue(dateValue == null ? void 0 : dateValue.endDate, "end" /* END */) ?? {};
176
+ const updatedDateRange = {
177
+ startDate,
178
+ endDate
156
179
  };
157
- const createNewDateRange = (startDate, endDate) => {
158
- if (!startDate && !endDate) {
159
- return null;
160
- }
161
- const dateRange = {};
162
- dateRange.startDate = startDate;
163
- dateRange.endDate = endDate;
164
- return dateRange;
165
- };
166
- const hasStartDateChanged = hasDateChanged(
167
- newStartDate,
168
- (date$1 == null ? void 0 : date$1.startDate) || null
169
- );
170
- const hasEndDateChanged = hasDateChanged(
171
- newEndDate,
172
- (date$1 == null ? void 0 : date$1.endDate) || null
173
- );
174
- const hasStartOrEndDateChanged = hasStartDateChanged || hasEndDateChanged;
175
- const newDate = createNewDateRange(
176
- newStartDate,
177
- newEndDate
178
- );
179
- if ((newDate == null ? void 0 : newDate.startDate) || (newDate == null ? void 0 : newDate.endDate)) {
180
- setDateValueFromDate(newDate);
181
- }
182
- if (hasStartOrEndDateChanged) {
183
- setDate(newDate);
184
- if ((newDate == null ? void 0 : newDate.startDate) && preservedTime.current.startTime) {
185
- newDate.startDate = newDate.startDate.set(
180
+ const newDateValue = setDateValueFromDate(updatedDateRange);
181
+ setDate(updatedDateRange);
182
+ if (lastAppliedValue.current.startDate !== dateValue.startDate || lastAppliedValue.current.endDate !== dateValue.endDate) {
183
+ if (dateAdapter.isValid(updatedDateRange == null ? void 0 : updatedDateRange.startDate) && preservedTime.current.startTime) {
184
+ updatedDateRange.startDate = dateAdapter.set(
185
+ updatedDateRange.startDate,
186
186
  preservedTime.current.startTime
187
187
  );
188
188
  }
189
- if ((newDate == null ? void 0 : newDate.endDate) && preservedTime.current.endTime) {
190
- newDate.endDate = newDate.endDate.set(preservedTime.current.endTime);
189
+ if (dateAdapter.isValid(updatedDateRange == null ? void 0 : updatedDateRange.endDate) && preservedTime.current.endTime) {
190
+ updatedDateRange.endDate = dateAdapter.set(
191
+ updatedDateRange.endDate,
192
+ preservedTime.current.endTime
193
+ );
191
194
  }
195
+ onDateChange == null ? void 0 : onDateChange(event, updatedDateRange, {
196
+ startDate: startDateParseDetails,
197
+ endDate: endDateParseDetails
198
+ });
192
199
  }
193
- const error = {
194
- startDate: startDateError,
195
- endDate: endDateError
196
- };
197
- if (hasStartOrEndDateChanged || lastError.current.startDate !== error.startDate || lastError.current.endDate !== error.endDate) {
198
- const error2 = {
199
- startDate: startDateError,
200
- endDate: endDateError
201
- };
202
- onDateChange == null ? void 0 : onDateChange(event, newDate, error2);
203
- lastError.current = error2;
204
- }
200
+ lastAppliedValue.current = { ...newDateValue };
205
201
  };
206
202
  const handleStartInputChange = (event) => {
207
203
  const newDateValue = { ...dateValue, startDate: event.target.value };
208
204
  setDateValue(newDateValue);
209
205
  startInputPropsOnChange == null ? void 0 : startInputPropsOnChange(event);
210
- onChange == null ? void 0 : onChange(event, newDateValue);
211
- onDateValueChange == null ? void 0 : onDateValueChange(newDateValue, false);
206
+ onChange == null ? void 0 : onChange(event);
207
+ onDateValueChange == null ? void 0 : onDateValueChange(event, newDateValue);
212
208
  };
213
209
  const handleEndInputChange = (event) => {
214
210
  const newDateValue = { ...dateValue, endDate: event.target.value };
215
211
  setDateValue(newDateValue);
216
212
  endInputPropsOnChange == null ? void 0 : endInputPropsOnChange(event);
217
- onChange == null ? void 0 : onChange(event, newDateValue);
218
- onDateValueChange == null ? void 0 : onDateValueChange(newDateValue, false);
213
+ onChange == null ? void 0 : onChange(event);
214
+ onDateValueChange == null ? void 0 : onDateValueChange(event, newDateValue);
219
215
  };
220
216
  const handleStartInputFocus = (event) => {
221
217
  setFocused(true);
@@ -295,8 +291,7 @@ const DateInputRange = react.forwardRef(
295
291
  ref: handleStartInputRef,
296
292
  tabIndex: isDisabled ? -1 : 0,
297
293
  placeholder,
298
- size: placeholder.length,
299
- value: isReadOnly && !(dateValue == null ? void 0 : dateValue.startDate) ? emptyReadOnlyMarker : dateValue.startDate ?? "",
294
+ value: isReadOnly && !(dateValue == null ? void 0 : dateValue.startDate) ? emptyReadOnlyMarker : dateValue.startDate ?? dateAdapter.format(void 0, format, locale),
300
295
  ...restStartInputProps,
301
296
  onBlur: handleStartInputBlur,
302
297
  onChange: handleStartInputChange,
@@ -327,8 +322,7 @@ const DateInputRange = react.forwardRef(
327
322
  ref: handleEndInputRef,
328
323
  tabIndex: isDisabled ? -1 : 0,
329
324
  placeholder,
330
- size: placeholder.length,
331
- value: isReadOnly && !(dateValue == null ? void 0 : dateValue.endDate) ? emptyReadOnlyMarker : dateValue.endDate ?? "",
325
+ value: isReadOnly && !(dateValue == null ? void 0 : dateValue.endDate) ? emptyReadOnlyMarker : dateValue.endDate ?? dateAdapter.format(void 0, format, locale),
332
326
  ...restEndInputProps,
333
327
  onBlur: handleEndInputBlur,
334
328
  onChange: handleEndInputChange,
@@ -349,4 +343,5 @@ const DateInputRange = react.forwardRef(
349
343
  );
350
344
 
351
345
  exports.DateInputRange = DateInputRange;
346
+ exports.DateParserField = DateParserField;
352
347
  //# sourceMappingURL=DateInputRange.js.map