@planetaexo/design-system 0.48.1 → 0.49.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
@@ -50,6 +50,12 @@ interface OfferOptionalItem {
50
50
  decreaseQuantityLabel?: string;
51
51
  /** aria-label para o botão de incrementar quantidade. Default: "Increase quantity". */
52
52
  increaseQuantityLabel?: string;
53
+ /**
54
+ * Descrição multilinha do opcional. Quando truthy, exibe ícone "info" ao lado
55
+ * do label que abre um Dialog com o texto integral. Texto plano — preservar
56
+ * `\n` via `whitespace-pre-wrap` no render.
57
+ */
58
+ description?: string;
53
59
  }
54
60
  interface OfferAdventureItem {
55
61
  id: string;
@@ -150,6 +156,15 @@ interface OfferLabels {
150
156
  scheduleCallLabel?: string;
151
157
  atCompanyLabel?: string;
152
158
  };
159
+ /** Labels do modal de descrição do opcional. */
160
+ optionalInfo?: {
161
+ /** aria-label do botão-ícone gatilho. Default EN: "More info". */
162
+ triggerAriaLabel?: string;
163
+ /** Label do botão de fechar do Dialog. Default EN: "Close". */
164
+ closeLabel?: string;
165
+ /** Label da seção "Descrição" dentro do modal. Default EN: "Description". */
166
+ descriptionLabel?: string;
167
+ };
153
168
  /**
154
169
  * Strings do BookingWizard interno (renderizado quando `checkoutSlot` é
155
170
  * undefined — em produção do bookings esse caminho é ofuscado, mas
@@ -2571,6 +2586,18 @@ interface TripCardProps {
2571
2586
  }
2572
2587
  declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
2573
2588
 
2589
+ /**
2590
+ * Rich configuration for the overlay `<SiteHeader>` rendered inside the
2591
+ * hero. Accepts everything `<SiteHeader>` accepts EXCEPT `position` and
2592
+ * `className`: position is hardcoded to `"overlay"` so the header scrolls
2593
+ * away with the hero, and the hero composes its own layout around it.
2594
+ *
2595
+ * Use this shape (instead of `boolean | SiteHeaderLink[]`) when you need
2596
+ * more than just a links array — e.g. to wire the language switcher
2597
+ * (`languages` + `currentLanguage` + `onLanguageChange`) or override the
2598
+ * logo / variant from a consuming page.
2599
+ */
2600
+ type TripSiteHeaderConfig = Omit<SiteHeaderProps, "position" | "className">;
2574
2601
  interface TripDuration {
2575
2602
  /** Total number of days */
2576
2603
  days: number;
@@ -2606,8 +2633,15 @@ interface TripHeaderProps {
2606
2633
  * row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
2607
2634
  */
2608
2635
  belowMeta?: React.ReactNode;
2609
- /** Pass true (or a links array) to render the transparent SiteHeader over the hero */
2610
- siteHeader?: boolean | SiteHeaderLink[];
2636
+ /**
2637
+ * Render an overlay `<SiteHeader>` inside the hero. Accepts:
2638
+ * - `boolean` — minimal: just renders the header with the default
2639
+ * link list (used by the styleguide showcase).
2640
+ * - `SiteHeaderLink[]` — a custom links array (existing simple usage).
2641
+ * - {@link TripSiteHeaderConfig} — full SiteHeaderProps minus
2642
+ * `position`/`className`, e.g. to wire languages + onLanguageChange.
2643
+ */
2644
+ siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
2611
2645
  /** Alinhado ao TripPage — reservado para densidade / hero v2 */
2612
2646
  uiVariant?: "v1" | "v2";
2613
2647
  className?: string;
@@ -2821,8 +2855,16 @@ interface TripPageProps {
2821
2855
  priceInfo?: React.ReactNode;
2822
2856
  onBook?: () => void;
2823
2857
  bookLabel?: string;
2824
- /** Pass true (or a links array) to render the transparent SiteHeader over the hero */
2825
- siteHeader?: boolean | SiteHeaderLink[];
2858
+ /**
2859
+ * Render an overlay SiteHeader inside the hero. Accepts:
2860
+ * - `boolean` — minimal: default link list (styleguide usage).
2861
+ * - `SiteHeaderLink[]` — custom links only.
2862
+ * - {@link TripSiteHeaderConfig} — full SiteHeader config minus
2863
+ * `position`/`className`. Use this to wire the language switcher
2864
+ * (`languages` + `currentLanguage` + `onLanguageChange`) or to
2865
+ * override variant / logo from a consuming page.
2866
+ */
2867
+ siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
2826
2868
  /** Preset de layout (ilha WP / styleguide). @default v1 */
2827
2869
  uiVariant?: "v1" | "v2";
2828
2870
  /** Feature flags para ramos de UI sem duplicar componentes. */
@@ -2874,12 +2916,14 @@ declare function Toast({ message, variant, onClose, duration, className, }: Toas
2874
2916
 
2875
2917
  declare function Dialog({ ...props }: Dialog$1.Root.Props): react_jsx_runtime.JSX.Element;
2876
2918
  declare function DialogClose({ ...props }: Dialog$1.Close.Props): react_jsx_runtime.JSX.Element;
2877
- declare function DialogContent({ className, children, showCloseButton, ...props }: Dialog$1.Popup.Props & {
2919
+ declare function DialogContent({ className, children, showCloseButton, closeLabel, ...props }: Dialog$1.Popup.Props & {
2878
2920
  showCloseButton?: boolean;
2921
+ closeLabel?: string;
2879
2922
  }): react_jsx_runtime.JSX.Element;
2880
2923
  declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
2881
- declare function DialogFooter({ className, showCloseButton, children, ...props }: React.ComponentProps<"div"> & {
2924
+ declare function DialogFooter({ className, showCloseButton, closeLabel, children, ...props }: React.ComponentProps<"div"> & {
2882
2925
  showCloseButton?: boolean;
2926
+ closeLabel?: string;
2883
2927
  }): react_jsx_runtime.JSX.Element;
2884
2928
  declare function DialogTitle({ className, ...props }: Dialog$1.Title.Props): react_jsx_runtime.JSX.Element;
2885
2929
  declare function DialogDescription({ className, ...props }: Dialog$1.Description.Props): react_jsx_runtime.JSX.Element;
@@ -3325,4 +3369,4 @@ declare function LeadCapturePopup({ config: _config, }: {
3325
3369
  config: LeadCapturePopupConfig;
3326
3370
  }): react_jsx_runtime.JSX.Element | null;
3327
3371
 
3328
- export { ActivityCard, type ActivityCardProps, type ActivityCardSize, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, BirthDateField, type BirthDateFieldProps, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, 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 BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, type CurrencyEstimate, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, 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, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerConfirmationAgentContactLinks, PartnerConfirmationEmail, type PartnerConfirmationEmailExpectationRow, type PartnerConfirmationEmailLabels, type PartnerConfirmationEmailProps, 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, 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, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, 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 TripTrustpilotWidget, TrustpilotEmbed, type TrustpilotWidgetConfig, buttonVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, wrapEmailHtml };
3372
+ export { ActivityCard, type ActivityCardProps, type ActivityCardSize, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, BirthDateField, type BirthDateFieldProps, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, 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 BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, type CurrencyEstimate, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, 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, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerConfirmationAgentContactLinks, PartnerConfirmationEmail, type PartnerConfirmationEmailExpectationRow, type PartnerConfirmationEmailLabels, type PartnerConfirmationEmailProps, 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, 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, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, 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, wrapEmailHtml };
package/dist/index.d.ts CHANGED
@@ -50,6 +50,12 @@ interface OfferOptionalItem {
50
50
  decreaseQuantityLabel?: string;
51
51
  /** aria-label para o botão de incrementar quantidade. Default: "Increase quantity". */
52
52
  increaseQuantityLabel?: string;
53
+ /**
54
+ * Descrição multilinha do opcional. Quando truthy, exibe ícone "info" ao lado
55
+ * do label que abre um Dialog com o texto integral. Texto plano — preservar
56
+ * `\n` via `whitespace-pre-wrap` no render.
57
+ */
58
+ description?: string;
53
59
  }
54
60
  interface OfferAdventureItem {
55
61
  id: string;
@@ -150,6 +156,15 @@ interface OfferLabels {
150
156
  scheduleCallLabel?: string;
151
157
  atCompanyLabel?: string;
152
158
  };
159
+ /** Labels do modal de descrição do opcional. */
160
+ optionalInfo?: {
161
+ /** aria-label do botão-ícone gatilho. Default EN: "More info". */
162
+ triggerAriaLabel?: string;
163
+ /** Label do botão de fechar do Dialog. Default EN: "Close". */
164
+ closeLabel?: string;
165
+ /** Label da seção "Descrição" dentro do modal. Default EN: "Description". */
166
+ descriptionLabel?: string;
167
+ };
153
168
  /**
154
169
  * Strings do BookingWizard interno (renderizado quando `checkoutSlot` é
155
170
  * undefined — em produção do bookings esse caminho é ofuscado, mas
@@ -2571,6 +2586,18 @@ interface TripCardProps {
2571
2586
  }
2572
2587
  declare function TripCard(props: TripCardProps): react_jsx_runtime.JSX.Element;
2573
2588
 
2589
+ /**
2590
+ * Rich configuration for the overlay `<SiteHeader>` rendered inside the
2591
+ * hero. Accepts everything `<SiteHeader>` accepts EXCEPT `position` and
2592
+ * `className`: position is hardcoded to `"overlay"` so the header scrolls
2593
+ * away with the hero, and the hero composes its own layout around it.
2594
+ *
2595
+ * Use this shape (instead of `boolean | SiteHeaderLink[]`) when you need
2596
+ * more than just a links array — e.g. to wire the language switcher
2597
+ * (`languages` + `currentLanguage` + `onLanguageChange`) or override the
2598
+ * logo / variant from a consuming page.
2599
+ */
2600
+ type TripSiteHeaderConfig = Omit<SiteHeaderProps, "position" | "className">;
2574
2601
  interface TripDuration {
2575
2602
  /** Total number of days */
2576
2603
  days: number;
@@ -2606,8 +2633,15 @@ interface TripHeaderProps {
2606
2633
  * row. Use it to slot in a small Trustpilot widget, sponsor badge, etc.
2607
2634
  */
2608
2635
  belowMeta?: React.ReactNode;
2609
- /** Pass true (or a links array) to render the transparent SiteHeader over the hero */
2610
- siteHeader?: boolean | SiteHeaderLink[];
2636
+ /**
2637
+ * Render an overlay `<SiteHeader>` inside the hero. Accepts:
2638
+ * - `boolean` — minimal: just renders the header with the default
2639
+ * link list (used by the styleguide showcase).
2640
+ * - `SiteHeaderLink[]` — a custom links array (existing simple usage).
2641
+ * - {@link TripSiteHeaderConfig} — full SiteHeaderProps minus
2642
+ * `position`/`className`, e.g. to wire languages + onLanguageChange.
2643
+ */
2644
+ siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
2611
2645
  /** Alinhado ao TripPage — reservado para densidade / hero v2 */
2612
2646
  uiVariant?: "v1" | "v2";
2613
2647
  className?: string;
@@ -2821,8 +2855,16 @@ interface TripPageProps {
2821
2855
  priceInfo?: React.ReactNode;
2822
2856
  onBook?: () => void;
2823
2857
  bookLabel?: string;
2824
- /** Pass true (or a links array) to render the transparent SiteHeader over the hero */
2825
- siteHeader?: boolean | SiteHeaderLink[];
2858
+ /**
2859
+ * Render an overlay SiteHeader inside the hero. Accepts:
2860
+ * - `boolean` — minimal: default link list (styleguide usage).
2861
+ * - `SiteHeaderLink[]` — custom links only.
2862
+ * - {@link TripSiteHeaderConfig} — full SiteHeader config minus
2863
+ * `position`/`className`. Use this to wire the language switcher
2864
+ * (`languages` + `currentLanguage` + `onLanguageChange`) or to
2865
+ * override variant / logo from a consuming page.
2866
+ */
2867
+ siteHeader?: boolean | SiteHeaderLink[] | TripSiteHeaderConfig;
2826
2868
  /** Preset de layout (ilha WP / styleguide). @default v1 */
2827
2869
  uiVariant?: "v1" | "v2";
2828
2870
  /** Feature flags para ramos de UI sem duplicar componentes. */
@@ -2874,12 +2916,14 @@ declare function Toast({ message, variant, onClose, duration, className, }: Toas
2874
2916
 
2875
2917
  declare function Dialog({ ...props }: Dialog$1.Root.Props): react_jsx_runtime.JSX.Element;
2876
2918
  declare function DialogClose({ ...props }: Dialog$1.Close.Props): react_jsx_runtime.JSX.Element;
2877
- declare function DialogContent({ className, children, showCloseButton, ...props }: Dialog$1.Popup.Props & {
2919
+ declare function DialogContent({ className, children, showCloseButton, closeLabel, ...props }: Dialog$1.Popup.Props & {
2878
2920
  showCloseButton?: boolean;
2921
+ closeLabel?: string;
2879
2922
  }): react_jsx_runtime.JSX.Element;
2880
2923
  declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
2881
- declare function DialogFooter({ className, showCloseButton, children, ...props }: React.ComponentProps<"div"> & {
2924
+ declare function DialogFooter({ className, showCloseButton, closeLabel, children, ...props }: React.ComponentProps<"div"> & {
2882
2925
  showCloseButton?: boolean;
2926
+ closeLabel?: string;
2883
2927
  }): react_jsx_runtime.JSX.Element;
2884
2928
  declare function DialogTitle({ className, ...props }: Dialog$1.Title.Props): react_jsx_runtime.JSX.Element;
2885
2929
  declare function DialogDescription({ className, ...props }: Dialog$1.Description.Props): react_jsx_runtime.JSX.Element;
@@ -3325,4 +3369,4 @@ declare function LeadCapturePopup({ config: _config, }: {
3325
3369
  config: LeadCapturePopupConfig;
3326
3370
  }): react_jsx_runtime.JSX.Element | null;
3327
3371
 
3328
- export { ActivityCard, type ActivityCardProps, type ActivityCardSize, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, BirthDateField, type BirthDateFieldProps, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, 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 BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, type CurrencyEstimate, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, 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, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerConfirmationAgentContactLinks, PartnerConfirmationEmail, type PartnerConfirmationEmailExpectationRow, type PartnerConfirmationEmailLabels, type PartnerConfirmationEmailProps, 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, 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, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, 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 TripTrustpilotWidget, TrustpilotEmbed, type TrustpilotWidgetConfig, buttonVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, wrapEmailHtml };
3372
+ export { ActivityCard, type ActivityCardProps, type ActivityCardSize, AgentContactCard, type AgentContactCardProps, Alert, type AlertProps, type AlertVariant, BirthDateField, type BirthDateFieldProps, type BookingAdventure, BookingAdventureCard, type BookingAdventureCardLabels, type BookingAdventureCardLineItem, type BookingAdventureCardProps, type BookingAdventureCardSlots, type BookingAdventureCardTraveller, 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 BookingSummaryRow, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, type CurrencyEstimate, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, type EmailTokens, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, 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, OTPCodeInput, type OTPCodeInputProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferConfirmedState, type OfferDepositInfo, type OfferLabels, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type PartnerBookingCreatedAgentContactLinks, PartnerBookingCreatedEmail, type PartnerBookingCreatedEmailLabels, type PartnerBookingCreatedEmailProps, type PartnerConfirmationAgentContactLinks, PartnerConfirmationEmail, type PartnerConfirmationEmailExpectationRow, type PartnerConfirmationEmailLabels, type PartnerConfirmationEmailProps, 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, 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, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, 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, wrapEmailHtml };
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { cva } from 'class-variance-authority';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import { XIcon, ChevronDownIcon, CalendarIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, CheckCircle2Icon, MapIcon, LogOutIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CircleCheckIcon, SlidersHorizontalIcon, ChevronLeftIcon, HomeIcon, SailboatIcon, CarIcon, WavesIcon, FootprintsIcon, InfoIcon, ClockIcon, CheckIcon, ChevronUpIcon, MenuIcon, UserIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, BedDoubleIcon, UtensilsIcon, CompassIcon, BackpackIcon, CherryIcon, ReceiptIcon, Loader2Icon, SendIcon, CheckCircleIcon, MailIcon, PhoneIcon, MessageCircleIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, ZoomInIcon, StarIcon, TwitterIcon, YoutubeIcon, LinkedinIcon, InstagramIcon, FacebookIcon, ArrowRightIcon, LayoutGridIcon } from 'lucide-react';
7
+ import { XIcon, ChevronDownIcon, CalendarIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, CheckCircle2Icon, MapIcon, LogOutIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CircleCheckIcon, SlidersHorizontalIcon, ChevronLeftIcon, HomeIcon, SailboatIcon, CarIcon, WavesIcon, FootprintsIcon, InfoIcon, ClockIcon, CheckIcon, ChevronUpIcon, MenuIcon, UserIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, BedDoubleIcon, UtensilsIcon, CompassIcon, BackpackIcon, CherryIcon, ReceiptIcon, Loader2Icon, SendIcon, CheckCircleIcon, Info, MailIcon, PhoneIcon, MessageCircleIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, ZoomInIcon, StarIcon, TwitterIcon, YoutubeIcon, LinkedinIcon, InstagramIcon, FacebookIcon, ArrowRightIcon, LayoutGridIcon } from 'lucide-react';
8
8
  import { Separator as Separator$1 } from '@base-ui/react/separator';
9
9
  import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
10
10
  import { Button as Button$1 } from '@base-ui/react/button';
@@ -198,11 +198,13 @@ function DialogContent(_a) {
198
198
  var _b = _a, {
199
199
  className,
200
200
  children,
201
- showCloseButton = true
201
+ showCloseButton = true,
202
+ closeLabel = "Close"
202
203
  } = _b, props = __objRest(_b, [
203
204
  "className",
204
205
  "children",
205
- "showCloseButton"
206
+ "showCloseButton",
207
+ "closeLabel"
206
208
  ]);
207
209
  return /* @__PURE__ */ jsxs(DialogPortal, { children: [
208
210
  /* @__PURE__ */ jsx(DialogOverlay, {}),
@@ -225,7 +227,7 @@ function DialogContent(_a) {
225
227
  Button2,
226
228
  {
227
229
  variant: "ghost",
228
- className: "absolute top-2 right-2",
230
+ className: "absolute top-2 right-2 cursor-pointer",
229
231
  size: "icon-sm"
230
232
  }
231
233
  ),
@@ -234,7 +236,7 @@ function DialogContent(_a) {
234
236
  XIcon,
235
237
  {}
236
238
  ),
237
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
239
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: closeLabel })
238
240
  ]
239
241
  }
240
242
  )
@@ -257,10 +259,12 @@ function DialogFooter(_a) {
257
259
  var _b = _a, {
258
260
  className,
259
261
  showCloseButton = false,
262
+ closeLabel = "Close",
260
263
  children
261
264
  } = _b, props = __objRest(_b, [
262
265
  "className",
263
266
  "showCloseButton",
267
+ "closeLabel",
264
268
  "children"
265
269
  ]);
266
270
  return /* @__PURE__ */ jsxs(
@@ -274,7 +278,7 @@ function DialogFooter(_a) {
274
278
  }, props), {
275
279
  children: [
276
280
  children,
277
- showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { render: /* @__PURE__ */ jsx(Button2, { variant: "outline" }), children: "Close" })
281
+ showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { render: /* @__PURE__ */ jsx(Button2, { variant: "outline" }), children: closeLabel })
278
282
  ]
279
283
  })
280
284
  );
@@ -1270,11 +1274,13 @@ function AdventureCard({
1270
1274
  labels,
1271
1275
  interactionsDisabled
1272
1276
  }) {
1273
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1277
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
1274
1278
  const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
1275
1279
  const [checkedInternal, setCheckedInternal] = React28.useState(
1276
1280
  new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
1277
1281
  );
1282
+ const [openDescriptionId, setOpenDescriptionId] = React28.useState(null);
1283
+ const openDescriptionOptional = openDescriptionId ? (_e = adventure.optionals) == null ? void 0 : _e.find((o) => o.id === openDescriptionId) : void 0;
1278
1284
  const isChecked = (opt) => {
1279
1285
  var _a2;
1280
1286
  return isControlled ? (_a2 = opt.checked) != null ? _a2 : false : checkedInternal.has(opt.id);
@@ -1296,7 +1302,7 @@ function AdventureCard({
1296
1302
  "img",
1297
1303
  {
1298
1304
  src: adventure.image,
1299
- alt: (_e = adventure.imageAlt) != null ? _e : adventure.title,
1305
+ alt: (_f = adventure.imageAlt) != null ? _f : adventure.title,
1300
1306
  className: "w-full h-full object-cover"
1301
1307
  }
1302
1308
  ) }),
@@ -1311,7 +1317,7 @@ function AdventureCard({
1311
1317
  className: "flex items-center gap-1.5 rounded-full border border-border px-3 py-1 text-xs text-muted-foreground font-ui hover:border-destructive hover:text-destructive transition-colors",
1312
1318
  children: [
1313
1319
  /* @__PURE__ */ jsx(XIcon, { className: "w-3 h-3" }),
1314
- (_f = labels == null ? void 0 : labels.remove) != null ? _f : "Remove"
1320
+ (_g = labels == null ? void 0 : labels.remove) != null ? _g : "Remove"
1315
1321
  ]
1316
1322
  }
1317
1323
  )
@@ -1328,9 +1334,9 @@ function AdventureCard({
1328
1334
  adventure.location
1329
1335
  ] }),
1330
1336
  adventure.optionals && adventure.optionals.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-xl border border-border bg-muted/30 p-4 flex flex-col gap-3", children: [
1331
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_g = labels == null ? void 0 : labels.availableOptionals) != null ? _g : "Available optionals" }),
1337
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_h = labels == null ? void 0 : labels.availableOptionals) != null ? _h : "Available optionals" }),
1332
1338
  /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: adventure.optionals.map((opt) => {
1333
- var _a2, _b2, _c2, _d2, _e2;
1339
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
1334
1340
  const checked = isChecked(opt);
1335
1341
  const minQty = (_a2 = opt.minQuantity) != null ? _a2 : 1;
1336
1342
  const maxQty = (_b2 = opt.maxQuantity) != null ? _b2 : 50;
@@ -1338,6 +1344,7 @@ function AdventureCard({
1338
1344
  const currentQty = (_c2 = opt.quantity) != null ? _c2 : minQty;
1339
1345
  const canDec = currentQty > minQty;
1340
1346
  const canInc = currentQty < maxQty;
1347
+ const hasDescription = !!((_d2 = opt.description) == null ? void 0 : _d2.trim());
1341
1348
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-wrap items-center gap-x-3 gap-y-1.5", interactionsDisabled && "opacity-60"), children: [
1342
1349
  /* @__PURE__ */ jsxs("label", { className: cn("flex items-center gap-3 group", interactionsDisabled ? "cursor-not-allowed" : "cursor-pointer"), children: [
1343
1350
  /* @__PURE__ */ jsx(
@@ -1363,6 +1370,19 @@ function AdventureCard({
1363
1370
  ] })
1364
1371
  ] })
1365
1372
  ] }),
1373
+ hasDescription && /* @__PURE__ */ jsx(
1374
+ "button",
1375
+ {
1376
+ type: "button",
1377
+ onClick: (e) => {
1378
+ e.stopPropagation();
1379
+ setOpenDescriptionId(opt.id);
1380
+ },
1381
+ "aria-label": (_f2 = (_e2 = labels == null ? void 0 : labels.optionalInfo) == null ? void 0 : _e2.triggerAriaLabel) != null ? _f2 : "More info",
1382
+ className: "inline-flex cursor-pointer items-center justify-center text-muted-foreground hover:text-primary transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded",
1383
+ children: /* @__PURE__ */ jsx(Info, { className: "w-4 h-4" })
1384
+ }
1385
+ ),
1366
1386
  showStepper && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 ml-auto", children: [
1367
1387
  /* @__PURE__ */ jsx(
1368
1388
  "button",
@@ -1373,7 +1393,7 @@ function AdventureCard({
1373
1393
  return !interactionsDisabled && canDec && ((_a3 = opt.onQuantityChange) == null ? void 0 : _a3.call(opt, opt.id, currentQty - 1));
1374
1394
  },
1375
1395
  disabled: interactionsDisabled || !canDec,
1376
- "aria-label": (_d2 = opt.decreaseQuantityLabel) != null ? _d2 : "Decrease quantity",
1396
+ "aria-label": (_g2 = opt.decreaseQuantityLabel) != null ? _g2 : "Decrease quantity",
1377
1397
  className: cn(
1378
1398
  "h-7 w-7 rounded border border-border flex items-center justify-center text-sm font-semibold",
1379
1399
  "transition-colors",
@@ -1392,7 +1412,7 @@ function AdventureCard({
1392
1412
  return !interactionsDisabled && canInc && ((_a3 = opt.onQuantityChange) == null ? void 0 : _a3.call(opt, opt.id, currentQty + 1));
1393
1413
  },
1394
1414
  disabled: interactionsDisabled || !canInc,
1395
- "aria-label": (_e2 = opt.increaseQuantityLabel) != null ? _e2 : "Increase quantity",
1415
+ "aria-label": (_h2 = opt.increaseQuantityLabel) != null ? _h2 : "Increase quantity",
1396
1416
  className: cn(
1397
1417
  "h-7 w-7 rounded border border-border flex items-center justify-center text-sm font-semibold",
1398
1418
  "transition-colors",
@@ -1407,12 +1427,31 @@ function AdventureCard({
1407
1427
  opt.scheduledAtLabel
1408
1428
  ] })
1409
1429
  ] }, opt.id);
1410
- }) })
1430
+ }) }),
1431
+ /* @__PURE__ */ jsx(
1432
+ Dialog,
1433
+ {
1434
+ open: openDescriptionId !== null,
1435
+ onOpenChange: (open) => !open && setOpenDescriptionId(null),
1436
+ children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-lg max-h-[85vh] overflow-y-auto p-6 sm:max-w-lg", children: [
1437
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "gap-3 pr-8", children: [
1438
+ /* @__PURE__ */ jsx(DialogTitle, { className: "font-heading text-xl font-bold text-foreground leading-snug", children: (_i = openDescriptionOptional == null ? void 0 : openDescriptionOptional.label) != null ? _i : "" }),
1439
+ (openDescriptionOptional == null ? void 0 : openDescriptionOptional.pricePerPerson) && /* @__PURE__ */ jsx("span", { className: "inline-flex w-fit items-center rounded-full bg-primary/10 px-3 py-1 text-sm font-semibold text-primary font-heading", children: openDescriptionOptional.pricePerPerson })
1440
+ ] }),
1441
+ /* @__PURE__ */ jsx(Separator, {}),
1442
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
1443
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_k = (_j = labels == null ? void 0 : labels.optionalInfo) == null ? void 0 : _j.descriptionLabel) != null ? _k : "Description" }),
1444
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-sans text-foreground leading-relaxed whitespace-pre-wrap", children: (_l = openDescriptionOptional == null ? void 0 : openDescriptionOptional.description) != null ? _l : "" })
1445
+ ] }),
1446
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex justify-end", children: /* @__PURE__ */ jsx(DialogClose, { className: "cursor-pointer px-4 py-2 rounded-lg bg-primary text-primary-foreground text-sm font-heading font-semibold hover:bg-primary/90 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: (_n = (_m = labels == null ? void 0 : labels.optionalInfo) == null ? void 0 : _m.closeLabel) != null ? _n : "Close" }) })
1447
+ ] })
1448
+ }
1449
+ )
1411
1450
  ] }),
1412
1451
  (adventure.description || adventure.detailsSlot) && /* @__PURE__ */ jsxs(Fragment, { children: [
1413
1452
  /* @__PURE__ */ jsx(Separator, { className: "my-1" }),
1414
1453
  /* @__PURE__ */ jsxs("div", { children: [
1415
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-3", children: (_h = adventure.itineraryLabel) != null ? _h : "Details" }),
1454
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-3", children: (_o = adventure.itineraryLabel) != null ? _o : "Details" }),
1416
1455
  adventure.description && !adventure.detailsSlot && /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/80 leading-snug font-sans", children: adventure.description }),
1417
1456
  adventure.detailsSlot && /* @__PURE__ */ jsx("div", { className: cn(
1418
1457
  "text-foreground",
@@ -1438,21 +1477,21 @@ function AdventureCard({
1438
1477
  ] })
1439
1478
  ] }),
1440
1479
  adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
1441
- /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_i = adventure.includedLabel) != null ? _i : "What's included" }),
1480
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_p = adventure.includedLabel) != null ? _p : "What's included" }),
1442
1481
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
1443
1482
  /* @__PURE__ */ jsx(CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-1" }),
1444
1483
  item
1445
1484
  ] }, i)) })
1446
1485
  ] }),
1447
1486
  adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
1448
- /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_j = adventure.notIncludedLabel) != null ? _j : "What's not included" }),
1487
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_q = adventure.notIncludedLabel) != null ? _q : "What's not included" }),
1449
1488
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
1450
1489
  /* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-1" }),
1451
1490
  item
1452
1491
  ] }, i)) })
1453
1492
  ] }),
1454
1493
  adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
1455
- /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_k = adventure.cancellationPolicyLabel) != null ? _k : "Cancellation policy" }),
1494
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_r = adventure.cancellationPolicyLabel) != null ? _r : "Cancellation policy" }),
1456
1495
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-muted-foreground font-sans", children: [
1457
1496
  /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
1458
1497
  item
@@ -12025,10 +12064,9 @@ function TripHeader({
12025
12064
  /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/85 via-black/20 to-transparent" }),
12026
12065
  siteHeader && /* @__PURE__ */ jsx(
12027
12066
  SiteHeader,
12028
- {
12029
- links: Array.isArray(siteHeader) ? siteHeader : void 0,
12067
+ __spreadProps(__spreadValues({}, Array.isArray(siteHeader) ? { links: siteHeader } : typeof siteHeader === "object" ? siteHeader : {}), {
12030
12068
  position: "overlay"
12031
- }
12069
+ })
12032
12070
  ),
12033
12071
  !videoUrl && showCarousel && /* @__PURE__ */ jsxs(Fragment, { children: [
12034
12072
  /* @__PURE__ */ jsx(