@salt-ds/date-components 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/css/salt-date-components.css +1 -1
- package/dist-cjs/calendar/internal/createAnnouncement.js +3 -3
- package/dist-cjs/calendar/internal/createAnnouncement.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js +3 -3
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/calendar/internal/createAnnouncement.js +3 -3
- package/dist-es/calendar/internal/createAnnouncement.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +1 -1
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js +3 -3
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @salt-ds/date-components
|
|
2
2
|
|
|
3
|
+
## 1.1.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e009ed8: Fixed the `Calendar` day accessible name not matching the visible day text. The day's accessible name, selection announcements and `DatePickerActions` labels now use a two-digit day (e.g. "Monday 06 January 2025") to match the visible day.
|
|
8
|
+
- Updated dependencies [20db4be]
|
|
9
|
+
- Updated dependencies [0ac88c9]
|
|
10
|
+
- Updated dependencies [20db4be]
|
|
11
|
+
- Updated dependencies [3a74bce]
|
|
12
|
+
- Updated dependencies [20db4be]
|
|
13
|
+
- Updated dependencies [cdae245]
|
|
14
|
+
- Updated dependencies [cdae245]
|
|
15
|
+
- Updated dependencies [3a74bce]
|
|
16
|
+
- @salt-ds/core@1.74.0
|
|
17
|
+
|
|
3
18
|
## 1.1.2
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -13,10 +13,10 @@ function createSingleSelectionAnnouncement(announcementType, state, dateAdapter)
|
|
|
13
13
|
}
|
|
14
14
|
if (multiselect && Array.isArray(selectedDate)) {
|
|
15
15
|
const lastSelectedDate = selectedDate[selectedDate.length - 1];
|
|
16
|
-
return `${dateAdapter.format(lastSelectedDate, "dddd
|
|
16
|
+
return `${dateAdapter.format(lastSelectedDate, "dddd DD MMMM YYYY")}, selected, ${selectedDate.length} dates in selection`;
|
|
17
17
|
}
|
|
18
18
|
if (!multiselect && selectedDate) {
|
|
19
|
-
return `${dateAdapter.format(selectedDate, "dddd
|
|
19
|
+
return `${dateAdapter.format(selectedDate, "dddd DD MMMM YYYY")}, selected`;
|
|
20
20
|
}
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
@@ -64,7 +64,7 @@ function createRangeSelectionAnnouncement(announcementType, state, dateAdapter)
|
|
|
64
64
|
}
|
|
65
65
|
if (startDate && endDate) {
|
|
66
66
|
const multiselectSuffix = multiselect && Array.isArray(selectedDate) ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : ""}` : "";
|
|
67
|
-
return `Date range ${dateAdapter.format(startDate, "dddd
|
|
67
|
+
return `Date range ${dateAdapter.format(startDate, "dddd DD MMMM YYYY")} to ${dateAdapter.format(endDate, "dddd DD MMMM YYYY")}, selected${multiselectSuffix}`;
|
|
68
68
|
}
|
|
69
69
|
break;
|
|
70
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAnnouncement.js","sources":["../src/calendar/internal/createAnnouncement.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\n\nexport type AnnouncementType =\n | \"minFocusableDateExceeded\"\n | \"maxFocusableDateExceeded\"\n | \"dateSelected\"\n | \"visibleMonthChanged\";\n\nexport type AnnouncerMinMaxFocusState = Record<string, never>;\n\nexport interface AnnouncerVisibleMonthState {\n startVisibleMonth: DateFrameworkType;\n endVisibleMonth: DateFrameworkType;\n}\n\nexport interface AnnouncerRangeDateSelectedState {\n multiselect: boolean;\n selectedDate:\n | Array<{ startDate?: DateFrameworkType; endDate?: DateFrameworkType }>\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | null;\n}\n\nexport interface AnnouncerSingleDateSelectedState {\n multiselect: boolean;\n selectedDate: DateFrameworkType | DateFrameworkType[] | null;\n}\n\nexport type DateSelectionAnnouncerState =\n | AnnouncerSingleDateSelectedState\n | AnnouncerRangeDateSelectedState\n | AnnouncerVisibleMonthState\n | AnnouncerMinMaxFocusState;\n\nexport function createSingleSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerSingleDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n if (multiselect && Array.isArray(selectedDate)) {\n const lastSelectedDate = selectedDate[selectedDate.length - 1];\n return `${dateAdapter.format(lastSelectedDate, \"dddd
|
|
1
|
+
{"version":3,"file":"createAnnouncement.js","sources":["../src/calendar/internal/createAnnouncement.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\n\nexport type AnnouncementType =\n | \"minFocusableDateExceeded\"\n | \"maxFocusableDateExceeded\"\n | \"dateSelected\"\n | \"visibleMonthChanged\";\n\nexport type AnnouncerMinMaxFocusState = Record<string, never>;\n\nexport interface AnnouncerVisibleMonthState {\n startVisibleMonth: DateFrameworkType;\n endVisibleMonth: DateFrameworkType;\n}\n\nexport interface AnnouncerRangeDateSelectedState {\n multiselect: boolean;\n selectedDate:\n | Array<{ startDate?: DateFrameworkType; endDate?: DateFrameworkType }>\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | null;\n}\n\nexport interface AnnouncerSingleDateSelectedState {\n multiselect: boolean;\n selectedDate: DateFrameworkType | DateFrameworkType[] | null;\n}\n\nexport type DateSelectionAnnouncerState =\n | AnnouncerSingleDateSelectedState\n | AnnouncerRangeDateSelectedState\n | AnnouncerVisibleMonthState\n | AnnouncerMinMaxFocusState;\n\nexport function createSingleSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerSingleDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n if (multiselect && Array.isArray(selectedDate)) {\n const lastSelectedDate = selectedDate[selectedDate.length - 1];\n return `${dateAdapter.format(lastSelectedDate, \"dddd DD MMMM YYYY\")}, selected, ${selectedDate.length} dates in selection`;\n }\n if (!multiselect && selectedDate) {\n return `${dateAdapter.format(selectedDate as DateFrameworkType, \"dddd DD MMMM YYYY\")}, selected`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")}.`;\n }\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")} and ${dateAdapter.format(endVisibleMonth, \"MMMM YYYY\")}.`;\n }\n }\n}\n\nexport function createRangeSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerRangeDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n let startDate: DateFrameworkType | null | undefined;\n let endDate: DateFrameworkType | null | undefined;\n if (multiselect && Array.isArray(selectedDate)) {\n const last = selectedDate[selectedDate.length - 1];\n startDate = last.startDate;\n endDate = last.endDate;\n } else if (\n !multiselect &&\n selectedDate &&\n typeof selectedDate === \"object\"\n ) {\n const range = selectedDate as {\n startDate?: DateFrameworkType | null;\n endDate?: DateFrameworkType | null;\n };\n startDate = range.startDate;\n endDate = range.endDate;\n }\n if (startDate && !endDate) {\n return \"Select end date.\";\n }\n if (!startDate && endDate) {\n return \"Select start date.\";\n }\n if (startDate && endDate) {\n const multiselectSuffix =\n multiselect && Array.isArray(selectedDate)\n ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : \"\"}`\n : \"\";\n return `Date range ${dateAdapter.format(startDate, \"dddd DD MMMM YYYY\")} to ${dateAdapter.format(endDate, \"dddd DD MMMM YYYY\")}, selected${multiselectSuffix}`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")}.`;\n }\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")} and ${dateAdapter.format(endVisibleMonth, \"MMMM YYYY\")}.`;\n }\n }\n}\n\n/**\n * Creates navigation announcements for single selection (visibleMonthChanged, min/maxFocusableDateExceeded).\n * Used in DatePicker grid panels where dateSelected is handled by the parent DatePicker.\n */\nexport function createSingleNavigationAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n if (announcementType === \"dateSelected\") {\n return undefined;\n }\n return createSingleSelectionAnnouncement(\n announcementType,\n state,\n dateAdapter,\n );\n}\n\n/**\n * Creates navigation announcements for range selection (visibleMonthChanged, min/maxFocusableDateExceeded).\n * Used in DatePicker grid panels where dateSelected is handled by the parent DatePicker.\n */\nexport function createRangeNavigationAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n if (announcementType === \"dateSelected\") {\n return undefined;\n }\n return createRangeSelectionAnnouncement(announcementType, state, dateAdapter);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -292,7 +292,7 @@ function useCalendarSelectionDay({ date }) {
|
|
|
292
292
|
const hoveredStart = isHoveredStart(date);
|
|
293
293
|
const hoveredSpan = isHoveredSpan(date);
|
|
294
294
|
const hoveredEnd = isHoveredEnd(date);
|
|
295
|
-
const formattedDate = dateAdapter.format(date, "dddd
|
|
295
|
+
const formattedDate = dateAdapter.format(date, "dddd DD MMMM YYYY");
|
|
296
296
|
let ariaLabel = formattedDate;
|
|
297
297
|
if (selectionVariant === "single") {
|
|
298
298
|
if (selected) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\n isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n const formattedDate = dateAdapter.format(date, \"dddd D MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":["useLocalization","useControlled","useCallback","useMemo","makePrefixer","useCalendarContext","clsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\n isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n // Use a two-digit day so the accessible name contains the visible day text (WCAG 2.5.3 Label in Name).\n const formattedDate = dateAdapter.format(date, \"dddd DD MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":["useLocalization","useControlled","useCallback","useMemo","makePrefixer","useCalendarContext","clsx"],"mappings":"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"}
|
|
@@ -71,15 +71,15 @@ const DatePickerActions = react.forwardRef(function DatePickerActions2(props, re
|
|
|
71
71
|
if (Array.isArray(date)) {
|
|
72
72
|
selectedLabel = (date == null ? void 0 : date.length) === 0 ? "no dates selected" : `${date.length} single dates`;
|
|
73
73
|
} else {
|
|
74
|
-
selectedLabel = `${dateAdapter.format(date, "dddd
|
|
74
|
+
selectedLabel = `${dateAdapter.format(date, "dddd DD MMMM YYYY")}`;
|
|
75
75
|
}
|
|
76
76
|
} else if (selectionVariant === "range") {
|
|
77
77
|
const dateRange = selectedDate;
|
|
78
78
|
if (Array.isArray(dateRange)) {
|
|
79
79
|
selectedLabel = (dateRange == null ? void 0 : dateRange.length) === 0 ? "no dates selected" : `${dateRange.length} range dates`;
|
|
80
80
|
} else {
|
|
81
|
-
const startLabel = (dateRange == null ? void 0 : dateRange.startDate) ? dateAdapter.format(dateRange.startDate, "dddd
|
|
82
|
-
const endLabel = (dateRange == null ? void 0 : dateRange.endDate) ? dateAdapter.format(dateRange.endDate, "dddd
|
|
81
|
+
const startLabel = (dateRange == null ? void 0 : dateRange.startDate) ? dateAdapter.format(dateRange.startDate, "dddd DD MMMM YYYY") : "no start date";
|
|
82
|
+
const endLabel = (dateRange == null ? void 0 : dateRange.endDate) ? dateAdapter.format(dateRange.endDate, "dddd DD MMMM YYYY") : "no end date";
|
|
83
83
|
selectedLabel = `${startLabel} to ${endLabel}`;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport datePickerActions from \"./DatePickerActions.css\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerActions(\n props: DatePickerActionsProps<\"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n const { dateAdapter } = useLocalization();\n\n const stateAndHelpers = useDatePickerContext({\n selectionVariant,\n });\n\n const {\n state: { selectedDate },\n helpers: { cancel },\n } = stateAndHelpers;\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event.nativeEvent);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"range\") {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as RangeDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n } else {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as SingleDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n let selectedLabel = \"\";\n if (selectedDate === null || selectedDate === undefined) {\n selectedLabel = \"no date selected\";\n } else if (selectionVariant === \"single\") {\n const date = selectedDate as SingleDateSelection[] | SingleDateSelection;\n if (Array.isArray(date)) {\n selectedLabel =\n date?.length === 0\n ? \"no dates selected\"\n : `${date.length} single dates`;\n } else {\n selectedLabel = `${dateAdapter.format(date, \"dddd D MMMM YYYY\")}`;\n }\n } else if (selectionVariant === \"range\") {\n const dateRange = selectedDate as DateRangeSelection;\n if (Array.isArray(dateRange)) {\n selectedLabel =\n dateRange?.length === 0\n ? \"no dates selected\"\n : `${dateRange.length} range dates`;\n } else {\n const startLabel = dateRange?.startDate\n ? dateAdapter.format(dateRange.startDate, \"dddd D MMMM YYYY\")\n : \"no start date\";\n const endLabel = dateRange?.endDate\n ? dateAdapter.format(dateRange.endDate, \"dddd D MMMM YYYY\")\n : \"no end date\";\n selectedLabel = `${startLabel} to ${endLabel}`;\n }\n }\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n aria-label={`Cancel ${selectedLabel}`}\n appearance=\"bordered\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n aria-label={`Apply ${selectedLabel}`}\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerActions","useWindow","useComponentCssInjection","datePickerActions","useLocalization","useDatePickerContext","selectedDate","jsxs","clsx","jsx","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport datePickerActions from \"./DatePickerActions.css\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerActions(\n props: DatePickerActionsProps<\"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n const { dateAdapter } = useLocalization();\n\n const stateAndHelpers = useDatePickerContext({\n selectionVariant,\n });\n\n const {\n state: { selectedDate },\n helpers: { cancel },\n } = stateAndHelpers;\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event.nativeEvent);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"range\") {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as RangeDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n } else {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as SingleDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n let selectedLabel = \"\";\n if (selectedDate === null || selectedDate === undefined) {\n selectedLabel = \"no date selected\";\n } else if (selectionVariant === \"single\") {\n const date = selectedDate as SingleDateSelection[] | SingleDateSelection;\n if (Array.isArray(date)) {\n selectedLabel =\n date?.length === 0\n ? \"no dates selected\"\n : `${date.length} single dates`;\n } else {\n selectedLabel = `${dateAdapter.format(date, \"dddd DD MMMM YYYY\")}`;\n }\n } else if (selectionVariant === \"range\") {\n const dateRange = selectedDate as DateRangeSelection;\n if (Array.isArray(dateRange)) {\n selectedLabel =\n dateRange?.length === 0\n ? \"no dates selected\"\n : `${dateRange.length} range dates`;\n } else {\n const startLabel = dateRange?.startDate\n ? dateAdapter.format(dateRange.startDate, \"dddd DD MMMM YYYY\")\n : \"no start date\";\n const endLabel = dateRange?.endDate\n ? dateAdapter.format(dateRange.endDate, \"dddd DD MMMM YYYY\")\n : \"no end date\";\n selectedLabel = `${startLabel} to ${endLabel}`;\n }\n }\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n aria-label={`Cancel ${selectedLabel}`}\n appearance=\"bordered\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n aria-label={`Apply ${selectedLabel}`}\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerActions","useWindow","useComponentCssInjection","datePickerActions","useLocalization","useDatePickerContext","selectedDate","jsxs","clsx","jsx","Button"],"mappings":"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"}
|
|
@@ -11,10 +11,10 @@ function createSingleSelectionAnnouncement(announcementType, state, dateAdapter)
|
|
|
11
11
|
}
|
|
12
12
|
if (multiselect && Array.isArray(selectedDate)) {
|
|
13
13
|
const lastSelectedDate = selectedDate[selectedDate.length - 1];
|
|
14
|
-
return `${dateAdapter.format(lastSelectedDate, "dddd
|
|
14
|
+
return `${dateAdapter.format(lastSelectedDate, "dddd DD MMMM YYYY")}, selected, ${selectedDate.length} dates in selection`;
|
|
15
15
|
}
|
|
16
16
|
if (!multiselect && selectedDate) {
|
|
17
|
-
return `${dateAdapter.format(selectedDate, "dddd
|
|
17
|
+
return `${dateAdapter.format(selectedDate, "dddd DD MMMM YYYY")}, selected`;
|
|
18
18
|
}
|
|
19
19
|
break;
|
|
20
20
|
}
|
|
@@ -62,7 +62,7 @@ function createRangeSelectionAnnouncement(announcementType, state, dateAdapter)
|
|
|
62
62
|
}
|
|
63
63
|
if (startDate && endDate) {
|
|
64
64
|
const multiselectSuffix = multiselect && Array.isArray(selectedDate) ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : ""}` : "";
|
|
65
|
-
return `Date range ${dateAdapter.format(startDate, "dddd
|
|
65
|
+
return `Date range ${dateAdapter.format(startDate, "dddd DD MMMM YYYY")} to ${dateAdapter.format(endDate, "dddd DD MMMM YYYY")}, selected${multiselectSuffix}`;
|
|
66
66
|
}
|
|
67
67
|
break;
|
|
68
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAnnouncement.js","sources":["../src/calendar/internal/createAnnouncement.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\n\nexport type AnnouncementType =\n | \"minFocusableDateExceeded\"\n | \"maxFocusableDateExceeded\"\n | \"dateSelected\"\n | \"visibleMonthChanged\";\n\nexport type AnnouncerMinMaxFocusState = Record<string, never>;\n\nexport interface AnnouncerVisibleMonthState {\n startVisibleMonth: DateFrameworkType;\n endVisibleMonth: DateFrameworkType;\n}\n\nexport interface AnnouncerRangeDateSelectedState {\n multiselect: boolean;\n selectedDate:\n | Array<{ startDate?: DateFrameworkType; endDate?: DateFrameworkType }>\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | null;\n}\n\nexport interface AnnouncerSingleDateSelectedState {\n multiselect: boolean;\n selectedDate: DateFrameworkType | DateFrameworkType[] | null;\n}\n\nexport type DateSelectionAnnouncerState =\n | AnnouncerSingleDateSelectedState\n | AnnouncerRangeDateSelectedState\n | AnnouncerVisibleMonthState\n | AnnouncerMinMaxFocusState;\n\nexport function createSingleSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerSingleDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n if (multiselect && Array.isArray(selectedDate)) {\n const lastSelectedDate = selectedDate[selectedDate.length - 1];\n return `${dateAdapter.format(lastSelectedDate, \"dddd
|
|
1
|
+
{"version":3,"file":"createAnnouncement.js","sources":["../src/calendar/internal/createAnnouncement.ts"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\n\nexport type AnnouncementType =\n | \"minFocusableDateExceeded\"\n | \"maxFocusableDateExceeded\"\n | \"dateSelected\"\n | \"visibleMonthChanged\";\n\nexport type AnnouncerMinMaxFocusState = Record<string, never>;\n\nexport interface AnnouncerVisibleMonthState {\n startVisibleMonth: DateFrameworkType;\n endVisibleMonth: DateFrameworkType;\n}\n\nexport interface AnnouncerRangeDateSelectedState {\n multiselect: boolean;\n selectedDate:\n | Array<{ startDate?: DateFrameworkType; endDate?: DateFrameworkType }>\n | { startDate?: DateFrameworkType; endDate?: DateFrameworkType }\n | null;\n}\n\nexport interface AnnouncerSingleDateSelectedState {\n multiselect: boolean;\n selectedDate: DateFrameworkType | DateFrameworkType[] | null;\n}\n\nexport type DateSelectionAnnouncerState =\n | AnnouncerSingleDateSelectedState\n | AnnouncerRangeDateSelectedState\n | AnnouncerVisibleMonthState\n | AnnouncerMinMaxFocusState;\n\nexport function createSingleSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerSingleDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n if (multiselect && Array.isArray(selectedDate)) {\n const lastSelectedDate = selectedDate[selectedDate.length - 1];\n return `${dateAdapter.format(lastSelectedDate, \"dddd DD MMMM YYYY\")}, selected, ${selectedDate.length} dates in selection`;\n }\n if (!multiselect && selectedDate) {\n return `${dateAdapter.format(selectedDate as DateFrameworkType, \"dddd DD MMMM YYYY\")}, selected`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")}.`;\n }\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")} and ${dateAdapter.format(endVisibleMonth, \"MMMM YYYY\")}.`;\n }\n }\n}\n\nexport function createRangeSelectionAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n switch (announcementType) {\n case \"minFocusableDateExceeded\":\n return \"cannot focus before minimum date\";\n case \"maxFocusableDateExceeded\":\n return \"cannot focus beyond maximum date\";\n case \"dateSelected\": {\n const { multiselect, selectedDate } =\n state as AnnouncerRangeDateSelectedState;\n if (\n !selectedDate ||\n (multiselect && Array.isArray(selectedDate) && !selectedDate.length)\n ) {\n return \"cleared date selection\";\n }\n let startDate: DateFrameworkType | null | undefined;\n let endDate: DateFrameworkType | null | undefined;\n if (multiselect && Array.isArray(selectedDate)) {\n const last = selectedDate[selectedDate.length - 1];\n startDate = last.startDate;\n endDate = last.endDate;\n } else if (\n !multiselect &&\n selectedDate &&\n typeof selectedDate === \"object\"\n ) {\n const range = selectedDate as {\n startDate?: DateFrameworkType | null;\n endDate?: DateFrameworkType | null;\n };\n startDate = range.startDate;\n endDate = range.endDate;\n }\n if (startDate && !endDate) {\n return \"Select end date.\";\n }\n if (!startDate && endDate) {\n return \"Select start date.\";\n }\n if (startDate && endDate) {\n const multiselectSuffix =\n multiselect && Array.isArray(selectedDate)\n ? `, ${selectedDate.length > 1 ? `${selectedDate.length} date ranges in selection` : \"\"}`\n : \"\";\n return `Date range ${dateAdapter.format(startDate, \"dddd DD MMMM YYYY\")} to ${dateAdapter.format(endDate, \"dddd DD MMMM YYYY\")}, selected${multiselectSuffix}`;\n }\n break;\n }\n case \"visibleMonthChanged\": {\n const { startVisibleMonth, endVisibleMonth } =\n state as AnnouncerVisibleMonthState;\n const isSingleMonth = dateAdapter.isSame(\n startVisibleMonth,\n endVisibleMonth,\n \"month\",\n );\n if (isSingleMonth) {\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")}.`;\n }\n return `${dateAdapter.format(startVisibleMonth, \"MMMM YYYY\")} and ${dateAdapter.format(endVisibleMonth, \"MMMM YYYY\")}.`;\n }\n }\n}\n\n/**\n * Creates navigation announcements for single selection (visibleMonthChanged, min/maxFocusableDateExceeded).\n * Used in DatePicker grid panels where dateSelected is handled by the parent DatePicker.\n */\nexport function createSingleNavigationAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n if (announcementType === \"dateSelected\") {\n return undefined;\n }\n return createSingleSelectionAnnouncement(\n announcementType,\n state,\n dateAdapter,\n );\n}\n\n/**\n * Creates navigation announcements for range selection (visibleMonthChanged, min/maxFocusableDateExceeded).\n * Used in DatePicker grid panels where dateSelected is handled by the parent DatePicker.\n */\nexport function createRangeNavigationAnnouncement(\n announcementType: AnnouncementType,\n state: DateSelectionAnnouncerState,\n dateAdapter: SaltDateAdapter,\n): string | undefined {\n if (announcementType === \"dateSelected\") {\n return undefined;\n }\n return createRangeSelectionAnnouncement(announcementType, state, dateAdapter);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -290,7 +290,7 @@ function useCalendarSelectionDay({ date }) {
|
|
|
290
290
|
const hoveredStart = isHoveredStart(date);
|
|
291
291
|
const hoveredSpan = isHoveredSpan(date);
|
|
292
292
|
const hoveredEnd = isHoveredEnd(date);
|
|
293
|
-
const formattedDate = dateAdapter.format(date, "dddd
|
|
293
|
+
const formattedDate = dateAdapter.format(date, "dddd DD MMMM YYYY");
|
|
294
294
|
let ariaLabel = formattedDate;
|
|
295
295
|
if (selectionVariant === "single") {
|
|
296
296
|
if (selected) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\n isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n const formattedDate = dateAdapter.format(date, \"dddd D MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEventHandler,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = TDate;\n\n/**\n * Type representing a date range selection.\n * @template TDate - The type of the date object.\n */\nexport type DateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n> = {\n /**\n * The start date of the range, or null if empty\n */\n startDate?: TDate | null;\n /**\n * The end date of the range, or null if empty\n */\n endDate?: TDate | null;\n};\n\n/**\n * Checks if a value is a date range selection.\n * @template TDate - The type of the date object.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\nexport function isDateRangeSelection<\n TDate extends DateFrameworkType = DateFrameworkType,\n>(value: unknown): value is DateRangeSelection<TDate> {\n return (\n !!value &&\n !Array.isArray(value) &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\nexport type SelectionVariant = \"single\" | \"range\" | \"offset\";\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n */\nexport interface UseCalendarSelectionBaseProps<Selection> {\n /**\n * Determines if a date is outside the allowed date range.\n * @param date - The date to check.\n * @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.\n */\n isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: DateFrameworkType) => boolean;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: SelectionVariant;\n /**\n * The currently selected date.\n */\n selectedDate?: Selection;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: Selection;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (event: SyntheticEvent, selectedDate: Selection) => void;\n /**\n * A pure function to manage the selected date for uncontrolled use-cases.\n * Return the selection based on the previous selection and the new date.\n * @param previousSelectedDate\n * @param newDate\n */\n select?: (\n previousSelectedDate: Selection,\n newDate: DateFrameworkType,\n ) => Selection;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n}\n\nexport type UseCalendarSelectionSingleProps =\n UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {\n selectionVariant: \"single\";\n multiselect?: false;\n };\n\nexport type UseCalendarSelectionMultiselectSingleProps =\n UseCalendarSelectionBaseProps<\n Array<SingleDateSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"single\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"range\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectRangeProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"range\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<\n DateRangeSelection<DateFrameworkType>\n> & {\n selectionVariant: \"offset\";\n multiselect?: false;\n};\n\nexport type UseCalendarSelectionMultiselectOffsetProps =\n UseCalendarSelectionBaseProps<\n Array<DateRangeSelection<DateFrameworkType>>\n > & {\n selectionVariant: \"offset\";\n multiselect: true;\n };\n\nexport type UseCalendarSelectionProps =\n | UseCalendarSelectionSingleProps\n | UseCalendarSelectionMultiselectSingleProps\n | UseCalendarSelectionRangeProps\n | UseCalendarSelectionMultiselectRangeProps\n | UseCalendarSelectionOffsetProps\n | UseCalendarSelectionMultiselectOffsetProps;\n\nfunction selectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>,\n newDate: DateFrameworkType,\n) {\n if (previousSelectedDate?.startDate && previousSelectedDate?.endDate) {\n return {\n startDate: newDate,\n };\n }\n if (\n previousSelectedDate?.startDate &&\n dateAdapter.compare(newDate, previousSelectedDate?.startDate) >= 0\n ) {\n return {\n ...previousSelectedDate,\n endDate: newDate,\n };\n }\n return {\n startDate: newDate,\n };\n}\n\nfunction selectMultiselectDateRange(\n dateAdapter: SaltDateAdapter,\n previousSelectedDate: DateRangeSelection<DateFrameworkType>[],\n newDate: DateFrameworkType,\n): DateRangeSelection<DateFrameworkType>[] {\n const lastRange = previousSelectedDate.length\n ? previousSelectedDate[previousSelectedDate.length - 1]\n : undefined;\n const isIncompleteRange = !lastRange?.endDate;\n\n if (isIncompleteRange) {\n const isNewSelection = previousSelectedDate.length === 0;\n if (isNewSelection) {\n return [{ startDate: newDate }];\n }\n const completeDateRange = selectDateRange(\n dateAdapter,\n previousSelectedDate[previousSelectedDate.length - 1],\n newDate,\n );\n return [...previousSelectedDate.slice(0, -1), completeDateRange];\n }\n return [...previousSelectedDate, { startDate: newDate }];\n}\n\nexport function useCalendarSelection(props: UseCalendarSelectionProps) {\n const {\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n isDaySelectable = () => true,\n isOutsideAllowedDates = () => 0,\n select: selectProp,\n selectionVariant,\n startDateOffset,\n endDateOffset,\n multiselect,\n } = props as UseCalendarSelectionProps & {\n startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;\n multiselect?: boolean;\n };\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const setSelectedDate = useCallback(\n (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateFrameworkType,\n ) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n const handleSelectionChange = <\n U extends\n | (DateFrameworkType | null)\n | DateFrameworkType[]\n | (DateRangeSelection<DateFrameworkType> | null)\n | DateRangeSelection<DateFrameworkType>[],\n >(\n updatedSelection: U,\n changeHandler:\n | ((event: SyntheticEvent, updatedSelection: U) => void)\n | undefined,\n ) => {\n changeHandler?.(event, updatedSelection);\n setSelectedDateState(updatedSelection);\n };\n\n switch (selectionVariant) {\n case \"single\": {\n if (multiselect) {\n const multipleSingleSelectedDate = selectedDate as Array<\n SingleDateSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectSingleProps[\"select\"];\n const updatedSelection: Array<\n SingleDateSelection<DateFrameworkType>\n > = select\n ? select(multipleSingleSelectedDate ?? [], newSelectedDate)\n : [...(multipleSingleSelectedDate ?? []), newSelectedDate];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const singleSelectedDate =\n selectedDate as SingleDateSelection<DateFrameworkType> | null;\n const select =\n selectProp as UseCalendarSelectionSingleProps[\"select\"];\n const updatedSelection: SingleDateSelection<DateFrameworkType> | null =\n select\n ? select(singleSelectedDate, newSelectedDate)\n : newSelectedDate;\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionSingleProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"range\": {\n if (multiselect) {\n const multipleRangeSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleRangeSelectedDate ?? [], newSelectedDate)\n : selectMultiselectDateRange(\n dateAdapter,\n multipleRangeSelectedDate ?? [],\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const rangeSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionRangeProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(rangeSelectedDate, newSelectedDate)\n : selectDateRange(\n dateAdapter,\n rangeSelectedDate,\n newSelectedDate,\n );\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionRangeProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n case \"offset\": {\n if (multiselect) {\n const multipleOffsetSelectedDate = selectedDate as Array<\n DateRangeSelection<DateFrameworkType>\n >;\n const select =\n selectProp as UseCalendarSelectionMultiselectOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType>[] =\n select\n ? select(multipleOffsetSelectedDate ?? [], newSelectedDate)\n : [\n ...(multipleOffsetSelectedDate ?? []),\n {\n startDate: newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n },\n ];\n\n const changeHandler =\n onSelectionChange as UseCalendarSelectionMultiselectOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n } else {\n const offsetSelectedDate =\n selectedDate as DateRangeSelection<DateFrameworkType>;\n const select =\n selectProp as UseCalendarSelectionOffsetProps[\"select\"];\n const updatedSelection: DateRangeSelection<DateFrameworkType> =\n select\n ? select(offsetSelectedDate, newSelectedDate)\n : {\n startDate: startDateOffset\n ? startDateOffset(newSelectedDate)\n : newSelectedDate,\n endDate: endDateOffset\n ? endDateOffset(newSelectedDate)\n : newSelectedDate,\n };\n const changeHandler =\n onSelectionChange as UseCalendarSelectionOffsetProps[\"onSelectionChange\"];\n handleSelectionChange(updatedSelection, changeHandler);\n }\n break;\n }\n }\n }\n },\n [\n dateAdapter,\n isDaySelectable,\n selectProp,\n selectedDate,\n selectionVariant,\n onSelectionChange,\n multiselect,\n startDateOffset,\n endDateOffset,\n ],\n );\n\n const isSelected = useCallback(\n (date: DateFrameworkType) => {\n if (!selectedDate) {\n return false;\n }\n if (selectionVariant === \"single\") {\n const singleDates = (\n Array.isArray(selectedDate) ? selectedDate : [selectedDate]\n ) as DateFrameworkType[];\n return singleDates.some((singleDate) =>\n dateAdapter.isSame(singleDate, date, \"day\"),\n );\n }\n return false;\n },\n [dateAdapter, selectedDate, selectionVariant],\n );\n\n const isSameDay = useCallback(\n (date: DateFrameworkType) => {\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n range?.startDate &&\n range?.endDate &&\n dateAdapter.isSame(range?.startDate, date, \"day\")\n ) {\n return dateAdapter.isSame(range?.startDate, range?.endDate, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const isSelectedStart = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n isOutsideAllowedDates(range.startDate) === 0\n ) {\n return dateAdapter.isSame(range.startDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.startDate) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.startDate) === 0 &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return (\n dateAdapter.compare(date, range.startDate) > 0 &&\n dateAdapter.compare(date, range.endDate) < 0\n );\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: DateFrameworkType) => {\n if (selectionVariant === \"single\") {\n return false;\n }\n const dateRanges = Array.isArray(selectedDate)\n ? selectedDate\n : [selectedDate];\n return dateRanges.some((range) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(range) &&\n dateAdapter.isValid(range.endDate) &&\n isOutsideAllowedDates(range.endDate) === 0\n ) {\n return dateAdapter.isSame(range.endDate, date, \"day\");\n }\n return false;\n });\n },\n [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n },\n helpers: {\n isSelected,\n isSameDay,\n setSelectedDate,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n },\n }),\n [\n selectedDate,\n isSelected,\n isSameDay,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n setSelectedDate,\n ],\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useCalendarSelectionDay({ date }: { date: DateFrameworkType }) {\n const { dateAdapter } = useLocalization<DateFrameworkType>();\n const {\n state: { selectionVariant, minDate, maxDate },\n helpers: {\n setSelectedDate,\n isSameDay,\n isSelected,\n isSelectedStart,\n isSelectedSpan,\n isSelectedEnd,\n isHovered,\n isHoveredStart,\n isHoveredSpan,\n isHoveredEnd,\n isDaySelectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const selected = isSelected(date);\n const selectedStart = isSelectedStart(date);\n const selectedSpan = isSelectedSpan(date);\n const selectedEnd = isSelectedEnd(date);\n const selectedOnSameDay = isSameDay(date);\n\n const hovered = isHovered(date);\n const hoveredStart = isHoveredStart(date);\n const hoveredSpan = isHoveredSpan(date);\n const hoveredEnd = isHoveredEnd(date);\n\n // Use a two-digit day so the accessible name contains the visible day text (WCAG 2.5.3 Label in Name).\n const formattedDate = dateAdapter.format(date, \"dddd DD MMMM YYYY\");\n\n // Determine aria-label based on selection state\n let ariaLabel = formattedDate;\n if (selectionVariant === \"single\") {\n if (selected) {\n ariaLabel = `${ariaLabel}, selected`;\n }\n } else if (selectedStart) {\n ariaLabel = `Start date: ${formattedDate}, selected`;\n } else if (selectedEnd) {\n ariaLabel = `End range: ${formattedDate}, selected`;\n } else if (selectedSpan) {\n ariaLabel = `In range: ${formattedDate}, selected`;\n } else if (hoveredStart) {\n ariaLabel = `Start new range: ${formattedDate}`;\n } else if (hoveredEnd) {\n ariaLabel = `${formattedDate}, select as end date`;\n } else {\n if (dateAdapter.isSame(minDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, minimum date`;\n } else if (dateAdapter.isSame(maxDate, date, \"day\")) {\n ariaLabel = `${formattedDate}, maximum date`;\n }\n }\n\n return {\n handleClick,\n handleKeyDown,\n status: {\n hovered,\n selected,\n selectedStart,\n selectedSpan,\n selectedEnd,\n hoveredStart,\n hoveredSpan,\n hoveredEnd,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]:\n selectionVariant === \"single\" ? selected : undefined,\n [withBaseName(\"selectedStart\")]:\n selectionVariant !== \"single\" ? selectedStart : undefined,\n [withBaseName(\"selectedSpan\")]:\n selectionVariant !== \"single\" ? selectedSpan : undefined,\n [withBaseName(\"selectedEnd\")]:\n selectionVariant !== \"single\" ? selectedEnd : undefined,\n [withBaseName(\"selectedSameDay\")]:\n selectionVariant !== \"single\" && selectedOnSameDay,\n [withBaseName(\"hoveredStart\")]:\n selectionVariant !== \"single\" && hoveredStart,\n [withBaseName(\"hoveredSpan\")]:\n selectionVariant !== \"single\" && hoveredSpan,\n [withBaseName(\"hoveredEnd\")]:\n selectionVariant !== \"single\" && hoveredEnd,\n }),\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n \"aria-label\": ariaLabel,\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -69,15 +69,15 @@ const DatePickerActions = forwardRef(function DatePickerActions2(props, ref) {
|
|
|
69
69
|
if (Array.isArray(date)) {
|
|
70
70
|
selectedLabel = (date == null ? void 0 : date.length) === 0 ? "no dates selected" : `${date.length} single dates`;
|
|
71
71
|
} else {
|
|
72
|
-
selectedLabel = `${dateAdapter.format(date, "dddd
|
|
72
|
+
selectedLabel = `${dateAdapter.format(date, "dddd DD MMMM YYYY")}`;
|
|
73
73
|
}
|
|
74
74
|
} else if (selectionVariant === "range") {
|
|
75
75
|
const dateRange = selectedDate;
|
|
76
76
|
if (Array.isArray(dateRange)) {
|
|
77
77
|
selectedLabel = (dateRange == null ? void 0 : dateRange.length) === 0 ? "no dates selected" : `${dateRange.length} range dates`;
|
|
78
78
|
} else {
|
|
79
|
-
const startLabel = (dateRange == null ? void 0 : dateRange.startDate) ? dateAdapter.format(dateRange.startDate, "dddd
|
|
80
|
-
const endLabel = (dateRange == null ? void 0 : dateRange.endDate) ? dateAdapter.format(dateRange.endDate, "dddd
|
|
79
|
+
const startLabel = (dateRange == null ? void 0 : dateRange.startDate) ? dateAdapter.format(dateRange.startDate, "dddd DD MMMM YYYY") : "no start date";
|
|
80
|
+
const endLabel = (dateRange == null ? void 0 : dateRange.endDate) ? dateAdapter.format(dateRange.endDate, "dddd DD MMMM YYYY") : "no end date";
|
|
81
81
|
selectedLabel = `${startLabel} to ${endLabel}`;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport datePickerActions from \"./DatePickerActions.css\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerActions(\n props: DatePickerActionsProps<\"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n const { dateAdapter } = useLocalization();\n\n const stateAndHelpers = useDatePickerContext({\n selectionVariant,\n });\n\n const {\n state: { selectedDate },\n helpers: { cancel },\n } = stateAndHelpers;\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event.nativeEvent);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"range\") {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as RangeDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n } else {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as SingleDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n let selectedLabel = \"\";\n if (selectedDate === null || selectedDate === undefined) {\n selectedLabel = \"no date selected\";\n } else if (selectionVariant === \"single\") {\n const date = selectedDate as SingleDateSelection[] | SingleDateSelection;\n if (Array.isArray(date)) {\n selectedLabel =\n date?.length === 0\n ? \"no dates selected\"\n : `${date.length} single dates`;\n } else {\n selectedLabel = `${dateAdapter.format(date, \"dddd
|
|
1
|
+
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport datePickerActions from \"./DatePickerActions.css\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerActions(\n props: DatePickerActionsProps<\"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n const { dateAdapter } = useLocalization();\n\n const stateAndHelpers = useDatePickerContext({\n selectionVariant,\n });\n\n const {\n state: { selectedDate },\n helpers: { cancel },\n } = stateAndHelpers;\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event.nativeEvent);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"range\") {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as RangeDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n } else {\n const {\n helpers: { apply },\n state: { selectedDate },\n } = stateAndHelpers as SingleDatePickerState;\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n let selectedLabel = \"\";\n if (selectedDate === null || selectedDate === undefined) {\n selectedLabel = \"no date selected\";\n } else if (selectionVariant === \"single\") {\n const date = selectedDate as SingleDateSelection[] | SingleDateSelection;\n if (Array.isArray(date)) {\n selectedLabel =\n date?.length === 0\n ? \"no dates selected\"\n : `${date.length} single dates`;\n } else {\n selectedLabel = `${dateAdapter.format(date, \"dddd DD MMMM YYYY\")}`;\n }\n } else if (selectionVariant === \"range\") {\n const dateRange = selectedDate as DateRangeSelection;\n if (Array.isArray(dateRange)) {\n selectedLabel =\n dateRange?.length === 0\n ? \"no dates selected\"\n : `${dateRange.length} range dates`;\n } else {\n const startLabel = dateRange?.startDate\n ? dateAdapter.format(dateRange.startDate, \"dddd DD MMMM YYYY\")\n : \"no start date\";\n const endLabel = dateRange?.endDate\n ? dateAdapter.format(dateRange.endDate, \"dddd DD MMMM YYYY\")\n : \"no end date\";\n selectedLabel = `${startLabel} to ${endLabel}`;\n }\n }\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n aria-label={`Cancel ${selectedLabel}`}\n appearance=\"bordered\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n aria-label={`Apply ${selectedLabel}`}\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["DatePickerActions","datePickerActions","selectedDate"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salt-ds/date-components",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@floating-ui/react": "^0.27.19",
|
|
24
|
-
"@salt-ds/core": "^1.
|
|
24
|
+
"@salt-ds/core": "^1.74.0",
|
|
25
25
|
"@salt-ds/date-adapters": "^1.0.2",
|
|
26
26
|
"@salt-ds/icons": "^1.18.4",
|
|
27
27
|
"@salt-ds/styles": "0.4.2",
|