@planetaexo/design-system 0.3.13 → 0.3.15
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.cjs +124 -79
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -4
- package/dist/index.d.ts +17 -4
- package/dist/index.js +125 -81
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -152,12 +152,25 @@ interface TermsSectionProps {
|
|
|
152
152
|
title?: string;
|
|
153
153
|
checked: boolean;
|
|
154
154
|
onChange: (checked: boolean) => void;
|
|
155
|
-
/** Conteúdo do label — pode incluir links/botões do host app */
|
|
156
|
-
label: React.ReactNode;
|
|
157
155
|
/** Mensagem de aviso exibida quando não marcado */
|
|
158
156
|
warningMessage?: string | null;
|
|
157
|
+
/** Locale for label and modal translations. Default: "en" */
|
|
158
|
+
locale?: "en" | "pt" | "fr" | "de";
|
|
159
159
|
}
|
|
160
|
-
declare function TermsSection({ title, checked, onChange,
|
|
160
|
+
declare function TermsSection({ title, checked, onChange, warningMessage, locale, }: TermsSectionProps): react_jsx_runtime.JSX.Element;
|
|
161
|
+
interface BookingConfirmedCardProps {
|
|
162
|
+
/** Title shown in large text. Default: "Booking confirmed!" */
|
|
163
|
+
title?: string;
|
|
164
|
+
/** Email address to reference in the confirmation message */
|
|
165
|
+
email?: string;
|
|
166
|
+
/** Optional custom message node; replaces the default email sentence */
|
|
167
|
+
message?: React.ReactNode;
|
|
168
|
+
/** If provided, renders a "back" button with this handler */
|
|
169
|
+
onBack?: () => void;
|
|
170
|
+
/** Label for the back button. Default: "Back to offer" */
|
|
171
|
+
backLabel?: string;
|
|
172
|
+
}
|
|
173
|
+
declare function BookingConfirmedCard({ title, email, message, onBack, backLabel, }: BookingConfirmedCardProps): react_jsx_runtime.JSX.Element;
|
|
161
174
|
/** Cartão de aventura isolado (mesmo layout que dentro de `Offer`). */
|
|
162
175
|
declare function OfferAdventureCard({ adventure }: {
|
|
163
176
|
adventure: OfferAdventureItem;
|
|
@@ -1160,4 +1173,4 @@ declare function LeadCapturePopup({ config: _config, }: {
|
|
|
1160
1173
|
config: LeadCapturePopupConfig;
|
|
1161
1174
|
}): react_jsx_runtime.JSX.Element | null;
|
|
1162
1175
|
|
|
1163
|
-
export { ActivityCard, type ActivityCardProps, type ActivityCardSize, Alert, type AlertProps, type AlertVariant, type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailLabels, type BookingConfirmationEmailProps, type BookingConfirmationLabels, type BookingConfirmationProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingShell, type BookingShellProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Itinerary, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, PaymentAmountSelector, type PaymentAmountSelectorProps, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, type PricingOption, PricingTrip, type PricingTripProps, type PricingTripVariant, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, type StripeAppearance, type SuggestedTraveller, TermsSection, type TermsSectionProps, ThemeToggle, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryStep, type TripMeetingPoint, TripPage, type TripPageProps, type TripPricingOption, type TripReview, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
|
1176
|
+
export { ActivityCard, type ActivityCardProps, type ActivityCardSize, Alert, type AlertProps, type AlertVariant, type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailLabels, type BookingConfirmationEmailProps, type BookingConfirmationLabels, type BookingConfirmationProps, BookingConfirmedCard, type BookingConfirmedCardProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingShell, type BookingShellProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Itinerary, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, PaymentAmountSelector, type PaymentAmountSelectorProps, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, type PricingOption, PricingTrip, type PricingTripProps, type PricingTripVariant, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, type StripeAppearance, type SuggestedTraveller, TermsSection, type TermsSectionProps, ThemeToggle, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryStep, type TripMeetingPoint, TripPage, type TripPageProps, type TripPricingOption, type TripReview, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
package/dist/index.d.ts
CHANGED
|
@@ -152,12 +152,25 @@ interface TermsSectionProps {
|
|
|
152
152
|
title?: string;
|
|
153
153
|
checked: boolean;
|
|
154
154
|
onChange: (checked: boolean) => void;
|
|
155
|
-
/** Conteúdo do label — pode incluir links/botões do host app */
|
|
156
|
-
label: React.ReactNode;
|
|
157
155
|
/** Mensagem de aviso exibida quando não marcado */
|
|
158
156
|
warningMessage?: string | null;
|
|
157
|
+
/** Locale for label and modal translations. Default: "en" */
|
|
158
|
+
locale?: "en" | "pt" | "fr" | "de";
|
|
159
159
|
}
|
|
160
|
-
declare function TermsSection({ title, checked, onChange,
|
|
160
|
+
declare function TermsSection({ title, checked, onChange, warningMessage, locale, }: TermsSectionProps): react_jsx_runtime.JSX.Element;
|
|
161
|
+
interface BookingConfirmedCardProps {
|
|
162
|
+
/** Title shown in large text. Default: "Booking confirmed!" */
|
|
163
|
+
title?: string;
|
|
164
|
+
/** Email address to reference in the confirmation message */
|
|
165
|
+
email?: string;
|
|
166
|
+
/** Optional custom message node; replaces the default email sentence */
|
|
167
|
+
message?: React.ReactNode;
|
|
168
|
+
/** If provided, renders a "back" button with this handler */
|
|
169
|
+
onBack?: () => void;
|
|
170
|
+
/** Label for the back button. Default: "Back to offer" */
|
|
171
|
+
backLabel?: string;
|
|
172
|
+
}
|
|
173
|
+
declare function BookingConfirmedCard({ title, email, message, onBack, backLabel, }: BookingConfirmedCardProps): react_jsx_runtime.JSX.Element;
|
|
161
174
|
/** Cartão de aventura isolado (mesmo layout que dentro de `Offer`). */
|
|
162
175
|
declare function OfferAdventureCard({ adventure }: {
|
|
163
176
|
adventure: OfferAdventureItem;
|
|
@@ -1160,4 +1173,4 @@ declare function LeadCapturePopup({ config: _config, }: {
|
|
|
1160
1173
|
config: LeadCapturePopupConfig;
|
|
1161
1174
|
}): react_jsx_runtime.JSX.Element | null;
|
|
1162
1175
|
|
|
1163
|
-
export { ActivityCard, type ActivityCardProps, type ActivityCardSize, Alert, type AlertProps, type AlertVariant, type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailLabels, type BookingConfirmationEmailProps, type BookingConfirmationLabels, type BookingConfirmationProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingShell, type BookingShellProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Itinerary, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, PaymentAmountSelector, type PaymentAmountSelectorProps, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, type PricingOption, PricingTrip, type PricingTripProps, type PricingTripVariant, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, type StripeAppearance, type SuggestedTraveller, TermsSection, type TermsSectionProps, ThemeToggle, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryStep, type TripMeetingPoint, TripPage, type TripPageProps, type TripPricingOption, type TripReview, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
|
1176
|
+
export { ActivityCard, type ActivityCardProps, type ActivityCardSize, Alert, type AlertProps, type AlertVariant, type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailLabels, type BookingConfirmationEmailProps, type BookingConfirmationLabels, type BookingConfirmationProps, BookingConfirmedCard, type BookingConfirmedCardProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, BookingForm, type BookingFormProps, type BookingFormValues, BookingShell, type BookingShellProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Button, type ButtonProps, COUNTRIES, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, CounterField, type CounterFieldProps, type CountryOption, CountrySearchField, type CountrySearchFieldProps, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, type DatePickerFieldProps, type FilterGroup, type FilterItem, FilterPanel, type FilterPanelProps, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Itinerary, type ItineraryProps, type ItineraryRoute, type ItineraryStop, LeadCapturePopup, type LeadCapturePopupConfig, MenuTrip, type MenuTripProps, type MenuTripSection, type MenuTripVariant, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, PaymentAmountSelector, type PaymentAmountSelectorProps, type PaymentMethodOption, PaymentMethodSelector, type PaymentMethodSelectorProps, PaymentModalShell, type PaymentModalShellProps, PhoneCountrySelect, PhotoGallery, type PhotoGalleryPhoto, type PhotoGalleryProps, type PhotoGalleryVariant, type PricingOption, PricingTrip, type PricingTripProps, type PricingTripVariant, SiteHeader, type SiteHeaderLanguage, type SiteHeaderLink, type SiteHeaderProps, type SiteHeaderSubItem, type SiteHeaderVariant, type StripeAppearance, type SuggestedTraveller, TermsSection, type TermsSectionProps, ThemeToggle, TripCard, type TripCardCta, type TripCardProps, type TripCardSize, type TripCardStatus, type TripDuration, type TripFaq, TripHeader, type TripHeaderProps, type TripHighlight, type TripInfoGroup, type TripItineraryStep, type TripMeetingPoint, TripPage, type TripPageProps, type TripPricingOption, type TripReview, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { clsx } from 'clsx';
|
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
7
|
import { format } from 'date-fns';
|
|
8
|
-
import { ChevronDownIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, MapIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CalendarIcon, ChevronLeftIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, XIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, Loader2Icon, SendIcon, CheckCircleIcon, CheckIcon,
|
|
8
|
+
import { ChevronDownIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, CheckCircle2Icon, MapIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CalendarIcon, ChevronLeftIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, XIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, Loader2Icon, SendIcon, CheckCircleIcon, CheckIcon, MailIcon, PhoneIcon, CompassIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, CarIcon, ZoomInIcon, StarIcon, LayoutGridIcon } from 'lucide-react';
|
|
9
9
|
import { Separator as Separator$1 } from '@base-ui/react/separator';
|
|
10
10
|
import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
|
|
11
11
|
import { Button as Button$1 } from '@base-ui/react/button';
|
|
@@ -1686,13 +1686,71 @@ function PaymentMethodSelector({
|
|
|
1686
1686
|
)) })
|
|
1687
1687
|
] });
|
|
1688
1688
|
}
|
|
1689
|
+
var TERMS_I18N = {
|
|
1690
|
+
en: {
|
|
1691
|
+
before: "I have read and accept the ",
|
|
1692
|
+
link: "terms and conditions",
|
|
1693
|
+
after: " of the reservation.",
|
|
1694
|
+
modalTitle: "Terms and Conditions",
|
|
1695
|
+
closeLabel: "Close"
|
|
1696
|
+
},
|
|
1697
|
+
pt: {
|
|
1698
|
+
before: "Li e aceito os ",
|
|
1699
|
+
link: "termos e condi\xE7\xF5es",
|
|
1700
|
+
after: " da reserva.",
|
|
1701
|
+
modalTitle: "Termos e Condi\xE7\xF5es",
|
|
1702
|
+
closeLabel: "Fechar"
|
|
1703
|
+
},
|
|
1704
|
+
fr: {
|
|
1705
|
+
before: "J'ai lu et j'accepte les ",
|
|
1706
|
+
link: "conditions g\xE9n\xE9rales",
|
|
1707
|
+
after: " de la r\xE9servation.",
|
|
1708
|
+
modalTitle: "Conditions G\xE9n\xE9rales",
|
|
1709
|
+
closeLabel: "Fermer"
|
|
1710
|
+
},
|
|
1711
|
+
de: {
|
|
1712
|
+
before: "Ich habe die ",
|
|
1713
|
+
link: "Allgemeinen Gesch\xE4ftsbedingungen",
|
|
1714
|
+
after: " gelesen und akzeptiere sie.",
|
|
1715
|
+
modalTitle: "Allgemeine Gesch\xE4ftsbedingungen",
|
|
1716
|
+
closeLabel: "Schlie\xDFen"
|
|
1717
|
+
}
|
|
1718
|
+
};
|
|
1719
|
+
var TERMS_CONTENT = [
|
|
1720
|
+
{
|
|
1721
|
+
body: "These Terms and Conditions govern your booking with PlanetaEXO. By making a reservation, you agree to the following terms. Please read them carefully before confirming your booking."
|
|
1722
|
+
},
|
|
1723
|
+
{
|
|
1724
|
+
heading: "1. Bookings and payments",
|
|
1725
|
+
body: "A booking is confirmed only upon receipt of the required deposit or full payment as specified in your proposal. Prices are quoted in the currency indicated in your proposal. Full payment is due prior to departure on the date stipulated in your booking confirmation. PlanetaEXO reserves the right to cancel unconfirmed reservations and is not responsible for exchange rate fluctuations after payment is received."
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
heading: "2. Cancellation policy",
|
|
1729
|
+
body: "All cancellations must be submitted in writing. The following fees apply: more than 30 days before departure \u2014 loss of deposit; 15\u201330 days before departure \u2014 50% of the total cost; fewer than 15 days before departure \u2014 100% of the total cost. Cases involving force majeure or documented medical emergencies will be evaluated individually."
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
heading: "3. Changes and modifications",
|
|
1733
|
+
body: "PlanetaEXO reserves the right to modify itineraries, accommodations, or activities for reasons of safety, weather conditions, force majeure, or other circumstances beyond our control. You will be notified of any significant changes as promptly as possible. Minor adjustments do not entitle the traveller to a refund or compensation."
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
heading: "4. Travel insurance",
|
|
1737
|
+
body: "We strongly recommend that all travellers obtain comprehensive travel insurance covering trip cancellation, medical emergencies, evacuation, and baggage loss prior to departure. PlanetaEXO is not liable for costs or losses that would have been covered by adequate travel insurance."
|
|
1738
|
+
},
|
|
1739
|
+
{
|
|
1740
|
+
heading: "5. Liability",
|
|
1741
|
+
body: "PlanetaEXO's liability is limited to the total amount paid by the client for the services in question. We are not responsible for indirect losses, consequential damages, or service failures caused by third-party providers (airlines, hotels, local operators) or force majeure events. Participation in adventure activities carries inherent risks; travellers acknowledge and accept these risks by confirming their booking."
|
|
1742
|
+
}
|
|
1743
|
+
];
|
|
1689
1744
|
function TermsSection({
|
|
1690
1745
|
title = "Terms and conditions",
|
|
1691
1746
|
checked,
|
|
1692
1747
|
onChange,
|
|
1693
|
-
|
|
1694
|
-
|
|
1748
|
+
warningMessage,
|
|
1749
|
+
locale = "en"
|
|
1695
1750
|
}) {
|
|
1751
|
+
var _a;
|
|
1752
|
+
const [modalOpen, setModalOpen] = React19.useState(false);
|
|
1753
|
+
const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
|
|
1696
1754
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
|
|
1697
1755
|
/* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
|
|
1698
1756
|
/* @__PURE__ */ jsxs("label", { className: "flex items-start gap-2.5 cursor-pointer", children: [
|
|
@@ -1705,9 +1763,67 @@ function TermsSection({
|
|
|
1705
1763
|
className: "h-4 w-4 shrink-0 mt-0.5 rounded border-border accent-primary cursor-pointer"
|
|
1706
1764
|
}
|
|
1707
1765
|
),
|
|
1708
|
-
/* @__PURE__ */
|
|
1766
|
+
/* @__PURE__ */ jsxs("span", { className: "text-sm font-sans text-foreground/80 leading-snug", children: [
|
|
1767
|
+
i18n.before,
|
|
1768
|
+
/* @__PURE__ */ jsx(
|
|
1769
|
+
"button",
|
|
1770
|
+
{
|
|
1771
|
+
type: "button",
|
|
1772
|
+
onClick: () => setModalOpen(true),
|
|
1773
|
+
className: "text-primary underline underline-offset-2 hover:text-primary/80 transition-colors",
|
|
1774
|
+
children: i18n.link
|
|
1775
|
+
}
|
|
1776
|
+
),
|
|
1777
|
+
i18n.after
|
|
1778
|
+
] })
|
|
1709
1779
|
] }),
|
|
1710
|
-
!checked && warningMessage && /* @__PURE__ */ jsx("p", { className: "text-xs text-amber-400 flex items-center gap-1", children: warningMessage })
|
|
1780
|
+
!checked && warningMessage && /* @__PURE__ */ jsx("p", { className: "text-xs text-amber-400 flex items-center gap-1", children: warningMessage }),
|
|
1781
|
+
/* @__PURE__ */ jsx(Dialog, { open: modalOpen, onOpenChange: setModalOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-2xl w-full max-h-[80vh] overflow-y-auto", children: [
|
|
1782
|
+
/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsxs(DialogTitle, { className: "font-heading text-xl", children: [
|
|
1783
|
+
i18n.modalTitle,
|
|
1784
|
+
" \u2014 PlanetaEXO"
|
|
1785
|
+
] }) }),
|
|
1786
|
+
/* @__PURE__ */ jsx("div", { className: "mt-4 space-y-5 text-sm font-sans text-foreground/80 leading-relaxed", children: TERMS_CONTENT.map((section, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
1787
|
+
section.heading && /* @__PURE__ */ jsx("p", { className: "font-bold text-foreground font-heading mb-1", children: section.heading }),
|
|
1788
|
+
/* @__PURE__ */ jsx("p", { children: section.body })
|
|
1789
|
+
] }, i)) }),
|
|
1790
|
+
/* @__PURE__ */ jsx("div", { className: "mt-6 flex justify-end", children: /* @__PURE__ */ jsx(
|
|
1791
|
+
DialogClose,
|
|
1792
|
+
{
|
|
1793
|
+
className: "px-4 py-2 rounded-lg bg-primary text-white text-sm font-heading font-semibold hover:bg-primary/90 transition-colors",
|
|
1794
|
+
children: i18n.closeLabel
|
|
1795
|
+
}
|
|
1796
|
+
) })
|
|
1797
|
+
] }) })
|
|
1798
|
+
] });
|
|
1799
|
+
}
|
|
1800
|
+
function BookingConfirmedCard({
|
|
1801
|
+
title = "Booking confirmed!",
|
|
1802
|
+
email,
|
|
1803
|
+
message,
|
|
1804
|
+
onBack,
|
|
1805
|
+
backLabel = "Back to offer"
|
|
1806
|
+
}) {
|
|
1807
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-8 flex flex-col items-center gap-6 text-center", children: [
|
|
1808
|
+
/* @__PURE__ */ jsx("div", { className: "flex h-20 w-20 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsx(CheckCircle2Icon, { className: "w-10 h-10 text-primary" }) }),
|
|
1809
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1810
|
+
/* @__PURE__ */ jsx("h3", { className: "text-2xl font-black text-foreground font-heading", children: title }),
|
|
1811
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-muted-foreground font-sans max-w-sm mx-auto leading-relaxed", children: message != null ? message : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1812
|
+
"A confirmation email has been sent to",
|
|
1813
|
+
" ",
|
|
1814
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground", children: email || "your email" }),
|
|
1815
|
+
". Our team will be in touch shortly."
|
|
1816
|
+
] }) })
|
|
1817
|
+
] }),
|
|
1818
|
+
onBack && /* @__PURE__ */ jsx(
|
|
1819
|
+
"button",
|
|
1820
|
+
{
|
|
1821
|
+
type: "button",
|
|
1822
|
+
onClick: onBack,
|
|
1823
|
+
className: "rounded-full border border-primary px-6 py-2.5 text-sm font-bold text-primary font-heading hover:bg-primary/10 transition-colors",
|
|
1824
|
+
children: backLabel
|
|
1825
|
+
}
|
|
1826
|
+
)
|
|
1711
1827
|
] });
|
|
1712
1828
|
}
|
|
1713
1829
|
var WIZARD_STEPS = [
|
|
@@ -1753,7 +1869,6 @@ function BookingWizard({
|
|
|
1753
1869
|
const [payAmount, setPayAmount] = React19.useState("full");
|
|
1754
1870
|
const [payMethod, setPayMethod] = React19.useState("stripe");
|
|
1755
1871
|
const [termsAccepted, setTermsAccepted] = React19.useState(false);
|
|
1756
|
-
const [termsModalOpen, setTermsModalOpen] = React19.useState(false);
|
|
1757
1872
|
const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
|
|
1758
1873
|
const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
|
|
1759
1874
|
const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
|
|
@@ -1793,34 +1908,7 @@ function BookingWizard({
|
|
|
1793
1908
|
const depositLabel = depositInfo ? `Pay deposit (${depositInfo.depositPercent}%) \u2014 ${depositInfo.depositAmount}` : "Pay deposit";
|
|
1794
1909
|
const fullLabel = `Pay full amount \u2014 ${total}`;
|
|
1795
1910
|
if (step === "confirmed") {
|
|
1796
|
-
return /* @__PURE__ */
|
|
1797
|
-
/* @__PURE__ */ jsx("div", { className: "flex h-20 w-20 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsx(CheckCircle2Icon, { className: "w-10 h-10 text-primary" }) }),
|
|
1798
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
1799
|
-
/* @__PURE__ */ jsx("h3", { className: "text-2xl font-black text-foreground font-heading", children: "Booking confirmed!" }),
|
|
1800
|
-
/* @__PURE__ */ jsxs("p", { className: "mt-2 text-sm text-muted-foreground font-sans max-w-sm mx-auto leading-relaxed", children: [
|
|
1801
|
-
"A confirmation email has been sent to",
|
|
1802
|
-
" ",
|
|
1803
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground", children: responsible.email || "your email" }),
|
|
1804
|
-
". Our team will be in touch shortly."
|
|
1805
|
-
] })
|
|
1806
|
-
] }),
|
|
1807
|
-
/* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border bg-muted/30 px-6 py-4 w-full max-w-xs", children: [
|
|
1808
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground font-sans uppercase tracking-wider", children: "Booking reference" }),
|
|
1809
|
-
/* @__PURE__ */ jsxs("p", { className: "text-lg font-black text-primary font-heading mt-1", children: [
|
|
1810
|
-
"PEX-",
|
|
1811
|
-
Math.random().toString(36).slice(2, 8).toUpperCase()
|
|
1812
|
-
] })
|
|
1813
|
-
] }),
|
|
1814
|
-
/* @__PURE__ */ jsx(
|
|
1815
|
-
"button",
|
|
1816
|
-
{
|
|
1817
|
-
type: "button",
|
|
1818
|
-
onClick: onCancel,
|
|
1819
|
-
className: "rounded-full border border-primary px-6 py-2.5 text-sm font-bold text-primary font-heading hover:bg-primary/10 transition-colors",
|
|
1820
|
-
children: "Back to offer"
|
|
1821
|
-
}
|
|
1822
|
-
)
|
|
1823
|
-
] });
|
|
1911
|
+
return /* @__PURE__ */ jsx(BookingConfirmedCard, { email: responsible.email, onBack: onCancel });
|
|
1824
1912
|
}
|
|
1825
1913
|
return /* @__PURE__ */ jsx(
|
|
1826
1914
|
BookingShell,
|
|
@@ -1951,53 +2039,9 @@ function BookingWizard({
|
|
|
1951
2039
|
TermsSection,
|
|
1952
2040
|
{
|
|
1953
2041
|
checked: termsAccepted,
|
|
1954
|
-
onChange: setTermsAccepted
|
|
1955
|
-
label: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1956
|
-
"I have read and accept the",
|
|
1957
|
-
" ",
|
|
1958
|
-
/* @__PURE__ */ jsx(
|
|
1959
|
-
"button",
|
|
1960
|
-
{
|
|
1961
|
-
type: "button",
|
|
1962
|
-
onClick: () => setTermsModalOpen(true),
|
|
1963
|
-
className: "underline underline-offset-2 text-primary hover:text-primary/80 transition-colors font-semibold",
|
|
1964
|
-
children: "terms and conditions"
|
|
1965
|
-
}
|
|
1966
|
-
),
|
|
1967
|
-
" ",
|
|
1968
|
-
"of the reservation."
|
|
1969
|
-
] })
|
|
2042
|
+
onChange: setTermsAccepted
|
|
1970
2043
|
}
|
|
1971
|
-
)
|
|
1972
|
-
/* @__PURE__ */ jsx(Dialog, { open: termsModalOpen, onOpenChange: setTermsModalOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "!max-w-[80vw] w-[80vw] max-h-[85vh] overflow-y-auto", children: [
|
|
1973
|
-
/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { className: "font-heading text-xl", children: "Terms and Conditions" }) }),
|
|
1974
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 text-sm font-sans text-foreground/80 leading-relaxed", children: [
|
|
1975
|
-
/* @__PURE__ */ jsx("p", { children: 'These terms and conditions ("Terms") govern the booking of travel experiences offered through Planeta EXO ("Company"). By confirming a booking, you agree to these Terms in full.' }),
|
|
1976
|
-
/* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "1. Bookings and payments" }),
|
|
1977
|
-
/* @__PURE__ */ jsx("p", { children: "A booking is confirmed upon receipt of the required deposit or full payment. The deposit amount is specified in your offer. The remaining balance must be paid by the balance due date stated in your offer." }),
|
|
1978
|
-
/* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "2. Cancellation policy" }),
|
|
1979
|
-
/* @__PURE__ */ jsx("p", { children: "Cancellations made more than 60 days before departure are eligible for a full refund of the deposit. Cancellations between 30 and 60 days forfeit 50% of the deposit. Cancellations within 30 days of departure are non-refundable." }),
|
|
1980
|
-
/* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "3. Changes and modifications" }),
|
|
1981
|
-
/* @__PURE__ */ jsx("p", { children: "The Company reserves the right to modify itineraries due to weather, safety, or operational reasons. Equivalent alternatives will be offered wherever possible." }),
|
|
1982
|
-
/* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "4. Travel insurance" }),
|
|
1983
|
-
/* @__PURE__ */ jsx("p", { children: "Comprehensive travel insurance is strongly recommended. The Company is not liable for costs arising from trip interruption, medical emergencies, or personal loss." }),
|
|
1984
|
-
/* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "5. Liability" }),
|
|
1985
|
-
/* @__PURE__ */ jsx("p", { children: "Participation in adventure activities carries inherent risk. By booking, you acknowledge and accept these risks. The Company's liability is limited to the total booking amount." }),
|
|
1986
|
-
/* @__PURE__ */ jsx("div", { className: "pt-2", children: /* @__PURE__ */ jsx(
|
|
1987
|
-
DialogClose,
|
|
1988
|
-
{
|
|
1989
|
-
render: /* @__PURE__ */ jsx(
|
|
1990
|
-
"button",
|
|
1991
|
-
{
|
|
1992
|
-
type: "button",
|
|
1993
|
-
className: "rounded-full bg-primary px-6 py-2.5 text-sm font-bold text-primary-foreground font-heading hover:bg-primary/90 transition-colors"
|
|
1994
|
-
}
|
|
1995
|
-
),
|
|
1996
|
-
children: "Close"
|
|
1997
|
-
}
|
|
1998
|
-
) })
|
|
1999
|
-
] })
|
|
2000
|
-
] }) })
|
|
2044
|
+
)
|
|
2001
2045
|
] })
|
|
2002
2046
|
] })
|
|
2003
2047
|
}
|
|
@@ -7142,6 +7186,6 @@ function LeadCapturePopup({
|
|
|
7142
7186
|
);
|
|
7143
7187
|
}
|
|
7144
7188
|
|
|
7145
|
-
export { ActivityCard, Alert, BookingConfirmation, BookingConfirmationEmail, BookingDetails, BookingForm, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LeadCapturePopup, MenuTrip, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, SiteHeader, TermsSection, ThemeToggle, TripCard, TripHeader, TripPage, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
|
7189
|
+
export { ActivityCard, Alert, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LeadCapturePopup, MenuTrip, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, SiteHeader, TermsSection, ThemeToggle, TripCard, TripHeader, TripPage, buttonVariants, cn, getStripeAppearance, stripeAppearance };
|
|
7146
7190
|
//# sourceMappingURL=index.js.map
|
|
7147
7191
|
//# sourceMappingURL=index.js.map
|