import type { Snippet } from 'svelte'; export type ScheduleDuration = 15 | 30 | 45 | 60; export type ScheduleMeetingType = 'video' | 'phone' | 'inperson'; export type SchedulerSlotLayout = 'list' | 'grid'; export type SchedulePeriod = 'morning' | 'afternoon' | 'evening'; export type SchedulerMode = 'single' | 'range'; export interface ScheduleHost { name: string; title?: string; avatar?: string; } export interface ScheduleSlot { id: string; /** Display time, e.g. 09:00 */ time: string; /** Optional end time, e.g. 09:30 */ endTime?: string; /** YYYY-MM-DD — if omitted, slot applies to any selected day */ date?: string; available?: boolean; period?: SchedulePeriod; } export interface ScheduleBooking { id: string; slotId: string; title: string; with?: string; avatar?: string; } export interface ScheduleConfirmDetail { mode: SchedulerMode; slotId: string | null; /** Active / start day */ date: string; start: string; end: string; duration: ScheduleDuration; /** Inclusive nights between start and end (0 for single day) */ nights: number; } interface SchedulerProps { title?: string; description?: string; /** @deprecated Prefer bind:date — kept for simple labels */ dateLabel?: string; /** single day or date range */ mode?: SchedulerMode; /** Selected day YYYY-MM-DD (single mode, or focus day in range) */ date?: string; /** Range start YYYY-MM-DD */ start?: string; /** Range end YYYY-MM-DD */ end?: string; /** Months shown in calendar (2 is typical for range) */ months?: 1 | 2; slots?: ScheduleSlot[]; bookings?: ScheduleBooking[]; selectedSlotId?: string | null; host?: ScheduleHost | null; duration?: ScheduleDuration; durations?: ScheduleDuration[]; timezone?: string; meetingType?: ScheduleMeetingType; location?: string; slotLayout?: SchedulerSlotLayout; /** Show embedded month calendar */ showCalendar?: boolean; /** Show quick week strip */ showWeekStrip?: boolean; /** Group slots into morning / afternoon / evening */ groupByPeriod?: boolean; /** Confirm CTA when selection is ready */ showConfirm?: boolean; confirmLabel?: string; /** * In range mode, allow confirming with only dates (no time slot). * Default: false — still requires a start-time slot when slots exist. */ allowDateOnly?: boolean; minDate?: string; maxDate?: string; locale?: string; class?: string; actions?: Snippet; ondatechange?: (date: string) => void; onrangechange?: (detail: { start: string; end: string; }) => void; ondurationchange?: (duration: ScheduleDuration) => void; onselect?: (slotId: string) => void; onconfirm?: (detail: ScheduleConfirmDetail) => void; onclear?: () => void; } declare const Scheduler: import("svelte").Component; type Scheduler = ReturnType; export default Scheduler;