import * as React from "react"; export interface PriceBreakdownLine { unitId: string; pricingCategoryId?: string | null; label: string; quantity: number; /** Per-unit price for the matched tier/row. `null` = on-request pricing. */ unitAmountCents: number | null; /** `unitAmountCents * quantity` or null when on-request. */ totalAmountCents: number | null; /** * Populated when a non-default tier matched — operator-visible "N × 100 EUR * — group rate" kind of hint. Null for the default tier / single-price row. */ tierLabel: string | null; isGroupRate: boolean; pricingBasis?: "per_person" | "per_unit" | "per_booking"; } export interface PriceBreakdownValue { catalogAmountCents: number | null; confirmedAmountCents: number | null; currency: string | null; priceOverrideReason: string; isManualOverride: boolean; requiresReason: boolean; lines: PriceBreakdownLine[]; } export interface PriceBreakdownSectionProps { productId?: string; optionId?: string | null; /** Quantity per option_unit id, typically from OptionUnitsStepperSection. */ unitQuantities: Record; /** Display labels keyed by option_unit id. */ unitLabels?: Record; /** Traveler pricing quantities keyed by option_unit id and pricing_category id. */ pricingCategoryQuantities?: Record>; /** Display labels keyed by pricing_category id. */ pricingCategoryLabels?: Record; /** * Force a specific catalog. Defaults to the public catalog the storefront * uses — matches what a customer would see. */ catalogId?: string | null; /** Authoritative live quote for a supplier-sourced product. */ providedPricing?: { totalAmountCents: number; currency: string; label?: string; lines?: ReadonlyArray<{ kind: string; label: string; quantity?: number; unitAmount: number; totalAmount: number; pricingBasis?: "per_person" | "per_unit" | "per_booking"; }>; }; labels?: { heading?: string; total?: string; onRequest?: string; groupRate?: string; empty?: string; noPricing?: string; confirmedTotal?: string; manualTotal?: string; useCatalogTotal?: string; overrideReason?: string; overrideReasonPlaceholder?: string; overrideReasonRequired?: string; perPerson?: string; perUnit?: string; perBooking?: string; }; onChange?: (value: PriceBreakdownValue) => void; /** * When true, the section drops its bordered card wrapper and the * heading label — for embedding inside another card (e.g. the * booking-summary panel) where the parent owns the chrome. */ flat?: boolean; } interface UnitPriceLookupRow { unitId: string; pricingCategoryId?: string | null; } export declare function createUnitPriceLookup(unitPrices: ReadonlyArray): (unitId: string, pricingCategoryId: string | null) => TUnitPrice | undefined; /** * Live price-breakdown preview for booking-create flows. Read-only — uses * `usePricingPreview` (#237) to fetch the catalog-resolved snapshot the * storefront also uses, then computes lines against the operator's current * unit quantities so the operator sees the same numbers the customer would. * * ### Pricing mode handling * * - `per_unit` — multiply the matched tier's `sellAmountCents` by quantity. * - `free` / `included` — render 0.00 without an on-request badge. * - `on_request` / anything else — render "On request"; total excludes it. */ export declare function PriceBreakdownSection({ productId, optionId, unitQuantities, unitLabels, pricingCategoryQuantities, pricingCategoryLabels, catalogId, providedPricing, labels, onChange, flat, }: PriceBreakdownSectionProps): React.JSX.Element | null; export {};