@planetaexo/design-system 0.64.0 → 0.65.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
@@ -2155,6 +2155,54 @@ interface BookingFormValues {
2155
2155
  phoneCountry: string;
2156
2156
  phone: string;
2157
2157
  email: string;
2158
+ /** Preferred contact channel. Values are stable (used by the CRM); only the
2159
+ * labels are localizable. Empty until the visitor picks one. */
2160
+ contactVia: "WhatsApp" | "Email" | "Phone" | "";
2161
+ }
2162
+ /**
2163
+ * i18n overrides for every visible string in the form. Any key left undefined
2164
+ * falls back to the built-in English string, so existing callers keep working.
2165
+ * `countries` overrides the residence dropdown (value stays stable for the
2166
+ * submitted payload; only the label is localized).
2167
+ */
2168
+ interface BookingFormLabels {
2169
+ title?: string;
2170
+ subtitle?: string;
2171
+ submit?: string;
2172
+ sending?: string;
2173
+ travelersSection?: string;
2174
+ adults?: string;
2175
+ children?: string;
2176
+ childrenSublabel?: string;
2177
+ tripSection?: string;
2178
+ travelDate?: string;
2179
+ pickDate?: string;
2180
+ budget?: string;
2181
+ projectSection?: string;
2182
+ projectLabel?: string;
2183
+ optional?: string;
2184
+ contactSection?: string;
2185
+ titleAria?: string;
2186
+ ms?: string;
2187
+ mr?: string;
2188
+ lastName?: string;
2189
+ firstName?: string;
2190
+ country?: string;
2191
+ phone?: string;
2192
+ email?: string;
2193
+ countries?: Array<{
2194
+ value: string;
2195
+ label: string;
2196
+ }>;
2197
+ /** Heading for the "preferred contact channel" radio section. */
2198
+ contactViaSection?: string;
2199
+ /** Localized labels for the contact-channel options (values stay stable). */
2200
+ contactViaWhatsApp?: string;
2201
+ contactViaEmail?: string;
2202
+ contactViaPhone?: string;
2203
+ /** Inline validation messages. */
2204
+ errorRequired?: string;
2205
+ errorEmail?: string;
2158
2206
  }
2159
2207
  interface BookingFormProps {
2160
2208
  /** Initial values */
@@ -2171,9 +2219,11 @@ interface BookingFormProps {
2171
2219
  title?: string;
2172
2220
  /** Override the header subtitle */
2173
2221
  subtitle?: string;
2222
+ /** i18n overrides for the form's built-in strings (English defaults). */
2223
+ labels?: BookingFormLabels;
2174
2224
  className?: string;
2175
2225
  }
2176
- declare function BookingForm({ defaultValues, onSubmit, submitLabel, loading, showHeader, title, subtitle, className, }: BookingFormProps): react_jsx_runtime.JSX.Element;
2226
+ declare function BookingForm({ defaultValues, onSubmit, submitLabel, loading, showHeader, title, subtitle, labels, className, }: BookingFormProps): react_jsx_runtime.JSX.Element;
2177
2227
 
2178
2228
  interface CountryOption {
2179
2229
  code: string;
@@ -2549,8 +2599,14 @@ interface PhoneCountrySelectProps {
2549
2599
  onChange: (code: string) => void;
2550
2600
  className?: string;
2551
2601
  disabled?: boolean;
2602
+ /**
2603
+ * Show the dial code (e.g. "+55") in the trigger next to the flag.
2604
+ * Defaults to `true`. Set to `false` when the adjacent phone input already
2605
+ * displays the dial code as a prefix (avoids showing "+55" twice).
2606
+ */
2607
+ showDial?: boolean;
2552
2608
  }
2553
- declare function PhoneCountrySelect({ value, onChange, className, disabled, }: PhoneCountrySelectProps): react_jsx_runtime.JSX.Element;
2609
+ declare function PhoneCountrySelect({ value, onChange, className, disabled, showDial, }: PhoneCountrySelectProps): react_jsx_runtime.JSX.Element;
2554
2610
 
2555
2611
  interface CounterFieldProps {
2556
2612
  label: string;
@@ -2573,8 +2629,10 @@ interface DatePickerFieldProps {
2573
2629
  disabled?: boolean;
2574
2630
  fromDate?: Date;
2575
2631
  className?: string;
2632
+ /** Inline validation message; renders below + reddens the trigger border. */
2633
+ error?: string;
2576
2634
  }
2577
- declare function DatePickerField({ label, required, value, onChange, placeholder, disabled, fromDate, className, }: DatePickerFieldProps): react_jsx_runtime.JSX.Element;
2635
+ declare function DatePickerField({ label, required, value, onChange, placeholder, disabled, fromDate, className, error, }: DatePickerFieldProps): react_jsx_runtime.JSX.Element;
2578
2636
 
2579
2637
  interface BirthDateFieldProps {
2580
2638
  label: string;
@@ -2652,8 +2710,23 @@ interface FilterPanelProps {
2652
2710
  sortOptions?: FilterSortOption[];
2653
2711
  sort?: string;
2654
2712
  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;
2713
+ /** i18n overrides for the panel's built-in control labels (English defaults). */
2714
+ labels?: FilterPanelLabels;
2715
+ }
2716
+ /** i18n overrides for FilterPanel's built-in English control strings. */
2717
+ interface FilterPanelLabels {
2718
+ /** "Clear all" reset link/button. */
2719
+ clearAll?: string;
2720
+ /** Mobile drawer apply button: "Show results" (count appended). */
2721
+ showResults?: string;
2722
+ /** Mobile "Sort" trigger. */
2723
+ sortLabel?: string;
2724
+ /** "Sort by" popover heading. */
2725
+ sortByLabel?: string;
2726
+ /** "Remove all filters" link shown under the groups. */
2727
+ removeAllFilters?: string;
2728
+ }
2729
+ declare function FilterPanel({ groups, value, onChange, onClearAll, alwaysShowClear, title, className, variant, sortOptions, sort, onSortChange, labels, }: FilterPanelProps): react_jsx_runtime.JSX.Element | null;
2657
2730
 
2658
2731
  /**
2659
2732
  * Configuration for any Trustpilot widget embedded in the design system.
@@ -2896,6 +2969,19 @@ interface PhotoGalleryPhoto {
2896
2969
  /** Photo credit / author displayed in the lightbox bottom-right */
2897
2970
  credit?: string;
2898
2971
  }
2972
+ /** i18n overrides for the gallery's expand/collapse control + lightbox a11y. */
2973
+ interface PhotoGalleryLabels {
2974
+ /** "See more" — rendered with the hidden count: `See more (12)`. */
2975
+ seeMore?: string;
2976
+ /** "Show less". */
2977
+ showLess?: string;
2978
+ /** aria-label for the lightbox close button. @default "Close lightbox" */
2979
+ close?: string;
2980
+ /** aria-label for the lightbox previous-photo button. @default "Previous photo" */
2981
+ previous?: string;
2982
+ /** aria-label for the lightbox next-photo button. @default "Next photo" */
2983
+ next?: string;
2984
+ }
2899
2985
  interface PhotoGalleryProps {
2900
2986
  /** Array of photo URLs or photo objects */
2901
2987
  photos: (string | PhotoGalleryPhoto)[];
@@ -2909,9 +2995,11 @@ interface PhotoGalleryProps {
2909
2995
  initialVisible?: number;
2910
2996
  /** Called when a photo is clicked (in addition to opening the lightbox) */
2911
2997
  onPhotoClick?: (src: string, index: number) => void;
2998
+ /** i18n overrides for the "See more (N)" / "Show less" toggle. */
2999
+ labels?: PhotoGalleryLabels;
2912
3000
  className?: string;
2913
3001
  }
2914
- declare function PhotoGallery({ photos, variant, initialVisible, onPhotoClick, className, }: PhotoGalleryProps): react_jsx_runtime.JSX.Element | null;
3002
+ declare function PhotoGallery({ photos, variant, initialVisible, onPhotoClick, labels, className, }: PhotoGalleryProps): react_jsx_runtime.JSX.Element | null;
2915
3003
 
2916
3004
  type PricingTripVariant = "card" | "bar" | "compact";
2917
3005
  /**
@@ -2935,6 +3023,16 @@ interface PricingTripProps {
2935
3023
  departureTimes?: string[];
2936
3024
  onBook?: () => void;
2937
3025
  bookLabel?: string;
3026
+ /**
3027
+ * i18n override for the "From" price eyebrow. Rendered uppercased via CSS,
3028
+ * so pass natural case (e.g. "A partir de"). @default "From"
3029
+ */
3030
+ fromLabel?: string;
3031
+ /**
3032
+ * i18n override for the "per person" price suffix, rendered after the
3033
+ * built-in "/ " separator (e.g. "por pessoa"). @default "per person"
3034
+ */
3035
+ perPersonLabel?: string;
2938
3036
  variant?: PricingTripVariant;
2939
3037
  /**
2940
3038
  * When true, removes rounded corners on the OUTER container that PricingTrip
@@ -2971,7 +3069,7 @@ interface PricingTripProps {
2971
3069
  priceInfo?: React.ReactNode;
2972
3070
  className?: string;
2973
3071
  }
2974
- declare function PricingTrip({ priceFrom, currency, season, departureTimes, onBook, bookLabel, variant, sharp, belowPrice, benefits, currencyEstimates, priceInfo, className, }: PricingTripProps): react_jsx_runtime.JSX.Element;
3072
+ 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
3073
 
2976
3074
  interface SiteHeaderSubItem {
2977
3075
  label: string;
@@ -3004,11 +3102,26 @@ interface SiteHeaderProps {
3004
3102
  onAccount?: () => void;
3005
3103
  /** "overlay" = absolute (inside a relative parent); "fixed" = fixed to viewport */
3006
3104
  position?: "overlay" | "fixed" | "static";
3105
+ /** i18n overrides for the header's icon-button aria-labels (English defaults). */
3106
+ labels?: SiteHeaderLabels;
3007
3107
  className?: string;
3008
3108
  }
3109
+ /** i18n overrides for SiteHeader's icon-button aria-labels. */
3110
+ interface SiteHeaderLabels {
3111
+ /** @default "Open menu" */
3112
+ openMenu?: string;
3113
+ /** @default "Close menu" */
3114
+ closeMenu?: string;
3115
+ /** @default "Language" */
3116
+ language?: string;
3117
+ /** @default "Search" */
3118
+ search?: string;
3119
+ /** @default "Account" */
3120
+ account?: string;
3121
+ }
3009
3122
  declare const DEFAULT_HEADER_LINKS: SiteHeaderLink[];
3010
3123
  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;
3124
+ declare function SiteHeader({ variant, links, logoSrcLight, logoSrcDark, logoSrc, logoAlt, languages, currentLanguage, onLanguageChange, onSearch, onAccount, position, labels, className, }: SiteHeaderProps): react_jsx_runtime.JSX.Element;
3012
3125
 
3013
3126
  declare function ThemeToggle({ className }: {
3014
3127
  className?: string;
@@ -3029,10 +3142,27 @@ interface TripCardCta {
3029
3142
  onClick?: () => void;
3030
3143
  href?: string;
3031
3144
  }
3145
+ /** i18n overrides for TripCard's built-in English strings. */
3146
+ interface TripCardLabels {
3147
+ /** Singular night ("1 night"). @default "night" */
3148
+ night?: string;
3149
+ /** Plural nights ("3 nights"). @default "nights" */
3150
+ nights?: string;
3151
+ /** "sold-out" status badge. @default "All seats taken" */
3152
+ soldOut?: string;
3153
+ /** "trending" status badge. @default "Trending" */
3154
+ trending?: string;
3155
+ /** Favorite button aria-label when not favorited. @default "Add to favorites" */
3156
+ addToFavorites?: string;
3157
+ /** Favorite button aria-label when favorited. @default "Remove from favorites" */
3158
+ removeFromFavorites?: string;
3159
+ }
3032
3160
  interface TripCardProps {
3033
3161
  /** URL da imagem de capa */
3034
3162
  image: string;
3035
3163
  imageAlt?: string;
3164
+ /** i18n overrides for the card's built-in strings (night/nights, badges, fav aria). */
3165
+ labels?: TripCardLabels;
3036
3166
  /** Badge de status (ex.: trending) — usado pelo variant="overlay". */
3037
3167
  status?: TripCardStatus;
3038
3168
  /** Número de noites */
@@ -3258,6 +3388,21 @@ interface TripDuration {
3258
3388
  /** Number of nights — defaults to days - 1 */
3259
3389
  nights?: number;
3260
3390
  }
3391
+ /** i18n overrides for the hero meta row + image-carousel controls. */
3392
+ interface TripHeaderLabels {
3393
+ /** Singular night ("1 night"). @default "night" */
3394
+ night?: string;
3395
+ /** Plural nights ("3 nights"). @default "nights" */
3396
+ nights?: string;
3397
+ /** Singular day ("1 day"). @default "day" */
3398
+ day?: string;
3399
+ /** Plural days ("4 days"). @default "days" */
3400
+ days?: string;
3401
+ /** aria-label for the previous hero image arrow. @default "Previous image" */
3402
+ previousImage?: string;
3403
+ /** aria-label for the next hero image arrow. @default "Next image" */
3404
+ nextImage?: string;
3405
+ }
3261
3406
  interface TripHeaderChip {
3262
3407
  label: string;
3263
3408
  href?: string;
@@ -3278,6 +3423,10 @@ interface TripHeaderProps {
3278
3423
  destination?: string;
3279
3424
  /** Duration shown with a moon/sun icon */
3280
3425
  duration?: TripDuration;
3426
+ /** Group size shown with a people icon (e.g. "Private · up to ~8–10 per guide") */
3427
+ groupSize?: string;
3428
+ /** i18n overrides for the duration words + image-carousel aria labels. */
3429
+ labels?: TripHeaderLabels;
3281
3430
  /** Legacy tagline — shown only when destination/duration are not provided */
3282
3431
  tagline?: string;
3283
3432
  /** Pill-shaped category chips rendered under the meta row (e.g. related tour categories). */
@@ -3300,7 +3449,7 @@ interface TripHeaderProps {
3300
3449
  uiVariant?: "v1" | "v2";
3301
3450
  className?: string;
3302
3451
  }
3303
- declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
3452
+ declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
3304
3453
 
3305
3454
  interface TripHighlight {
3306
3455
  label: string;
@@ -3412,6 +3561,34 @@ interface TripPageLabels {
3412
3561
  faq?: string;
3413
3562
  /** Section nav + section heading: "What our guests think" */
3414
3563
  reviews?: string;
3564
+ /** Expand control on the FAQ list + photo galleries: "See more" (count appended). */
3565
+ seeMore?: string;
3566
+ /** Collapse control on the FAQ list + photo galleries: "Show less". */
3567
+ showLess?: string;
3568
+ /** Singular night ("1 night"). */
3569
+ night?: string;
3570
+ /** Plural nights ("3 nights"). */
3571
+ nights?: string;
3572
+ /** Singular day ("1 day"). */
3573
+ day?: string;
3574
+ /** Plural days ("4 days"). */
3575
+ days?: string;
3576
+ /** aria-label for the previous hero image arrow. */
3577
+ previousImage?: string;
3578
+ /** aria-label for the next hero image arrow. */
3579
+ nextImage?: string;
3580
+ /** Badge on a transfer itinerary step: "Transfer". */
3581
+ transfer?: string;
3582
+ /** Meeting-point type eyebrow when type = "activity": "Activity location". */
3583
+ meetingPointActivity?: string;
3584
+ /** Meeting-point type eyebrow when type = "alternative": "Alternative meeting point". */
3585
+ meetingPointAlternative?: string;
3586
+ /** aria-label for the lightbox close button. */
3587
+ galleryClose?: string;
3588
+ /** aria-label for the lightbox previous-photo button. */
3589
+ galleryPrevious?: string;
3590
+ /** aria-label for the lightbox next-photo button. */
3591
+ galleryNext?: string;
3415
3592
  }
3416
3593
 
3417
3594
  interface TripPageProps {
@@ -3422,6 +3599,8 @@ interface TripPageProps {
3422
3599
  destination?: string;
3423
3600
  /** Duration shown with moon/sun icons in the hero */
3424
3601
  duration?: TripDuration;
3602
+ /** Group size shown with a people icon in the hero meta row */
3603
+ groupSize?: string;
3425
3604
  images: string[];
3426
3605
  /** Optional video URL — plays as background instead of the image carousel */
3427
3606
  videoUrl?: string;
@@ -3475,6 +3654,12 @@ interface TripPageProps {
3475
3654
  * `food` omitted, the accordion still opens to show just the photos.
3476
3655
  */
3477
3656
  foodGallery?: PhotoGalleryPhoto[];
3657
+ /**
3658
+ * Visual layout for the food gallery — the food equivalent of
3659
+ * {@link accommodationGalleryVariant}. Independent of the accommodation
3660
+ * gallery so the two sections never share a layout by accident. @default "gridCompact"
3661
+ */
3662
+ foodGalleryVariant?: PhotoGalleryVariant;
3478
3663
  termsAndConditions?: React.ReactNode;
3479
3664
  meetingPoints?: TripMeetingPoint[];
3480
3665
  /**
@@ -3527,6 +3712,24 @@ interface TripPageProps {
3527
3712
  priceInfo?: React.ReactNode;
3528
3713
  onBook?: () => void;
3529
3714
  bookLabel?: string;
3715
+ /**
3716
+ * Fired when the trip-page inquiry form (BookingForm) is submitted, with the
3717
+ * full set of entered values. Distinct from `onBook` (the pricing card's
3718
+ * "Check availability" CTA): on trips that render the form, the CTA scrolls
3719
+ * to the form and only this callback carries the lead's details.
3720
+ */
3721
+ onBookingSubmit?: (values: BookingFormValues) => void;
3722
+ /** Disables the inquiry form's submit button and shows its "Sending…" state. */
3723
+ bookingLoading?: boolean;
3724
+ /** Initial values for the inquiry form — used to geo-default the country and
3725
+ * to prefill the visitor's remembered details from a previous enquiry. */
3726
+ bookingDefaults?: Partial<BookingFormValues>;
3727
+ /** i18n overrides for the trip-page inquiry form (BookingForm). */
3728
+ bookingLabels?: BookingFormLabels;
3729
+ /** i18n override for the PricingTrip "From" price eyebrow. @default "From" */
3730
+ fromLabel?: string;
3731
+ /** i18n override for the PricingTrip "per person" price suffix. @default "per person" */
3732
+ perPersonLabel?: string;
3530
3733
  /**
3531
3734
  * Render an overlay SiteHeader inside the hero. Accepts:
3532
3735
  * - `boolean` — minimal: default link list (styleguide usage).
@@ -3543,7 +3746,7 @@ interface TripPageProps {
3543
3746
  features?: Record<string, boolean>;
3544
3747
  className?: string;
3545
3748
  }
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;
3749
+ 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
3750
 
3548
3751
  interface Category2Trip extends TripCardProps {
3549
3752
  /** Marca a trip como featured — sobe para o topo do grid principal. */
@@ -3603,6 +3806,12 @@ interface CategoryPage2Props {
3603
3806
  * {@link TripSiteHeaderConfig} to wire languages + onLanguageChange.
3604
3807
  */
3605
3808
  siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
3809
+ /**
3810
+ * Optional node pinned to the top-right of the hero content (below the
3811
+ * overlay header, aligned with the breadcrumb/title). Used e.g. for a
3812
+ * Browse/Compare/Enquire mode switcher.
3813
+ */
3814
+ heroRightSlot?: React.ReactNode;
3606
3815
  popularTours?: Category2Trip[];
3607
3816
  popularToursTitle?: string;
3608
3817
  popularToursEyebrow?: string;
@@ -3614,6 +3823,13 @@ interface CategoryPage2Props {
3614
3823
  defaultSort?: string;
3615
3824
  /** Number of trips shown before the "Load more" button appears. @default 15 */
3616
3825
  tripsInitialCount?: number;
3826
+ /**
3827
+ * When provided, replaces the default filter-sidebar + trip-grid + sort
3828
+ * section entirely (the section heading still renders). Used to swap in an
3829
+ * external selectable grid (e.g. the favourites compare/enquire surface)
3830
+ * without touching the rest of the page.
3831
+ */
3832
+ tripListingSlot?: React.ReactNode;
3617
3833
  trustpilot?: TrustpilotWidgetConfig;
3618
3834
  reviewsTitle?: string;
3619
3835
  /** Optional subtitle/intro paragraph below the reviews H2. */
@@ -3638,9 +3854,21 @@ interface CategoryPage2Props {
3638
3854
  faqInitialCount?: number;
3639
3855
  gallery?: (string | PhotoGalleryPhoto)[];
3640
3856
  galleryTitle?: string;
3857
+ /** Trips-list expand button: "Load more" (count appended). */
3858
+ loadMoreLabel?: string;
3859
+ /** Expand/collapse collapse button: "Show less". */
3860
+ showLessLabel?: string;
3861
+ /** FAQ expand button: "See more" (count appended). */
3862
+ seeMoreLabel?: string;
3863
+ /** Blog "View all posts" link (when no travel-guide href). */
3864
+ viewAllPostsLabel?: string;
3865
+ /** i18n overrides for the trip cards (night/nights, badges, fav aria). */
3866
+ cardLabels?: TripCardLabels;
3867
+ /** i18n overrides for the filter/sort panel controls. */
3868
+ filterLabels?: FilterPanelLabels;
3641
3869
  className?: string;
3642
3870
  }
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;
3871
+ 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
3872
 
3645
3873
  type ActivityCardSize = "sm" | "md" | "lg";
3646
3874
  interface ActivityCardProps {
@@ -4339,4 +4567,501 @@ interface StickyBookingCardProps {
4339
4567
  }
4340
4568
  declare function StickyBookingCard({ currentPrice, deposit, spotsRemaining, mode, onPrimary, note, className, }: StickyBookingCardProps): react_jsx_runtime.JSX.Element;
4341
4569
 
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 };
4570
+ declare const chipVariants: (props?: ({
4571
+ variant?: "outline" | "solid" | "glass" | null | undefined;
4572
+ size?: "sm" | "md" | "lg" | null | undefined;
4573
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
4574
+ interface ChipProps extends Omit<React.HTMLAttributes<HTMLElement>, "color">, VariantProps<typeof chipVariants> {
4575
+ /** When provided, renders an `<a>` tag instead of a `<span>`. */
4576
+ href?: string;
4577
+ }
4578
+ declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLElement>>;
4579
+
4580
+ /**
4581
+ * Rich configuration for the overlay `<SiteHeader>` rendered inside the
4582
+ * hero. Accepts everything `<SiteHeader>` accepts EXCEPT `position` and
4583
+ * `className`: position is hardcoded to `"overlay"` so the header scrolls
4584
+ * away with the hero, and the hero composes its own layout around it.
4585
+ */
4586
+ type HomeSiteHeaderConfig = Omit<SiteHeaderProps, "position" | "className">;
4587
+ interface HomeHeaderCta {
4588
+ label: string;
4589
+ href?: string;
4590
+ onClick?: () => void;
4591
+ }
4592
+ interface HomeHeaderRating {
4593
+ /** Qualifier shown before the stars — e.g. "Excellent". */
4594
+ label?: string;
4595
+ /** Filled stars out of 5. Supports halves (e.g. 4.5). @default 5 */
4596
+ stars?: number;
4597
+ /** Provider name shown after the stars — e.g. "Trustpilot". */
4598
+ provider?: string;
4599
+ /** Makes the whole widget a link. */
4600
+ href?: string;
4601
+ }
4602
+ interface HomeHeaderPressLogo {
4603
+ /** Logo image URL. When omitted, `label` renders as styled text. */
4604
+ src?: string;
4605
+ /** Text fallback / accessible label. */
4606
+ label?: string;
4607
+ alt?: string;
4608
+ /** When provided, the logo becomes a link (e.g. to the press article). */
4609
+ href?: string;
4610
+ }
4611
+ interface HomeHeaderProps {
4612
+ /** Hero image array — shows a slow crossfade carousel when more than one. */
4613
+ images: string[];
4614
+ /** Optional video URL — plays as background instead of the image carousel. */
4615
+ videoUrl?: string;
4616
+ /** Small eyebrow line rendered above the title. */
4617
+ eyebrow?: string;
4618
+ /** Main hero headline. */
4619
+ title: string;
4620
+ /** Subtitle rendered below the title. */
4621
+ subtitle?: string;
4622
+ /** Primary call-to-action button below the subtitle. */
4623
+ cta?: HomeHeaderCta;
4624
+ /**
4625
+ * Live Trustpilot TrustBox shown under the CTA. Pass `true` for the
4626
+ * PlanetaEXO defaults, or a {@link TrustpilotWidgetConfig} to override the
4627
+ * business unit / template / theme. Takes precedence over `rating`.
4628
+ */
4629
+ trustpilot?: boolean | TrustpilotWidgetConfig;
4630
+ /** Static, mock rating widget — fallback when `trustpilot` is not set. */
4631
+ rating?: HomeHeaderRating;
4632
+ /** "In the press" logo strip pinned to the bottom of the hero. */
4633
+ pressLogos?: HomeHeaderPressLogo[];
4634
+ /** Label shown beside the press logos. @default "In the press" */
4635
+ pressLabel?: string;
4636
+ /** When provided, the press label becomes a link (e.g. to a press page). */
4637
+ pressLabelHref?: string;
4638
+ /**
4639
+ * Render an overlay `<SiteHeader>` inside the hero. Accepts:
4640
+ * - `boolean` — minimal: renders the header with the default link list.
4641
+ * - `SiteHeaderLink[]` — a custom links array.
4642
+ * - {@link HomeSiteHeaderConfig} — full SiteHeaderProps minus
4643
+ * `position`/`className` (e.g. to wire languages + onLanguageChange).
4644
+ */
4645
+ siteHeader?: boolean | SiteHeaderLink[] | HomeSiteHeaderConfig;
4646
+ /**
4647
+ * Content alignment variant.
4648
+ * - `"center"` — hero copy centered (homepage default).
4649
+ * - `"left"` — hero copy aligned to the left edge.
4650
+ * @default "center"
4651
+ */
4652
+ align?: "center" | "left";
4653
+ className?: string;
4654
+ }
4655
+ declare function HomeHeader({ images, videoUrl, eyebrow, title, subtitle, cta, trustpilot, rating, pressLogos, pressLabel, pressLabelHref, siteHeader, align, className, }: HomeHeaderProps): react_jsx_runtime.JSX.Element;
4656
+
4657
+ interface ExploreCard {
4658
+ /** Label overlaid at the bottom of the card (e.g. "Europe"). */
4659
+ label: string;
4660
+ /** Card background image URL. Optional in the bento layout — omit it and
4661
+ * pass `gradient` for a textless gradient tile (e.g. lesser destinations). */
4662
+ image?: string;
4663
+ /** Optional link — makes the whole card clickable. */
4664
+ href?: string;
4665
+ /** Accessible alt text — defaults to `label`. */
4666
+ imageAlt?: string;
4667
+ /** Pill badge in the top-right corner — e.g. "22 trips", "Safaris". */
4668
+ tripCount?: string;
4669
+ /** Short blurb revealed on hover under the title. */
4670
+ description?: string;
4671
+ /** Accent "go" link under the description — e.g. "Explore Amazon". */
4672
+ ctaLabel?: string;
4673
+ /** Tile footprint in the bento grid. @default "normal" */
4674
+ size?: "featured" | "tall" | "wide" | "normal";
4675
+ /** Tailwind gradient classes for an image-less tile — e.g.
4676
+ * "from-amber-600 to-amber-950". Used only when `image` is omitted. */
4677
+ gradient?: string;
4678
+ }
4679
+ interface ExploreTab {
4680
+ /** Stable id used to track the active tab. */
4681
+ id: string;
4682
+ /** Tab label (e.g. "Destinations"). */
4683
+ label: string;
4684
+ /** Cards shown when this tab is active. */
4685
+ cards: ExploreCard[];
4686
+ /** Optional per-tab "View All" link — overrides the component-level one. */
4687
+ viewAllHref?: string;
4688
+ }
4689
+ interface AdventureExplorerProps {
4690
+ /** Tabs, each with its own set of cards. */
4691
+ tabs: ExploreTab[];
4692
+ /** Small accent eyebrow above the heading (e.g. "Start exploring"). */
4693
+ eyebrow?: string;
4694
+ /** Serif section heading rendered above the filter (e.g. "Find your wilderness"). */
4695
+ heading?: string;
4696
+ /** Supporting line under the heading. */
4697
+ subheading?: string;
4698
+ /** Initially active tab id — defaults to the first tab. */
4699
+ defaultTabId?: string;
4700
+ /** Label for the "View All" CTA. Pass "" to hide it. @default "View All Adventures" */
4701
+ viewAllLabel?: string;
4702
+ /** Href for the "View All" CTA (per-tab `viewAllHref` takes precedence). */
4703
+ viewAllHref?: string;
4704
+ /**
4705
+ * Surface the explorer sits on.
4706
+ * - `"dark"` — dark section, white tab labels (homepage look).
4707
+ * - `"light"` — light surface, dark tab labels.
4708
+ * @default "dark"
4709
+ */
4710
+ theme?: "dark" | "light";
4711
+ /**
4712
+ * Card arrangement.
4713
+ * - `"carousel"` — horizontal rail of portrait tiles (default).
4714
+ * - `"bento"` — masonry-style grid with variable-span tiles, trip-count
4715
+ * badges and hover-revealed descriptions.
4716
+ * @default "carousel"
4717
+ */
4718
+ layout?: "carousel" | "bento";
4719
+ /**
4720
+ * Bento layout only — cap how many cards render as tiles. Any cards beyond
4721
+ * the limit collapse into a minimal "more" links row below the grid
4722
+ * (label + trip count). Omit to show every card as a tile.
4723
+ */
4724
+ bentoLimit?: number;
4725
+ /**
4726
+ * Eyebrow label for the overflow "more" row (bento + `bentoLimit`).
4727
+ * @default "More wild places"
4728
+ */
4729
+ moreLabel?: string;
4730
+ className?: string;
4731
+ }
4732
+ declare function AdventureExplorer({ tabs, eyebrow, heading, subheading, defaultTabId, viewAllLabel, viewAllHref, theme, layout, bentoLimit, moreLabel, className, }: AdventureExplorerProps): react_jsx_runtime.JSX.Element;
4733
+
4734
+ interface USPItem {
4735
+ /** Icon element — any SVG-based icon (e.g. a lucide `<HeartIcon />`).
4736
+ * It inherits the accent colour and is sized by the component.
4737
+ * Ignored by the `"numbered"` variant, which shows an index instead. */
4738
+ icon?: React.ReactNode;
4739
+ /** Short, bold heading (rendered uppercase). */
4740
+ title: string;
4741
+ /** Supporting copy. */
4742
+ description: string;
4743
+ }
4744
+ interface USPProps {
4745
+ /** The value props / selling points. */
4746
+ items: USPItem[];
4747
+ /** Optional section heading above the grid. */
4748
+ heading?: string;
4749
+ /** Optional supporting line under the heading. */
4750
+ subheading?: string;
4751
+ /** Columns on large screens. Defaults to the item count (clamped 2–4). */
4752
+ columns?: 2 | 3 | 4;
4753
+ /**
4754
+ * Layout variant.
4755
+ * - `"minimal"` — centered icon + text, no container (the default look).
4756
+ * - `"card"` — each item boxed in a card with an icon chip.
4757
+ * - `"inline"` — icon on the left, text on the right, left-aligned.
4758
+ * - `"numbered"` — boxed cards with an italic index (01, 02…) instead of an
4759
+ * icon; left-aligned, title-case headings. No `icon` needed.
4760
+ * @default "minimal"
4761
+ */
4762
+ variant?: "minimal" | "card" | "inline" | "numbered";
4763
+ /**
4764
+ * Surface the section sits on.
4765
+ * - `"light"` — light grey surface, dark text (the screenshot look).
4766
+ * - `"dark"` — dark surface, light text.
4767
+ * @default "light"
4768
+ */
4769
+ theme?: "light" | "dark";
4770
+ className?: string;
4771
+ }
4772
+ declare function USP({ items, heading, subheading, columns, variant, theme, className, }: USPProps): react_jsx_runtime.JSX.Element;
4773
+
4774
+ interface SiteFooterChip {
4775
+ label: string;
4776
+ href: string;
4777
+ }
4778
+ interface SiteFooterLink {
4779
+ label: string;
4780
+ href: string;
4781
+ }
4782
+ interface SiteFooterLanguage {
4783
+ /** Locale code shown as the trigger label — e.g. "EN", "NL". */
4784
+ code: string;
4785
+ /** Human-friendly name shown next to the code in the dropdown. */
4786
+ label: string;
4787
+ }
4788
+ interface SiteFooterBadge {
4789
+ /** Image src. Optional when `node` is provided. */
4790
+ src?: string;
4791
+ alt: string;
4792
+ href?: string;
4793
+ /** Image height in px. Defaults to 56. Ignored when `node` is provided. */
4794
+ height?: number;
4795
+ /** Override with a custom React node (e.g. inline SVG). */
4796
+ node?: React.ReactNode;
4797
+ }
4798
+ interface SiteFooterSocial {
4799
+ network: "facebook" | "instagram" | "linkedin" | "youtube" | "twitter";
4800
+ href: string;
4801
+ label?: string;
4802
+ }
4803
+ interface SiteFooterAddress {
4804
+ title: string;
4805
+ lines: string[];
4806
+ }
4807
+ type SiteFooterVariant = "light" | "dark";
4808
+ interface SiteFooterProps {
4809
+ variant?: SiteFooterVariant;
4810
+ /** Brand name shown when no logo is rendered, used in copyright fallback. */
4811
+ brandTitle?: string;
4812
+ /** Logo used on the dark variant. Defaults to the white PlanetaEXO mark. */
4813
+ logoSrcLight?: string;
4814
+ /** Logo used on the light variant. Defaults to the green PlanetaEXO mark. */
4815
+ logoSrcDark?: string;
4816
+ /** Single-logo override — applies to both variants when set. */
4817
+ logoSrc?: string;
4818
+ logoAlt?: string;
4819
+ /** Optional href wrapping the logo. */
4820
+ logoHref?: string;
4821
+ /** Longer disclaimer / legal copy under the logo. */
4822
+ brandDescription?: React.ReactNode;
4823
+ /** Member / association badges rendered under the description. */
4824
+ badges?: SiteFooterBadge[];
4825
+ languages?: SiteFooterLanguage[];
4826
+ currentLanguage?: string;
4827
+ onLanguageChange?: (code: string) => void;
4828
+ address?: SiteFooterAddress;
4829
+ phone?: string;
4830
+ email?: string;
4831
+ socials?: SiteFooterSocial[];
4832
+ themesTitle?: string;
4833
+ themes?: SiteFooterChip[];
4834
+ destinationsTitle?: string;
4835
+ destinations?: SiteFooterChip[];
4836
+ destinationsMore?: {
4837
+ label: string;
4838
+ href: string;
4839
+ };
4840
+ pagesTitle?: string;
4841
+ pages?: SiteFooterLink[];
4842
+ /** Highlighted CTA under the Pages column — e.g. partnerships email. */
4843
+ cta?: {
4844
+ title: string;
4845
+ label: string;
4846
+ href: string;
4847
+ };
4848
+ copyright?: string;
4849
+ legalLinks?: SiteFooterLink[];
4850
+ className?: string;
4851
+ }
4852
+ declare const DEFAULT_FOOTER_THEMES: SiteFooterChip[];
4853
+ declare const DEFAULT_FOOTER_DESTINATIONS: SiteFooterChip[];
4854
+ declare const DEFAULT_FOOTER_PAGES: SiteFooterLink[];
4855
+ declare const DEFAULT_FOOTER_LEGAL: SiteFooterLink[];
4856
+ declare const DEFAULT_FOOTER_LANGUAGES: SiteFooterLanguage[];
4857
+ declare const DEFAULT_FOOTER_SOCIALS: SiteFooterSocial[];
4858
+ declare const DEFAULT_FOOTER_BADGES: SiteFooterBadge[];
4859
+ 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;
4860
+
4861
+ interface CtaBannerCta {
4862
+ label: string;
4863
+ href?: string;
4864
+ onClick?: () => void;
4865
+ }
4866
+ interface CtaBannerProps {
4867
+ /** Full-bleed background image URL. */
4868
+ image: string;
4869
+ /** Accessible alt text for the background image. @default "" (decorative) */
4870
+ imageAlt?: string;
4871
+ /** Main headline — rendered uppercase in the heading font. */
4872
+ title: string;
4873
+ /**
4874
+ * Subtitle below the title. Pass a single string for a static line, or an
4875
+ * array to cycle through phrases with a slow crossfade (homepage behaviour:
4876
+ * "make a positive impact" → "travel sustainably" → "support local communities").
4877
+ */
4878
+ subtitle?: string | string[];
4879
+ /** Underlined call-to-action link below the subtitle. */
4880
+ cta?: CtaBannerCta;
4881
+ /** Milliseconds each rotating subtitle stays visible. @default 3000 */
4882
+ rotateInterval?: number;
4883
+ /**
4884
+ * Pin the background while scrolling (parallax). Applied from `sm` up only —
4885
+ * `background-attachment: fixed` is unreliable on mobile. @default true
4886
+ */
4887
+ parallax?: boolean;
4888
+ /** Dark overlay opacity over the image, 0–100. @default 35 */
4889
+ overlayOpacity?: number;
4890
+ className?: string;
4891
+ }
4892
+ declare function CtaBanner({ image, imageAlt, title, subtitle, cta, rotateInterval, parallax, overlayOpacity, className, }: CtaBannerProps): react_jsx_runtime.JSX.Element;
4893
+
4894
+ interface BlogJournalFeature {
4895
+ image: string;
4896
+ imageAlt?: string;
4897
+ /** Category pill over the image — e.g. "Destinations". */
4898
+ tag?: string;
4899
+ /** Publish date — e.g. "May 22, 2026". */
4900
+ date?: string;
4901
+ title: string;
4902
+ excerpt?: string;
4903
+ href?: string;
4904
+ /** Whether the link opens in a new tab. */
4905
+ external?: boolean;
4906
+ /** Read-link label. @default "Read the guide" */
4907
+ ctaLabel?: string;
4908
+ }
4909
+ interface BlogJournalPost {
4910
+ image: string;
4911
+ imageAlt?: string;
4912
+ /** Category / kicker — e.g. "Travel guide". */
4913
+ category?: string;
4914
+ date?: string;
4915
+ title: string;
4916
+ href?: string;
4917
+ external?: boolean;
4918
+ }
4919
+ interface BlogJournalProps {
4920
+ /** Eyebrow above the heading — e.g. "The journal". */
4921
+ eyebrow?: string;
4922
+ /** Section heading. */
4923
+ title?: string;
4924
+ /** Supporting line under the heading. */
4925
+ subtitle?: string;
4926
+ /** Right-aligned "view all" link. */
4927
+ link?: {
4928
+ label: string;
4929
+ href?: string;
4930
+ };
4931
+ /** Large featured post (left column). */
4932
+ feature: BlogJournalFeature;
4933
+ /** Compact list of posts (right column). */
4934
+ posts: BlogJournalPost[];
4935
+ /**
4936
+ * Surface the block sits on.
4937
+ * - `"light"` — light surface, dark text (default).
4938
+ * - `"dark"` — dark surface, light text.
4939
+ * @default "light"
4940
+ */
4941
+ theme?: "light" | "dark";
4942
+ className?: string;
4943
+ }
4944
+ declare function BlogJournal({ eyebrow, title, subtitle, link, feature, posts, theme, className, }: BlogJournalProps): react_jsx_runtime.JSX.Element;
4945
+
4946
+ interface NewHomeSectionLink {
4947
+ label: string;
4948
+ href?: string;
4949
+ }
4950
+ /** A section heading block — eyebrow + title + supporting copy + optional link. */
4951
+ interface NewHomeSectionHead {
4952
+ eyebrow?: string;
4953
+ title: string;
4954
+ subtitle?: string;
4955
+ /** Right-aligned "view all" style link (desktop). */
4956
+ link?: NewHomeSectionLink;
4957
+ }
4958
+ interface NewHomeExpeditions extends NewHomeSectionHead {
4959
+ /** Editorial TripCards shown in a draggable / button-scrolled rail. */
4960
+ trips: TripCardProps[];
4961
+ }
4962
+ interface NewHomePopularChip {
4963
+ label: string;
4964
+ href?: string;
4965
+ /** Visually promotes the chip (solid teal). */
4966
+ featured?: boolean;
4967
+ size?: "sm" | "md" | "lg";
4968
+ }
4969
+ interface NewHomePopular extends NewHomeSectionHead {
4970
+ chips: NewHomePopularChip[];
4971
+ }
4972
+ interface NewHomeStat {
4973
+ /** Headline figure — e.g. "8", "50+", "100%", "★★★★★". */
4974
+ value: string;
4975
+ label: string;
4976
+ }
4977
+ interface NewHomeStats {
4978
+ items: NewHomeStat[];
4979
+ }
4980
+ interface NewHomeReview {
4981
+ quote: string;
4982
+ author: string;
4983
+ /** Filled stars out of 5. @default 5 */
4984
+ stars?: number;
4985
+ }
4986
+ interface NewHomeReviews extends NewHomeSectionHead {
4987
+ items: NewHomeReview[];
4988
+ /** Small disclaimer under the grid (e.g. "Live Trustpilot reviews load here"). */
4989
+ note?: string;
4990
+ }
4991
+ interface NewHomeProps {
4992
+ /** Hero — passed straight through to {@link HomeHeader}. Required. */
4993
+ hero: HomeHeaderProps;
4994
+ /** "Find your wilderness" tabbed explorer — passed to {@link AdventureExplorer}. */
4995
+ explorer?: AdventureExplorerProps;
4996
+ /** Signature-trips rail of editorial {@link TripCard}s. */
4997
+ expeditions?: NewHomeExpeditions;
4998
+ /** "Popular right now" chip cloud. */
4999
+ popular?: NewHomePopular;
5000
+ /** Teal stats band. */
5001
+ stats?: NewHomeStats;
5002
+ /** "Why us" differentiators — passed to {@link USP}. */
5003
+ usp?: USPProps;
5004
+ /** Dark reviews band. */
5005
+ reviews?: NewHomeReviews;
5006
+ /** "The journal" — feature + list block, passed to {@link BlogJournal}. */
5007
+ journal?: BlogJournalProps;
5008
+ /** Full-bleed call-to-action — passed to {@link CtaBanner}. */
5009
+ cta?: CtaBannerProps;
5010
+ /** Site footer — passed to {@link SiteFooter}. */
5011
+ footer?: SiteFooterProps;
5012
+ className?: string;
5013
+ }
5014
+ declare function NewHome({ hero, explorer, expeditions, popular, stats, usp, reviews, journal, cta, footer, className, }: NewHomeProps): react_jsx_runtime.JSX.Element;
5015
+
5016
+ interface SegmentItem {
5017
+ /** Stable id returned by `onValueChange`. */
5018
+ id: string;
5019
+ /** Visible label. */
5020
+ label: string;
5021
+ /**
5022
+ * Optional leading icon — pass a component, e.g. a lucide `CompassIcon`
5023
+ * (not an element). The component sizes and colours it to match the label.
5024
+ */
5025
+ icon?: React.ComponentType<{
5026
+ className?: string;
5027
+ }>;
5028
+ /** Disable this single segment. */
5029
+ disabled?: boolean;
5030
+ }
5031
+ interface SegmentedControlProps {
5032
+ /** Options rendered as pills, left to right. */
5033
+ items: SegmentItem[];
5034
+ /** Controlled active id. Pair with `onValueChange`. */
5035
+ value?: string;
5036
+ /** Uncontrolled initial active id — defaults to the first item. */
5037
+ defaultValue?: string;
5038
+ /** Fired with the new id when a segment is selected. */
5039
+ onValueChange?: (id: string) => void;
5040
+ /**
5041
+ * Surface the control sits on.
5042
+ * - `"black"` — dark track, light labels (for dark surfaces).
5043
+ * - `"white"` — light track, dark labels (for light surfaces).
5044
+ * @default "black"
5045
+ */
5046
+ variant?: "black" | "white";
5047
+ /** Pill density. @default "md" */
5048
+ size?: "sm" | "md";
5049
+ /** Stretch the track to fill its container, distributing pills evenly. */
5050
+ fullWidth?: boolean;
5051
+ /**
5052
+ * Icon-collapse mode. Requires each item to have an `icon`.
5053
+ * - `true` — only the active segment shows its label; the others collapse to
5054
+ * icon-only, with a smooth width transition on selection.
5055
+ * - `"all"` — every segment collapses to icon-only, including the active one
5056
+ * (which keeps its highlighted pill, so it stays visible + clickable).
5057
+ * Useful for a compact floating/stuck state.
5058
+ * @default false
5059
+ */
5060
+ collapse?: boolean | "all";
5061
+ /** Accessible label for the group. @default "Options" */
5062
+ "aria-label"?: string;
5063
+ className?: string;
5064
+ }
5065
+ declare function SegmentedControl({ items, value, defaultValue, onValueChange, variant, size, fullWidth, collapse, "aria-label": ariaLabel, className, }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
5066
+
5067
+ 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 };