@salt-ds/date-components 0.0.0-snapshot-20260330155807
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 +109 -0
- package/README.md +63 -0
- package/css/salt-date-components.css +633 -0
- package/dist-cjs/calendar/Calendar.css.js +6 -0
- package/dist-cjs/calendar/Calendar.css.js.map +1 -0
- package/dist-cjs/calendar/Calendar.js +154 -0
- package/dist-cjs/calendar/Calendar.js.map +1 -0
- package/dist-cjs/calendar/CalendarGrid.js +85 -0
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
- package/dist-cjs/calendar/CalendarMonthHeader.css.js +6 -0
- package/dist-cjs/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js +41 -0
- package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
- package/dist-cjs/calendar/CalendarNavigation.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.js +334 -0
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
- package/dist-cjs/calendar/CalendarWeekHeader.css.js +6 -0
- package/dist-cjs/calendar/CalendarWeekHeader.css.js.map +1 -0
- package/dist-cjs/calendar/CalendarWeekHeader.js +46 -0
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarContext.js +23 -0
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarDay.css.js +6 -0
- package/dist-cjs/calendar/internal/CalendarDay.css.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarDay.js +98 -0
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarMonth.css.js +6 -0
- package/dist-cjs/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarMonth.js +81 -0
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -0
- package/dist-cjs/calendar/internal/createAnnouncement.js +90 -0
- package/dist-cjs/calendar/internal/createAnnouncement.js.map +1 -0
- package/dist-cjs/calendar/internal/useFocusManagement.js +66 -0
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -0
- package/dist-cjs/calendar/internal/utils.js +50 -0
- package/dist-cjs/calendar/internal/utils.js.map +1 -0
- package/dist-cjs/calendar/useCalendar.js +464 -0
- package/dist-cjs/calendar/useCalendar.js.map +1 -0
- package/dist-cjs/calendar/useCalendarDay.js +84 -0
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -0
- package/dist-cjs/calendar/useCalendarSelection.js +353 -0
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
- package/dist-cjs/calendar/useDateSelectionAnnouncer.js +52 -0
- package/dist-cjs/calendar/useDateSelectionAnnouncer.js.map +1 -0
- package/dist-cjs/date-input/DateInput.css.js +6 -0
- package/dist-cjs/date-input/DateInput.css.js.map +1 -0
- package/dist-cjs/date-input/DateInputRange.js +353 -0
- package/dist-cjs/date-input/DateInputRange.js.map +1 -0
- package/dist-cjs/date-input/DateInputSingle.js +237 -0
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
- package/dist-cjs/date-picker/DatePicker.js +83 -0
- package/dist-cjs/date-picker/DatePicker.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerActions.js +119 -0
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerContext.js +36 -0
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerHelperText.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js +36 -0
- package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js +49 -0
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +164 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerPanel.css.js +6 -0
- package/dist-cjs/date-picker/DatePickerPanel.css.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +250 -0
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js +206 -0
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js +365 -0
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +262 -0
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js +150 -0
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +20 -0
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-cjs/date-picker/useDatePicker.js +222 -0
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
- package/dist-cjs/date-picker/useFocusOut.js +43 -0
- package/dist-cjs/date-picker/useFocusOut.js.map +1 -0
- package/dist-cjs/date-picker/useKeyboard.js +22 -0
- package/dist-cjs/date-picker/useKeyboard.js.map +1 -0
- package/dist-cjs/index.js +64 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/localization-provider/LocalizationProvider.js +51 -0
- package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-es/calendar/Calendar.css.js +4 -0
- package/dist-es/calendar/Calendar.css.js.map +1 -0
- package/dist-es/calendar/Calendar.js +152 -0
- package/dist-es/calendar/Calendar.js.map +1 -0
- package/dist-es/calendar/CalendarGrid.js +83 -0
- package/dist-es/calendar/CalendarGrid.js.map +1 -0
- package/dist-es/calendar/CalendarMonthHeader.css.js +4 -0
- package/dist-es/calendar/CalendarMonthHeader.css.js.map +1 -0
- package/dist-es/calendar/CalendarMonthHeader.js +39 -0
- package/dist-es/calendar/CalendarMonthHeader.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.css.js +4 -0
- package/dist-es/calendar/CalendarNavigation.css.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.js +332 -0
- package/dist-es/calendar/CalendarNavigation.js.map +1 -0
- package/dist-es/calendar/CalendarWeekHeader.css.js +4 -0
- package/dist-es/calendar/CalendarWeekHeader.css.js.map +1 -0
- package/dist-es/calendar/CalendarWeekHeader.js +44 -0
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-es/calendar/internal/CalendarContext.js +20 -0
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -0
- package/dist-es/calendar/internal/CalendarDay.css.js +4 -0
- package/dist-es/calendar/internal/CalendarDay.css.js.map +1 -0
- package/dist-es/calendar/internal/CalendarDay.js +96 -0
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -0
- package/dist-es/calendar/internal/CalendarMonth.css.js +4 -0
- package/dist-es/calendar/internal/CalendarMonth.css.js.map +1 -0
- package/dist-es/calendar/internal/CalendarMonth.js +79 -0
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -0
- package/dist-es/calendar/internal/createAnnouncement.js +87 -0
- package/dist-es/calendar/internal/createAnnouncement.js.map +1 -0
- package/dist-es/calendar/internal/useFocusManagement.js +64 -0
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -0
- package/dist-es/calendar/internal/utils.js +44 -0
- package/dist-es/calendar/internal/utils.js.map +1 -0
- package/dist-es/calendar/useCalendar.js +462 -0
- package/dist-es/calendar/useCalendar.js.map +1 -0
- package/dist-es/calendar/useCalendarDay.js +82 -0
- package/dist-es/calendar/useCalendarDay.js.map +1 -0
- package/dist-es/calendar/useCalendarSelection.js +349 -0
- package/dist-es/calendar/useCalendarSelection.js.map +1 -0
- package/dist-es/calendar/useDateSelectionAnnouncer.js +50 -0
- package/dist-es/calendar/useDateSelectionAnnouncer.js.map +1 -0
- package/dist-es/date-input/DateInput.css.js +4 -0
- package/dist-es/date-input/DateInput.css.js.map +1 -0
- package/dist-es/date-input/DateInputRange.js +350 -0
- package/dist-es/date-input/DateInputRange.js.map +1 -0
- package/dist-es/date-input/DateInputSingle.js +235 -0
- package/dist-es/date-input/DateInputSingle.js.map +1 -0
- package/dist-es/date-picker/DatePicker.js +80 -0
- package/dist-es/date-picker/DatePicker.js.map +1 -0
- package/dist-es/date-picker/DatePickerActions.css.js +4 -0
- package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerActions.js +117 -0
- package/dist-es/date-picker/DatePickerActions.js.map +1 -0
- package/dist-es/date-picker/DatePickerContext.js +32 -0
- package/dist-es/date-picker/DatePickerContext.js.map +1 -0
- package/dist-es/date-picker/DatePickerHelperText.css.js +4 -0
- package/dist-es/date-picker/DatePickerHelperText.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerHelperText.js +34 -0
- package/dist-es/date-picker/DatePickerHelperText.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
- package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlay.js +47 -0
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js +161 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
- package/dist-es/date-picker/DatePickerPanel.css.js +4 -0
- package/dist-es/date-picker/DatePickerPanel.css.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +248 -0
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangeInput.js +203 -0
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerRangePanel.js +363 -0
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +260 -0
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerSingleInput.js +148 -0
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js +18 -0
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
- package/dist-es/date-picker/DatePickerTrigger.js +30 -0
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
- package/dist-es/date-picker/useDatePicker.js +220 -0
- package/dist-es/date-picker/useDatePicker.js.map +1 -0
- package/dist-es/date-picker/useFocusOut.js +41 -0
- package/dist-es/date-picker/useFocusOut.js.map +1 -0
- package/dist-es/date-picker/useKeyboard.js +20 -0
- package/dist-es/date-picker/useKeyboard.js.map +1 -0
- package/dist-es/index.js +25 -0
- package/dist-es/index.js.map +1 -0
- package/dist-es/localization-provider/LocalizationProvider.js +47 -0
- package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
- package/dist-types/calendar/Calendar.d.ts +105 -0
- package/dist-types/calendar/CalendarGrid.d.ts +27 -0
- package/dist-types/calendar/CalendarMonthHeader.d.ts +17 -0
- package/dist-types/calendar/CalendarNavigation.d.ts +43 -0
- package/dist-types/calendar/CalendarWeekHeader.d.ts +6 -0
- package/dist-types/calendar/index.d.ts +9 -0
- package/dist-types/calendar/internal/CalendarContext.d.ts +6 -0
- package/dist-types/calendar/internal/CalendarDay.d.ts +33 -0
- package/dist-types/calendar/internal/CalendarMonth.d.ts +14 -0
- package/dist-types/calendar/internal/createAnnouncement.d.ts +24 -0
- package/dist-types/calendar/internal/useFocusManagement.d.ts +9 -0
- package/dist-types/calendar/internal/utils.d.ts +6 -0
- package/dist-types/calendar/useCalendar.d.ts +335 -0
- package/dist-types/calendar/useCalendarDay.d.ts +67 -0
- package/dist-types/calendar/useCalendarSelection.d.ts +145 -0
- package/dist-types/calendar/useDateSelectionAnnouncer.d.ts +6 -0
- package/dist-types/date-input/DateInputRange.d.ts +131 -0
- package/dist-types/date-input/DateInputSingle.d.ts +99 -0
- package/dist-types/date-input/index.d.ts +2 -0
- package/dist-types/date-picker/DatePicker.d.ts +52 -0
- package/dist-types/date-picker/DatePickerActions.d.ts +79 -0
- package/dist-types/date-picker/DatePickerContext.d.ts +172 -0
- package/dist-types/date-picker/DatePickerHelperText.d.ts +4 -0
- package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +106 -0
- package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +14 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +17 -0
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +83 -0
- package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +63 -0
- package/dist-types/date-picker/DatePickerSingleInput.d.ts +15 -0
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +8 -0
- package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
- package/dist-types/date-picker/index.d.ts +13 -0
- package/dist-types/date-picker/useDatePicker.d.ts +121 -0
- package/dist-types/date-picker/useFocusOut.d.ts +9 -0
- package/dist-types/date-picker/useKeyboard.d.ts +20 -0
- package/dist-types/index.d.ts +4 -0
- package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
- package/dist-types/localization-provider/index.d.ts +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type RenderPropsType, type TooltipProps } from "@salt-ds/core";
|
|
2
|
+
import type { DateFrameworkType } from "@salt-ds/date-adapters";
|
|
3
|
+
import { type ComponentPropsWithRef } from "react";
|
|
4
|
+
import { type DayStatus } from "../useCalendarDay";
|
|
5
|
+
export interface CalendarDayProps extends Omit<ComponentPropsWithRef<"button">, "children"> {
|
|
6
|
+
/**
|
|
7
|
+
* Day date
|
|
8
|
+
*/
|
|
9
|
+
date: DateFrameworkType;
|
|
10
|
+
/**
|
|
11
|
+
* Format of date
|
|
12
|
+
*/
|
|
13
|
+
format?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Render prop to enable customisation of day button.
|
|
16
|
+
*/
|
|
17
|
+
render?: RenderPropsType["render"];
|
|
18
|
+
/**
|
|
19
|
+
* Month being rendered
|
|
20
|
+
*/
|
|
21
|
+
month: DateFrameworkType;
|
|
22
|
+
/**
|
|
23
|
+
* Additional Tooltip props
|
|
24
|
+
*/
|
|
25
|
+
TooltipProps?: Partial<TooltipProps>;
|
|
26
|
+
}
|
|
27
|
+
export interface renderCalendarDayProps extends CalendarDayProps {
|
|
28
|
+
/**
|
|
29
|
+
* Status of day
|
|
30
|
+
*/
|
|
31
|
+
status: DayStatus;
|
|
32
|
+
}
|
|
33
|
+
export declare const CalendarDay: import("react").ForwardRefExoticComponent<Omit<CalendarDayProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DateFrameworkType } from "@salt-ds/date-adapters";
|
|
2
|
+
import { type ComponentPropsWithRef } from "react";
|
|
3
|
+
import { type CalendarDayProps } from "./CalendarDay";
|
|
4
|
+
export interface CalendarMonthProps extends ComponentPropsWithRef<"div"> {
|
|
5
|
+
/**
|
|
6
|
+
* Month to render as selectable dates
|
|
7
|
+
*/
|
|
8
|
+
date: DateFrameworkType;
|
|
9
|
+
/**
|
|
10
|
+
* Props for the CalendarDay component.
|
|
11
|
+
*/
|
|
12
|
+
CalendarDayProps?: Partial<CalendarDayProps>;
|
|
13
|
+
}
|
|
14
|
+
export declare const CalendarMonth: import("react").ForwardRefExoticComponent<Omit<CalendarMonthProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DateFrameworkType, SaltDateAdapter } from "@salt-ds/date-adapters";
|
|
2
|
+
export type AnnouncementType = "minFocusableDateExceeded" | "maxFocusableDateExceeded" | "dateSelected" | "visibleMonthChanged";
|
|
3
|
+
export type AnnouncerMinMaxFocusState = Record<string, never>;
|
|
4
|
+
export interface AnnouncerVisibleMonthState {
|
|
5
|
+
startVisibleMonth: DateFrameworkType;
|
|
6
|
+
endVisibleMonth: DateFrameworkType;
|
|
7
|
+
}
|
|
8
|
+
export interface AnnouncerRangeDateSelectedState {
|
|
9
|
+
multiselect: boolean;
|
|
10
|
+
selectedDate: Array<{
|
|
11
|
+
startDate?: DateFrameworkType;
|
|
12
|
+
endDate?: DateFrameworkType;
|
|
13
|
+
}> | {
|
|
14
|
+
startDate?: DateFrameworkType;
|
|
15
|
+
endDate?: DateFrameworkType;
|
|
16
|
+
} | null;
|
|
17
|
+
}
|
|
18
|
+
export interface AnnouncerSingleDateSelectedState {
|
|
19
|
+
multiselect: boolean;
|
|
20
|
+
selectedDate: DateFrameworkType | DateFrameworkType[] | null;
|
|
21
|
+
}
|
|
22
|
+
export type DateSelectionAnnouncerState = AnnouncerSingleDateSelectedState | AnnouncerRangeDateSelectedState | AnnouncerVisibleMonthState | AnnouncerMinMaxFocusState;
|
|
23
|
+
export declare function createSingleSelectionAnnouncement(announcementType: AnnouncementType, state: DateSelectionAnnouncerState, dateAdapter: SaltDateAdapter): string | undefined;
|
|
24
|
+
export declare function createRangeSelectionAnnouncement(announcementType: AnnouncementType, state: DateSelectionAnnouncerState, dateAdapter: SaltDateAdapter): string | undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DateFrameworkType } from "@salt-ds/date-adapters";
|
|
2
|
+
import type { FocusEventHandler, KeyboardEventHandler, MouseEventHandler } from "react";
|
|
3
|
+
export declare function useFocusManagement({ date }: {
|
|
4
|
+
date: DateFrameworkType;
|
|
5
|
+
}): {
|
|
6
|
+
handleClick: MouseEventHandler<HTMLButtonElement>;
|
|
7
|
+
handleKeyDown: KeyboardEventHandler<HTMLButtonElement>;
|
|
8
|
+
handleFocus: FocusEventHandler<HTMLButtonElement>;
|
|
9
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DateFrameworkType, SaltDateAdapter, Timezone } from "@salt-ds/date-adapters";
|
|
2
|
+
export declare function daysOfWeek(dateAdapter: SaltDateAdapter, format: "long" | "short" | "narrow"): string[];
|
|
3
|
+
export declare function generateMonthsForYear(dateAdapter: SaltDateAdapter, currentYear: DateFrameworkType): any[];
|
|
4
|
+
export declare function generateVisibleDays(dateAdapter: SaltDateAdapter, currentMonth: DateFrameworkType, timezone: Timezone): any[];
|
|
5
|
+
export declare function monthDiff(dateAdapter: SaltDateAdapter, a: DateFrameworkType, b: DateFrameworkType): number;
|
|
6
|
+
export declare function generateDatesForMonth(dateAdapter: SaltDateAdapter, date: DateFrameworkType): DateFrameworkType[];
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { type ResponsiveProp } from "@salt-ds/core";
|
|
2
|
+
import type { DateFrameworkType, Timezone } from "@salt-ds/date-adapters";
|
|
3
|
+
import { type SyntheticEvent } from "react";
|
|
4
|
+
import { type UseCalendarSelectionMultiselectOffsetProps, type UseCalendarSelectionMultiselectRangeProps, type UseCalendarSelectionMultiselectSingleProps, type UseCalendarSelectionOffsetProps, type UseCalendarSelectionRangeProps, type UseCalendarSelectionSingleProps } from "./useCalendarSelection";
|
|
5
|
+
import { type CreateAnnouncement } from "./useDateSelectionAnnouncer";
|
|
6
|
+
/**
|
|
7
|
+
* Base properties for the UseCalendar hook.
|
|
8
|
+
*/
|
|
9
|
+
interface UseCalendarBaseProps {
|
|
10
|
+
/**
|
|
11
|
+
* Factory method for date selection live announcements or null to silence announcements
|
|
12
|
+
*/
|
|
13
|
+
createAnnouncement?: CreateAnnouncement | null;
|
|
14
|
+
/**
|
|
15
|
+
* The default visible month.
|
|
16
|
+
*/
|
|
17
|
+
defaultVisibleMonth?: DateFrameworkType;
|
|
18
|
+
/**
|
|
19
|
+
* The currently focused date in the calendar, or null if no date is focused.
|
|
20
|
+
*/
|
|
21
|
+
focusedDate?: DateFrameworkType | null;
|
|
22
|
+
/**
|
|
23
|
+
* The currently hovered date.
|
|
24
|
+
*/
|
|
25
|
+
hoveredDate?: DateFrameworkType | null;
|
|
26
|
+
/**
|
|
27
|
+
* Function to determine if a day is visible.
|
|
28
|
+
* @param date - The date to check.
|
|
29
|
+
* @returns `true` if the day is visible, otherwise `false`.
|
|
30
|
+
*/
|
|
31
|
+
isDayVisible?: (date: DateFrameworkType) => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Ref to attach to the focused element, enabling focus to be controlled.
|
|
34
|
+
*/
|
|
35
|
+
focusedDateRef?: React.MutableRefObject<HTMLElement | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Callback fired when the focused date changes.
|
|
38
|
+
* @param event - The synthetic event, if user event triggered focus or null.
|
|
39
|
+
* @param date - The new focused date.
|
|
40
|
+
*/
|
|
41
|
+
onFocusedDateChange?: (event: SyntheticEvent | null, date: DateFrameworkType | null) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Callback fired when the hovered date changes.
|
|
44
|
+
* @param event - The synthetic event.
|
|
45
|
+
* @param hoveredDate - The new hovered date.
|
|
46
|
+
*/
|
|
47
|
+
onHoveredDateChange?: (event: SyntheticEvent, hoveredDate: DateFrameworkType | null) => void;
|
|
48
|
+
/**
|
|
49
|
+
* Callback fired when the visible month changes.
|
|
50
|
+
* @param event - The synthetic event or null if triggered by code.
|
|
51
|
+
* @param visibleMonth - The new visible month.
|
|
52
|
+
*/
|
|
53
|
+
onVisibleMonthChange?: (event: SyntheticEvent | null, visibleMonth: DateFrameworkType) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Function to determine if a day is unselectable.
|
|
56
|
+
* @param date - The date to check.
|
|
57
|
+
* @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.
|
|
58
|
+
*/
|
|
59
|
+
isDayUnselectable?: (date: DateFrameworkType) => string | false | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Function to determine if a day is highlighted.
|
|
62
|
+
* @param date - The date to check.
|
|
63
|
+
* @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.
|
|
64
|
+
*/
|
|
65
|
+
isDayHighlighted?: (date: DateFrameworkType) => string | false | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* If `true`, hides dates that are out of the selectable range.
|
|
68
|
+
*/
|
|
69
|
+
hideOutOfRangeDates?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* The minimum selectable date.
|
|
72
|
+
*/
|
|
73
|
+
minDate?: DateFrameworkType;
|
|
74
|
+
/**
|
|
75
|
+
* The maximum selectable date.
|
|
76
|
+
*/
|
|
77
|
+
maxDate?: DateFrameworkType;
|
|
78
|
+
/**
|
|
79
|
+
* Number of visible months, maximum 12, defaults to 1.
|
|
80
|
+
*/
|
|
81
|
+
numberOfVisibleMonths?: ResponsiveProp<1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12>;
|
|
82
|
+
/**
|
|
83
|
+
* Specifies the timezone behavior:
|
|
84
|
+
* - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.
|
|
85
|
+
* - If set to "default", the default timezone of the date library will be used.
|
|
86
|
+
* - If set to "system", the local system's timezone will be applied.
|
|
87
|
+
* - If set to "UTC", the time will be returned in UTC.
|
|
88
|
+
* - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.
|
|
89
|
+
*/
|
|
90
|
+
timezone?: Timezone;
|
|
91
|
+
/**
|
|
92
|
+
* The currently visible month.
|
|
93
|
+
*/
|
|
94
|
+
visibleMonth?: DateFrameworkType;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* UseCalendar hook props for a single date selection.
|
|
98
|
+
*/
|
|
99
|
+
export interface UseCalendarSingleProps extends UseCalendarSelectionSingleProps, UseCalendarBaseProps {
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* UseCalendar hook props for a multi-select, single date selection.
|
|
103
|
+
*/
|
|
104
|
+
export interface UseCalendarMultiselectSingleProps extends UseCalendarSelectionMultiselectSingleProps, Omit<UseCalendarBaseProps, "multiselect"> {
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* UseCalendar hook props for a date range selection.
|
|
108
|
+
*/
|
|
109
|
+
export interface UseCalendarRangeProps extends UseCalendarSelectionRangeProps, UseCalendarBaseProps {
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* UseCalendar hook props for a multi-select, date range selection.
|
|
113
|
+
*/
|
|
114
|
+
export interface UseCalendarMultiselectRangeProps extends UseCalendarSelectionMultiselectRangeProps, Omit<UseCalendarBaseProps, "multiselect"> {
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* UseCalendar hook props for an offset date selection.
|
|
118
|
+
*/
|
|
119
|
+
export interface UseCalendarOffsetProps extends UseCalendarSelectionOffsetProps, UseCalendarBaseProps {
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* UseCalendar hook props for a multi-select, offset selection.
|
|
123
|
+
*/
|
|
124
|
+
export interface UseCalendarMultiselectOffsetProps extends UseCalendarSelectionMultiselectOffsetProps, Omit<UseCalendarBaseProps, "multiselect"> {
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* UseCalendar hook props, wth the selection variant determining the return type of the date selection
|
|
128
|
+
*/
|
|
129
|
+
export type UseCalendarProps = UseCalendarSingleProps | UseCalendarMultiselectSingleProps | UseCalendarRangeProps | UseCalendarMultiselectRangeProps | UseCalendarOffsetProps | UseCalendarMultiselectOffsetProps;
|
|
130
|
+
/**
|
|
131
|
+
* Represents the return type of the useCalendar hook.
|
|
132
|
+
*/
|
|
133
|
+
export interface UseCalendarReturn {
|
|
134
|
+
/**
|
|
135
|
+
* The state of the calendar.
|
|
136
|
+
*/
|
|
137
|
+
state: {
|
|
138
|
+
/**
|
|
139
|
+
* The currently visible month in the calendar.
|
|
140
|
+
*/
|
|
141
|
+
visibleMonth: DateFrameworkType;
|
|
142
|
+
/**
|
|
143
|
+
* The currently focused date in the calendar, or null if no date is focused.
|
|
144
|
+
*/
|
|
145
|
+
focusedDate: DateFrameworkType | null;
|
|
146
|
+
/**
|
|
147
|
+
* Focusable dates based on current state
|
|
148
|
+
*/
|
|
149
|
+
focusableDate: DateFrameworkType | null;
|
|
150
|
+
/**
|
|
151
|
+
* Ref to attach to the focused element,enabling focus to be controlled.
|
|
152
|
+
*/
|
|
153
|
+
focusedDateRef?: React.MutableRefObject<HTMLButtonElement | null>;
|
|
154
|
+
/**
|
|
155
|
+
* Multi-select variant of the calendar, indicating if multiple date selections are allowed.
|
|
156
|
+
*/
|
|
157
|
+
multiselect: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* The minimum selectable date in the calendar.
|
|
160
|
+
*/
|
|
161
|
+
minDate: DateFrameworkType;
|
|
162
|
+
/**
|
|
163
|
+
* The maximum selectable date in the calendar.
|
|
164
|
+
*/
|
|
165
|
+
maxDate: DateFrameworkType;
|
|
166
|
+
/**
|
|
167
|
+
* The selection variant of the calendar, indicating the type of selection allowed.
|
|
168
|
+
*/
|
|
169
|
+
selectionVariant: "single" | "range" | "offset";
|
|
170
|
+
/**
|
|
171
|
+
* Whether to hide dates that are out of the selectable range.
|
|
172
|
+
*/
|
|
173
|
+
hideOutOfRangeDates?: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Number of visible months
|
|
176
|
+
*/
|
|
177
|
+
numberOfVisibleMonths: number;
|
|
178
|
+
/**
|
|
179
|
+
* Specifies the timezone behavior:
|
|
180
|
+
* - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.
|
|
181
|
+
* - If set to "default", the default timezone of the date library will be used.
|
|
182
|
+
* - If set to "system", the local system's timezone will be applied.
|
|
183
|
+
* - If set to "UTC", the time will be returned in UTC.
|
|
184
|
+
* - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.
|
|
185
|
+
*/
|
|
186
|
+
timezone?: Timezone;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Helper functions for interacting with the calendar.
|
|
190
|
+
*/
|
|
191
|
+
helpers: {
|
|
192
|
+
/**
|
|
193
|
+
* Sets the visible month in the calendar.
|
|
194
|
+
*
|
|
195
|
+
* @param event - The synthetic event or null if triggered by code.
|
|
196
|
+
* @param newVisibleMonth - The new visible month to set.
|
|
197
|
+
*/
|
|
198
|
+
setVisibleMonth: (event: SyntheticEvent | null, newVisibleMonth: DateFrameworkType) => void;
|
|
199
|
+
/**
|
|
200
|
+
* Sets the focused date in the calendar.
|
|
201
|
+
*
|
|
202
|
+
* @param event - The synthetic event or null if triggered by code.
|
|
203
|
+
* @param date - The new date to focus.
|
|
204
|
+
*/
|
|
205
|
+
setFocusedDate: (event: SyntheticEvent | null, date: DateFrameworkType | null) => void;
|
|
206
|
+
/**
|
|
207
|
+
* Determines if a day is unselectable.
|
|
208
|
+
*
|
|
209
|
+
* @param date - The date to check.
|
|
210
|
+
* @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.
|
|
211
|
+
*/
|
|
212
|
+
isDayUnselectable: (date: DateFrameworkType) => string | false | undefined;
|
|
213
|
+
/**
|
|
214
|
+
* Determines if a day is highlighted.
|
|
215
|
+
*
|
|
216
|
+
* @param date - The date to check.
|
|
217
|
+
* @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.
|
|
218
|
+
*/
|
|
219
|
+
isDayHighlighted: (date: DateFrameworkType) => string | false | undefined;
|
|
220
|
+
/**
|
|
221
|
+
* Determines if a day is visible in the calendar.
|
|
222
|
+
*
|
|
223
|
+
* @param date - The date to check.
|
|
224
|
+
* @returns `true` if the day is visible, otherwise `false`.
|
|
225
|
+
*/
|
|
226
|
+
isDayVisible: (date: DateFrameworkType) => boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Determines if a date is outside the allowed date range.
|
|
229
|
+
*
|
|
230
|
+
* @param date - The date to check.
|
|
231
|
+
* * @returns -1 if before the allowed range, 0 if inside, 1 if after.
|
|
232
|
+
*/
|
|
233
|
+
isOutsideAllowedDates: (date: DateFrameworkType) => -1 | 0 | 1;
|
|
234
|
+
/**
|
|
235
|
+
* Determines if a month is outside the allowed range.
|
|
236
|
+
*
|
|
237
|
+
* @param date - The date to check.
|
|
238
|
+
* @returns `true` if the month is outside the allowed range, otherwise `false`.
|
|
239
|
+
*/
|
|
240
|
+
isOutsideAllowedMonths: (date: DateFrameworkType) => boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Determines if a year is outside the allowed range.
|
|
243
|
+
*
|
|
244
|
+
* @param date - The date to check.
|
|
245
|
+
* @returns `true` if the year is outside the allowed range, otherwise `false`.
|
|
246
|
+
*/
|
|
247
|
+
isOutsideAllowedYears: (date: DateFrameworkType) => boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Determines if the date range is on the same day
|
|
250
|
+
*
|
|
251
|
+
* @param date - The range to check.
|
|
252
|
+
* @returns `true` if the range start and end date are the same
|
|
253
|
+
*/
|
|
254
|
+
isSameDay: (date: DateFrameworkType) => boolean;
|
|
255
|
+
/**
|
|
256
|
+
* Sets the selected date in the calendar.
|
|
257
|
+
*
|
|
258
|
+
* @param event - The event triggering the change.
|
|
259
|
+
* @param newSelectedDate - The new date to select.
|
|
260
|
+
*/
|
|
261
|
+
setSelectedDate: (event: React.KeyboardEvent<HTMLButtonElement> | React.MouseEvent<HTMLButtonElement, MouseEvent>, newSelectedDate: DateFrameworkType) => void;
|
|
262
|
+
/**
|
|
263
|
+
* Determines if a date is selected.
|
|
264
|
+
*
|
|
265
|
+
* @param date - The date to check.
|
|
266
|
+
* @returns `true` if the date is selected, otherwise `false`.
|
|
267
|
+
*/
|
|
268
|
+
isSelected: (date: DateFrameworkType) => boolean;
|
|
269
|
+
/**
|
|
270
|
+
* Determines if a date is hovered.
|
|
271
|
+
*
|
|
272
|
+
* @param date - The date to check.
|
|
273
|
+
* @returns `true` if the date is hovered, otherwise `false`.
|
|
274
|
+
*/
|
|
275
|
+
isHovered: (date: DateFrameworkType) => boolean;
|
|
276
|
+
/**
|
|
277
|
+
* Sets the hovered date in the calendar.
|
|
278
|
+
*
|
|
279
|
+
* @param event - The event triggering the change.
|
|
280
|
+
* @param newHoveredDate - The new date to hover.
|
|
281
|
+
*/
|
|
282
|
+
setHoveredDate: (event: SyntheticEvent, newHoveredDate: DateFrameworkType | null) => void;
|
|
283
|
+
/**
|
|
284
|
+
* Determines if a date is part of a selected span.
|
|
285
|
+
*
|
|
286
|
+
* @param date - The date to check.
|
|
287
|
+
* @returns `true` if the date is part of a selected span, otherwise `false`.
|
|
288
|
+
*/
|
|
289
|
+
isSelectedSpan: (date: DateFrameworkType) => boolean;
|
|
290
|
+
/**
|
|
291
|
+
* Determines if a date is the start of a selected range.
|
|
292
|
+
*
|
|
293
|
+
* @param date - The date to check.
|
|
294
|
+
* @returns `true` if the date is the start of a selected range, otherwise `false`.
|
|
295
|
+
*/
|
|
296
|
+
isSelectedStart: (date: DateFrameworkType) => boolean;
|
|
297
|
+
/**
|
|
298
|
+
* Determines if a date is the end of a selected range.
|
|
299
|
+
*
|
|
300
|
+
* @param date - The date to check.
|
|
301
|
+
* @returns `true` if the date is the end of a selected range, otherwise `false`.
|
|
302
|
+
*/
|
|
303
|
+
isSelectedEnd: (date: DateFrameworkType) => boolean;
|
|
304
|
+
/**
|
|
305
|
+
* Determines if the hovered and a new date range would be created, if selected.
|
|
306
|
+
*
|
|
307
|
+
* @param date - The date to check.
|
|
308
|
+
* @returns `true` if the date is the start of a hovered offset, otherwise `false`.
|
|
309
|
+
*/
|
|
310
|
+
isHoveredStart: (date: DateFrameworkType) => boolean;
|
|
311
|
+
/**
|
|
312
|
+
* Determines if a date is part of a hovered range.
|
|
313
|
+
*
|
|
314
|
+
* @param date - The date to check.
|
|
315
|
+
* @returns `true` if the date is part of a hovered offset, otherwise `false`.
|
|
316
|
+
*/
|
|
317
|
+
isHoveredSpan: (date: DateFrameworkType) => boolean;
|
|
318
|
+
/**
|
|
319
|
+
* Determines if the hovered and a date range would be completed, if selected.
|
|
320
|
+
*
|
|
321
|
+
* @param date - The date to check.
|
|
322
|
+
* @returns `true` if the date is the end of a hovered offset, otherwise `false`.
|
|
323
|
+
*/
|
|
324
|
+
isHoveredEnd: (date: DateFrameworkType) => boolean;
|
|
325
|
+
/**
|
|
326
|
+
* Determines if a day is selectable.
|
|
327
|
+
*
|
|
328
|
+
* @param date - The date to check.
|
|
329
|
+
* @returns `true` if the day is selectable, otherwise `false`.
|
|
330
|
+
*/
|
|
331
|
+
isDaySelectable: (date: DateFrameworkType) => boolean;
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
export declare function useCalendar(props: UseCalendarProps): UseCalendarReturn;
|
|
335
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { DateFrameworkType } from "@salt-ds/date-adapters";
|
|
2
|
+
import type { ComponentPropsWithoutRef } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Interface representing the status of a day in the Calendar.
|
|
5
|
+
*/
|
|
6
|
+
export interface DayStatus {
|
|
7
|
+
/**
|
|
8
|
+
* If `true`, the day is selectable but outside of current month.
|
|
9
|
+
*/
|
|
10
|
+
outOfRange?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* If `true`, the day is selected.
|
|
13
|
+
*/
|
|
14
|
+
selected?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* If `true`, the day is selected.
|
|
17
|
+
*/
|
|
18
|
+
selectedStart?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* If `true`, the day is selected.
|
|
21
|
+
*/
|
|
22
|
+
selectedSpan?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* If `true`, the day is selected.
|
|
25
|
+
*/
|
|
26
|
+
selectedEnd?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* If `true`, the day is today.
|
|
29
|
+
*/
|
|
30
|
+
today?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* If set, the day is unselectable with a reason.
|
|
33
|
+
*/
|
|
34
|
+
unselectable?: string | false;
|
|
35
|
+
/**
|
|
36
|
+
* If set, the day is highlighted with a reason.
|
|
37
|
+
*/
|
|
38
|
+
highlighted?: string | false;
|
|
39
|
+
/**
|
|
40
|
+
* If `true`, the day is focused.
|
|
41
|
+
*/
|
|
42
|
+
focused?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* If `true`, the day is hidden.
|
|
45
|
+
*/
|
|
46
|
+
hidden?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* UseCalendar hook props to return a calendar day's status
|
|
50
|
+
*/
|
|
51
|
+
export interface useCalendarDayProps {
|
|
52
|
+
/**
|
|
53
|
+
* The date of the calendar day.
|
|
54
|
+
*/
|
|
55
|
+
date: DateFrameworkType;
|
|
56
|
+
/**
|
|
57
|
+
* The month of the calendar day.
|
|
58
|
+
*/
|
|
59
|
+
month: DateFrameworkType;
|
|
60
|
+
}
|
|
61
|
+
export declare function useCalendarDay(props: useCalendarDayProps): {
|
|
62
|
+
status: DayStatus;
|
|
63
|
+
dayProps: ComponentPropsWithoutRef<"button">;
|
|
64
|
+
focusedDateRef: import("react").MutableRefObject<HTMLButtonElement | null> | null | undefined;
|
|
65
|
+
unselectableReason: string | false | undefined;
|
|
66
|
+
highlightedReason: string | false | undefined;
|
|
67
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { DateFrameworkType } from "@salt-ds/date-adapters";
|
|
2
|
+
import { type KeyboardEventHandler, type MouseEventHandler, type SyntheticEvent } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Type representing a single date selection.
|
|
5
|
+
*/
|
|
6
|
+
export type SingleDateSelection<TDate extends DateFrameworkType = DateFrameworkType> = TDate;
|
|
7
|
+
/**
|
|
8
|
+
* Type representing a date range selection.
|
|
9
|
+
* @template TDate - The type of the date object.
|
|
10
|
+
*/
|
|
11
|
+
export type DateRangeSelection<TDate extends DateFrameworkType = DateFrameworkType> = {
|
|
12
|
+
/**
|
|
13
|
+
* The start date of the range, or null if empty
|
|
14
|
+
*/
|
|
15
|
+
startDate?: TDate | null;
|
|
16
|
+
/**
|
|
17
|
+
* The end date of the range, or null if empty
|
|
18
|
+
*/
|
|
19
|
+
endDate?: TDate | null;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a value is a date range selection.
|
|
23
|
+
* @template TDate - The type of the date object.
|
|
24
|
+
* @param value - The value to check.
|
|
25
|
+
* @returns `true` if the value is a date range selection, otherwise `false`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isDateRangeSelection<TDate extends DateFrameworkType = DateFrameworkType>(value: unknown): value is DateRangeSelection<TDate>;
|
|
28
|
+
export type SelectionVariant = "single" | "range" | "offset";
|
|
29
|
+
/**
|
|
30
|
+
* Base properties for calendar UseCalendarSelection hook.
|
|
31
|
+
*/
|
|
32
|
+
export interface UseCalendarSelectionBaseProps<Selection> {
|
|
33
|
+
/**
|
|
34
|
+
* Determines if a date is outside the allowed date range.
|
|
35
|
+
* @param date - The date to check.
|
|
36
|
+
* @returns 0 if inside the date range, -1 if before the min date, 1 if after the max date.
|
|
37
|
+
*/
|
|
38
|
+
isOutsideAllowedDates?: (date: DateFrameworkType) => -1 | 0 | 1;
|
|
39
|
+
/**
|
|
40
|
+
* Function to determine if a day is selectable.
|
|
41
|
+
* @param date - The date to check.
|
|
42
|
+
* @returns `true` if the day is selectable, otherwise `false`.
|
|
43
|
+
*/
|
|
44
|
+
isDaySelectable?: (date: DateFrameworkType) => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* If `true`, the calendar will be multiselect.
|
|
47
|
+
*/
|
|
48
|
+
multiselect?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* The selection variant, set to "single".
|
|
51
|
+
*/
|
|
52
|
+
selectionVariant: SelectionVariant;
|
|
53
|
+
/**
|
|
54
|
+
* The currently selected date.
|
|
55
|
+
*/
|
|
56
|
+
selectedDate?: Selection;
|
|
57
|
+
/**
|
|
58
|
+
* The default selected date.
|
|
59
|
+
*/
|
|
60
|
+
defaultSelectedDate?: Selection;
|
|
61
|
+
/**
|
|
62
|
+
* Callback fired when the selected date changes.
|
|
63
|
+
* @param event - The synthetic event.
|
|
64
|
+
* @param selectedDate - The new selected date.
|
|
65
|
+
*/
|
|
66
|
+
onSelectionChange?: (event: SyntheticEvent, selectedDate: Selection) => void;
|
|
67
|
+
/**
|
|
68
|
+
* A pure function to manage the selected date for uncontrolled use-cases.
|
|
69
|
+
* Return the selection based on the previous selection and the new date.
|
|
70
|
+
* @param previousSelectedDate
|
|
71
|
+
* @param newDate
|
|
72
|
+
*/
|
|
73
|
+
select?: (previousSelectedDate: Selection, newDate: DateFrameworkType) => Selection;
|
|
74
|
+
/**
|
|
75
|
+
* Function to calculate the start date offset.
|
|
76
|
+
* @param date - The date to offset.
|
|
77
|
+
* @returns The offset start date.
|
|
78
|
+
*/
|
|
79
|
+
startDateOffset?: (date: DateFrameworkType) => DateFrameworkType;
|
|
80
|
+
/**
|
|
81
|
+
* Function to calculate the end date offset.
|
|
82
|
+
* @param date - The date to offset.
|
|
83
|
+
* @returns The offset end date.
|
|
84
|
+
*/
|
|
85
|
+
endDateOffset?: (date: DateFrameworkType) => DateFrameworkType;
|
|
86
|
+
}
|
|
87
|
+
export type UseCalendarSelectionSingleProps = UseCalendarSelectionBaseProps<SingleDateSelection<DateFrameworkType> | null> & {
|
|
88
|
+
selectionVariant: "single";
|
|
89
|
+
multiselect?: false;
|
|
90
|
+
};
|
|
91
|
+
export type UseCalendarSelectionMultiselectSingleProps = UseCalendarSelectionBaseProps<Array<SingleDateSelection<DateFrameworkType>>> & {
|
|
92
|
+
selectionVariant: "single";
|
|
93
|
+
multiselect: true;
|
|
94
|
+
};
|
|
95
|
+
export type UseCalendarSelectionRangeProps = UseCalendarSelectionBaseProps<DateRangeSelection<DateFrameworkType>> & {
|
|
96
|
+
selectionVariant: "range";
|
|
97
|
+
multiselect?: false;
|
|
98
|
+
};
|
|
99
|
+
export type UseCalendarSelectionMultiselectRangeProps = UseCalendarSelectionBaseProps<Array<DateRangeSelection<DateFrameworkType>>> & {
|
|
100
|
+
selectionVariant: "range";
|
|
101
|
+
multiselect: true;
|
|
102
|
+
};
|
|
103
|
+
export type UseCalendarSelectionOffsetProps = UseCalendarSelectionBaseProps<DateRangeSelection<DateFrameworkType>> & {
|
|
104
|
+
selectionVariant: "offset";
|
|
105
|
+
multiselect?: false;
|
|
106
|
+
};
|
|
107
|
+
export type UseCalendarSelectionMultiselectOffsetProps = UseCalendarSelectionBaseProps<Array<DateRangeSelection<DateFrameworkType>>> & {
|
|
108
|
+
selectionVariant: "offset";
|
|
109
|
+
multiselect: true;
|
|
110
|
+
};
|
|
111
|
+
export type UseCalendarSelectionProps = UseCalendarSelectionSingleProps | UseCalendarSelectionMultiselectSingleProps | UseCalendarSelectionRangeProps | UseCalendarSelectionMultiselectRangeProps | UseCalendarSelectionOffsetProps | UseCalendarSelectionMultiselectOffsetProps;
|
|
112
|
+
export declare function useCalendarSelection(props: UseCalendarSelectionProps): {
|
|
113
|
+
state: {
|
|
114
|
+
selectedDate: any;
|
|
115
|
+
};
|
|
116
|
+
helpers: {
|
|
117
|
+
isSelected: (date: DateFrameworkType) => boolean;
|
|
118
|
+
isSameDay: (date: DateFrameworkType) => boolean;
|
|
119
|
+
setSelectedDate: (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: DateFrameworkType) => void;
|
|
120
|
+
isSelectedStart: (date: DateFrameworkType) => boolean;
|
|
121
|
+
isSelectedSpan: (date: DateFrameworkType) => boolean;
|
|
122
|
+
isSelectedEnd: (date: DateFrameworkType) => boolean;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
export declare function useCalendarSelectionDay({ date }: {
|
|
126
|
+
date: DateFrameworkType;
|
|
127
|
+
}): {
|
|
128
|
+
handleClick: MouseEventHandler<HTMLButtonElement>;
|
|
129
|
+
handleKeyDown: KeyboardEventHandler<HTMLButtonElement>;
|
|
130
|
+
status: {
|
|
131
|
+
hovered: boolean;
|
|
132
|
+
selected: boolean;
|
|
133
|
+
selectedStart: boolean;
|
|
134
|
+
selectedSpan: boolean;
|
|
135
|
+
selectedEnd: boolean;
|
|
136
|
+
hoveredStart: boolean;
|
|
137
|
+
hoveredSpan: boolean;
|
|
138
|
+
hoveredEnd: boolean;
|
|
139
|
+
};
|
|
140
|
+
dayProps: {
|
|
141
|
+
className: string;
|
|
142
|
+
"aria-disabled": string | undefined;
|
|
143
|
+
"aria-label": string;
|
|
144
|
+
};
|
|
145
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SaltDateAdapter } from "@salt-ds/date-adapters";
|
|
2
|
+
import type { AnnouncementType, DateSelectionAnnouncerState } from "./internal/createAnnouncement";
|
|
3
|
+
export type CreateAnnouncement = (announcementType: AnnouncementType, state: DateSelectionAnnouncerState, dateAdapter: SaltDateAdapter) => string | undefined;
|
|
4
|
+
export declare function useDateSelectionAnnouncer(createAnnouncement: CreateAnnouncement | null | undefined, dateAdapter: SaltDateAdapter): {
|
|
5
|
+
announce: (announcementType: AnnouncementType, state?: DateSelectionAnnouncerState | undefined) => void;
|
|
6
|
+
};
|