import type { Optional } from '../../lib/optionality.js'; /** A busy interval on some attendee's calendar, as ISO 8601 instants. */ type BusyPeriod = { start: string; end: string; }; /** A suggested free slot, as ISO 8601 instants plus its length in minutes. */ type TimeSlot = { startTime: string; endTime: string; durationMinutes: number; }; /** Scheduling preferences narrowing where suggested slots may fall. */ type Preferences = { startHour?: Optional; endHour?: Optional; excludeWeekends?: Optional; pageSize?: Optional; }; /** The HH:MM clock format the working-hour bounds require; also enforced by the suggest_time input schema. */ export declare const HOUR_OF_DAY: RegExp; /** * Compute free time slots within a window, given the busy periods of every * attendee calendar. * * The window is scanned chronologically: slots of exactly `durationMinutes` * are emitted back to back inside every gap that overlaps no busy period, and * the scan stops at `preferences.pageSize` slots (default 5). A slot belongs * to the local day of its start instant in `timeZone` (default UTC): when * `excludeWeekends` is set, a slot starting on a local Saturday or Sunday is * skipped, and the working-hour bounds (`startHour` and `endHour`, as HH:MM) * require the slot to start at or after `startHour` and, measured on the * start's local clock, to end at or before `endHour`. Date arithmetic is plain * UTC; the time zone matters only for those local determinations, so the scan * self-corrects across DST transitions by re-reading the local clock after * every jump. */ export declare function suggestSlots(input: { busy: BusyPeriod[]; windowStart: string; windowEnd: string; durationMinutes: number; timeZone?: Optional; preferences?: Optional; }): TimeSlot[]; export {}; //# sourceMappingURL=suggest.d.ts.map