@planetaexo/design-system 0.64.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -89,6 +89,13 @@ interface BookingAdventureCardLabels {
89
89
  childrenUnit?: string;
90
90
  /** Heading da seção ACCOMMODATIONS. Default "ACCOMMODATIONS". */
91
91
  accommodationsHeading?: string;
92
+ /**
93
+ * Heading por quarto no layout `feature` (ex.: "Accommodation: Suíte Master").
94
+ * Interpolado pelo DS via `accommodationRoomHeading(room.roomName)`.
95
+ * Default EN `(n) => \`Accommodation: ${n}\``. Usado só quando
96
+ * `roomLayout==="feature"`.
97
+ */
98
+ accommodationRoomHeading?: (name: string) => string;
92
99
  /** Labels localizados para o chip de bedArrangement. */
93
100
  bedArrangementLabels?: {
94
101
  DOUBLE?: string;
@@ -159,12 +166,21 @@ interface BookingAdventureCardProps {
159
166
  * quartos selecionados (renderiza bloco "ACCOMMODATIONS"). Vazio = bloco oculto.
160
167
  */
161
168
  rooms?: AccommodationRoomItem[];
169
+ /**
170
+ * Layout do bloco ACCOMMODATIONS:
171
+ * - `"compact"` (default) — card compacto atual (img 80×60 + chip + qty +
172
+ * roomType). Usado por PaymentReminderEmail e qualquer caller sem a prop.
173
+ * - `"feature"` — padrão manual da equipe: heading "Accommodation: {nome}"
174
+ * por quarto + imagem larga (full-width) + chip/qty/roomType/description
175
+ * mantidos abaixo. Ativado só pelo BookingPaymentConfirmationEmail.
176
+ */
177
+ roomLayout?: "compact" | "feature";
162
178
  /** Labels para i18n / customização. */
163
179
  labels?: BookingAdventureCardLabels;
164
180
  /** className extra no container. */
165
181
  className?: string;
166
182
  }
167
- declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, lineItems, subtotal, rooms, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
183
+ declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, lineItems, subtotal, rooms, roomLayout, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
168
184
 
169
185
  interface OfferSummaryLineItem {
170
186
  label: string;
@@ -253,6 +269,12 @@ interface OfferAdventureItem {
253
269
  rooms?: AccommodationRoomItem[];
254
270
  /** Heading do bloco Accommodations. Default: "Accommodations". */
255
271
  accommodationsLabel?: string;
272
+ /**
273
+ * Heading por quarto no padrão manual ("Accommodation: {name}").
274
+ * Interpolado pelo componente via `accommodationRoomHeading(room.roomName)`.
275
+ * Default EN `(n) => \`Accommodation: ${n}\``.
276
+ */
277
+ accommodationRoomHeading?: (name: string) => string;
256
278
  /** Labels localizados para o chip de bedArrangement. */
257
279
  bedArrangementLabels?: {
258
280
  DOUBLE?: string;
@@ -996,6 +1018,20 @@ interface BookingPaymentConfirmationEmailLabels {
996
1018
  pricingLabel?: string;
997
1019
  subtotalLabel?: string;
998
1020
  totalLabel?: string;
1021
+ /** Heading da seção ACCOMMODATIONS no card. Default EN "ACCOMMODATIONS". */
1022
+ accommodationsLabel?: string;
1023
+ /**
1024
+ * Heading por quarto no layout feature ("Accommodation: {name}").
1025
+ * Default EN `(n) => \`Accommodation: ${n}\``.
1026
+ */
1027
+ accommodationRoomHeading?: (name: string) => string;
1028
+ /** Labels localizados para o chip de bedArrangement. */
1029
+ bedArrangementLabels?: {
1030
+ DOUBLE?: string;
1031
+ TWIN?: string;
1032
+ SINGLE?: string;
1033
+ TRIPLE?: string;
1034
+ };
999
1035
  paymentSummaryHeading?: string;
1000
1036
  paymentDetailsHeading?: string;
1001
1037
  depositLabel?: (percent: number) => string;
@@ -2155,6 +2191,54 @@ interface BookingFormValues {
2155
2191
  phoneCountry: string;
2156
2192
  phone: string;
2157
2193
  email: string;
2194
+ /** Preferred contact channel. Values are stable (used by the CRM); only the
2195
+ * labels are localizable. Empty until the visitor picks one. */
2196
+ contactVia: "WhatsApp" | "Email" | "Phone" | "";
2197
+ }
2198
+ /**
2199
+ * i18n overrides for every visible string in the form. Any key left undefined
2200
+ * falls back to the built-in English string, so existing callers keep working.
2201
+ * `countries` overrides the residence dropdown (value stays stable for the
2202
+ * submitted payload; only the label is localized).
2203
+ */
2204
+ interface BookingFormLabels {
2205
+ title?: string;
2206
+ subtitle?: string;
2207
+ submit?: string;
2208
+ sending?: string;
2209
+ travelersSection?: string;
2210
+ adults?: string;
2211
+ children?: string;
2212
+ childrenSublabel?: string;
2213
+ tripSection?: string;
2214
+ travelDate?: string;
2215
+ pickDate?: string;
2216
+ budget?: string;
2217
+ projectSection?: string;
2218
+ projectLabel?: string;
2219
+ optional?: string;
2220
+ contactSection?: string;
2221
+ titleAria?: string;
2222
+ ms?: string;
2223
+ mr?: string;
2224
+ lastName?: string;
2225
+ firstName?: string;
2226
+ country?: string;
2227
+ phone?: string;
2228
+ email?: string;
2229
+ countries?: Array<{
2230
+ value: string;
2231
+ label: string;
2232
+ }>;
2233
+ /** Heading for the "preferred contact channel" radio section. */
2234
+ contactViaSection?: string;
2235
+ /** Localized labels for the contact-channel options (values stay stable). */
2236
+ contactViaWhatsApp?: string;
2237
+ contactViaEmail?: string;
2238
+ contactViaPhone?: string;
2239
+ /** Inline validation messages. */
2240
+ errorRequired?: string;
2241
+ errorEmail?: string;
2158
2242
  }
2159
2243
  interface BookingFormProps {
2160
2244
  /** Initial values */
@@ -2171,9 +2255,11 @@ interface BookingFormProps {
2171
2255
  title?: string;
2172
2256
  /** Override the header subtitle */
2173
2257
  subtitle?: string;
2258
+ /** i18n overrides for the form's built-in strings (English defaults). */
2259
+ labels?: BookingFormLabels;
2174
2260
  className?: string;
2175
2261
  }
2176
- declare function BookingForm({ defaultValues, onSubmit, submitLabel, loading, showHeader, title, subtitle, className, }: BookingFormProps): react_jsx_runtime.JSX.Element;
2262
+ declare function BookingForm({ defaultValues, onSubmit, submitLabel, loading, showHeader, title, subtitle, labels, className, }: BookingFormProps): react_jsx_runtime.JSX.Element;
2177
2263
 
2178
2264
  interface CountryOption {
2179
2265
  code: string;
@@ -2549,8 +2635,14 @@ interface PhoneCountrySelectProps {
2549
2635
  onChange: (code: string) => void;
2550
2636
  className?: string;
2551
2637
  disabled?: boolean;
2638
+ /**
2639
+ * Show the dial code (e.g. "+55") in the trigger next to the flag.
2640
+ * Defaults to `true`. Set to `false` when the adjacent phone input already
2641
+ * displays the dial code as a prefix (avoids showing "+55" twice).
2642
+ */
2643
+ showDial?: boolean;
2552
2644
  }
2553
- declare function PhoneCountrySelect({ value, onChange, className, disabled, }: PhoneCountrySelectProps): react_jsx_runtime.JSX.Element;
2645
+ declare function PhoneCountrySelect({ value, onChange, className, disabled, showDial, }: PhoneCountrySelectProps): react_jsx_runtime.JSX.Element;
2554
2646
 
2555
2647
  interface CounterFieldProps {
2556
2648
  label: string;
@@ -2573,8 +2665,10 @@ interface DatePickerFieldProps {
2573
2665
  disabled?: boolean;
2574
2666
  fromDate?: Date;
2575
2667
  className?: string;
2668
+ /** Inline validation message; renders below + reddens the trigger border. */
2669
+ error?: string;
2576
2670
  }
2577
- declare function DatePickerField({ label, required, value, onChange, placeholder, disabled, fromDate, className, }: DatePickerFieldProps): react_jsx_runtime.JSX.Element;
2671
+ declare function DatePickerField({ label, required, value, onChange, placeholder, disabled, fromDate, className, error, }: DatePickerFieldProps): react_jsx_runtime.JSX.Element;
2578
2672
 
2579
2673
  interface BirthDateFieldProps {
2580
2674
  label: string;
@@ -2652,8 +2746,23 @@ interface FilterPanelProps {
2652
2746
  sortOptions?: FilterSortOption[];
2653
2747
  sort?: string;
2654
2748
  onSortChange?: (id: string) => void;
2655
- }
2656
- declare function FilterPanel({ groups, value, onChange, onClearAll, alwaysShowClear, title, className, variant, sortOptions, sort, onSortChange, }: FilterPanelProps): react_jsx_runtime.JSX.Element | null;
2749
+ /** i18n overrides for the panel's built-in control labels (English defaults). */
2750
+ labels?: FilterPanelLabels;
2751
+ }
2752
+ /** i18n overrides for FilterPanel's built-in English control strings. */
2753
+ interface FilterPanelLabels {
2754
+ /** "Clear all" reset link/button. */
2755
+ clearAll?: string;
2756
+ /** Mobile drawer apply button: "Show results" (count appended). */
2757
+ showResults?: string;
2758
+ /** Mobile "Sort" trigger. */
2759
+ sortLabel?: string;
2760
+ /** "Sort by" popover heading. */
2761
+ sortByLabel?: string;
2762
+ /** "Remove all filters" link shown under the groups. */
2763
+ removeAllFilters?: string;
2764
+ }
2765
+ declare function FilterPanel({ groups, value, onChange, onClearAll, alwaysShowClear, title, className, variant, sortOptions, sort, onSortChange, labels, }: FilterPanelProps): react_jsx_runtime.JSX.Element | null;
2657
2766
 
2658
2767
  /**
2659
2768
  * Configuration for any Trustpilot widget embedded in the design system.
@@ -2896,6 +3005,19 @@ interface PhotoGalleryPhoto {
2896
3005
  /** Photo credit / author displayed in the lightbox bottom-right */
2897
3006
  credit?: string;
2898
3007
  }
3008
+ /** i18n overrides for the gallery's expand/collapse control + lightbox a11y. */
3009
+ interface PhotoGalleryLabels {
3010
+ /** "See more" — rendered with the hidden count: `See more (12)`. */
3011
+ seeMore?: string;
3012
+ /** "Show less". */
3013
+ showLess?: string;
3014
+ /** aria-label for the lightbox close button. @default "Close lightbox" */
3015
+ close?: string;
3016
+ /** aria-label for the lightbox previous-photo button. @default "Previous photo" */
3017
+ previous?: string;
3018
+ /** aria-label for the lightbox next-photo button. @default "Next photo" */
3019
+ next?: string;
3020
+ }
2899
3021
  interface PhotoGalleryProps {
2900
3022
  /** Array of photo URLs or photo objects */
2901
3023
  photos: (string | PhotoGalleryPhoto)[];
@@ -2909,9 +3031,11 @@ interface PhotoGalleryProps {
2909
3031
  initialVisible?: number;
2910
3032
  /** Called when a photo is clicked (in addition to opening the lightbox) */
2911
3033
  onPhotoClick?: (src: string, index: number) => void;
3034
+ /** i18n overrides for the "See more (N)" / "Show less" toggle. */
3035
+ labels?: PhotoGalleryLabels;
2912
3036
  className?: string;
2913
3037
  }
2914
- declare function PhotoGallery({ photos, variant, initialVisible, onPhotoClick, className, }: PhotoGalleryProps): react_jsx_runtime.JSX.Element | null;
3038
+ declare function PhotoGallery({ photos, variant, initialVisible, onPhotoClick, labels, className, }: PhotoGalleryProps): react_jsx_runtime.JSX.Element | null;
2915
3039
 
2916
3040
  type PricingTripVariant = "card" | "bar" | "compact";
2917
3041
  /**
@@ -2935,6 +3059,16 @@ interface PricingTripProps {
2935
3059
  departureTimes?: string[];
2936
3060
  onBook?: () => void;
2937
3061
  bookLabel?: string;
3062
+ /**
3063
+ * i18n override for the "From" price eyebrow. Rendered uppercased via CSS,
3064
+ * so pass natural case (e.g. "A partir de"). @default "From"
3065
+ */
3066
+ fromLabel?: string;
3067
+ /**
3068
+ * i18n override for the "per person" price suffix, rendered after the
3069
+ * built-in "/ " separator (e.g. "por pessoa"). @default "per person"
3070
+ */
3071
+ perPersonLabel?: string;
2938
3072
  variant?: PricingTripVariant;
2939
3073
  /**
2940
3074
  * When true, removes rounded corners on the OUTER container that PricingTrip
@@ -2971,7 +3105,7 @@ interface PricingTripProps {
2971
3105
  priceInfo?: React.ReactNode;
2972
3106
  className?: string;
2973
3107
  }
2974
- declare function PricingTrip({ priceFrom, currency, season, departureTimes, onBook, bookLabel, variant, sharp, belowPrice, benefits, currencyEstimates, priceInfo, className, }: PricingTripProps): react_jsx_runtime.JSX.Element;
3108
+ declare function PricingTrip({ priceFrom, currency, season, departureTimes, onBook, bookLabel, fromLabel, perPersonLabel, variant, sharp, belowPrice, benefits, currencyEstimates, priceInfo, className, }: PricingTripProps): react_jsx_runtime.JSX.Element;
2975
3109
 
2976
3110
  interface SiteHeaderSubItem {
2977
3111
  label: string;
@@ -3004,11 +3138,26 @@ interface SiteHeaderProps {
3004
3138
  onAccount?: () => void;
3005
3139
  /** "overlay" = absolute (inside a relative parent); "fixed" = fixed to viewport */
3006
3140
  position?: "overlay" | "fixed" | "static";
3141
+ /** i18n overrides for the header's icon-button aria-labels (English defaults). */
3142
+ labels?: SiteHeaderLabels;
3007
3143
  className?: string;
3008
3144
  }
3145
+ /** i18n overrides for SiteHeader's icon-button aria-labels. */
3146
+ interface SiteHeaderLabels {
3147
+ /** @default "Open menu" */
3148
+ openMenu?: string;
3149
+ /** @default "Close menu" */
3150
+ closeMenu?: string;
3151
+ /** @default "Language" */
3152
+ language?: string;
3153
+ /** @default "Search" */
3154
+ search?: string;
3155
+ /** @default "Account" */
3156
+ account?: string;
3157
+ }
3009
3158
  declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
3010
3159
  declare const DEFAULT_LANGUAGES: SiteHeaderLanguage[];
3011
- declare function SiteHeader({ variant, links, logoSrcLight, logoSrcDark, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
3160
+ declare function SiteHeader({ variant, links, logoSrcLight, logoSrcDark, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, labels, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
3012
3161
 
3013
3162
  declare function ThemeToggle({ className }: {
3014
3163
  className?: string;
@@ -3029,10 +3178,27 @@ interface TripCardCta {
3029
3178
  onClick?: () => void;
3030
3179
  href?: string;
3031
3180
  }
3181
+ /** i18n overrides for TripCard's built-in English strings. */
3182
+ interface TripCardLabels {
3183
+ /** Singular night ("1 night"). @default "night" */
3184
+ night?: string;
3185
+ /** Plural nights ("3 nights"). @default "nights" */
3186
+ nights?: string;
3187
+ /** "sold-out" status badge. @default "All seats taken" */
3188
+ soldOut?: string;
3189
+ /** "trending" status badge. @default "Trending" */
3190
+ trending?: string;
3191
+ /** Favorite button aria-label when not favorited. @default "Add to favorites" */
3192
+ addToFavorites?: string;
3193
+ /** Favorite button aria-label when favorited. @default "Remove from favorites" */
3194
+ removeFromFavorites?: string;
3195
+ }
3032
3196
  interface TripCardProps {
3033
3197
  /** URL da imagem de capa */
3034
3198
  image: string;
3035
3199
  imageAlt?: string;
3200
+ /** i18n overrides for the card's built-in strings (night/nights, badges, fav aria). */
3201
+ labels?: TripCardLabels;
3036
3202
  /** Badge de status (ex.: trending) — usado pelo variant="overlay". */
3037
3203
  status?: TripCardStatus;
3038
3204
  /** Número de noites */
@@ -3258,6 +3424,21 @@ interface TripDuration {
3258
3424
  /** Number of nights — defaults to days - 1 */
3259
3425
  nights?: number;
3260
3426
  }
3427
+ /** i18n overrides for the hero meta row + image-carousel controls. */
3428
+ interface TripHeaderLabels {
3429
+ /** Singular night ("1 night"). @default "night" */
3430
+ night?: string;
3431
+ /** Plural nights ("3 nights"). @default "nights" */
3432
+ nights?: string;
3433
+ /** Singular day ("1 day"). @default "day" */
3434
+ day?: string;
3435
+ /** Plural days ("4 days"). @default "days" */
3436
+ days?: string;
3437
+ /** aria-label for the previous hero image arrow. @default "Previous image" */
3438
+ previousImage?: string;
3439
+ /** aria-label for the next hero image arrow. @default "Next image" */
3440
+ nextImage?: string;
3441
+ }
3261
3442
  interface TripHeaderChip {
3262
3443
  label: string;
3263
3444
  href?: string;
@@ -3278,6 +3459,10 @@ interface TripHeaderProps {
3278
3459
  destination?: string;
3279
3460
  /** Duration shown with a moon/sun icon */
3280
3461
  duration?: TripDuration;
3462
+ /** Group size shown with a people icon (e.g. "Private · up to ~8–10 per guide") */
3463
+ groupSize?: string;
3464
+ /** i18n overrides for the duration words + image-carousel aria labels. */
3465
+ labels?: TripHeaderLabels;
3281
3466
  /** Legacy tagline — shown only when destination/duration are not provided */
3282
3467
  tagline?: string;
3283
3468
  /** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
@@ -3300,7 +3485,7 @@ interface TripHeaderProps {
3300
3485
  uiVariant?: "v1" | "v2";
3301
3486
  className?: string;
3302
3487
  }
3303
- declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
3488
+ declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
3304
3489
 
3305
3490
  interface TripHighlight {
3306
3491
  label: string;
@@ -3412,6 +3597,34 @@ interface TripPageLabels {
3412
3597
  faq?: string;
3413
3598
  /** Section nav + section heading: "What our guests think" */
3414
3599
  reviews?: string;
3600
+ /** Expand control on the FAQ list + photo galleries: "See more" (count appended). */
3601
+ seeMore?: string;
3602
+ /** Collapse control on the FAQ list + photo galleries: "Show less". */
3603
+ showLess?: string;
3604
+ /** Singular night ("1 night"). */
3605
+ night?: string;
3606
+ /** Plural nights ("3 nights"). */
3607
+ nights?: string;
3608
+ /** Singular day ("1 day"). */
3609
+ day?: string;
3610
+ /** Plural days ("4 days"). */
3611
+ days?: string;
3612
+ /** aria-label for the previous hero image arrow. */
3613
+ previousImage?: string;
3614
+ /** aria-label for the next hero image arrow. */
3615
+ nextImage?: string;
3616
+ /** Badge on a transfer itinerary step: "Transfer". */
3617
+ transfer?: string;
3618
+ /** Meeting-point type eyebrow when type = "activity": "Activity location". */
3619
+ meetingPointActivity?: string;
3620
+ /** Meeting-point type eyebrow when type = "alternative": "Alternative meeting point". */
3621
+ meetingPointAlternative?: string;
3622
+ /** aria-label for the lightbox close button. */
3623
+ galleryClose?: string;
3624
+ /** aria-label for the lightbox previous-photo button. */
3625
+ galleryPrevious?: string;
3626
+ /** aria-label for the lightbox next-photo button. */
3627
+ galleryNext?: string;
3415
3628
  }
3416
3629
 
3417
3630
  interface TripPageProps {
@@ -3422,6 +3635,8 @@ interface TripPageProps {
3422
3635
  destination?: string;
3423
3636
  /** Duration shown with moon/sun icons in the hero */
3424
3637
  duration?: TripDuration;
3638
+ /** Group size shown with a people icon in the hero meta row */
3639
+ groupSize?: string;
3425
3640
  images: string[];
3426
3641
  /** Optional video URL — plays as background instead of the image carousel */
3427
3642
  videoUrl?: string;
@@ -3475,6 +3690,12 @@ interface TripPageProps {
3475
3690
  * `food` omitted, the accordion still opens to show just the photos.
3476
3691
  */
3477
3692
  foodGallery?: PhotoGalleryPhoto[];
3693
+ /**
3694
+ * Visual layout for the food gallery — the food equivalent of
3695
+ * {@link accommodationGalleryVariant}. Independent of the accommodation
3696
+ * gallery so the two sections never share a layout by accident. @default "gridCompact"
3697
+ */
3698
+ foodGalleryVariant?: PhotoGalleryVariant;
3478
3699
  termsAndConditions?: React.ReactNode;
3479
3700
  meetingPoints?: TripMeetingPoint[];
3480
3701
  /**
@@ -3527,6 +3748,24 @@ interface TripPageProps {
3527
3748
  priceInfo?: React.ReactNode;
3528
3749
  onBook?: () => void;
3529
3750
  bookLabel?: string;
3751
+ /**
3752
+ * Fired when the trip-page inquiry form (BookingForm) is submitted, with the
3753
+ * full set of entered values. Distinct from `onBook` (the pricing card's
3754
+ * "Check availability" CTA): on trips that render the form, the CTA scrolls
3755
+ * to the form and only this callback carries the lead's details.
3756
+ */
3757
+ onBookingSubmit?: (values: BookingFormValues) => void;
3758
+ /** Disables the inquiry form's submit button and shows its "Sending…" state. */
3759
+ bookingLoading?: boolean;
3760
+ /** Initial values for the inquiry form — used to geo-default the country and
3761
+ * to prefill the visitor's remembered details from a previous enquiry. */
3762
+ bookingDefaults?: Partial<BookingFormValues>;
3763
+ /** i18n overrides for the trip-page inquiry form (BookingForm). */
3764
+ bookingLabels?: BookingFormLabels;
3765
+ /** i18n override for the PricingTrip "From" price eyebrow. @default "From" */
3766
+ fromLabel?: string;
3767
+ /** i18n override for the PricingTrip "per person" price suffix. @default "per person" */
3768
+ perPersonLabel?: string;
3530
3769
  /**
3531
3770
  * Render an overlay SiteHeader inside the hero. Accepts:
3532
3771
  * - `boolean` — minimal: default link list (styleguide usage).
@@ -3543,7 +3782,7 @@ interface TripPageProps {
3543
3782
  features?: Record<string, boolean>;
3544
3783
  className?: string;
3545
3784
  }
3546
- declare function TripPage({ title, tagline, destination, duration, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, bookLabel, siteHeader, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
3785
+ declare function TripPage({ title, tagline, destination, duration, groupSize, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, foodGalleryVariant, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, onBookingSubmit, bookingLoading, bookingDefaults, bookingLabels, bookLabel, fromLabel, perPersonLabel, siteHeader, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
3547
3786
 
3548
3787
  interface Category2Trip extends TripCardProps {
3549
3788
  /** Marca a trip como featured — sobe para o topo do grid principal. */
@@ -3603,6 +3842,12 @@ interface CategoryPage2Props {
3603
3842
  * {@link TripSiteHeaderConfig} to wire languages + onLanguageChange.
3604
3843
  */
3605
3844
  siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
3845
+ /**
3846
+ * Optional node pinned to the top-right of the hero content (below the
3847
+ * overlay header, aligned with the breadcrumb/title). Used e.g. for a
3848
+ * Browse/Compare/Enquire mode switcher.
3849
+ */
3850
+ heroRightSlot?: React.ReactNode;
3606
3851
  popularTours?: Category2Trip[];
3607
3852
  popularToursTitle?: string;
3608
3853
  popularToursEyebrow?: string;
@@ -3614,6 +3859,13 @@ interface CategoryPage2Props {
3614
3859
  defaultSort?: string;
3615
3860
  /** Number of trips shown before the "Load more" button appears. @default 15 */
3616
3861
  tripsInitialCount?: number;
3862
+ /**
3863
+ * When provided, replaces the default filter-sidebar + trip-grid + sort
3864
+ * section entirely (the section heading still renders). Used to swap in an
3865
+ * external selectable grid (e.g. the favourites compare/enquire surface)
3866
+ * without touching the rest of the page.
3867
+ */
3868
+ tripListingSlot?: React.ReactNode;
3617
3869
  trustpilot?: TrustpilotWidgetConfig;
3618
3870
  reviewsTitle?: string;
3619
3871
  /** Optional subtitle/intro paragraph below the reviews H2. */
@@ -3638,9 +3890,21 @@ interface CategoryPage2Props {
3638
3890
  faqInitialCount?: number;
3639
3891
  gallery?: (string | PhotoGalleryPhoto)[];
3640
3892
  galleryTitle?: string;
3893
+ /** Trips-list expand button: "Load more" (count appended). */
3894
+ loadMoreLabel?: string;
3895
+ /** Expand/collapse collapse button: "Show less". */
3896
+ showLessLabel?: string;
3897
+ /** FAQ expand button: "See more" (count appended). */
3898
+ seeMoreLabel?: string;
3899
+ /** Blog "View all posts" link (when no travel-guide href). */
3900
+ viewAllPostsLabel?: string;
3901
+ /** i18n overrides for the trip cards (night/nights, badges, fav aria). */
3902
+ cardLabels?: TripCardLabels;
3903
+ /** i18n overrides for the filter/sort panel controls. */
3904
+ filterLabels?: FilterPanelLabels;
3641
3905
  className?: string;
3642
3906
  }
3643
- declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
3907
+ declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, heroRightSlot, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, tripListingSlot, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, loadMoreLabel, showLessLabel, seeMoreLabel, viewAllPostsLabel, cardLabels, filterLabels, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
3644
3908
 
3645
3909
  type ActivityCardSize = "sm" | "md" | "lg";
3646
3910
  interface ActivityCardProps {
@@ -4339,4 +4603,501 @@ interface StickyBookingCardProps {
4339
4603
  }
4340
4604
  declare function StickyBookingCard({ currentPrice, deposit, spotsRemaining, mode, onPrimary, note, className, }: StickyBookingCardProps): react_jsx_runtime.JSX.Element;
4341
4605
 
4342
- export { type AccommodationRoomItem, ActivityCard, type ActivityCardProps, type ActivityCardSize, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, AskExo, type AskExoProps, type AskExoSuggestion, BirthDateField, type BirthDateFieldProps, type BlogAuthor, type BlogBlock, type BlogCalloutBlock, BlogCard, type BlogCardCta, type BlogCardProps, type BlogCardSize, type BlogCollageBlock, type BlogHeadingBlock, type BlogImageBlock, type BlogListBlock, type BlogParagraphBlock, BlogPost, type BlogPostProps, type BlogQuoteBlock, type BlogTableBlock, type BlogTableColumn, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, type BookingCancellationAdventure, type BookingCancellationAgentContactLinks, BookingCancellationEmail, type BookingCancellationEmailLabels, type BookingCancellationEmailProps, BookingConfirmedCard, type BookingConfirmedCardProps, type BookingContact, BookingCreatedEmail, type BookingCreatedEmailLabels, type BookingCreatedEmailProps, type BookingDepositInfo, BookingDetails, type BookingDetailsLabels, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingOtpEmail, type BookingOtpEmailProps, BookingPaymentConfirmationEmail, type BookingPaymentConfirmationEmailLabels, type BookingPaymentConfirmationEmailProps, BookingShell, type BookingShellProps, type BookingStatus, BookingSummary, type BookingSummaryLineItem, type BookingSummaryProps, type BookingSummaryRoomItem, type BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, CancellationForm, type CancellationFormAdventure, type CancellationFormLabels, type CancellationFormOption, type CancellationFormParticipant, type CancellationFormProps, type CancellationFormValues, type Category2BlogPost, type Category2Faq, type Category2SortOption, type Category2Trip, CategoryPage2, type CategoryPage2Props, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, type CurrencyEstimate, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, STATUS_MAP as DEPARTURE_STATUS_MAP, DatePickerField, type DatePickerFieldProps, type DepartureStatus, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, ExoOrb, type ExoOrbProps, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, GroupProgressBar, type GroupProgressBarProps, GroupStatusBanner, type GroupStatusBannerProps, Itinerary, ItineraryDay, type ItineraryDayPhoto, type ItineraryDayPhotoLayout, type ItineraryDayProps, type ItineraryDaySpec, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, NotificationEmail, type NotificationEmailCta, type NotificationEmailDetailItem, type NotificationEmailProps, type NotificationEmailRoster, type NotificationEmailRosterPerson, type NotificationEmailSummary, type NotificationEmailSummaryRow, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type Participant, ParticipantCounter, type ParticipantCounterProps, ParticipantList, type ParticipantListProps, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerRegistrationCompleteAgentContactLinks, PartnerRegistrationCompleteEmail, type PartnerRegistrationCompleteEmailExpectationRow, type PartnerRegistrationCompleteEmailLabels, type PartnerRegistrationCompleteEmailProps, PaymentAmountSelector, type PaymentAmountSelectorProps, PaymentDetailsBlock, type PaymentDetailsBlockFooterBanner, type PaymentDetailsBlockLabels, type PaymentDetailsBlockProps, type PaymentDetailsBlockRow, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, type PaymentReceiptAdventure, type PaymentReceiptAdventureLineItem, PaymentReceiptEmail, type PaymentReceiptEmailLabels, type PaymentReceiptEmailProps, type PaymentReminderAgentContactLinks, PaymentReminderEmail, type PaymentReminderEmailAdventure, type PaymentReminderEmailLabels, type PaymentReminderEmailLineItem, type PaymentReminderEmailProps, type PaymentReminderEmailVariantLabels, type PaymentReminderVariant, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, Picture, type PictureProps, PriceProgress, type PriceProgressProps, PricingMatrixCard, type PricingMatrixCardProps, type PricingTier, PricingTrip, type PricingTripProps, type PricingTripVariant, type RegistrationAdventure, type RegistrationBooking, type RegistrationEmergencyContactValue, type RegistrationField, type RegistrationFieldOption, type RegistrationFieldType, type RegistrationFieldValue, RegistrationForm, type RegistrationFormLabels, type RegistrationFormProps, type RegistrationFormValues, type RegistrationNameValue, type RegistrationPhoneValue, RegistrationProgressBar, type RegistrationProgressBarProps, type RegistrationProgressTone, type RegistrationReminderAdventureBlock, type RegistrationReminderAgentContactLinks, RegistrationReminderEmail, type RegistrationReminderEmailLabels, type RegistrationReminderEmailProps, type RegistrationReminderEmailVariantLabels, type RegistrationReminderIndividualAgentContactLinks, RegistrationReminderIndividualEmail, type RegistrationReminderIndividualEmailLabels, type RegistrationReminderIndividualEmailProps, type RegistrationReminderIndividualRoute, type RegistrationReminderIndividualSlug, type RegistrationReminderIndividualVariantLabels, type RegistrationReminderSlug, RegistrationSuccessCard, type RegistrationSuccessCardProps, type RegistrationTerms, type RegistrationTraveller, ShareWidget, type ShareWidgetProps, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, StatusBadge, type StatusBadgeProps, StickyBookingCard, type StickyBookingCardProps, type StripeAppearance, type SuggestedTraveller, TERMS_ACCEPT_KEY, TermsSection, type TermsSectionProps, ThemeToggle, Toast, type ToastProps, type ToastVariant, TransferDetailsBlock, type TransferDetailsBlockProps, type TravellerFormConfig, type TravellerFormData, TravellerFormInviteEmail, type TravellerFormInviteEmailLabels, type TravellerFormInviteEmailProps, type TravellerFormInviteLink, type TravellerFormLabels, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryDay, type TripItineraryStep, type TripMeetingPoint, type TripOverviewHighlight, TripPage, type TripPageLabels, type TripPageProps, type TripReview, type TripSectionIcons, type TripSiteHeaderConfig, type TripTrustpilotWidget, TrustpilotEmbed, type TrustpilotWidgetConfig, buttonVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, webpVariantUrl, wrapEmailHtml };
4606
+ declare const chipVariants: (props?: ({
4607
+ variant?: "outline" | "solid" | "glass" | null | undefined;
4608
+ size?: "sm" | "md" | "lg" | null | undefined;
4609
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
4610
+ interface ChipProps extends Omit<React.HTMLAttributes<HTMLElement>, "color">, VariantProps<typeof chipVariants> {
4611
+ /** When provided, renders an `<a>` tag instead of a `<span>`. */
4612
+ href?: string;
4613
+ }
4614
+ declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLElement>>;
4615
+
4616
+ /**
4617
+ * Rich configuration for the overlay `<SiteHeader>` rendered inside the
4618
+ * hero. Accepts everything `<SiteHeader>` accepts EXCEPT `position` and
4619
+ * `className`: position is hardcoded to `"overlay"` so the header scrolls
4620
+ * away with the hero, and the hero composes its own layout around it.
4621
+ */
4622
+ type HomeSiteHeaderConfig = Omit<SiteHeaderProps, "position" | "className">;
4623
+ interface HomeHeaderCta {
4624
+ label: string;
4625
+ href?: string;
4626
+ onClick?: () => void;
4627
+ }
4628
+ interface HomeHeaderRating {
4629
+ /** Qualifier shown before the stars — e.g. "Excellent". */
4630
+ label?: string;
4631
+ /** Filled stars out of 5. Supports halves (e.g. 4.5). @default 5 */
4632
+ stars?: number;
4633
+ /** Provider name shown after the stars — e.g. "Trustpilot". */
4634
+ provider?: string;
4635
+ /** Makes the whole widget a link. */
4636
+ href?: string;
4637
+ }
4638
+ interface HomeHeaderPressLogo {
4639
+ /** Logo image URL. When omitted, `label` renders as styled text. */
4640
+ src?: string;
4641
+ /** Text fallback / accessible label. */
4642
+ label?: string;
4643
+ alt?: string;
4644
+ /** When provided, the logo becomes a link (e.g. to the press article). */
4645
+ href?: string;
4646
+ }
4647
+ interface HomeHeaderProps {
4648
+ /** Hero image array — shows a slow crossfade carousel when more than one. */
4649
+ images: string[];
4650
+ /** Optional video URL — plays as background instead of the image carousel. */
4651
+ videoUrl?: string;
4652
+ /** Small eyebrow line rendered above the title. */
4653
+ eyebrow?: string;
4654
+ /** Main hero headline. */
4655
+ title: string;
4656
+ /** Subtitle rendered below the title. */
4657
+ subtitle?: string;
4658
+ /** Primary call-to-action button below the subtitle. */
4659
+ cta?: HomeHeaderCta;
4660
+ /**
4661
+ * Live Trustpilot TrustBox shown under the CTA. Pass `true` for the
4662
+ * PlanetaEXO defaults, or a {@link TrustpilotWidgetConfig} to override the
4663
+ * business unit / template / theme. Takes precedence over `rating`.
4664
+ */
4665
+ trustpilot?: boolean | TrustpilotWidgetConfig;
4666
+ /** Static, mock rating widget — fallback when `trustpilot` is not set. */
4667
+ rating?: HomeHeaderRating;
4668
+ /** "In the press" logo strip pinned to the bottom of the hero. */
4669
+ pressLogos?: HomeHeaderPressLogo[];
4670
+ /** Label shown beside the press logos. @default "In the press" */
4671
+ pressLabel?: string;
4672
+ /** When provided, the press label becomes a link (e.g. to a press page). */
4673
+ pressLabelHref?: string;
4674
+ /**
4675
+ * Render an overlay `<SiteHeader>` inside the hero. Accepts:
4676
+ * - `boolean` — minimal: renders the header with the default link list.
4677
+ * - `SiteHeaderLink[]` — a custom links array.
4678
+ * - {@link HomeSiteHeaderConfig} — full SiteHeaderProps minus
4679
+ * `position`/`className` (e.g. to wire languages + onLanguageChange).
4680
+ */
4681
+ siteHeader?: boolean | SiteHeaderLink[] | HomeSiteHeaderConfig;
4682
+ /**
4683
+ * Content alignment variant.
4684
+ * - `"center"` — hero copy centered (homepage default).
4685
+ * - `"left"` — hero copy aligned to the left edge.
4686
+ * @default "center"
4687
+ */
4688
+ align?: "center" | "left";
4689
+ className?: string;
4690
+ }
4691
+ declare function HomeHeader({ images, videoUrl, eyebrow, title, subtitle, cta, trustpilot, rating, pressLogos, pressLabel, pressLabelHref, siteHeader, align, className, }: HomeHeaderProps): react_jsx_runtime.JSX.Element;
4692
+
4693
+ interface ExploreCard {
4694
+ /** Label overlaid at the bottom of the card (e.g. "Europe"). */
4695
+ label: string;
4696
+ /** Card background image URL. Optional in the bento layout — omit it and
4697
+ * pass `gradient` for a textless gradient tile (e.g. lesser destinations). */
4698
+ image?: string;
4699
+ /** Optional link — makes the whole card clickable. */
4700
+ href?: string;
4701
+ /** Accessible alt text — defaults to `label`. */
4702
+ imageAlt?: string;
4703
+ /** Pill badge in the top-right corner — e.g. "22 trips", "Safaris". */
4704
+ tripCount?: string;
4705
+ /** Short blurb revealed on hover under the title. */
4706
+ description?: string;
4707
+ /** Accent "go" link under the description — e.g. "Explore Amazon". */
4708
+ ctaLabel?: string;
4709
+ /** Tile footprint in the bento grid. @default "normal" */
4710
+ size?: "featured" | "tall" | "wide" | "normal";
4711
+ /** Tailwind gradient classes for an image-less tile — e.g.
4712
+ * "from-amber-600 to-amber-950". Used only when `image` is omitted. */
4713
+ gradient?: string;
4714
+ }
4715
+ interface ExploreTab {
4716
+ /** Stable id used to track the active tab. */
4717
+ id: string;
4718
+ /** Tab label (e.g. "Destinations"). */
4719
+ label: string;
4720
+ /** Cards shown when this tab is active. */
4721
+ cards: ExploreCard[];
4722
+ /** Optional per-tab "View All" link — overrides the component-level one. */
4723
+ viewAllHref?: string;
4724
+ }
4725
+ interface AdventureExplorerProps {
4726
+ /** Tabs, each with its own set of cards. */
4727
+ tabs: ExploreTab[];
4728
+ /** Small accent eyebrow above the heading (e.g. "Start exploring"). */
4729
+ eyebrow?: string;
4730
+ /** Serif section heading rendered above the filter (e.g. "Find your wilderness"). */
4731
+ heading?: string;
4732
+ /** Supporting line under the heading. */
4733
+ subheading?: string;
4734
+ /** Initially active tab id — defaults to the first tab. */
4735
+ defaultTabId?: string;
4736
+ /** Label for the "View All" CTA. Pass "" to hide it. @default "View All Adventures" */
4737
+ viewAllLabel?: string;
4738
+ /** Href for the "View All" CTA (per-tab `viewAllHref` takes precedence). */
4739
+ viewAllHref?: string;
4740
+ /**
4741
+ * Surface the explorer sits on.
4742
+ * - `"dark"` — dark section, white tab labels (homepage look).
4743
+ * - `"light"` — light surface, dark tab labels.
4744
+ * @default "dark"
4745
+ */
4746
+ theme?: "dark" | "light";
4747
+ /**
4748
+ * Card arrangement.
4749
+ * - `"carousel"` — horizontal rail of portrait tiles (default).
4750
+ * - `"bento"` — masonry-style grid with variable-span tiles, trip-count
4751
+ * badges and hover-revealed descriptions.
4752
+ * @default "carousel"
4753
+ */
4754
+ layout?: "carousel" | "bento";
4755
+ /**
4756
+ * Bento layout only — cap how many cards render as tiles. Any cards beyond
4757
+ * the limit collapse into a minimal "more" links row below the grid
4758
+ * (label + trip count). Omit to show every card as a tile.
4759
+ */
4760
+ bentoLimit?: number;
4761
+ /**
4762
+ * Eyebrow label for the overflow "more" row (bento + `bentoLimit`).
4763
+ * @default "More wild places"
4764
+ */
4765
+ moreLabel?: string;
4766
+ className?: string;
4767
+ }
4768
+ declare function AdventureExplorer({ tabs, eyebrow, heading, subheading, defaultTabId, viewAllLabel, viewAllHref, theme, layout, bentoLimit, moreLabel, className, }: AdventureExplorerProps): react_jsx_runtime.JSX.Element;
4769
+
4770
+ interface USPItem {
4771
+ /** Icon element — any SVG-based icon (e.g. a lucide `<HeartIcon />`).
4772
+ * It inherits the accent colour and is sized by the component.
4773
+ * Ignored by the `"numbered"` variant, which shows an index instead. */
4774
+ icon?: React.ReactNode;
4775
+ /** Short, bold heading (rendered uppercase). */
4776
+ title: string;
4777
+ /** Supporting copy. */
4778
+ description: string;
4779
+ }
4780
+ interface USPProps {
4781
+ /** The value props / selling points. */
4782
+ items: USPItem[];
4783
+ /** Optional section heading above the grid. */
4784
+ heading?: string;
4785
+ /** Optional supporting line under the heading. */
4786
+ subheading?: string;
4787
+ /** Columns on large screens. Defaults to the item count (clamped 2–4). */
4788
+ columns?: 2 | 3 | 4;
4789
+ /**
4790
+ * Layout variant.
4791
+ * - `"minimal"` — centered icon + text, no container (the default look).
4792
+ * - `"card"` — each item boxed in a card with an icon chip.
4793
+ * - `"inline"` — icon on the left, text on the right, left-aligned.
4794
+ * - `"numbered"` — boxed cards with an italic index (01, 02…) instead of an
4795
+ * icon; left-aligned, title-case headings. No `icon` needed.
4796
+ * @default "minimal"
4797
+ */
4798
+ variant?: "minimal" | "card" | "inline" | "numbered";
4799
+ /**
4800
+ * Surface the section sits on.
4801
+ * - `"light"` — light grey surface, dark text (the screenshot look).
4802
+ * - `"dark"` — dark surface, light text.
4803
+ * @default "light"
4804
+ */
4805
+ theme?: "light" | "dark";
4806
+ className?: string;
4807
+ }
4808
+ declare function USP({ items, heading, subheading, columns, variant, theme, className, }: USPProps): react_jsx_runtime.JSX.Element;
4809
+
4810
+ interface SiteFooterChip {
4811
+ label: string;
4812
+ href: string;
4813
+ }
4814
+ interface SiteFooterLink {
4815
+ label: string;
4816
+ href: string;
4817
+ }
4818
+ interface SiteFooterLanguage {
4819
+ /** Locale code shown as the trigger label — e.g. "EN", "NL". */
4820
+ code: string;
4821
+ /** Human-friendly name shown next to the code in the dropdown. */
4822
+ label: string;
4823
+ }
4824
+ interface SiteFooterBadge {
4825
+ /** Image src. Optional when `node` is provided. */
4826
+ src?: string;
4827
+ alt: string;
4828
+ href?: string;
4829
+ /** Image height in px. Defaults to 56. Ignored when `node` is provided. */
4830
+ height?: number;
4831
+ /** Override with a custom React node (e.g. inline SVG). */
4832
+ node?: React.ReactNode;
4833
+ }
4834
+ interface SiteFooterSocial {
4835
+ network: "facebook" | "instagram" | "linkedin" | "youtube" | "twitter";
4836
+ href: string;
4837
+ label?: string;
4838
+ }
4839
+ interface SiteFooterAddress {
4840
+ title: string;
4841
+ lines: string[];
4842
+ }
4843
+ type SiteFooterVariant = "light" | "dark";
4844
+ interface SiteFooterProps {
4845
+ variant?: SiteFooterVariant;
4846
+ /** Brand name shown when no logo is rendered, used in copyright fallback. */
4847
+ brandTitle?: string;
4848
+ /** Logo used on the dark variant. Defaults to the white PlanetaEXO mark. */
4849
+ logoSrcLight?: string;
4850
+ /** Logo used on the light variant. Defaults to the green PlanetaEXO mark. */
4851
+ logoSrcDark?: string;
4852
+ /** Single-logo override — applies to both variants when set. */
4853
+ logoSrc?: string;
4854
+ logoAlt?: string;
4855
+ /** Optional href wrapping the logo. */
4856
+ logoHref?: string;
4857
+ /** Longer disclaimer / legal copy under the logo. */
4858
+ brandDescription?: React.ReactNode;
4859
+ /** Member / association badges rendered under the description. */
4860
+ badges?: SiteFooterBadge[];
4861
+ languages?: SiteFooterLanguage[];
4862
+ currentLanguage?: string;
4863
+ onLanguageChange?: (code: string) => void;
4864
+ address?: SiteFooterAddress;
4865
+ phone?: string;
4866
+ email?: string;
4867
+ socials?: SiteFooterSocial[];
4868
+ themesTitle?: string;
4869
+ themes?: SiteFooterChip[];
4870
+ destinationsTitle?: string;
4871
+ destinations?: SiteFooterChip[];
4872
+ destinationsMore?: {
4873
+ label: string;
4874
+ href: string;
4875
+ };
4876
+ pagesTitle?: string;
4877
+ pages?: SiteFooterLink[];
4878
+ /** Highlighted CTA under the Pages column — e.g. partnerships email. */
4879
+ cta?: {
4880
+ title: string;
4881
+ label: string;
4882
+ href: string;
4883
+ };
4884
+ copyright?: string;
4885
+ legalLinks?: SiteFooterLink[];
4886
+ className?: string;
4887
+ }
4888
+ declare const DEFAULT_FOOTER_THEMES: SiteFooterChip[];
4889
+ declare const DEFAULT_FOOTER_DESTINATIONS: SiteFooterChip[];
4890
+ declare const DEFAULT_FOOTER_PAGES: SiteFooterLink[];
4891
+ declare const DEFAULT_FOOTER_LEGAL: SiteFooterLink[];
4892
+ declare const DEFAULT_FOOTER_LANGUAGES: SiteFooterLanguage[];
4893
+ declare const DEFAULT_FOOTER_SOCIALS: SiteFooterSocial[];
4894
+ declare const DEFAULT_FOOTER_BADGES: SiteFooterBadge[];
4895
+ declare function SiteFooter({ variant, brandTitle, logoSrcLight, logoSrcDark, logoSrc, logoAlt, logoHref, brandDescription, badges, languages, currentLanguage, onLanguageChange, address, phone, email, socials, themesTitle, themes, destinationsTitle, destinations, destinationsMore, pagesTitle, pages, cta, copyright, legalLinks, className, }: SiteFooterProps): react_jsx_runtime.JSX.Element;
4896
+
4897
+ interface CtaBannerCta {
4898
+ label: string;
4899
+ href?: string;
4900
+ onClick?: () => void;
4901
+ }
4902
+ interface CtaBannerProps {
4903
+ /** Full-bleed background image URL. */
4904
+ image: string;
4905
+ /** Accessible alt text for the background image. @default "" (decorative) */
4906
+ imageAlt?: string;
4907
+ /** Main headline — rendered uppercase in the heading font. */
4908
+ title: string;
4909
+ /**
4910
+ * Subtitle below the title. Pass a single string for a static line, or an
4911
+ * array to cycle through phrases with a slow crossfade (homepage behaviour:
4912
+ * "make a positive impact" → "travel sustainably" → "support local communities").
4913
+ */
4914
+ subtitle?: string | string[];
4915
+ /** Underlined call-to-action link below the subtitle. */
4916
+ cta?: CtaBannerCta;
4917
+ /** Milliseconds each rotating subtitle stays visible. @default 3000 */
4918
+ rotateInterval?: number;
4919
+ /**
4920
+ * Pin the background while scrolling (parallax). Applied from `sm` up only —
4921
+ * `background-attachment: fixed` is unreliable on mobile. @default true
4922
+ */
4923
+ parallax?: boolean;
4924
+ /** Dark overlay opacity over the image, 0–100. @default 35 */
4925
+ overlayOpacity?: number;
4926
+ className?: string;
4927
+ }
4928
+ declare function CtaBanner({ image, imageAlt, title, subtitle, cta, rotateInterval, parallax, overlayOpacity, className, }: CtaBannerProps): react_jsx_runtime.JSX.Element;
4929
+
4930
+ interface BlogJournalFeature {
4931
+ image: string;
4932
+ imageAlt?: string;
4933
+ /** Category pill over the image — e.g. "Destinations". */
4934
+ tag?: string;
4935
+ /** Publish date — e.g. "May 22, 2026". */
4936
+ date?: string;
4937
+ title: string;
4938
+ excerpt?: string;
4939
+ href?: string;
4940
+ /** Whether the link opens in a new tab. */
4941
+ external?: boolean;
4942
+ /** Read-link label. @default "Read the guide" */
4943
+ ctaLabel?: string;
4944
+ }
4945
+ interface BlogJournalPost {
4946
+ image: string;
4947
+ imageAlt?: string;
4948
+ /** Category / kicker — e.g. "Travel guide". */
4949
+ category?: string;
4950
+ date?: string;
4951
+ title: string;
4952
+ href?: string;
4953
+ external?: boolean;
4954
+ }
4955
+ interface BlogJournalProps {
4956
+ /** Eyebrow above the heading — e.g. "The journal". */
4957
+ eyebrow?: string;
4958
+ /** Section heading. */
4959
+ title?: string;
4960
+ /** Supporting line under the heading. */
4961
+ subtitle?: string;
4962
+ /** Right-aligned "view all" link. */
4963
+ link?: {
4964
+ label: string;
4965
+ href?: string;
4966
+ };
4967
+ /** Large featured post (left column). */
4968
+ feature: BlogJournalFeature;
4969
+ /** Compact list of posts (right column). */
4970
+ posts: BlogJournalPost[];
4971
+ /**
4972
+ * Surface the block sits on.
4973
+ * - `"light"` — light surface, dark text (default).
4974
+ * - `"dark"` — dark surface, light text.
4975
+ * @default "light"
4976
+ */
4977
+ theme?: "light" | "dark";
4978
+ className?: string;
4979
+ }
4980
+ declare function BlogJournal({ eyebrow, title, subtitle, link, feature, posts, theme, className, }: BlogJournalProps): react_jsx_runtime.JSX.Element;
4981
+
4982
+ interface NewHomeSectionLink {
4983
+ label: string;
4984
+ href?: string;
4985
+ }
4986
+ /** A section heading block — eyebrow + title + supporting copy + optional link. */
4987
+ interface NewHomeSectionHead {
4988
+ eyebrow?: string;
4989
+ title: string;
4990
+ subtitle?: string;
4991
+ /** Right-aligned "view all" style link (desktop). */
4992
+ link?: NewHomeSectionLink;
4993
+ }
4994
+ interface NewHomeExpeditions extends NewHomeSectionHead {
4995
+ /** Editorial TripCards shown in a draggable / button-scrolled rail. */
4996
+ trips: TripCardProps[];
4997
+ }
4998
+ interface NewHomePopularChip {
4999
+ label: string;
5000
+ href?: string;
5001
+ /** Visually promotes the chip (solid teal). */
5002
+ featured?: boolean;
5003
+ size?: "sm" | "md" | "lg";
5004
+ }
5005
+ interface NewHomePopular extends NewHomeSectionHead {
5006
+ chips: NewHomePopularChip[];
5007
+ }
5008
+ interface NewHomeStat {
5009
+ /** Headline figure — e.g. "8", "50+", "100%", "★★★★★". */
5010
+ value: string;
5011
+ label: string;
5012
+ }
5013
+ interface NewHomeStats {
5014
+ items: NewHomeStat[];
5015
+ }
5016
+ interface NewHomeReview {
5017
+ quote: string;
5018
+ author: string;
5019
+ /** Filled stars out of 5. @default 5 */
5020
+ stars?: number;
5021
+ }
5022
+ interface NewHomeReviews extends NewHomeSectionHead {
5023
+ items: NewHomeReview[];
5024
+ /** Small disclaimer under the grid (e.g. "Live Trustpilot reviews load here"). */
5025
+ note?: string;
5026
+ }
5027
+ interface NewHomeProps {
5028
+ /** Hero — passed straight through to {@link HomeHeader}. Required. */
5029
+ hero: HomeHeaderProps;
5030
+ /** "Find your wilderness" tabbed explorer — passed to {@link AdventureExplorer}. */
5031
+ explorer?: AdventureExplorerProps;
5032
+ /** Signature-trips rail of editorial {@link TripCard}s. */
5033
+ expeditions?: NewHomeExpeditions;
5034
+ /** "Popular right now" chip cloud. */
5035
+ popular?: NewHomePopular;
5036
+ /** Teal stats band. */
5037
+ stats?: NewHomeStats;
5038
+ /** "Why us" differentiators — passed to {@link USP}. */
5039
+ usp?: USPProps;
5040
+ /** Dark reviews band. */
5041
+ reviews?: NewHomeReviews;
5042
+ /** "The journal" — feature + list block, passed to {@link BlogJournal}. */
5043
+ journal?: BlogJournalProps;
5044
+ /** Full-bleed call-to-action — passed to {@link CtaBanner}. */
5045
+ cta?: CtaBannerProps;
5046
+ /** Site footer — passed to {@link SiteFooter}. */
5047
+ footer?: SiteFooterProps;
5048
+ className?: string;
5049
+ }
5050
+ declare function NewHome({ hero, explorer, expeditions, popular, stats, usp, reviews, journal, cta, footer, className, }: NewHomeProps): react_jsx_runtime.JSX.Element;
5051
+
5052
+ interface SegmentItem {
5053
+ /** Stable id returned by `onValueChange`. */
5054
+ id: string;
5055
+ /** Visible label. */
5056
+ label: string;
5057
+ /**
5058
+ * Optional leading icon — pass a component, e.g. a lucide `CompassIcon`
5059
+ * (not an element). The component sizes and colours it to match the label.
5060
+ */
5061
+ icon?: React.ComponentType<{
5062
+ className?: string;
5063
+ }>;
5064
+ /** Disable this single segment. */
5065
+ disabled?: boolean;
5066
+ }
5067
+ interface SegmentedControlProps {
5068
+ /** Options rendered as pills, left to right. */
5069
+ items: SegmentItem[];
5070
+ /** Controlled active id. Pair with `onValueChange`. */
5071
+ value?: string;
5072
+ /** Uncontrolled initial active id — defaults to the first item. */
5073
+ defaultValue?: string;
5074
+ /** Fired with the new id when a segment is selected. */
5075
+ onValueChange?: (id: string) => void;
5076
+ /**
5077
+ * Surface the control sits on.
5078
+ * - `"black"` — dark track, light labels (for dark surfaces).
5079
+ * - `"white"` — light track, dark labels (for light surfaces).
5080
+ * @default "black"
5081
+ */
5082
+ variant?: "black" | "white";
5083
+ /** Pill density. @default "md" */
5084
+ size?: "sm" | "md";
5085
+ /** Stretch the track to fill its container, distributing pills evenly. */
5086
+ fullWidth?: boolean;
5087
+ /**
5088
+ * Icon-collapse mode. Requires each item to have an `icon`.
5089
+ * - `true` — only the active segment shows its label; the others collapse to
5090
+ * icon-only, with a smooth width transition on selection.
5091
+ * - `"all"` — every segment collapses to icon-only, including the active one
5092
+ * (which keeps its highlighted pill, so it stays visible + clickable).
5093
+ * Useful for a compact floating/stuck state.
5094
+ * @default false
5095
+ */
5096
+ collapse?: boolean | "all";
5097
+ /** Accessible label for the group. @default "Options" */
5098
+ "aria-label"?: string;
5099
+ className?: string;
5100
+ }
5101
+ declare function SegmentedControl({ items, value, defaultValue, onValueChange, variant, size, fullWidth, collapse, "aria-label": ariaLabel, className, }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
5102
+
5103
+ export { type AccommodationRoomItem, ActivityCard, type ActivityCardProps, type ActivityCardSize, AdventureExplorer, type AdventureExplorerProps, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, AskExo, type AskExoProps, type AskExoSuggestion, BirthDateField, type BirthDateFieldProps, type BlogAuthor, type BlogBlock, type BlogCalloutBlock, BlogCard, type BlogCardCta, type BlogCardProps, type BlogCardSize, type BlogCollageBlock, type BlogHeadingBlock, type BlogImageBlock, BlogJournal, type BlogJournalFeature, type BlogJournalPost, type BlogJournalProps, type BlogListBlock, type BlogParagraphBlock, BlogPost, type BlogPostProps, type BlogQuoteBlock, type BlogTableBlock, type BlogTableColumn, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, type BookingCancellationAdventure, type BookingCancellationAgentContactLinks, BookingCancellationEmail, type BookingCancellationEmailLabels, type BookingCancellationEmailProps, BookingConfirmedCard, type BookingConfirmedCardProps, type BookingContact, BookingCreatedEmail, type BookingCreatedEmailLabels, type BookingCreatedEmailProps, type BookingDepositInfo, BookingDetails, type BookingDetailsLabels, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingOtpEmail, type BookingOtpEmailProps, BookingPaymentConfirmationEmail, type BookingPaymentConfirmationEmailLabels, type BookingPaymentConfirmationEmailProps, BookingShell, type BookingShellProps, type BookingStatus, BookingSummary, type BookingSummaryLineItem, type BookingSummaryProps, type BookingSummaryRoomItem, type BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, CancellationForm, type CancellationFormAdventure, type CancellationFormLabels, type CancellationFormOption, type CancellationFormParticipant, type CancellationFormProps, type CancellationFormValues, type Category2BlogPost, type Category2Faq, type Category2SortOption, type Category2Trip, CategoryPage2, type CategoryPage2Props, Chip, type ChipProps, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, CtaBanner, type CtaBannerCta, type CtaBannerProps, type CurrencyEstimate, DEFAULT_FOOTER_BADGES, DEFAULT_FOOTER_DESTINATIONS, DEFAULT_FOOTER_LANGUAGES, DEFAULT_FOOTER_LEGAL, DEFAULT_FOOTER_PAGES, DEFAULT_FOOTER_SOCIALS, DEFAULT_FOOTER_THEMES, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, STATUS_MAP as DEPARTURE_STATUS_MAP, DatePickerField, type DatePickerFieldProps, type DepartureStatus, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, ExoOrb, type ExoOrbProps, type ExploreCard, type ExploreTab, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, GroupProgressBar, type GroupProgressBarProps, GroupStatusBanner, type GroupStatusBannerProps, HomeHeader, type HomeHeaderCta, type HomeHeaderPressLogo, type HomeHeaderProps, type HomeHeaderRating, type HomeSiteHeaderConfig, Itinerary, ItineraryDay, type ItineraryDayPhoto, type ItineraryDayPhotoLayout, type ItineraryDayProps, type ItineraryDaySpec, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, NewHome, type NewHomeExpeditions, type NewHomePopular, type NewHomePopularChip, type NewHomeProps, type NewHomeReview, type NewHomeReviews, type NewHomeSectionHead, type NewHomeSectionLink, type NewHomeStat, type NewHomeStats, NotificationEmail, type NotificationEmailCta, type NotificationEmailDetailItem, type NotificationEmailProps, type NotificationEmailRoster, type NotificationEmailRosterPerson, type NotificationEmailSummary, type NotificationEmailSummaryRow, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type Participant, ParticipantCounter, type ParticipantCounterProps, ParticipantList, type ParticipantListProps, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerRegistrationCompleteAgentContactLinks, PartnerRegistrationCompleteEmail, type PartnerRegistrationCompleteEmailExpectationRow, type PartnerRegistrationCompleteEmailLabels, type PartnerRegistrationCompleteEmailProps, PaymentAmountSelector, type PaymentAmountSelectorProps, PaymentDetailsBlock, type PaymentDetailsBlockFooterBanner, type PaymentDetailsBlockLabels, type PaymentDetailsBlockProps, type PaymentDetailsBlockRow, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, type PaymentReceiptAdventure, type PaymentReceiptAdventureLineItem, PaymentReceiptEmail, type PaymentReceiptEmailLabels, type PaymentReceiptEmailProps, type PaymentReminderAgentContactLinks, PaymentReminderEmail, type PaymentReminderEmailAdventure, type PaymentReminderEmailLabels, type PaymentReminderEmailLineItem, type PaymentReminderEmailProps, type PaymentReminderEmailVariantLabels, type PaymentReminderVariant, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, Picture, type PictureProps, PriceProgress, type PriceProgressProps, PricingMatrixCard, type PricingMatrixCardProps, type PricingTier, PricingTrip, type PricingTripProps, type PricingTripVariant, type RegistrationAdventure, type RegistrationBooking, type RegistrationEmergencyContactValue, type RegistrationField, type RegistrationFieldOption, type RegistrationFieldType, type RegistrationFieldValue, RegistrationForm, type RegistrationFormLabels, type RegistrationFormProps, type RegistrationFormValues, type RegistrationNameValue, type RegistrationPhoneValue, RegistrationProgressBar, type RegistrationProgressBarProps, type RegistrationProgressTone, type RegistrationReminderAdventureBlock, type RegistrationReminderAgentContactLinks, RegistrationReminderEmail, type RegistrationReminderEmailLabels, type RegistrationReminderEmailProps, type RegistrationReminderEmailVariantLabels, type RegistrationReminderIndividualAgentContactLinks, RegistrationReminderIndividualEmail, type RegistrationReminderIndividualEmailLabels, type RegistrationReminderIndividualEmailProps, type RegistrationReminderIndividualRoute, type RegistrationReminderIndividualSlug, type RegistrationReminderIndividualVariantLabels, type RegistrationReminderSlug, RegistrationSuccessCard, type RegistrationSuccessCardProps, type RegistrationTerms, type RegistrationTraveller, type SegmentItem, SegmentedControl, type SegmentedControlProps, ShareWidget, type ShareWidgetProps, SiteFooter, type SiteFooterAddress, type SiteFooterBadge, type SiteFooterChip, type SiteFooterLanguage, type SiteFooterLink, type SiteFooterProps, type SiteFooterSocial, type SiteFooterVariant, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, StatusBadge, type StatusBadgeProps, StickyBookingCard, type StickyBookingCardProps, type StripeAppearance, type SuggestedTraveller, TERMS_ACCEPT_KEY, TermsSection, type TermsSectionProps, ThemeToggle, Toast, type ToastProps, type ToastVariant, TransferDetailsBlock, type TransferDetailsBlockProps, type TravellerFormConfig, type TravellerFormData, TravellerFormInviteEmail, type TravellerFormInviteEmailLabels, type TravellerFormInviteEmailProps, type TravellerFormInviteLink, type TravellerFormLabels, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryDay, type TripItineraryStep, type TripMeetingPoint, type TripOverviewHighlight, TripPage, type TripPageLabels, type TripPageProps, type TripReview, type TripSectionIcons, type TripSiteHeaderConfig, type TripTrustpilotWidget, TrustpilotEmbed, type TrustpilotWidgetConfig, USP, type USPItem, type USPProps, buttonVariants, chipVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, webpVariantUrl, wrapEmailHtml };