/** * Project a `CruiseContent` payload into a `BookingDraftShape` so the * journey wizard can render the correct sub-steps for a sourced * cruise. * * Cruise products are the prototype for the journey's most-elaborate * shape (per §F.1 in the journey doc): * - Configure: departure (sailing date) → cabin-category → cabin- * number → occupancy. Each sub-step is rendered only when its * options array is non-empty. * - Accommodation: pre/post extension hotels (when present). * Cruise lines surface these via supplier-specific catalogs; * the v1 builder leaves this empty and templates can override. * - Add-ons: per-port excursions (`groupBy: "port"` when the * itinerary stops surface them) plus optional insurance offer. * - Pax bands: cruise-line-specific age cutoffs (infant ≤ 2, * child 3-11, adult 12+) — caller-supplied via options because * the cutoffs vary per supplier and aren't on the content * payload. * * See `docs/architecture/booking-journey-architecture.md` §F.1. */ import { type BookingDraftShape, type PaxBandSpec } from "@voyant-travel/catalog/booking-engine"; import type { CruiseContent } from "./content-shape.js"; /** * Default cruise pax bands — adult-only since age cutoffs vary per * cruise line. Templates pass in supplier-specific bands when * available; this default is conservative (12+ implied — adult only, * 1-8 cabin cap). */ export declare const DEFAULT_CRUISE_PAX_BANDS: ReadonlyArray; export interface BuildCruiseDraftShapeOptions { locale?: string; /** * Cruise-line-specific pax bands. Templates derive these from the * supplier's catalog metadata (e.g. `infant ≤ 2`, `child 3-11`, * `adult 12+` for major lines). Defaults to adult-only. */ paxBands?: ReadonlyArray; paxBandsAllowedTotal?: { min: number; max: number; }; /** * When true, render the cabin-number sub-step even if the * `cabin_categories[]` items don't surface a cabin map. The * journey then emits an empty per-category record and the wizard * lets ops select "any cabin" within the category. */ forceCabinNumberSubStep?: boolean; /** * Whether to include an insurance addon group. Templates pass * `true` when the deployment ships an insurance offer; default * `false` so we don't fabricate offers. */ includeInsurance?: boolean; } export declare function buildCruiseDraftShape(content: CruiseContent, options?: BuildCruiseDraftShapeOptions): BookingDraftShape;