@salt-ds/date-components 1.1.0 → 1.1.2

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 (59) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/css/salt-date-components.css +6 -4
  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/CalendarWeekHeader.css.js +1 -1
  12. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  13. package/dist-cjs/date-input/DateInput.css.js +1 -1
  14. package/dist-cjs/date-input/DateInputRange.js +9 -10
  15. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  16. package/dist-cjs/date-input/DateInputSingle.js +1 -1
  17. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  18. package/dist-cjs/date-picker/DatePicker.js +1 -1
  19. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  20. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +3 -1
  21. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  22. package/dist-cjs/date-picker/DatePickerRangeInput.js +2 -2
  23. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  24. package/dist-cjs/date-picker/DatePickerSingleInput.js +2 -2
  25. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  26. package/dist-cjs/date-picker/DatePickerTrigger.js +1 -1
  27. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  28. package/dist-cjs/date-picker/useDatePicker.js +1 -1
  29. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  30. package/dist-es/calendar/Calendar.js +1 -1
  31. package/dist-es/calendar/Calendar.js.map +1 -1
  32. package/dist-es/calendar/CalendarGrid.js +1 -1
  33. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  34. package/dist-es/calendar/CalendarMonthHeader.js +1 -1
  35. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  36. package/dist-es/calendar/CalendarNavigation.js +1 -1
  37. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  38. package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
  39. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  40. package/dist-es/date-input/DateInput.css.js +1 -1
  41. package/dist-es/date-input/DateInputRange.js +9 -10
  42. package/dist-es/date-input/DateInputRange.js.map +1 -1
  43. package/dist-es/date-input/DateInputSingle.js +1 -1
  44. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  45. package/dist-es/date-picker/DatePicker.js +1 -1
  46. package/dist-es/date-picker/DatePicker.js.map +1 -1
  47. package/dist-es/date-picker/DatePickerOverlayProvider.js +3 -1
  48. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  49. package/dist-es/date-picker/DatePickerRangeInput.js +2 -2
  50. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  51. package/dist-es/date-picker/DatePickerSingleInput.js +2 -2
  52. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  53. package/dist-es/date-picker/DatePickerTrigger.js +1 -1
  54. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  55. package/dist-es/date-picker/useDatePicker.js +1 -1
  56. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  57. package/dist-types/date-input/DateInputRange.d.ts +9 -4
  58. package/dist-types/localization-provider/LocalizationProvider.d.ts +1 -1
  59. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerSingleInput.js","sources":["../src/date-picker/DatePickerSingleInput.tsx"],"sourcesContent":["import { Button, makePrefixer, useControlled } from \"@salt-ds/core\";\nimport {\n DateDetailError,\n type DateFrameworkType,\n type SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport {\n DateInputSingle,\n type DateInputSingleDetails,\n type DateInputSingleProps,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerSingleInput\");\n\n/**\n * Props for the DatePickerSingleInput component.\n */\nexport interface DatePickerSingleInputProps extends DateInputSingleProps {\n /**\n * Function to validate the entered date\n * @param date - The selected date\n * @param details - The details of date selection, either a valid date or error\n * @returns updated DateInputSingleDetails details\n */\n validate?: (\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => DateInputSingleDetails;\n}\n\nfunction defaultSingleValidation(\n dateAdapter: SaltDateAdapter,\n date: DateFrameworkType | null | undefined,\n details: DateInputSingleDetails,\n minDate?: DateFrameworkType,\n maxDate?: DateFrameworkType,\n): DateInputSingleDetails {\n if (!date) {\n details.errors = details.errors ?? [];\n const hasUnsetError = details.errors.some(\n (err) => err.type === DateDetailError.UNSET,\n );\n if (!hasUnsetError) {\n details.errors.push({\n type: DateDetailError.UNSET,\n message: \"no date defined\",\n });\n }\n } else {\n if (\n minDate &&\n dateAdapter.isValid(date) &&\n dateAdapter.compare(date, minDate) < 0\n ) {\n details.errors = details.errors ?? [];\n details.errors?.push({\n type: \"min-date\",\n message: \"is before min date\",\n });\n } else if (\n maxDate &&\n dateAdapter.isValid(date) &&\n dateAdapter.compare(date, maxDate) > 0\n ) {\n details.errors = details.errors ?? [];\n details.errors?.push({\n type: \"max-date\",\n message: \"is after max date\",\n });\n }\n }\n return details;\n}\n\nexport const DatePickerSingleInput = forwardRef<\n HTMLDivElement,\n DatePickerSingleInputProps\n>((props: DatePickerSingleInputProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n\n const {\n className,\n value: valueProp,\n validate,\n defaultValue,\n onDateValueChange,\n ...rest\n } = props;\n\n const {\n state: {\n selectedDate,\n disabled,\n readOnly,\n cancelled,\n minDate,\n maxDate,\n timezone,\n },\n helpers: { select },\n } = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState;\n const {\n state: { open },\n helpers: { setOpen },\n } = useDatePickerOverlay();\n\n const previousValue = useRef<typeof valueProp>();\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerSingleInput\",\n state: \"value\",\n });\n\n const handleCalendarButton: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n event.persist();\n setOpen(!open, event.nativeEvent, \"click\");\n event.stopPropagation();\n },\n [open, setOpen],\n );\n\n const handleDateChange = useCallback(\n (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => {\n const validatedDetails = validate\n ? validate(date, details)\n : defaultSingleValidation(dateAdapter, date, details, minDate, maxDate);\n select(event, date ?? null, validatedDetails);\n },\n [dateAdapter, minDate, maxDate, select, validate],\n );\n\n const handleDateValueChange = useCallback(\n (event: SyntheticEvent | null, newDateValue: string) => {\n setValue(newDateValue);\n onDateValueChange?.(event, newDateValue);\n },\n [onDateValueChange],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousValue.current = value;\n }\n }, [open]);\n\n useEffect(() => {\n if (cancelled) {\n setValue(previousValue?.current);\n }\n }, [cancelled]);\n\n return (\n <DateInputSingle\n value={value ?? \"\"}\n className={clsx(withBaseName(), className)}\n date={selectedDate ?? null}\n readOnly={readOnly}\n disabled={disabled}\n ref={ref}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n endAdornment={\n !readOnly && (\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-label=\"Open Calendar\"\n aria-expanded={open}\n >\n <CalendarIcon aria-hidden />\n </Button>\n )\n }\n timezone={timezone}\n {...rest}\n />\n );\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerSingleInput.js","sources":["../src/date-picker/DatePickerSingleInput.tsx"],"sourcesContent":["import { Button, makePrefixer, useControlled } from \"@salt-ds/core\";\nimport {\n DateDetailError,\n type DateFrameworkType,\n type SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport {\n DateInputSingle,\n type DateInputSingleDetails,\n type DateInputSingleProps,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerSingleInput\");\n\n/**\n * Props for the DatePickerSingleInput component.\n */\nexport interface DatePickerSingleInputProps extends DateInputSingleProps {\n /**\n * Function to validate the entered date\n * @param date - The selected date\n * @param details - The details of date selection, either a valid date or error\n * @returns updated DateInputSingleDetails details\n */\n validate?: (\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => DateInputSingleDetails;\n}\n\nfunction defaultSingleValidation(\n dateAdapter: SaltDateAdapter,\n date: DateFrameworkType | null | undefined,\n details: DateInputSingleDetails,\n minDate?: DateFrameworkType,\n maxDate?: DateFrameworkType,\n): DateInputSingleDetails {\n if (!date) {\n details.errors = details.errors ?? [];\n const hasUnsetError = details.errors.some(\n (err) => err.type === DateDetailError.UNSET,\n );\n if (!hasUnsetError) {\n details.errors.push({\n type: DateDetailError.UNSET,\n message: \"no date defined\",\n });\n }\n } else {\n if (\n minDate &&\n dateAdapter.isValid(date) &&\n dateAdapter.compare(date, minDate) < 0\n ) {\n details.errors = details.errors ?? [];\n details.errors?.push({\n type: \"min-date\",\n message: \"is before min date\",\n });\n } else if (\n maxDate &&\n dateAdapter.isValid(date) &&\n dateAdapter.compare(date, maxDate) > 0\n ) {\n details.errors = details.errors ?? [];\n details.errors?.push({\n type: \"max-date\",\n message: \"is after max date\",\n });\n }\n }\n return details;\n}\n\nexport const DatePickerSingleInput = forwardRef<\n HTMLDivElement,\n DatePickerSingleInputProps\n>(function DatePickerSingleInput(props, ref) {\n const { dateAdapter } = useLocalization();\n\n const {\n className,\n value: valueProp,\n validate,\n defaultValue,\n onDateValueChange,\n ...rest\n } = props;\n\n const {\n state: {\n selectedDate,\n disabled,\n readOnly,\n cancelled,\n minDate,\n maxDate,\n timezone,\n },\n helpers: { select },\n } = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState;\n const {\n state: { open },\n helpers: { setOpen },\n } = useDatePickerOverlay();\n\n const previousValue = useRef<typeof valueProp>(undefined);\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerSingleInput\",\n state: \"value\",\n });\n\n const handleCalendarButton: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n event.persist();\n setOpen(!open, event.nativeEvent, \"click\");\n event.stopPropagation();\n },\n [open, setOpen],\n );\n\n const handleDateChange = useCallback(\n (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => {\n const validatedDetails = validate\n ? validate(date, details)\n : defaultSingleValidation(dateAdapter, date, details, minDate, maxDate);\n select(event, date ?? null, validatedDetails);\n },\n [dateAdapter, minDate, maxDate, select, validate],\n );\n\n const handleDateValueChange = useCallback(\n (event: SyntheticEvent | null, newDateValue: string) => {\n setValue(newDateValue);\n onDateValueChange?.(event, newDateValue);\n },\n [onDateValueChange],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousValue.current = value;\n }\n }, [open]);\n\n useEffect(() => {\n if (cancelled) {\n setValue(previousValue?.current);\n }\n }, [cancelled]);\n\n return (\n <DateInputSingle\n value={value ?? \"\"}\n className={clsx(withBaseName(), className)}\n date={selectedDate ?? null}\n readOnly={readOnly}\n disabled={disabled}\n ref={ref}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n endAdornment={\n !readOnly && (\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-label=\"Open Calendar\"\n aria-expanded={open}\n >\n <CalendarIcon aria-hidden />\n </Button>\n )\n }\n timezone={timezone}\n {...rest}\n />\n );\n});\n"],"names":["DatePickerSingleInput"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { forwardRef } from 'react';
5
5
  import { useDatePickerOverlay } from './DatePickerOverlayProvider.js';
6
6
 
7
7
  const withBaseName = makePrefixer("saltDatePickerTrigger");
8
- const DatePickerTrigger = forwardRef((props, ref) => {
8
+ const DatePickerTrigger = forwardRef(function DatePickerTrigger2(props, ref) {
9
9
  const { children, className, ...rest } = props;
10
10
  const {
11
11
  state: { floatingUIResult },
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerTrigger.js","sources":["../src/date-picker/DatePickerTrigger.tsx"],"sourcesContent":["import { makePrefixer, useForkRef } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerTrigger\");\n\n/**\n * Props for the DatePickerTrigger component.\n */\nexport interface DatePickerTriggerProps {\n className?: string;\n children?: ReactNode;\n}\n\nexport const DatePickerTrigger = forwardRef<\n HTMLDivElement,\n DatePickerTriggerProps\n>((props: DatePickerTriggerProps, ref: React.Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n\n const {\n state: { floatingUIResult },\n helpers: { getReferenceProps },\n } = useDatePickerOverlay();\n\n const triggerRef = useForkRef<HTMLDivElement>(\n ref,\n floatingUIResult?.reference,\n );\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n ref={triggerRef}\n {...getReferenceProps(rest)}\n >\n {children}\n </div>\n );\n});\n"],"names":[],"mappings":";;;;;;AAKA,MAAM,YAAA,GAAe,aAAa,uBAAuB,CAAA;AAUlD,MAAM,iBAAA,GAAoB,UAAA,CAG/B,CAAC,KAAA,EAA+B,GAAA,KAAmC;AACnE,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AAEzC,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,EAAE,gBAAA,EAAiB;AAAA,IAC1B,OAAA,EAAS,EAAE,iBAAA;AAAkB,MAC3B,oBAAA,EAAqB;AAEzB,EAAA,MAAM,UAAA,GAAa,UAAA;AAAA,IACjB,GAAA;AAAA,IACA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB;AAAA,GACpB;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,MACzC,GAAA,EAAK,UAAA;AAAA,MACJ,GAAG,kBAAkB,IAAI,CAAA;AAAA,MAEzB;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"DatePickerTrigger.js","sources":["../src/date-picker/DatePickerTrigger.tsx"],"sourcesContent":["import { makePrefixer, useForkRef } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerTrigger\");\n\n/**\n * Props for the DatePickerTrigger component.\n */\nexport interface DatePickerTriggerProps {\n className?: string;\n children?: ReactNode;\n}\n\nexport const DatePickerTrigger = forwardRef<\n HTMLDivElement,\n DatePickerTriggerProps\n>(function DatePickerTrigger(props, ref) {\n const { children, className, ...rest } = props;\n\n const {\n state: { floatingUIResult },\n helpers: { getReferenceProps },\n } = useDatePickerOverlay();\n\n const triggerRef = useForkRef<HTMLDivElement>(\n ref,\n floatingUIResult?.reference,\n );\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n ref={triggerRef}\n {...getReferenceProps(rest)}\n >\n {children}\n </div>\n );\n});\n"],"names":["DatePickerTrigger"],"mappings":";;;;;;AAKA,MAAM,YAAA,GAAe,aAAa,uBAAuB,CAAA;AAUlD,MAAM,iBAAA,GAAoB,UAAA,CAG/B,SAASA,kBAAAA,CAAkB,OAAO,GAAA,EAAK;AACvC,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AAEzC,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,EAAE,gBAAA,EAAiB;AAAA,IAC1B,OAAA,EAAS,EAAE,iBAAA;AAAkB,MAC3B,oBAAA,EAAqB;AAEzB,EAAA,MAAM,UAAA,GAAa,UAAA;AAAA,IACjB,GAAA;AAAA,IACA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAkB;AAAA,GACpB;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,MACzC,GAAA,EAAK,UAAA;AAAA,MACJ,GAAG,kBAAkB,IAAI,CAAA;AAAA,MAEzB;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
@@ -28,7 +28,7 @@ function useDatePicker(props, ref) {
28
28
  onCancel,
29
29
  timezone
30
30
  } = props;
31
- const previousSelectedDate = useRef();
31
+ const previousSelectedDate = useRef(void 0);
32
32
  const incompleteRangeAnnouncementKeyRef = useRef(null);
33
33
  const datePickerRef = useRef(null);
34
34
  const containerRef = useForkRef(ref, datePickerRef);
@@ -1 +1 @@
1
- {"version":3,"file":"useDatePicker.js","sources":["../src/date-picker/useDatePicker.ts"],"sourcesContent":["import { useControlled, useForkRef, useFormFieldProps } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport {\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n createRangeSelectionAnnouncement,\n createSingleSelectionAnnouncement,\n} from \"../calendar/internal/createAnnouncement\";\nimport {\n type CreateAnnouncement,\n useDateSelectionAnnouncer,\n} from \"../calendar/useDateSelectionAnnouncer\";\nimport type {\n DateInputRangeDetails,\n DateInputSingleDetails,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport type {\n RangeDatePickerState,\n SingleDatePickerState,\n} from \"./DatePickerContext\";\nimport { DATE_PICKER_OVERLAY_ANNOUNCER_TARGET } from \"./DatePickerOverlay\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\ninterface UseDatePickerBaseProps {\n /**\n * Factory method for date selection live announcements or null to silence announcements\n */\n createAnnouncement?: CreateAnnouncement | null;\n /**\n * If `true`, the component is disabled.\n */\n disabled?: boolean;\n /**\n * If `true`, enables apply mode where selections are not committed until explicitly applied.\n * When using `DatePickerActions`, this is automatically set to `true`.\n */\n enableApply?: boolean;\n /**\n * Function to determine if a day is highlighted.\n * @param date - The date to check.\n * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.\n */\n isDayHighlighted?: (date: DateFrameworkType) => string | false | undefined;\n /**\n * Function to determine if a day is unselectable.\n * @param date - The date to check.\n * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.\n */\n isDayUnselectable?: (date: DateFrameworkType) => string | false | undefined;\n /** If `true`, the component is read-only. */\n readOnly?: boolean;\n /**\n * The minimum date for the range, default is 1900.\n */\n minDate?: DateFrameworkType;\n /**\n * The maximum date for the range, default is 2100.\n */\n maxDate?: DateFrameworkType;\n /**\n * Handler for when the date selection is cancelled.\n */\n onCancel?: () => void;\n /**\n * Timezone, if un-defined will take the timezone from passed date (or defaultSelectedDate/selectedDate)\n * Can also be set to \"default\" to use the default timezone of the date library\n * Can also be set to \"system\" to take the timezone of the local system.\n */\n timezone?: Timezone;\n}\n\n/**\n * Props for single date selection.\n */\nexport interface UseDatePickerSingleProps extends UseDatePickerBaseProps {\n /**\n * Single date selection.\n */\n selectionVariant: \"single\";\n /**\n * The selected date. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: SingleDateSelection | null;\n /**\n * The initial selected date, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: SingleDateSelection | null;\n /**\n * Handler called when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n * @param details - The selected date details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null,\n details?: DateInputSingleDetails,\n ) => void;\n /**\n * Handler called when the selected date is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n */\n onApply?: (event: SyntheticEvent, date: SingleDateSelection | null) => void;\n}\n\n/**\n * Props for date range selection.\n */\nexport interface UseDatePickerRangeProps extends UseDatePickerBaseProps {\n /**\n * Date range selection.\n */\n selectionVariant: \"range\";\n /**\n * The selected date range. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: DateRangeSelection | null;\n /**\n * The initial selected date range, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: DateRangeSelection | null;\n /**\n * Handler called when the selected date range changes.\n * @param event - The synthetic event.\n * @param date - The selected date range or null.\n * @param details - The selected date range details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details?: DateInputRangeDetails,\n ) => void;\n /**\n * Handler called when the selected date range is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date range.\n */\n onApply?: (event: SyntheticEvent, date: DateRangeSelection | null) => void;\n}\n\n/**\n * Props for the useDatePicker hook.\n */\nexport type UseDatePickerProps =\n | UseDatePickerSingleProps\n | UseDatePickerRangeProps;\n\n/**\n * Custom hook for managing date picker state.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n * @param props - The props for the date picker.\n * @param ref - The ref for the date picker container.\n * @returns The date picker state and helpers.\n */\nexport function useDatePicker(\n props: UseDatePickerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n): SingleDatePickerState | RangeDatePickerState {\n const {\n dateAdapter,\n defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate },\n } = useLocalization<DateFrameworkType>();\n const {\n createAnnouncement,\n readOnly = false,\n disabled,\n enableApply = false,\n selectionVariant,\n defaultSelectedDate,\n isDayHighlighted,\n isDayUnselectable,\n selectedDate: selectedDateProp,\n onSelectionChange,\n onApply,\n minDate = defaultMinDate,\n maxDate = defaultMaxDate,\n onCancel,\n timezone,\n } = props;\n\n const previousSelectedDate = useRef<typeof selectedDateProp>();\n const incompleteRangeAnnouncementKeyRef = useRef<string | null>(null);\n const datePickerRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, datePickerRef);\n\n const { announce } = useDateSelectionAnnouncer(\n createAnnouncement ??\n (selectionVariant === \"single\"\n ? createSingleSelectionAnnouncement\n : createRangeSelectionAnnouncement),\n dateAdapter,\n );\n\n const {\n state: { open },\n helpers: { setOpen, setOnDismiss },\n } = useDatePickerOverlay();\n\n const overlayAnnounceOptions = open\n ? { target: DATE_PICKER_OVERLAY_ANNOUNCER_TARGET }\n : undefined;\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"DatePicker\",\n state: \"selectedDate\",\n });\n\n const [cancelled, setCancelled] = useState<boolean>(false);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousSelectedDate.current = selectedDate;\n if (enableApply) {\n setOnDismiss(cancel);\n }\n setCancelled(false);\n }\n }, [enableApply, open, setOnDismiss, setCancelled]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: avoid excessive re-rendering\n useEffect(() => {\n if (cancelled) {\n setSelectedDate(previousSelectedDate?.current);\n }\n }, [cancelled, setSelectedDate]);\n\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnly || formFieldReadOnly || false;\n const isDisabled = disabled || formFieldDisabled || false;\n\n const applySingle = useCallback(\n (event: SyntheticEvent, date: SingleDateSelection | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: date,\n },\n overlayAnnounceOptions,\n );\n if (selectionVariant === \"single\") {\n onApply?.(event, date);\n }\n },\n [announce, overlayAnnounceOptions, selectionVariant, setOpen, onApply],\n );\n\n const checkAndAddError = useCallback(\n (\n date: DateFrameworkType | null | undefined,\n checkFunction:\n | ((date: DateFrameworkType) => string | false | undefined)\n | undefined,\n errorType: string,\n details: {\n errors?: { type: string; message: string | false | undefined }[];\n } = {},\n ) => {\n const errorMessage = date ? checkFunction?.(date) : false;\n if (errorMessage) {\n details.errors = details.errors ?? [];\n details.errors.push({\n type: errorType,\n message: errorMessage,\n });\n }\n },\n [],\n );\n\n const selectSingle = useCallback(\n (\n event: SyntheticEvent,\n date: SingleDateSelection | null,\n details: DateInputSingleDetails,\n ) => {\n setSelectedDate(date);\n checkAndAddError(date, isDayUnselectable, \"unselectable\", details);\n const canBeApplied =\n dateAdapter.isValid(date) && !details?.errors?.length;\n\n if (selectionVariant === \"single\") {\n onSelectionChange?.(event, date, details);\n }\n if (!enableApply && canBeApplied) {\n applySingle(event, date);\n }\n },\n [\n checkAndAddError,\n dateAdapter,\n applySingle,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const applyRange = useCallback(\n (event: SyntheticEvent, date: DateRangeSelection | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: date\n ? {\n startDate: date.startDate ?? undefined,\n endDate: date.endDate ?? undefined,\n }\n : null,\n },\n overlayAnnounceOptions,\n );\n if (selectionVariant === \"range\") {\n onApply?.(event, date);\n }\n },\n [announce, overlayAnnounceOptions, onApply, setOpen, selectionVariant],\n );\n\n const selectRange = useCallback(\n (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => {\n setSelectedDate(date);\n checkAndAddError(\n date?.startDate,\n isDayUnselectable,\n \"unselectable\",\n details?.startDate,\n );\n checkAndAddError(\n date?.endDate,\n isDayUnselectable,\n \"unselectable\",\n details?.endDate,\n );\n\n if (selectionVariant === \"range\") {\n onSelectionChange?.(event, date, details);\n }\n\n const hasValidStartDate = dateAdapter.isValid(date?.startDate);\n const hasValidEndDate = dateAdapter.isValid(date?.endDate);\n const hasStartDateErrors = Boolean(details?.startDate?.errors?.length);\n const hasEndDateErrors = Boolean(details?.endDate?.errors?.length);\n\n let incompleteRangeAnnouncementKey: string | null = null;\n let incompleteRangeSelection:\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | undefined;\n\n if (hasValidStartDate && !hasValidEndDate && !hasStartDateErrors) {\n incompleteRangeAnnouncementKey = `start:${dateAdapter.format(\n date?.startDate as DateFrameworkType,\n \"YYYY-MM-DD\",\n )}`;\n incompleteRangeSelection = {\n startDate: date?.startDate ?? undefined,\n endDate: undefined,\n };\n } else if (!hasValidStartDate && hasValidEndDate && !hasEndDateErrors) {\n incompleteRangeAnnouncementKey = `end:${dateAdapter.format(\n date?.endDate as DateFrameworkType,\n \"YYYY-MM-DD\",\n )}`;\n incompleteRangeSelection = {\n startDate: undefined,\n endDate: date?.endDate ?? undefined,\n };\n }\n\n if (incompleteRangeAnnouncementKey && incompleteRangeSelection) {\n if (\n incompleteRangeAnnouncementKeyRef.current !==\n incompleteRangeAnnouncementKey\n ) {\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: incompleteRangeSelection,\n },\n overlayAnnounceOptions,\n );\n incompleteRangeAnnouncementKeyRef.current =\n incompleteRangeAnnouncementKey;\n }\n } else {\n incompleteRangeAnnouncementKeyRef.current = null;\n }\n\n const isAValidRange =\n dateAdapter.isValid(date?.startDate) &&\n dateAdapter.isValid(date?.endDate);\n const isValidSelection =\n !details?.startDate?.errors?.length &&\n !details?.endDate?.errors?.length;\n const canBeApplied = isAValidRange && isValidSelection;\n if (!enableApply && canBeApplied) {\n applyRange(event, date);\n }\n },\n [\n checkAndAddError,\n announce,\n overlayAnnounceOptions,\n dateAdapter,\n applyRange,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const cancel = useCallback(\n (event?: Event) => {\n setCancelled(true);\n setOpen(false, event, \"cancel\");\n onCancel?.();\n },\n [setOpen, onCancel],\n );\n\n const returnValue = {\n state: {\n selectionVariant,\n selectedDate,\n cancelled,\n enableApply,\n disabled: isDisabled,\n readOnly: isReadOnly,\n containerRef,\n minDate,\n maxDate,\n timezone,\n },\n helpers: {\n cancel,\n isDayHighlighted,\n isDayUnselectable,\n },\n };\n if (props.selectionVariant === \"range\") {\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applyRange,\n select: selectRange,\n },\n } as RangeDatePickerState;\n }\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applySingle,\n select: selectSingle,\n },\n } as SingleDatePickerState;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDatePicker.js","sources":["../src/date-picker/useDatePicker.ts"],"sourcesContent":["import { useControlled, useForkRef, useFormFieldProps } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport {\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n createRangeSelectionAnnouncement,\n createSingleSelectionAnnouncement,\n} from \"../calendar/internal/createAnnouncement\";\nimport {\n type CreateAnnouncement,\n useDateSelectionAnnouncer,\n} from \"../calendar/useDateSelectionAnnouncer\";\nimport type {\n DateInputRangeDetails,\n DateInputSingleDetails,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport type {\n RangeDatePickerState,\n SingleDatePickerState,\n} from \"./DatePickerContext\";\nimport { DATE_PICKER_OVERLAY_ANNOUNCER_TARGET } from \"./DatePickerOverlay\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\ninterface UseDatePickerBaseProps {\n /**\n * Factory method for date selection live announcements or null to silence announcements\n */\n createAnnouncement?: CreateAnnouncement | null;\n /**\n * If `true`, the component is disabled.\n */\n disabled?: boolean;\n /**\n * If `true`, enables apply mode where selections are not committed until explicitly applied.\n * When using `DatePickerActions`, this is automatically set to `true`.\n */\n enableApply?: boolean;\n /**\n * Function to determine if a day is highlighted.\n * @param date - The date to check.\n * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.\n */\n isDayHighlighted?: (date: DateFrameworkType) => string | false | undefined;\n /**\n * Function to determine if a day is unselectable.\n * @param date - The date to check.\n * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.\n */\n isDayUnselectable?: (date: DateFrameworkType) => string | false | undefined;\n /** If `true`, the component is read-only. */\n readOnly?: boolean;\n /**\n * The minimum date for the range, default is 1900.\n */\n minDate?: DateFrameworkType;\n /**\n * The maximum date for the range, default is 2100.\n */\n maxDate?: DateFrameworkType;\n /**\n * Handler for when the date selection is cancelled.\n */\n onCancel?: () => void;\n /**\n * Timezone, if un-defined will take the timezone from passed date (or defaultSelectedDate/selectedDate)\n * Can also be set to \"default\" to use the default timezone of the date library\n * Can also be set to \"system\" to take the timezone of the local system.\n */\n timezone?: Timezone;\n}\n\n/**\n * Props for single date selection.\n */\nexport interface UseDatePickerSingleProps extends UseDatePickerBaseProps {\n /**\n * Single date selection.\n */\n selectionVariant: \"single\";\n /**\n * The selected date. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: SingleDateSelection | null;\n /**\n * The initial selected date, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: SingleDateSelection | null;\n /**\n * Handler called when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n * @param details - The selected date details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null,\n details?: DateInputSingleDetails,\n ) => void;\n /**\n * Handler called when the selected date is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n */\n onApply?: (event: SyntheticEvent, date: SingleDateSelection | null) => void;\n}\n\n/**\n * Props for date range selection.\n */\nexport interface UseDatePickerRangeProps extends UseDatePickerBaseProps {\n /**\n * Date range selection.\n */\n selectionVariant: \"range\";\n /**\n * The selected date range. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: DateRangeSelection | null;\n /**\n * The initial selected date range, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: DateRangeSelection | null;\n /**\n * Handler called when the selected date range changes.\n * @param event - The synthetic event.\n * @param date - The selected date range or null.\n * @param details - The selected date range details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details?: DateInputRangeDetails,\n ) => void;\n /**\n * Handler called when the selected date range is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date range.\n */\n onApply?: (event: SyntheticEvent, date: DateRangeSelection | null) => void;\n}\n\n/**\n * Props for the useDatePicker hook.\n */\nexport type UseDatePickerProps =\n | UseDatePickerSingleProps\n | UseDatePickerRangeProps;\n\n/**\n * Custom hook for managing date picker state.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n * @param props - The props for the date picker.\n * @param ref - The ref for the date picker container.\n * @returns The date picker state and helpers.\n */\nexport function useDatePicker(\n props: UseDatePickerProps,\n ref: React.ForwardedRef<HTMLDivElement>,\n): SingleDatePickerState | RangeDatePickerState {\n const {\n dateAdapter,\n defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate },\n } = useLocalization<DateFrameworkType>();\n const {\n createAnnouncement,\n readOnly = false,\n disabled,\n enableApply = false,\n selectionVariant,\n defaultSelectedDate,\n isDayHighlighted,\n isDayUnselectable,\n selectedDate: selectedDateProp,\n onSelectionChange,\n onApply,\n minDate = defaultMinDate,\n maxDate = defaultMaxDate,\n onCancel,\n timezone,\n } = props;\n\n const previousSelectedDate = useRef<typeof selectedDateProp>(undefined);\n const incompleteRangeAnnouncementKeyRef = useRef<string | null>(null);\n const datePickerRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, datePickerRef);\n\n const { announce } = useDateSelectionAnnouncer(\n createAnnouncement ??\n (selectionVariant === \"single\"\n ? createSingleSelectionAnnouncement\n : createRangeSelectionAnnouncement),\n dateAdapter,\n );\n\n const {\n state: { open },\n helpers: { setOpen, setOnDismiss },\n } = useDatePickerOverlay();\n\n const overlayAnnounceOptions = open\n ? { target: DATE_PICKER_OVERLAY_ANNOUNCER_TARGET }\n : undefined;\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"DatePicker\",\n state: \"selectedDate\",\n });\n\n const [cancelled, setCancelled] = useState<boolean>(false);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousSelectedDate.current = selectedDate;\n if (enableApply) {\n setOnDismiss(cancel);\n }\n setCancelled(false);\n }\n }, [enableApply, open, setOnDismiss, setCancelled]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: avoid excessive re-rendering\n useEffect(() => {\n if (cancelled) {\n setSelectedDate(previousSelectedDate?.current);\n }\n }, [cancelled, setSelectedDate]);\n\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnly || formFieldReadOnly || false;\n const isDisabled = disabled || formFieldDisabled || false;\n\n const applySingle = useCallback(\n (event: SyntheticEvent, date: SingleDateSelection | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: date,\n },\n overlayAnnounceOptions,\n );\n if (selectionVariant === \"single\") {\n onApply?.(event, date);\n }\n },\n [announce, overlayAnnounceOptions, selectionVariant, setOpen, onApply],\n );\n\n const checkAndAddError = useCallback(\n (\n date: DateFrameworkType | null | undefined,\n checkFunction:\n | ((date: DateFrameworkType) => string | false | undefined)\n | undefined,\n errorType: string,\n details: {\n errors?: { type: string; message: string | false | undefined }[];\n } = {},\n ) => {\n const errorMessage = date ? checkFunction?.(date) : false;\n if (errorMessage) {\n details.errors = details.errors ?? [];\n details.errors.push({\n type: errorType,\n message: errorMessage,\n });\n }\n },\n [],\n );\n\n const selectSingle = useCallback(\n (\n event: SyntheticEvent,\n date: SingleDateSelection | null,\n details: DateInputSingleDetails,\n ) => {\n setSelectedDate(date);\n checkAndAddError(date, isDayUnselectable, \"unselectable\", details);\n const canBeApplied =\n dateAdapter.isValid(date) && !details?.errors?.length;\n\n if (selectionVariant === \"single\") {\n onSelectionChange?.(event, date, details);\n }\n if (!enableApply && canBeApplied) {\n applySingle(event, date);\n }\n },\n [\n checkAndAddError,\n dateAdapter,\n applySingle,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const applyRange = useCallback(\n (event: SyntheticEvent, date: DateRangeSelection | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: date\n ? {\n startDate: date.startDate ?? undefined,\n endDate: date.endDate ?? undefined,\n }\n : null,\n },\n overlayAnnounceOptions,\n );\n if (selectionVariant === \"range\") {\n onApply?.(event, date);\n }\n },\n [announce, overlayAnnounceOptions, onApply, setOpen, selectionVariant],\n );\n\n const selectRange = useCallback(\n (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => {\n setSelectedDate(date);\n checkAndAddError(\n date?.startDate,\n isDayUnselectable,\n \"unselectable\",\n details?.startDate,\n );\n checkAndAddError(\n date?.endDate,\n isDayUnselectable,\n \"unselectable\",\n details?.endDate,\n );\n\n if (selectionVariant === \"range\") {\n onSelectionChange?.(event, date, details);\n }\n\n const hasValidStartDate = dateAdapter.isValid(date?.startDate);\n const hasValidEndDate = dateAdapter.isValid(date?.endDate);\n const hasStartDateErrors = Boolean(details?.startDate?.errors?.length);\n const hasEndDateErrors = Boolean(details?.endDate?.errors?.length);\n\n let incompleteRangeAnnouncementKey: string | null = null;\n let incompleteRangeSelection:\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | undefined;\n\n if (hasValidStartDate && !hasValidEndDate && !hasStartDateErrors) {\n incompleteRangeAnnouncementKey = `start:${dateAdapter.format(\n date?.startDate as DateFrameworkType,\n \"YYYY-MM-DD\",\n )}`;\n incompleteRangeSelection = {\n startDate: date?.startDate ?? undefined,\n endDate: undefined,\n };\n } else if (!hasValidStartDate && hasValidEndDate && !hasEndDateErrors) {\n incompleteRangeAnnouncementKey = `end:${dateAdapter.format(\n date?.endDate as DateFrameworkType,\n \"YYYY-MM-DD\",\n )}`;\n incompleteRangeSelection = {\n startDate: undefined,\n endDate: date?.endDate ?? undefined,\n };\n }\n\n if (incompleteRangeAnnouncementKey && incompleteRangeSelection) {\n if (\n incompleteRangeAnnouncementKeyRef.current !==\n incompleteRangeAnnouncementKey\n ) {\n announce(\n \"dateSelected\",\n {\n multiselect: false,\n selectedDate: incompleteRangeSelection,\n },\n overlayAnnounceOptions,\n );\n incompleteRangeAnnouncementKeyRef.current =\n incompleteRangeAnnouncementKey;\n }\n } else {\n incompleteRangeAnnouncementKeyRef.current = null;\n }\n\n const isAValidRange =\n dateAdapter.isValid(date?.startDate) &&\n dateAdapter.isValid(date?.endDate);\n const isValidSelection =\n !details?.startDate?.errors?.length &&\n !details?.endDate?.errors?.length;\n const canBeApplied = isAValidRange && isValidSelection;\n if (!enableApply && canBeApplied) {\n applyRange(event, date);\n }\n },\n [\n checkAndAddError,\n announce,\n overlayAnnounceOptions,\n dateAdapter,\n applyRange,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const cancel = useCallback(\n (event?: Event) => {\n setCancelled(true);\n setOpen(false, event, \"cancel\");\n onCancel?.();\n },\n [setOpen, onCancel],\n );\n\n const returnValue = {\n state: {\n selectionVariant,\n selectedDate,\n cancelled,\n enableApply,\n disabled: isDisabled,\n readOnly: isReadOnly,\n containerRef,\n minDate,\n maxDate,\n timezone,\n },\n helpers: {\n cancel,\n isDayHighlighted,\n isDayUnselectable,\n },\n };\n if (props.selectionVariant === \"range\") {\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applyRange,\n select: selectRange,\n },\n } as RangeDatePickerState;\n }\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applySingle,\n select: selectSingle,\n },\n } as SingleDatePickerState;\n}\n"],"names":[],"mappings":"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"}
@@ -19,11 +19,16 @@ export type DateInputRangeDetails = {
19
19
  endDate?: DateDetail;
20
20
  };
21
21
  /**
22
- * Enum to identify the field being parsed
22
+ * Identifies the field being parsed
23
23
  */
24
- export declare enum DateParserField {
25
- START = "start",
26
- END = "end"
24
+ export declare const DateParserField: {
25
+ readonly START: "start";
26
+ readonly END: "end";
27
+ };
28
+ export type DateParserField = (typeof DateParserField)[keyof typeof DateParserField];
29
+ export declare namespace DateParserField {
30
+ type START = typeof DateParserField.START;
31
+ type END = typeof DateParserField.END;
27
32
  }
28
33
  /**
29
34
  * Props for the DateInputRange component.
@@ -44,7 +44,7 @@ export interface LocalizationProviderProps<TDate extends DateFrameworkType = Dat
44
44
  export type LocalizationProviderContext<TDate extends DateFrameworkType = DateFrameworkType> = {
45
45
  [K in keyof LocalizationProviderValue<TDate>]: LocalizationProviderValue<TDate>[K] | null;
46
46
  };
47
- export declare const LocalizationProvider: <TDate extends DateFrameworkType = DateFrameworkType, TLocale = undefined>(props: LocalizationProviderProps<TDate, TLocale>) => import("react/jsx-runtime").JSX.Element;
47
+ export declare const LocalizationProvider: <TDate extends DateFrameworkType = DateFrameworkType, TLocale = undefined>(props: LocalizationProviderProps<TDate, TLocale>) => import("react").JSX.Element;
48
48
  /**
49
49
  * Custom hook to access the localization context.
50
50
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/date-components",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,23 +9,23 @@
9
9
  },
10
10
  "bugs": "https://github.com/jpmorganchase/salt-ds/issues",
11
11
  "main": "dist-cjs/index.js",
12
+ "typings": "dist-types/index.d.ts",
12
13
  "files": [
13
14
  "css",
14
15
  "dist-cjs",
15
16
  "dist-es",
16
- "dist-types",
17
- "CHANGELOG.md"
17
+ "dist-types"
18
18
  ],
19
19
  "sideEffects": [
20
20
  "*.css"
21
21
  ],
22
22
  "dependencies": {
23
23
  "@floating-ui/react": "^0.27.19",
24
- "@salt-ds/core": "^1.68.0",
25
- "@salt-ds/date-adapters": "^1.0.1",
26
- "@salt-ds/icons": "^1.18.2",
27
- "@salt-ds/styles": "0.4.0",
28
- "@salt-ds/window": "0.1.1",
24
+ "@salt-ds/core": "^1.73.0",
25
+ "@salt-ds/date-adapters": "^1.0.2",
26
+ "@salt-ds/icons": "^1.18.4",
27
+ "@salt-ds/styles": "0.4.2",
28
+ "@salt-ds/window": "0.1.2",
29
29
  "clsx": "^2.0.0"
30
30
  },
31
31
  "devDependencies": {
@@ -48,13 +48,13 @@
48
48
  }
49
49
  },
50
50
  "publishConfig": {
51
- "directory": "../../dist/salt-ds-date-components",
51
+ "main": "dist-cjs/index.js",
52
+ "module": "dist-es/index.js",
52
53
  "provenance": true
53
54
  },
54
55
  "scripts": {
55
56
  "build": "yarn node ../../scripts/build.mjs",
56
57
  "bundle:css": "yarn node ./scripts/bundleCSS.mjs"
57
58
  },
58
- "module": "dist-es/index.js",
59
- "typings": "dist-types/index.d.ts"
60
- }
59
+ "module": "dist-es/index.js"
60
+ }