export type SelectionMode = 'none' | 'default' | 'one' | 'zeroOrOne' | 'oneExtended' | 'many' | 'zeroOrMany' | 'oneOrMany' | 'week' | 'range'; export type SelectionModifiers = { ctrl?: boolean; shift?: boolean; }; export type SelectionState = { /** Selected days (deduped, sorted ascending), always local-midnight. */ dates: Date[]; /** Anchor for shift-extend (oneExtended). */ anchor: Date | null; /** Pending range start (range mode, between first and second click). */ rangeStart: Date | null; }; export declare const emptySelection: () => SelectionState; /** True when `day` is in `dates` (by calendar day). */ export declare function isSelected(dates: ReadonlyArray, day: Date): boolean; /** Inclusive ordered list of day-midnight dates from a..b (either order). */ export declare function rangeDays(a: Date, b: Date): Date[]; /** * Apply a click on `clicked` to `state` under `mode`. `firstDayOfWeek` only * matters for `week` mode. Returns a fresh state (never mutates the input). */ export declare function selectDate(state: SelectionState, clicked: Date, mode: SelectionMode, modifiers?: SelectionModifiers, firstDayOfWeek?: number): SelectionState; /** Whether a mode ever holds more than one date (drives multi-select UI hints). */ export declare function isMultiSelectMode(mode: SelectionMode): boolean;