/** Details of a successfully validated Travel Credit. */ export interface PickedTravelCredit { id: string; code: string; currency: string | null; remainingAmountCents: number | null; expiresAt: string | null; } export interface TravelCreditPickerValue { /** Code typed by the operator. Not cleared on failure so they can correct a typo. */ code: string; /** Populated only when the last validate call succeeded. */ picked: PickedTravelCredit | null; /** Reason returned by the server when validate fails, or a client-side message. */ error: string | null; } export declare const emptyTravelCreditPickerValue: TravelCreditPickerValue; export interface TravelCreditPickerSectionProps { value: TravelCreditPickerValue; onChange: (value: TravelCreditPickerValue) => void; /** * Context for the validate call. When provided, the server rejects Travel Credits * locked to a different booking / mismatched currency / insufficient balance. */ bookingId?: string; currency?: string; amountCents?: number; labels?: { heading?: string; codePlaceholder?: string; apply?: string; clear?: string; remainingLabel?: string; invalidLabel?: string; }; } /** * Travel Credit picker for booking-create flows. The operator enters a code, clicks * Apply, and the server-side `/v1/public/finance/travel-credits/validate` runs all the * usual guards (status, expiry, currency, booking-assignment, balance). * * The section only *validates* — it doesn't redeem. Redemption happens when * the parent calls `POST /v1/admin/finance/travel-credits/:id/redeem` at submit time, * after the booking exists and the final amount is known. Validate being * idempotent means the operator can try a code, correct a typo, and try * again without leaving a trail. */ export declare function TravelCreditPickerSection({ value, onChange, bookingId, currency, amountCents, labels, }: TravelCreditPickerSectionProps): import("react").JSX.Element;