import * as react_jsx_runtime from 'react/jsx-runtime'; import { ReactNode } from 'react'; import { UseSchedulingOptions, UseSchedulingResult } from '../../hooks/useScheduling.mjs'; import { SchedulingService, SchedulingResource, SchedulingSlot, SchedulingState } from '../../types/scheduling.mjs'; interface BookingFlowProps extends UseSchedulingOptions { className?: string; children: ReactNode; /** * Optionally pass an externally-managed scheduling result (e.g. a hook * lifted into a parent island so a CTA button can read state too). When * omitted, the root creates its own via useScheduling(). */ scheduling?: UseSchedulingResult; } declare function BookingFlowRoot({ className, children, scheduling: external, ...hookOpts }: BookingFlowProps): react_jsx_runtime.JSX.Element; interface BookingFlowServiceProps { className?: string; /** * Render override. Receives the full list of services and a `pick` handler. * If omitted, the picker renders one button per service. */ children?: (services: SchedulingService[], pick: (s: SchedulingService) => void) => ReactNode; itemClassName?: string; /** Renderer for a single service tile, used by the default body. */ renderItem?: (service: SchedulingService, pick: () => void) => ReactNode; /** Render when `services.length === 0` and not loading. Defaults to `null`. */ emptyState?: ReactNode; } declare function ServicePicker({ className, children, itemClassName, renderItem, emptyState, }: BookingFlowServiceProps): react_jsx_runtime.JSX.Element | null; interface BookingFlowResourceProps { className?: string; itemClassName?: string; anyResourceLabel?: ReactNode; /** Custom renderer for the whole list. */ children?: (resources: SchedulingResource[], pick: (r: SchedulingResource | null) => void) => ReactNode; renderItem?: (resource: SchedulingResource, pick: () => void) => ReactNode; emptyState?: ReactNode; } declare function ResourcePicker({ className, itemClassName, anyResourceLabel, children, renderItem, emptyState, }: BookingFlowResourceProps): react_jsx_runtime.JSX.Element | null; interface BookingFlowDateTimeProps { className?: string; /** Default: 7 (one week strip from `from`). */ windowDays?: number; /** Default: today's UTC midnight. */ from?: Date; itemClassName?: string; /** Format a slot for the default button label. */ formatSlot?: (slot: SchedulingSlot) => ReactNode; /** Custom whole-list renderer. */ children?: (slots: SchedulingSlot[], pick: (slot: SchedulingSlot) => void) => ReactNode; emptyState?: ReactNode; } declare function DateTimePicker({ className, windowDays, from, itemClassName, formatSlot, children, emptyState, }: BookingFlowDateTimeProps): react_jsx_runtime.JSX.Element | null; interface BookingFlowDetailsProps { className?: string; inputClassName?: string; submitClassName?: string; submitLabel?: ReactNode; /** Show a phone field. Defaults to true. */ includePhone?: boolean; /** Show a notes field. Defaults to true. */ includeNotes?: boolean; /** Pre-fill values (e.g. signed-in customer). */ defaults?: Partial<{ customer_name: string; customer_email: string; customer_phone: string; notes: string; }>; /** Custom error renderer. */ renderError?: (error: string) => ReactNode; } declare function DetailsForm({ className, inputClassName, submitClassName, submitLabel, includePhone, includeNotes, defaults, renderError, }: BookingFlowDetailsProps): react_jsx_runtime.JSX.Element | null; interface BookingFlowConfirmProps { className?: string; /** Custom renderer. Receives the confirmed state. */ children?: (state: Extract) => ReactNode; } declare function Confirmation({ className, children }: BookingFlowConfirmProps): react_jsx_runtime.JSX.Element | null; declare const BookingFlow: typeof BookingFlowRoot & { Service: typeof ServicePicker; Resource: typeof ResourcePicker; DateTime: typeof DateTimePicker; Details: typeof DetailsForm; Confirm: typeof Confirmation; }; export { BookingFlow, type BookingFlowConfirmProps, type BookingFlowDateTimeProps, type BookingFlowDetailsProps, type BookingFlowProps, type BookingFlowResourceProps, type BookingFlowServiceProps };