react-day-picker
Version:
Customizable Date Picker for React
40 lines (39 loc) • 1.92 kB
TypeScript
import type { DayPickerProps } from "./props.js";
import type { DateRange, Modifiers } from "./shared.js";
export type Selection<T extends DayPickerProps> = {
/** The selected date(s). */
selected: SelectedValue<T> | undefined;
/** Set a selection. */
select: SelectHandler<T> | undefined;
/** Whether the given date is selected. */
isSelected: (date: Date) => boolean;
};
export type SelectedSingle<T extends {
required?: boolean;
}> = T["required"] extends true ? Date : Date | undefined;
export type SelectedMulti<T extends {
required?: boolean;
}> = T["required"] extends true ? Date[] : Date[] | undefined;
export type SelectedRange<T extends {
required?: boolean;
}> = T["required"] extends true ? DateRange : DateRange | undefined;
export type SelectedValue<T> = T extends {
mode: "single";
required?: boolean;
} ? SelectedSingle<T> : T extends {
mode: "multiple";
required?: boolean;
} ? SelectedMulti<T> : T extends {
mode: "range";
required?: boolean;
} ? SelectedRange<T> : undefined;
export type SelectHandlerSingle<T extends DayPickerProps> = (triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => T["required"] extends true ? Date : Date | undefined;
export type SelectHandlerMulti<T extends DayPickerProps> = (triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => T["required"] extends true ? Date[] : Date[] | undefined;
export type SelectHandlerRange<T extends DayPickerProps> = (triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => T["required"] extends true ? DateRange : DateRange | undefined;
export type SelectHandler<T extends DayPickerProps> = T extends {
mode: "single";
} ? SelectHandlerSingle<T> : T extends {
mode: "multiple";
} ? SelectHandlerMulti<T> : T extends {
mode: "range";
} ? SelectHandlerRange<T> : undefined;