import { type BookingConfirmation, type MeetingAvailability, type MeetingBookingErrorCode, type MeetingHost } from '../../schemas/meeting-booking-schema'; export interface HubSpotMeetingSchedulerProps { /** Directory id of the meeting link (from the host's `/api/meetings` payload). */ meetingId: string; /** Endpoints prefix, default '' (same-origin `/api/meetings/*`) — FaqSection precedent. */ apiBaseUrl?: string; /** SSR-mode seed (host-fetched). Omitted → client mode (self-fetch on mount). */ initialAvailability?: MeetingAvailability; /** Meeting title shown in the context panel (host page owns the h1). */ title?: string; /** Short description under the title in the context panel. */ description?: string | null; /** Override the hosts shown (defaults to `availability.hosts`). */ hosts?: MeetingHost[]; /** Pin the DISPLAY zone (rendering only — never sent upstream, never a cache key). */ displayTimezone?: string; /** The link's public HubSpot booking URL — the "Open in HubSpot" escape hatch target. */ fallbackUrl?: string; /** * Host-level exit, rendered as a back edge at the top of the context panel * (and in the loading skeleton, so it doesn't pop in). This is "leave the * scheduler", NOT the details step's back edge — it is suppressed once a * slot is chosen so only one Back is ever on screen. Omit it and no back * affordance renders at all. */ onBack?: () => void; onBooked?: (b: BookingConfirmation) => void; className?: string; } /** * The widget's height on desktop: a FIXED 380px, and the ONLY size the whole * card states. * * A floor was not enough. Every stage has a different natural height — the * context panel with two hosts ~340, the calendar column ~290, a degraded * stage two lines — so `min-height` only pinned the SHORT ones and let the * tall one push the wrapper, which is exactly the screen-shake this removes. * With a fixed height the box is stated once and nothing inside can move it; * anything taller scrolls in place. * * The elastic half derives from it: the panel passes it to the slot row and * the times column scrolls inside what is left. The calendar does not stretch * — a date grid has a size, and stretching one is how a month turns into * page-tall bands the moment a layout stops pinning a height. It states a * WIDTH (`CALENDAR_W`) and its square cells make it as tall as it is wide; * that width is chosen to fit inside this number, and the two are checked * against each other in one place rather than three. * * Six week rows, always — `fixedWeeks` — is why a height can be stated at all: * a 5-week month and a 6-week month occupy the same box, so paging the * calendar cannot resize the card. * * Exported because the stability has to survive OUTSIDE the card too: a host * that swaps the scheduler in and out of a slot (the onboarding "Book a call" * promo does exactly that) reserves the same box for whatever it shows * instead, so the swap moves nothing below it. * * Goes on the BORDERED element, always. Under `box-sizing: border-box` the * declared height swallows the 1px edges, so a card that carries the border * and a host box that carries its own both come out at exactly 380 — put it on * an inner wrapper instead and the border lands OUTSIDE the 380, making that * card 2px taller than everything it is supposed to match. * * TWO numbers, because the card has two shapes: 380 as a sidebar beside the * calendar (`lg`), 550 as a header strip over it (`md`). Phones get neither — * there a card the height of the hand holding it is the right answer and the * page is the scroller. * * A host that reserves this box owes it one thing: content that ADAPTS to the * height rather than assuming it. The onboarding promo does it by letting its * video take the leftover space at 16:9; a stand-in that just stacks fixed * blocks will overflow the shorter of the two. */ export declare const MEETING_SCHEDULER_H = "md:h-[34.375rem] lg:h-[23.75rem]"; export declare function HubSpotMeetingScheduler({ meetingId, apiBaseUrl, initialAvailability, title, description, hosts, displayTimezone, fallbackUrl, onBack, onBooked, className, }: HubSpotMeetingSchedulerProps): import("react").JSX.Element; export { MeetingSchedulerDirectory, MeetingSchedulerDirectoryRowSkeleton, type MeetingSchedulerDirectoryProps, } from './directory'; export type { MeetingAvailability, BookingConfirmation, MeetingBookingErrorCode, MeetingHost }; export type { SchedulingLink, SchedulingLinksPayload } from '../../schemas/meeting-booking-schema'; //# sourceMappingURL=index.d.ts.map