/** Two dates that have to stay in order, and the draft that is not a range until both are known. */ export interface MdyDateRangeValue { readonly start: string | null; readonly end: string | null; } /** Canonical range transition: bounds/filter invalid dates and keep end >= start. */ export declare function dateRangeValueTransition(value: MdyDateRangeValue, options?: { readonly minIso?: string | null; readonly maxIso?: string | null; readonly accepts?: ((iso: string) => boolean) | null; }): MdyDateRangeValue; export interface MdyDateRangeDraftState { readonly committed: MdyDateRangeValue; readonly draft: MdyDateRangeValue; readonly open: boolean; } export type MdyDateRangeDraftIntent = { readonly type: "open"; readonly committed: MdyDateRangeValue; } | { readonly type: "select"; readonly value: MdyDateRangeValue; } | { readonly type: "confirm"; } | { readonly type: "cancel"; }; export interface MdyDateRangeDraftTransition { readonly state: MdyDateRangeDraftState; readonly commit: MdyDateRangeValue | undefined; readonly restoreFocus: boolean; } /** Modal date-range draft policy. Incomplete drafts close without committing. */ export declare function dateRangeDraftTransition(state: MdyDateRangeDraftState, intent: MdyDateRangeDraftIntent, options?: { readonly minIso?: string | null; readonly maxIso?: string | null; readonly accepts?: ((iso: string) => boolean) | null; }): MdyDateRangeDraftTransition;