@planetaexo/design-system 0.62.1 → 0.64.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.cjs +532 -212
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +122 -4
- package/dist/index.d.ts +122 -4
- package/dist/index.js +502 -183
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React32 from 'react';
|
|
2
2
|
import { useState, useRef, useCallback, useEffect, useId } from 'react';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
@@ -81,7 +81,7 @@ var buttonVariants = cva(
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
);
|
|
84
|
-
var Button =
|
|
84
|
+
var Button = React32.forwardRef(
|
|
85
85
|
(_a, ref) => {
|
|
86
86
|
var _b = _a, { className, variant, size } = _b, props = __objRest(_b, ["className", "variant", "size"]);
|
|
87
87
|
return /* @__PURE__ */ jsx(
|
|
@@ -310,10 +310,10 @@ function DialogDescription(_a) {
|
|
|
310
310
|
}, props)
|
|
311
311
|
);
|
|
312
312
|
}
|
|
313
|
-
var FloatingInput =
|
|
313
|
+
var FloatingInput = React32.forwardRef(
|
|
314
314
|
(_a, ref) => {
|
|
315
315
|
var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
|
|
316
|
-
const inputId = id != null ? id :
|
|
316
|
+
const inputId = id != null ? id : React32.useId();
|
|
317
317
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
|
|
318
318
|
/* @__PURE__ */ jsx(
|
|
319
319
|
"input",
|
|
@@ -353,10 +353,10 @@ var FloatingInput = React31.forwardRef(
|
|
|
353
353
|
}
|
|
354
354
|
);
|
|
355
355
|
FloatingInput.displayName = "FloatingInput";
|
|
356
|
-
var FloatingSelect =
|
|
356
|
+
var FloatingSelect = React32.forwardRef(
|
|
357
357
|
(_a, ref) => {
|
|
358
358
|
var _b = _a, { label, error, id, className, required, children, value } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children", "value"]);
|
|
359
|
-
const inputId = id != null ? id :
|
|
359
|
+
const inputId = id != null ? id : React32.useId();
|
|
360
360
|
const hasValue = typeof value === "string" ? value !== "" : value !== void 0 && value !== null;
|
|
361
361
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
|
|
362
362
|
/* @__PURE__ */ jsx(
|
|
@@ -620,11 +620,11 @@ function PhoneCountrySelect({
|
|
|
620
620
|
disabled
|
|
621
621
|
}) {
|
|
622
622
|
var _a;
|
|
623
|
-
const [open, setOpen] =
|
|
624
|
-
const containerRef =
|
|
625
|
-
const listRef =
|
|
623
|
+
const [open, setOpen] = React32.useState(false);
|
|
624
|
+
const containerRef = React32.useRef(null);
|
|
625
|
+
const listRef = React32.useRef(null);
|
|
626
626
|
const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
|
|
627
|
-
|
|
627
|
+
React32.useEffect(() => {
|
|
628
628
|
if (!open) return;
|
|
629
629
|
const handler = (e) => {
|
|
630
630
|
var _a2;
|
|
@@ -635,7 +635,7 @@ function PhoneCountrySelect({
|
|
|
635
635
|
document.addEventListener("mousedown", handler);
|
|
636
636
|
return () => document.removeEventListener("mousedown", handler);
|
|
637
637
|
}, [open]);
|
|
638
|
-
|
|
638
|
+
React32.useEffect(() => {
|
|
639
639
|
if (!open || !listRef.current) return;
|
|
640
640
|
const activeEl = listRef.current.querySelector("[data-selected=true]");
|
|
641
641
|
activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
|
|
@@ -905,8 +905,8 @@ function CalendarDayButton(_a) {
|
|
|
905
905
|
"locale"
|
|
906
906
|
]);
|
|
907
907
|
const defaultClassNames = getDefaultClassNames();
|
|
908
|
-
const ref =
|
|
909
|
-
|
|
908
|
+
const ref = React32.useRef(null);
|
|
909
|
+
React32.useEffect(() => {
|
|
910
910
|
var _a2;
|
|
911
911
|
if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
|
|
912
912
|
}, [modifiers.focused]);
|
|
@@ -937,16 +937,16 @@ function BirthDateField({
|
|
|
937
937
|
className,
|
|
938
938
|
disabled
|
|
939
939
|
}) {
|
|
940
|
-
const [open, setOpen] =
|
|
941
|
-
const [text, setText] =
|
|
940
|
+
const [open, setOpen] = React32.useState(false);
|
|
941
|
+
const [text, setText] = React32.useState(
|
|
942
942
|
value ? format(value, "dd/MM/yyyy") : ""
|
|
943
943
|
);
|
|
944
|
-
const containerRef =
|
|
945
|
-
const inputId =
|
|
946
|
-
|
|
944
|
+
const containerRef = React32.useRef(null);
|
|
945
|
+
const inputId = React32.useId();
|
|
946
|
+
React32.useEffect(() => {
|
|
947
947
|
setText(value ? format(value, "dd/MM/yyyy") : "");
|
|
948
948
|
}, [value]);
|
|
949
|
-
|
|
949
|
+
React32.useEffect(() => {
|
|
950
950
|
if (!open) return;
|
|
951
951
|
const handler = (e) => {
|
|
952
952
|
var _a;
|
|
@@ -1155,14 +1155,14 @@ function CountrySearchField({
|
|
|
1155
1155
|
}) {
|
|
1156
1156
|
var _a;
|
|
1157
1157
|
const list = countries != null ? countries : COUNTRIES;
|
|
1158
|
-
const [query, setQuery] =
|
|
1159
|
-
const [open, setOpen] =
|
|
1160
|
-
const containerRef =
|
|
1161
|
-
const searchRef =
|
|
1158
|
+
const [query, setQuery] = React32.useState("");
|
|
1159
|
+
const [open, setOpen] = React32.useState(false);
|
|
1160
|
+
const containerRef = React32.useRef(null);
|
|
1161
|
+
const searchRef = React32.useRef(null);
|
|
1162
1162
|
const selected = list.find((c) => c.code === value);
|
|
1163
1163
|
const isFloated = open || !!selected;
|
|
1164
1164
|
const filtered = query.trim() ? list.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : list;
|
|
1165
|
-
|
|
1165
|
+
React32.useEffect(() => {
|
|
1166
1166
|
if (!open) return;
|
|
1167
1167
|
const handler = (e) => {
|
|
1168
1168
|
var _a2;
|
|
@@ -1307,10 +1307,10 @@ function AdventureCard({
|
|
|
1307
1307
|
}) {
|
|
1308
1308
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
|
|
1309
1309
|
const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
|
|
1310
|
-
const [checkedInternal, setCheckedInternal] =
|
|
1310
|
+
const [checkedInternal, setCheckedInternal] = React32.useState(
|
|
1311
1311
|
new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
|
|
1312
1312
|
);
|
|
1313
|
-
const [openDescriptionId, setOpenDescriptionId] =
|
|
1313
|
+
const [openDescriptionId, setOpenDescriptionId] = React32.useState(null);
|
|
1314
1314
|
const openDescriptionOptional = openDescriptionId ? (_e = adventure.optionals) == null ? void 0 : _e.find((o) => o.id === openDescriptionId) : void 0;
|
|
1315
1315
|
const isChecked = (opt) => {
|
|
1316
1316
|
var _a2;
|
|
@@ -1766,7 +1766,7 @@ function BookingShell({
|
|
|
1766
1766
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
|
|
1767
1767
|
/* @__PURE__ */ jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
|
|
1768
1768
|
/* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: title }),
|
|
1769
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(
|
|
1769
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
1770
1770
|
/* @__PURE__ */ jsx(
|
|
1771
1771
|
"span",
|
|
1772
1772
|
{
|
|
@@ -1965,7 +1965,7 @@ function TermsSection({
|
|
|
1965
1965
|
termsContent
|
|
1966
1966
|
}) {
|
|
1967
1967
|
var _a;
|
|
1968
|
-
const [modalOpen, setModalOpen] =
|
|
1968
|
+
const [modalOpen, setModalOpen] = React32.useState(false);
|
|
1969
1969
|
const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
|
|
1970
1970
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
|
|
1971
1971
|
/* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
|
|
@@ -2103,9 +2103,9 @@ function BookingWizard({
|
|
|
2103
2103
|
}) {
|
|
2104
2104
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T;
|
|
2105
2105
|
const wizardSteps = WIZARD_STEPS_FN(labels);
|
|
2106
|
-
const [step, setStep] =
|
|
2107
|
-
const [error, setError] =
|
|
2108
|
-
const [responsible, setResponsible] =
|
|
2106
|
+
const [step, setStep] = React32.useState("responsible");
|
|
2107
|
+
const [error, setError] = React32.useState(null);
|
|
2108
|
+
const [responsible, setResponsible] = React32.useState({
|
|
2109
2109
|
firstName: "",
|
|
2110
2110
|
lastName: "",
|
|
2111
2111
|
email: "",
|
|
@@ -2124,7 +2124,7 @@ function BookingWizard({
|
|
|
2124
2124
|
return s + ((_b2 = (_a2 = a.slots) == null ? void 0 : _a2.children) != null ? _b2 : 0);
|
|
2125
2125
|
}, 0);
|
|
2126
2126
|
const totalPax = totalAdults + totalChildren;
|
|
2127
|
-
const [travellers, setTravellers] =
|
|
2127
|
+
const [travellers, setTravellers] = React32.useState(
|
|
2128
2128
|
Array.from({ length: Math.max(totalPax, 1) }, () => ({
|
|
2129
2129
|
firstName: "",
|
|
2130
2130
|
lastName: "",
|
|
@@ -2132,9 +2132,9 @@ function BookingWizard({
|
|
|
2132
2132
|
email: ""
|
|
2133
2133
|
}))
|
|
2134
2134
|
);
|
|
2135
|
-
const [payAmount, setPayAmount] =
|
|
2136
|
-
const [payMethod, setPayMethod] =
|
|
2137
|
-
const [termsAccepted, setTermsAccepted] =
|
|
2135
|
+
const [payAmount, setPayAmount] = React32.useState("full");
|
|
2136
|
+
const [payMethod, setPayMethod] = React32.useState("stripe");
|
|
2137
|
+
const [termsAccepted, setTermsAccepted] = React32.useState(false);
|
|
2138
2138
|
const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
|
|
2139
2139
|
const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
|
|
2140
2140
|
const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
|
|
@@ -2362,7 +2362,7 @@ function Offer({
|
|
|
2362
2362
|
className
|
|
2363
2363
|
}) {
|
|
2364
2364
|
var _a, _b, _c;
|
|
2365
|
-
const [showBooking, setShowBooking] =
|
|
2365
|
+
const [showBooking, setShowBooking] = React32.useState(false);
|
|
2366
2366
|
const isShowingCheckout = !confirmedState && (!!checkoutSlot || internalDemoCheckout && showBooking);
|
|
2367
2367
|
const handleBook = () => {
|
|
2368
2368
|
if (!checkoutSlot && !externalBookingFlow && internalDemoCheckout) {
|
|
@@ -2729,7 +2729,7 @@ function AdventureSection({
|
|
|
2729
2729
|
labels
|
|
2730
2730
|
}) {
|
|
2731
2731
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
|
|
2732
|
-
const [detailsOpen, setDetailsOpen] =
|
|
2732
|
+
const [detailsOpen, setDetailsOpen] = React32.useState(false);
|
|
2733
2733
|
const handleCopyUrl = (url) => {
|
|
2734
2734
|
if (onCopyFormLink) {
|
|
2735
2735
|
onCopyFormLink(url);
|
|
@@ -3268,8 +3268,8 @@ function AddTravellerDialog({
|
|
|
3268
3268
|
errorMessage
|
|
3269
3269
|
}) {
|
|
3270
3270
|
var _a, _b, _c, _d, _e;
|
|
3271
|
-
const [form, setForm] =
|
|
3272
|
-
|
|
3271
|
+
const [form, setForm] = React32.useState(() => createInitialAddFormData(config));
|
|
3272
|
+
React32.useEffect(() => {
|
|
3273
3273
|
if (open) {
|
|
3274
3274
|
setForm(createInitialAddFormData(config));
|
|
3275
3275
|
}
|
|
@@ -3329,7 +3329,7 @@ function EditTravellerDialog({
|
|
|
3329
3329
|
errorMessage
|
|
3330
3330
|
}) {
|
|
3331
3331
|
var _a, _b, _c, _d, _e;
|
|
3332
|
-
const [form, setForm] =
|
|
3332
|
+
const [form, setForm] = React32.useState(() => ({
|
|
3333
3333
|
firstName: "",
|
|
3334
3334
|
lastName: "",
|
|
3335
3335
|
email: "",
|
|
@@ -3338,7 +3338,7 @@ function EditTravellerDialog({
|
|
|
3338
3338
|
birthDate: "",
|
|
3339
3339
|
personType: "ADULT"
|
|
3340
3340
|
}));
|
|
3341
|
-
|
|
3341
|
+
React32.useEffect(() => {
|
|
3342
3342
|
var _a2, _b2, _c2, _d2, _e2, _f;
|
|
3343
3343
|
if (open && traveller) {
|
|
3344
3344
|
setForm({
|
|
@@ -3674,48 +3674,48 @@ function BookingDetails({
|
|
|
3674
3674
|
const hasSubmitAddTraveller = !!onSubmitAddTraveller;
|
|
3675
3675
|
const hasSubmitEditTraveller = !!onSubmitEditTraveller;
|
|
3676
3676
|
const hasConfirmRemoveTraveller = !!onConfirmRemoveTraveller;
|
|
3677
|
-
const [addModalState, setAddModalState] =
|
|
3677
|
+
const [addModalState, setAddModalState] = React32.useState({
|
|
3678
3678
|
open: false,
|
|
3679
3679
|
adventureId: null
|
|
3680
3680
|
});
|
|
3681
|
-
const [editModalState, setEditModalState] =
|
|
3682
|
-
const [deleteModalState, setDeleteModalState] =
|
|
3683
|
-
const [resendInviteDialogState, setResendInviteDialogState] =
|
|
3684
|
-
const handleRequestOpenAddModal =
|
|
3681
|
+
const [editModalState, setEditModalState] = React32.useState({ open: false, adventureId: null, traveller: null });
|
|
3682
|
+
const [deleteModalState, setDeleteModalState] = React32.useState({ open: false, adventureId: null, traveller: null });
|
|
3683
|
+
const [resendInviteDialogState, setResendInviteDialogState] = React32.useState({ open: false, traveller: null });
|
|
3684
|
+
const handleRequestOpenAddModal = React32.useCallback((adventureId) => {
|
|
3685
3685
|
setAddModalState({ open: true, adventureId });
|
|
3686
3686
|
}, []);
|
|
3687
|
-
const handleRequestOpenEditModal =
|
|
3687
|
+
const handleRequestOpenEditModal = React32.useCallback(
|
|
3688
3688
|
(adventureId, traveller) => {
|
|
3689
3689
|
setEditModalState({ open: true, adventureId, traveller });
|
|
3690
3690
|
},
|
|
3691
3691
|
[]
|
|
3692
3692
|
);
|
|
3693
|
-
const handleRequestOpenDeleteModal =
|
|
3693
|
+
const handleRequestOpenDeleteModal = React32.useCallback(
|
|
3694
3694
|
(adventureId, traveller) => {
|
|
3695
3695
|
setDeleteModalState({ open: true, adventureId, traveller });
|
|
3696
3696
|
},
|
|
3697
3697
|
[]
|
|
3698
3698
|
);
|
|
3699
|
-
const handleRequestOpenResendInviteDialog =
|
|
3699
|
+
const handleRequestOpenResendInviteDialog = React32.useCallback(
|
|
3700
3700
|
(traveller) => {
|
|
3701
3701
|
setResendInviteDialogState({ open: true, traveller });
|
|
3702
3702
|
},
|
|
3703
3703
|
[]
|
|
3704
3704
|
);
|
|
3705
|
-
const closeAddModal =
|
|
3705
|
+
const closeAddModal = React32.useCallback(() => {
|
|
3706
3706
|
setAddModalState({ open: false, adventureId: null });
|
|
3707
3707
|
}, []);
|
|
3708
|
-
const closeEditModal =
|
|
3708
|
+
const closeEditModal = React32.useCallback(() => {
|
|
3709
3709
|
setEditModalState({ open: false, adventureId: null, traveller: null });
|
|
3710
3710
|
}, []);
|
|
3711
|
-
const closeDeleteModal =
|
|
3711
|
+
const closeDeleteModal = React32.useCallback(() => {
|
|
3712
3712
|
setDeleteModalState({ open: false, adventureId: null, traveller: null });
|
|
3713
3713
|
}, []);
|
|
3714
|
-
const closeResendInviteDialog =
|
|
3714
|
+
const closeResendInviteDialog = React32.useCallback(() => {
|
|
3715
3715
|
setResendInviteDialogState({ open: false, traveller: null });
|
|
3716
3716
|
}, []);
|
|
3717
|
-
const submitInFlightRef =
|
|
3718
|
-
const handleAddSubmit =
|
|
3717
|
+
const submitInFlightRef = React32.useRef(false);
|
|
3718
|
+
const handleAddSubmit = React32.useCallback(
|
|
3719
3719
|
async (adventureId, data) => {
|
|
3720
3720
|
if (!onSubmitAddTraveller) return;
|
|
3721
3721
|
if (submitInFlightRef.current) return;
|
|
@@ -3730,7 +3730,7 @@ function BookingDetails({
|
|
|
3730
3730
|
},
|
|
3731
3731
|
[onSubmitAddTraveller, closeAddModal]
|
|
3732
3732
|
);
|
|
3733
|
-
const handleEditSubmit =
|
|
3733
|
+
const handleEditSubmit = React32.useCallback(
|
|
3734
3734
|
async (adventureId, travellerId, data) => {
|
|
3735
3735
|
if (!onSubmitEditTraveller) return;
|
|
3736
3736
|
if (submitInFlightRef.current) return;
|
|
@@ -3745,7 +3745,7 @@ function BookingDetails({
|
|
|
3745
3745
|
},
|
|
3746
3746
|
[onSubmitEditTraveller, closeEditModal]
|
|
3747
3747
|
);
|
|
3748
|
-
const handleDeleteConfirm =
|
|
3748
|
+
const handleDeleteConfirm = React32.useCallback(
|
|
3749
3749
|
async (adventureId, travellerId) => {
|
|
3750
3750
|
if (!onConfirmRemoveTraveller) return;
|
|
3751
3751
|
if (submitInFlightRef.current) return;
|
|
@@ -4146,6 +4146,7 @@ function BookingAdventureCard({
|
|
|
4146
4146
|
imageAlt,
|
|
4147
4147
|
location,
|
|
4148
4148
|
destination,
|
|
4149
|
+
partner,
|
|
4149
4150
|
included,
|
|
4150
4151
|
notIncluded,
|
|
4151
4152
|
lineItems,
|
|
@@ -4404,6 +4405,39 @@ function BookingAdventureCard({
|
|
|
4404
4405
|
] }) })
|
|
4405
4406
|
}
|
|
4406
4407
|
),
|
|
4408
|
+
partner && /* @__PURE__ */ jsx(
|
|
4409
|
+
"table",
|
|
4410
|
+
{
|
|
4411
|
+
cellPadding: 0,
|
|
4412
|
+
cellSpacing: 0,
|
|
4413
|
+
style: { borderCollapse: "collapse", marginBottom: "10px" },
|
|
4414
|
+
children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
4415
|
+
/* @__PURE__ */ jsx(
|
|
4416
|
+
"td",
|
|
4417
|
+
{
|
|
4418
|
+
style: {
|
|
4419
|
+
verticalAlign: "middle",
|
|
4420
|
+
paddingRight: "6px",
|
|
4421
|
+
width: "16px"
|
|
4422
|
+
},
|
|
4423
|
+
children: /* @__PURE__ */ jsx("span", { style: { display: "inline-block", fontSize: "14px", lineHeight: "1" }, children: "\u{1F91D}" })
|
|
4424
|
+
}
|
|
4425
|
+
),
|
|
4426
|
+
/* @__PURE__ */ jsx(
|
|
4427
|
+
"td",
|
|
4428
|
+
{
|
|
4429
|
+
style: {
|
|
4430
|
+
verticalAlign: "middle",
|
|
4431
|
+
fontSize: "14px",
|
|
4432
|
+
color: emailTokens.mutedForeground,
|
|
4433
|
+
lineHeight: "1"
|
|
4434
|
+
},
|
|
4435
|
+
children: partner
|
|
4436
|
+
}
|
|
4437
|
+
)
|
|
4438
|
+
] }) })
|
|
4439
|
+
}
|
|
4440
|
+
),
|
|
4407
4441
|
hasTravellers && /* @__PURE__ */ jsxs("div", { style: { marginTop: "4px" }, children: [
|
|
4408
4442
|
/* @__PURE__ */ jsx(
|
|
4409
4443
|
"hr",
|
|
@@ -5280,6 +5314,7 @@ function BookingPaymentConfirmationEmail({
|
|
|
5280
5314
|
imageAlt: adventure.imageAlt,
|
|
5281
5315
|
location: locationToPass,
|
|
5282
5316
|
destination: destinationToPass,
|
|
5317
|
+
partner: adventure.partnerName,
|
|
5283
5318
|
included: adventure.included,
|
|
5284
5319
|
notIncluded: adventure.notIncluded,
|
|
5285
5320
|
lineItems: lineItemsToPass,
|
|
@@ -5507,7 +5542,7 @@ function BookingCreatedEmail({
|
|
|
5507
5542
|
}, children: i + 1 }) }),
|
|
5508
5543
|
/* @__PURE__ */ jsx("td", { style: { verticalAlign: "top" }, children: /* @__PURE__ */ jsx("p", { style: { fontSize: "14px", color: emailTokens.bodyText, lineHeight: "1.6", margin: 0 }, children: step }) })
|
|
5509
5544
|
] }) }) }, i)) }),
|
|
5510
|
-
nextStepsImportant && nextStepsImportant.trim().length > 0 && /* @__PURE__ */ jsx("p", { style: { marginBottom: "32px", fontSize: "14px", color: emailTokens.foreground, lineHeight: "1.6" }, children: nextStepsImportant.split("\n").map((line, idx, arr) => /* @__PURE__ */ jsxs(
|
|
5545
|
+
nextStepsImportant && nextStepsImportant.trim().length > 0 && /* @__PURE__ */ jsx("p", { style: { marginBottom: "32px", fontSize: "14px", color: emailTokens.foreground, lineHeight: "1.6" }, children: nextStepsImportant.split("\n").map((line, idx, arr) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
5511
5546
|
idx === 0 ? /* @__PURE__ */ jsx("strong", { children: line }) : line,
|
|
5512
5547
|
idx < arr.length - 1 ? /* @__PURE__ */ jsx("br", {}) : null
|
|
5513
5548
|
] }, idx)) })
|
|
@@ -6443,6 +6478,8 @@ var DEFAULT_LABELS8 = {
|
|
|
6443
6478
|
adventureLabel: "Adventure",
|
|
6444
6479
|
datesLabel: "Dates",
|
|
6445
6480
|
partnerLabel: "Partner",
|
|
6481
|
+
bookingPersonLabel: "Booking person",
|
|
6482
|
+
passportLabel: "Passport",
|
|
6446
6483
|
expectationsHeading: "Travellers Expectations",
|
|
6447
6484
|
expectationsEmptyNote: "No expectations were collected for this adventure.",
|
|
6448
6485
|
expectationsEmptyAnswer: "\u2014",
|
|
@@ -6470,6 +6507,8 @@ function PartnerRegistrationCompleteEmail({
|
|
|
6470
6507
|
bookingNumber,
|
|
6471
6508
|
adventureName,
|
|
6472
6509
|
dateRange,
|
|
6510
|
+
bookingPersonName,
|
|
6511
|
+
bookingPersonPassport,
|
|
6473
6512
|
travellersCount,
|
|
6474
6513
|
expectations,
|
|
6475
6514
|
pdfAttached,
|
|
@@ -6483,7 +6522,9 @@ function PartnerRegistrationCompleteEmail({
|
|
|
6483
6522
|
{ label: l.bookingNumberLabel, value: `#${bookingNumber}`, valueColor: emailTokens.primary },
|
|
6484
6523
|
{ label: l.adventureLabel, value: adventureName },
|
|
6485
6524
|
{ label: l.datesLabel, value: dateRange },
|
|
6486
|
-
{ label: l.partnerLabel, value: partnerName }
|
|
6525
|
+
{ label: l.partnerLabel, value: partnerName },
|
|
6526
|
+
...hasText4(bookingPersonName) ? [{ label: l.bookingPersonLabel, value: bookingPersonName }] : [],
|
|
6527
|
+
...hasText4(bookingPersonPassport) ? [{ label: l.passportLabel, value: bookingPersonPassport }] : []
|
|
6487
6528
|
];
|
|
6488
6529
|
const sectionDivider = /* @__PURE__ */ jsx(
|
|
6489
6530
|
"hr",
|
|
@@ -6799,6 +6840,7 @@ var DEFAULT_LABELS10 = {
|
|
|
6799
6840
|
interestSurchargeLabel: "Interest / surcharge",
|
|
6800
6841
|
statusLabel: "Status",
|
|
6801
6842
|
travellersLabel: "Travellers",
|
|
6843
|
+
passportLabel: "Passport",
|
|
6802
6844
|
summaryHeading: "Booking summary",
|
|
6803
6845
|
totalOrderLabel: "Total order",
|
|
6804
6846
|
totalPaidLabel: "Total paid",
|
|
@@ -6817,6 +6859,7 @@ function PaymentReceiptEmail({
|
|
|
6817
6859
|
chargedAmount,
|
|
6818
6860
|
statusLabel,
|
|
6819
6861
|
travellers,
|
|
6862
|
+
passport,
|
|
6820
6863
|
totalOrderAmount,
|
|
6821
6864
|
totalPaidCumulative,
|
|
6822
6865
|
remainingBalance,
|
|
@@ -6837,7 +6880,8 @@ function PaymentReceiptEmail({
|
|
|
6837
6880
|
{ label: l.amountLabel, value: amount },
|
|
6838
6881
|
...interestRow ? [{ label: l.chargedAmountLabel, value: chargedAmount }] : [],
|
|
6839
6882
|
{ label: l.statusLabel, value: statusLabel },
|
|
6840
|
-
...travellersLine.length > 0 ? [{ label: l.travellersLabel, value: travellersLine }] : []
|
|
6883
|
+
...travellersLine.length > 0 ? [{ label: l.travellersLabel, value: travellersLine }] : [],
|
|
6884
|
+
...passport && passport.trim().length > 0 ? [{ label: l.passportLabel, value: passport.trim() }] : []
|
|
6841
6885
|
];
|
|
6842
6886
|
const summaryRows = [
|
|
6843
6887
|
{ label: l.totalOrderLabel, value: totalOrderAmount },
|
|
@@ -7867,11 +7911,11 @@ function DatePickerField({
|
|
|
7867
7911
|
fromDate,
|
|
7868
7912
|
className
|
|
7869
7913
|
}) {
|
|
7870
|
-
const [open, setOpen] =
|
|
7871
|
-
const containerRef =
|
|
7872
|
-
const [calendarWidth, setCalendarWidth] =
|
|
7914
|
+
const [open, setOpen] = React32.useState(false);
|
|
7915
|
+
const containerRef = React32.useRef(null);
|
|
7916
|
+
const [calendarWidth, setCalendarWidth] = React32.useState();
|
|
7873
7917
|
const hasValue = !!value;
|
|
7874
|
-
|
|
7918
|
+
React32.useEffect(() => {
|
|
7875
7919
|
if (!containerRef.current) return;
|
|
7876
7920
|
const observer = new ResizeObserver(([entry]) => {
|
|
7877
7921
|
setCalendarWidth(entry.contentRect.width);
|
|
@@ -7980,7 +8024,7 @@ function BookingForm({
|
|
|
7980
8024
|
subtitle = "Free enquiry \u2013 no commitment",
|
|
7981
8025
|
className
|
|
7982
8026
|
}) {
|
|
7983
|
-
const [values, setValues] =
|
|
8027
|
+
const [values, setValues] = React32.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
7984
8028
|
const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
7985
8029
|
const handleSubmit = (e) => {
|
|
7986
8030
|
e.preventDefault();
|
|
@@ -8548,11 +8592,11 @@ function FloatingTextarea({
|
|
|
8548
8592
|
}
|
|
8549
8593
|
function SelectField({ field, value, onChange, error, disabled }) {
|
|
8550
8594
|
var _a, _b, _c;
|
|
8551
|
-
const [open, setOpen] =
|
|
8552
|
-
const containerRef =
|
|
8595
|
+
const [open, setOpen] = React32.useState(false);
|
|
8596
|
+
const containerRef = React32.useRef(null);
|
|
8553
8597
|
const options = (_a = field.options) != null ? _a : [];
|
|
8554
8598
|
const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
|
|
8555
|
-
|
|
8599
|
+
React32.useEffect(() => {
|
|
8556
8600
|
if (!open) return;
|
|
8557
8601
|
const handleOutside = (e) => {
|
|
8558
8602
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -9020,11 +9064,11 @@ function RegistrationForm({
|
|
|
9020
9064
|
readOnly = false
|
|
9021
9065
|
}) {
|
|
9022
9066
|
var _a;
|
|
9023
|
-
const L =
|
|
9067
|
+
const L = React32.useMemo(
|
|
9024
9068
|
() => __spreadValues(__spreadValues({}, DEFAULT_LABELS12), labels != null ? labels : {}),
|
|
9025
9069
|
[labels]
|
|
9026
9070
|
);
|
|
9027
|
-
const sortedFields =
|
|
9071
|
+
const sortedFields = React32.useMemo(
|
|
9028
9072
|
() => [...fields].sort((a, b) => {
|
|
9029
9073
|
var _a2, _b;
|
|
9030
9074
|
return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
|
|
@@ -9032,7 +9076,7 @@ function RegistrationForm({
|
|
|
9032
9076
|
[fields]
|
|
9033
9077
|
);
|
|
9034
9078
|
const isControlled = values !== void 0;
|
|
9035
|
-
const [internal, setInternal] =
|
|
9079
|
+
const [internal, setInternal] = React32.useState(
|
|
9036
9080
|
() => initializeValues(
|
|
9037
9081
|
sortedFields,
|
|
9038
9082
|
defaultValues != null ? defaultValues : {},
|
|
@@ -9040,9 +9084,9 @@ function RegistrationForm({
|
|
|
9040
9084
|
includeTerms
|
|
9041
9085
|
)
|
|
9042
9086
|
);
|
|
9043
|
-
const [submitAttempted, setSubmitAttempted] =
|
|
9044
|
-
const [validationErrors, setValidationErrors] =
|
|
9045
|
-
|
|
9087
|
+
const [submitAttempted, setSubmitAttempted] = React32.useState(false);
|
|
9088
|
+
const [validationErrors, setValidationErrors] = React32.useState({});
|
|
9089
|
+
React32.useEffect(() => {
|
|
9046
9090
|
if (isControlled) return;
|
|
9047
9091
|
setInternal((prev) => {
|
|
9048
9092
|
const next = initializeValues(
|
|
@@ -9099,7 +9143,7 @@ function RegistrationForm({
|
|
|
9099
9143
|
const termsError = submitAttempted && termsEnabled && !termsAccepted;
|
|
9100
9144
|
const firstErrorFieldId = Object.keys(fieldErrors)[0];
|
|
9101
9145
|
const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
|
|
9102
|
-
|
|
9146
|
+
React32.useEffect(() => {
|
|
9103
9147
|
if (!submitAttempted || !scrollTargetId) return;
|
|
9104
9148
|
const timer = setTimeout(() => {
|
|
9105
9149
|
const elem = document.getElementById(scrollTargetId);
|
|
@@ -9552,6 +9596,281 @@ function RegistrationSuccessCard({
|
|
|
9552
9596
|
}
|
|
9553
9597
|
);
|
|
9554
9598
|
}
|
|
9599
|
+
var OTHER = "OTHER";
|
|
9600
|
+
function SectionHeading({ children }) {
|
|
9601
|
+
return /* @__PURE__ */ jsx("h2", { className: "text-lg font-heading font-bold text-foreground mb-3", children });
|
|
9602
|
+
}
|
|
9603
|
+
function FieldError({ children }) {
|
|
9604
|
+
if (!children) return null;
|
|
9605
|
+
return /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children });
|
|
9606
|
+
}
|
|
9607
|
+
function CancellationForm({
|
|
9608
|
+
adventures,
|
|
9609
|
+
identity,
|
|
9610
|
+
labels,
|
|
9611
|
+
onSubmit,
|
|
9612
|
+
submitting = false,
|
|
9613
|
+
error,
|
|
9614
|
+
className
|
|
9615
|
+
}) {
|
|
9616
|
+
var _a, _b, _c;
|
|
9617
|
+
const [selectedAdventureIds, setSelectedAdventureIds] = React32.useState(/* @__PURE__ */ new Set());
|
|
9618
|
+
const [participantsByAdventure, setParticipantsByAdventure] = React32.useState({});
|
|
9619
|
+
const [reasonCode, setReasonCode] = React32.useState("");
|
|
9620
|
+
const [reasonOther, setReasonOther] = React32.useState("");
|
|
9621
|
+
const [refundPreference, setRefundPreference] = React32.useState("");
|
|
9622
|
+
const [refundOther, setRefundOther] = React32.useState("");
|
|
9623
|
+
const [agreedToPolicy, setAgreedToPolicy] = React32.useState(false);
|
|
9624
|
+
const [contactName, setContactName] = React32.useState((_a = identity == null ? void 0 : identity.name) != null ? _a : "");
|
|
9625
|
+
const [contactEmail, setContactEmail] = React32.useState((_b = identity == null ? void 0 : identity.email) != null ? _b : "");
|
|
9626
|
+
const [contactPhone, setContactPhone] = React32.useState((_c = identity == null ? void 0 : identity.phone) != null ? _c : "");
|
|
9627
|
+
const [errors, setErrors] = React32.useState({});
|
|
9628
|
+
const allParticipantsOf = React32.useCallback(
|
|
9629
|
+
(advId) => {
|
|
9630
|
+
var _a2, _b2;
|
|
9631
|
+
return new Set(((_b2 = (_a2 = adventures.find((a) => a.id === advId)) == null ? void 0 : _a2.participants) != null ? _b2 : []).map((p) => p.id));
|
|
9632
|
+
},
|
|
9633
|
+
[adventures]
|
|
9634
|
+
);
|
|
9635
|
+
function toggleAdventure(advId, on) {
|
|
9636
|
+
setSelectedAdventureIds((prev) => {
|
|
9637
|
+
const next = new Set(prev);
|
|
9638
|
+
if (on) next.add(advId);
|
|
9639
|
+
else next.delete(advId);
|
|
9640
|
+
return next;
|
|
9641
|
+
});
|
|
9642
|
+
setParticipantsByAdventure((prev) => {
|
|
9643
|
+
const next = __spreadValues({}, prev);
|
|
9644
|
+
if (on) next[advId] = allParticipantsOf(advId);
|
|
9645
|
+
else delete next[advId];
|
|
9646
|
+
return next;
|
|
9647
|
+
});
|
|
9648
|
+
}
|
|
9649
|
+
function toggleParticipant(advId, travellerId, on) {
|
|
9650
|
+
setParticipantsByAdventure((prev) => {
|
|
9651
|
+
var _a2;
|
|
9652
|
+
const set = new Set((_a2 = prev[advId]) != null ? _a2 : []);
|
|
9653
|
+
if (on) set.add(travellerId);
|
|
9654
|
+
else set.delete(travellerId);
|
|
9655
|
+
return __spreadProps(__spreadValues({}, prev), { [advId]: set });
|
|
9656
|
+
});
|
|
9657
|
+
}
|
|
9658
|
+
function selectAll() {
|
|
9659
|
+
const allAdv = new Set(adventures.map((a) => a.id));
|
|
9660
|
+
const byAdv = {};
|
|
9661
|
+
for (const a of adventures) byAdv[a.id] = new Set(a.participants.map((p) => p.id));
|
|
9662
|
+
setSelectedAdventureIds(allAdv);
|
|
9663
|
+
setParticipantsByAdventure(byAdv);
|
|
9664
|
+
}
|
|
9665
|
+
const allSelected = adventures.length > 0 && adventures.every((a) => selectedAdventureIds.has(a.id));
|
|
9666
|
+
function validate() {
|
|
9667
|
+
var _a2;
|
|
9668
|
+
const next = {};
|
|
9669
|
+
const selAdvIds = adventures.filter((a) => selectedAdventureIds.has(a.id)).map((a) => a.id);
|
|
9670
|
+
if (selAdvIds.length === 0) next.adventures = labels.errorSelectAdventure;
|
|
9671
|
+
for (const advId of selAdvIds) {
|
|
9672
|
+
const set = participantsByAdventure[advId];
|
|
9673
|
+
if (!set || set.size === 0) next.participants = labels.errorSelectParticipants;
|
|
9674
|
+
}
|
|
9675
|
+
if (!reasonCode) next.reason = labels.errorReasonRequired;
|
|
9676
|
+
else if (reasonCode === OTHER && !reasonOther.trim()) next.reason = labels.errorReasonOtherRequired;
|
|
9677
|
+
if (!refundPreference) next.refund = labels.errorRefundRequired;
|
|
9678
|
+
else if (refundPreference === OTHER && !refundOther.trim())
|
|
9679
|
+
next.refund = labels.errorRefundOtherRequired;
|
|
9680
|
+
if (!agreedToPolicy) next.agreement = labels.errorAgreementRequired;
|
|
9681
|
+
setErrors(next);
|
|
9682
|
+
if (Object.keys(next).length > 0) return { ok: false };
|
|
9683
|
+
const travellerIds = /* @__PURE__ */ new Set();
|
|
9684
|
+
for (const advId of selAdvIds) {
|
|
9685
|
+
for (const tid of (_a2 = participantsByAdventure[advId]) != null ? _a2 : []) travellerIds.add(tid);
|
|
9686
|
+
}
|
|
9687
|
+
return {
|
|
9688
|
+
ok: true,
|
|
9689
|
+
values: {
|
|
9690
|
+
selectedBookingAdventureIds: selAdvIds,
|
|
9691
|
+
selectedTravellerIds: [...travellerIds],
|
|
9692
|
+
reasonCode,
|
|
9693
|
+
reasonOther: reasonCode === OTHER ? reasonOther.trim() : "",
|
|
9694
|
+
refundPreference,
|
|
9695
|
+
refundOther: refundPreference === OTHER ? refundOther.trim() : "",
|
|
9696
|
+
agreedToPolicy,
|
|
9697
|
+
contact: { name: contactName.trim(), email: contactEmail.trim(), phone: contactPhone.trim() }
|
|
9698
|
+
}
|
|
9699
|
+
};
|
|
9700
|
+
}
|
|
9701
|
+
function handleSubmit(e) {
|
|
9702
|
+
e.preventDefault();
|
|
9703
|
+
const r = validate();
|
|
9704
|
+
if (r.ok && r.values) void onSubmit(r.values);
|
|
9705
|
+
}
|
|
9706
|
+
return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: cn("space-y-8", className), noValidate: true, children: [
|
|
9707
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
9708
|
+
/* @__PURE__ */ jsx(SectionHeading, { children: labels.identityHeading }),
|
|
9709
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3", children: [
|
|
9710
|
+
/* @__PURE__ */ jsx(
|
|
9711
|
+
FloatingInput,
|
|
9712
|
+
{
|
|
9713
|
+
label: labels.contactNameLabel,
|
|
9714
|
+
value: contactName,
|
|
9715
|
+
onChange: (e) => setContactName(e.target.value)
|
|
9716
|
+
}
|
|
9717
|
+
),
|
|
9718
|
+
/* @__PURE__ */ jsx(
|
|
9719
|
+
FloatingInput,
|
|
9720
|
+
{
|
|
9721
|
+
label: labels.contactEmailLabel,
|
|
9722
|
+
type: "email",
|
|
9723
|
+
value: contactEmail,
|
|
9724
|
+
onChange: (e) => setContactEmail(e.target.value)
|
|
9725
|
+
}
|
|
9726
|
+
),
|
|
9727
|
+
/* @__PURE__ */ jsx(
|
|
9728
|
+
FloatingInput,
|
|
9729
|
+
{
|
|
9730
|
+
label: labels.contactPhoneLabel,
|
|
9731
|
+
value: contactPhone,
|
|
9732
|
+
onChange: (e) => setContactPhone(e.target.value)
|
|
9733
|
+
}
|
|
9734
|
+
)
|
|
9735
|
+
] })
|
|
9736
|
+
] }),
|
|
9737
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
9738
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 mb-3", children: [
|
|
9739
|
+
/* @__PURE__ */ jsx(SectionHeading, { children: labels.adventuresHeading }),
|
|
9740
|
+
adventures.length > 1 && /* @__PURE__ */ jsx(Button, { type: "button", variant: "link", size: "sm", onClick: selectAll, disabled: allSelected, children: labels.selectAllLabel })
|
|
9741
|
+
] }),
|
|
9742
|
+
labels.adventuresHint && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-3", children: labels.adventuresHint }),
|
|
9743
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: adventures.map((adv) => {
|
|
9744
|
+
var _a2;
|
|
9745
|
+
const selected = selectedAdventureIds.has(adv.id);
|
|
9746
|
+
const partSet = (_a2 = participantsByAdventure[adv.id]) != null ? _a2 : /* @__PURE__ */ new Set();
|
|
9747
|
+
return /* @__PURE__ */ jsxs(
|
|
9748
|
+
"div",
|
|
9749
|
+
{
|
|
9750
|
+
className: cn(
|
|
9751
|
+
"rounded-lg border p-4 transition-colors",
|
|
9752
|
+
selected ? "border-primary bg-primary/5" : "border-border bg-card"
|
|
9753
|
+
),
|
|
9754
|
+
children: [
|
|
9755
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
|
|
9756
|
+
/* @__PURE__ */ jsx(
|
|
9757
|
+
"input",
|
|
9758
|
+
{
|
|
9759
|
+
type: "checkbox",
|
|
9760
|
+
className: "mt-1 h-4 w-4 accent-primary",
|
|
9761
|
+
checked: selected,
|
|
9762
|
+
onChange: (e) => toggleAdventure(adv.id, e.target.checked)
|
|
9763
|
+
}
|
|
9764
|
+
),
|
|
9765
|
+
/* @__PURE__ */ jsxs("span", { className: "flex-1", children: [
|
|
9766
|
+
/* @__PURE__ */ jsx("span", { className: "block font-ui font-medium text-foreground", children: adv.name }),
|
|
9767
|
+
adv.dateRange && /* @__PURE__ */ jsx("span", { className: "block text-sm text-muted-foreground", children: adv.dateRange })
|
|
9768
|
+
] })
|
|
9769
|
+
] }),
|
|
9770
|
+
selected && /* @__PURE__ */ jsxs("div", { className: "mt-4 pl-7 space-y-4", children: [
|
|
9771
|
+
adv.cancellationPolicy && /* @__PURE__ */ jsxs("div", { className: "rounded-md bg-muted/50 border border-border p-3", children: [
|
|
9772
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-1", children: labels.policyHeading }),
|
|
9773
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-foreground whitespace-pre-line", children: adv.cancellationPolicy })
|
|
9774
|
+
] }),
|
|
9775
|
+
adv.participants.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
9776
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-2", children: labels.participantsHeading }),
|
|
9777
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1.5", children: adv.participants.map((p) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
9778
|
+
/* @__PURE__ */ jsx(
|
|
9779
|
+
"input",
|
|
9780
|
+
{
|
|
9781
|
+
type: "checkbox",
|
|
9782
|
+
className: "h-4 w-4 accent-primary",
|
|
9783
|
+
checked: partSet.has(p.id),
|
|
9784
|
+
onChange: (e) => toggleParticipant(adv.id, p.id, e.target.checked)
|
|
9785
|
+
}
|
|
9786
|
+
),
|
|
9787
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: p.name })
|
|
9788
|
+
] }, p.id)) })
|
|
9789
|
+
] })
|
|
9790
|
+
] })
|
|
9791
|
+
]
|
|
9792
|
+
},
|
|
9793
|
+
adv.id
|
|
9794
|
+
);
|
|
9795
|
+
}) }),
|
|
9796
|
+
/* @__PURE__ */ jsx(FieldError, { children: errors.adventures }),
|
|
9797
|
+
/* @__PURE__ */ jsx(FieldError, { children: errors.participants })
|
|
9798
|
+
] }),
|
|
9799
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
9800
|
+
/* @__PURE__ */ jsx(SectionHeading, { children: labels.reasonHeading }),
|
|
9801
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-2", children: labels.reasonOptions.map((opt) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
9802
|
+
/* @__PURE__ */ jsx(
|
|
9803
|
+
"input",
|
|
9804
|
+
{
|
|
9805
|
+
type: "radio",
|
|
9806
|
+
name: "cancellation-reason",
|
|
9807
|
+
className: "h-4 w-4 accent-primary",
|
|
9808
|
+
checked: reasonCode === opt.value,
|
|
9809
|
+
onChange: () => setReasonCode(opt.value)
|
|
9810
|
+
}
|
|
9811
|
+
),
|
|
9812
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: opt.label })
|
|
9813
|
+
] }, opt.value)) }),
|
|
9814
|
+
reasonCode === OTHER && /* @__PURE__ */ jsx(
|
|
9815
|
+
"textarea",
|
|
9816
|
+
{
|
|
9817
|
+
className: "mt-3 w-full rounded-lg border border-border bg-background px-3 py-2 text-base text-foreground font-ui focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
9818
|
+
rows: 3,
|
|
9819
|
+
placeholder: labels.reasonOtherLabel,
|
|
9820
|
+
value: reasonOther,
|
|
9821
|
+
onChange: (e) => setReasonOther(e.target.value),
|
|
9822
|
+
maxLength: 1e3
|
|
9823
|
+
}
|
|
9824
|
+
),
|
|
9825
|
+
/* @__PURE__ */ jsx(FieldError, { children: errors.reason })
|
|
9826
|
+
] }),
|
|
9827
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
9828
|
+
/* @__PURE__ */ jsx(SectionHeading, { children: labels.refundHeading }),
|
|
9829
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-2", children: labels.refundOptions.map((opt) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
|
|
9830
|
+
/* @__PURE__ */ jsx(
|
|
9831
|
+
"input",
|
|
9832
|
+
{
|
|
9833
|
+
type: "radio",
|
|
9834
|
+
name: "cancellation-refund",
|
|
9835
|
+
className: "h-4 w-4 accent-primary",
|
|
9836
|
+
checked: refundPreference === opt.value,
|
|
9837
|
+
onChange: () => setRefundPreference(opt.value)
|
|
9838
|
+
}
|
|
9839
|
+
),
|
|
9840
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: opt.label })
|
|
9841
|
+
] }, opt.value)) }),
|
|
9842
|
+
refundPreference === OTHER && /* @__PURE__ */ jsx(
|
|
9843
|
+
"textarea",
|
|
9844
|
+
{
|
|
9845
|
+
className: "mt-3 w-full rounded-lg border border-border bg-background px-3 py-2 text-base text-foreground font-ui focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
9846
|
+
rows: 3,
|
|
9847
|
+
placeholder: labels.refundOtherLabel,
|
|
9848
|
+
value: refundOther,
|
|
9849
|
+
onChange: (e) => setRefundOther(e.target.value),
|
|
9850
|
+
maxLength: 1e3
|
|
9851
|
+
}
|
|
9852
|
+
),
|
|
9853
|
+
/* @__PURE__ */ jsx(FieldError, { children: errors.refund })
|
|
9854
|
+
] }),
|
|
9855
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
9856
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
|
|
9857
|
+
/* @__PURE__ */ jsx(
|
|
9858
|
+
"input",
|
|
9859
|
+
{
|
|
9860
|
+
type: "checkbox",
|
|
9861
|
+
className: "mt-1 h-4 w-4 accent-primary",
|
|
9862
|
+
checked: agreedToPolicy,
|
|
9863
|
+
onChange: (e) => setAgreedToPolicy(e.target.checked)
|
|
9864
|
+
}
|
|
9865
|
+
),
|
|
9866
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-foreground", children: labels.agreementLabel })
|
|
9867
|
+
] }),
|
|
9868
|
+
/* @__PURE__ */ jsx(FieldError, { children: errors.agreement })
|
|
9869
|
+
] }),
|
|
9870
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive font-ui", role: "alert", children: error }),
|
|
9871
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", variant: "destructive", size: "lg", disabled: submitting, className: "w-full", children: submitting ? labels.submittingLabel : labels.submitLabel })
|
|
9872
|
+
] });
|
|
9873
|
+
}
|
|
9555
9874
|
var OTPCodeInput = ({
|
|
9556
9875
|
value,
|
|
9557
9876
|
onChange,
|
|
@@ -9563,10 +9882,10 @@ var OTPCodeInput = ({
|
|
|
9563
9882
|
id,
|
|
9564
9883
|
required
|
|
9565
9884
|
}) => {
|
|
9566
|
-
const baseId = id != null ? id :
|
|
9567
|
-
const inputRef =
|
|
9568
|
-
const [focused, setFocused] =
|
|
9569
|
-
const digits =
|
|
9885
|
+
const baseId = id != null ? id : React32.useId();
|
|
9886
|
+
const inputRef = React32.useRef(null);
|
|
9887
|
+
const [focused, setFocused] = React32.useState(false);
|
|
9888
|
+
const digits = React32.useMemo(() => {
|
|
9570
9889
|
const arr = value.split("").slice(0, length);
|
|
9571
9890
|
while (arr.length < length) arr.push("");
|
|
9572
9891
|
return arr;
|
|
@@ -9679,7 +9998,7 @@ function Checkbox(_a) {
|
|
|
9679
9998
|
})
|
|
9680
9999
|
);
|
|
9681
10000
|
}
|
|
9682
|
-
var AccordionVariantContext =
|
|
10001
|
+
var AccordionVariantContext = React32.createContext("default");
|
|
9683
10002
|
function Accordion(_a) {
|
|
9684
10003
|
var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
|
|
9685
10004
|
return /* @__PURE__ */ jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
|
|
@@ -9697,7 +10016,7 @@ function Accordion(_a) {
|
|
|
9697
10016
|
}
|
|
9698
10017
|
function AccordionItem(_a) {
|
|
9699
10018
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
9700
|
-
const variant =
|
|
10019
|
+
const variant = React32.useContext(AccordionVariantContext);
|
|
9701
10020
|
return /* @__PURE__ */ jsx(
|
|
9702
10021
|
Accordion$1.Item,
|
|
9703
10022
|
__spreadValues({
|
|
@@ -9718,7 +10037,7 @@ function AccordionTrigger(_a) {
|
|
|
9718
10037
|
"className",
|
|
9719
10038
|
"children"
|
|
9720
10039
|
]);
|
|
9721
|
-
const variant =
|
|
10040
|
+
const variant = React32.useContext(AccordionVariantContext);
|
|
9722
10041
|
return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
9723
10042
|
Accordion$1.Trigger,
|
|
9724
10043
|
__spreadProps(__spreadValues({
|
|
@@ -9772,7 +10091,7 @@ function AccordionContent(_a) {
|
|
|
9772
10091
|
"className",
|
|
9773
10092
|
"children"
|
|
9774
10093
|
]);
|
|
9775
|
-
const variant =
|
|
10094
|
+
const variant = React32.useContext(AccordionVariantContext);
|
|
9776
10095
|
return /* @__PURE__ */ jsx(
|
|
9777
10096
|
Accordion$1.Panel,
|
|
9778
10097
|
__spreadProps(__spreadValues({
|
|
@@ -9990,15 +10309,15 @@ function FilterPanel({
|
|
|
9990
10309
|
onSortChange
|
|
9991
10310
|
}) {
|
|
9992
10311
|
var _a, _b;
|
|
9993
|
-
const resolvedGroups =
|
|
9994
|
-
const [internalValue, setInternalValue] =
|
|
10312
|
+
const resolvedGroups = React32.useMemo(() => resolveGroups(groups), [groups]);
|
|
10313
|
+
const [internalValue, setInternalValue] = React32.useState(
|
|
9995
10314
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
9996
10315
|
);
|
|
9997
10316
|
const selected = value != null ? value : internalValue;
|
|
9998
|
-
const [expandedItems, setExpandedItems] =
|
|
10317
|
+
const [expandedItems, setExpandedItems] = React32.useState(
|
|
9999
10318
|
() => new Set(groups.flatMap((g) => getDefaultExpandedIds(g.items)))
|
|
10000
10319
|
);
|
|
10001
|
-
const toggleExpanded =
|
|
10320
|
+
const toggleExpanded = React32.useCallback((id) => {
|
|
10002
10321
|
setExpandedItems((prev) => {
|
|
10003
10322
|
const next = new Set(prev);
|
|
10004
10323
|
if (next.has(id)) next.delete(id);
|
|
@@ -10382,11 +10701,11 @@ function FilterPanel({
|
|
|
10382
10701
|
var TRUSTPILOT_SCRIPT_SRC = "https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js";
|
|
10383
10702
|
function TrustpilotEmbed({ config }) {
|
|
10384
10703
|
var _a, _b, _c, _d, _e, _f;
|
|
10385
|
-
const ref =
|
|
10386
|
-
const [widgetReady, setWidgetReady] =
|
|
10387
|
-
const [delayPassed, setDelayPassed] =
|
|
10704
|
+
const ref = React32.useRef(null);
|
|
10705
|
+
const [widgetReady, setWidgetReady] = React32.useState(false);
|
|
10706
|
+
const [delayPassed, setDelayPassed] = React32.useState(false);
|
|
10388
10707
|
const showFallback = delayPassed && !widgetReady;
|
|
10389
|
-
|
|
10708
|
+
React32.useEffect(() => {
|
|
10390
10709
|
var _a2;
|
|
10391
10710
|
if (typeof document === "undefined" || !ref.current) return;
|
|
10392
10711
|
const node = ref.current;
|
|
@@ -10574,7 +10893,7 @@ function webpVariantUrl(src) {
|
|
|
10574
10893
|
return `${withoutQuery}.webp${query}`;
|
|
10575
10894
|
}
|
|
10576
10895
|
function PictureLoader() {
|
|
10577
|
-
const gradientId =
|
|
10896
|
+
const gradientId = React32.useId();
|
|
10578
10897
|
return /* @__PURE__ */ jsx(
|
|
10579
10898
|
"span",
|
|
10580
10899
|
{
|
|
@@ -10644,10 +10963,10 @@ function Picture(_a) {
|
|
|
10644
10963
|
"onError"
|
|
10645
10964
|
]);
|
|
10646
10965
|
var _a2;
|
|
10647
|
-
const ref =
|
|
10648
|
-
const [visible, setVisible] =
|
|
10649
|
-
const [loaded, setLoaded] =
|
|
10650
|
-
|
|
10966
|
+
const ref = React32.useRef(null);
|
|
10967
|
+
const [visible, setVisible] = React32.useState(eager);
|
|
10968
|
+
const [loaded, setLoaded] = React32.useState(false);
|
|
10969
|
+
React32.useEffect(() => {
|
|
10651
10970
|
if (eager || visible) return;
|
|
10652
10971
|
const el = ref.current;
|
|
10653
10972
|
if (!el || typeof IntersectionObserver === "undefined") {
|
|
@@ -10666,7 +10985,7 @@ function Picture(_a) {
|
|
|
10666
10985
|
io.observe(el);
|
|
10667
10986
|
return () => io.disconnect();
|
|
10668
10987
|
}, [eager, visible, rootMargin]);
|
|
10669
|
-
|
|
10988
|
+
React32.useEffect(() => {
|
|
10670
10989
|
setLoaded(false);
|
|
10671
10990
|
}, [src]);
|
|
10672
10991
|
const webp = webpVariantUrl(src);
|
|
@@ -10794,11 +11113,11 @@ function ItineraryModal({
|
|
|
10794
11113
|
onNext
|
|
10795
11114
|
}) {
|
|
10796
11115
|
var _a, _b, _c;
|
|
10797
|
-
const [imgIndex, setImgIndex] =
|
|
11116
|
+
const [imgIndex, setImgIndex] = React32.useState(0);
|
|
10798
11117
|
const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
|
|
10799
11118
|
const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
|
|
10800
11119
|
const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
|
|
10801
|
-
|
|
11120
|
+
React32.useEffect(() => {
|
|
10802
11121
|
setImgIndex(0);
|
|
10803
11122
|
}, [stop == null ? void 0 : stop.dayNumber]);
|
|
10804
11123
|
if (!stop) return null;
|
|
@@ -10925,8 +11244,8 @@ function ItineraryModal({
|
|
|
10925
11244
|
) });
|
|
10926
11245
|
}
|
|
10927
11246
|
function Itinerary({ title, subtitle, stops, className }) {
|
|
10928
|
-
const [activeIndex, setActiveIndex] =
|
|
10929
|
-
const scrollRef =
|
|
11247
|
+
const [activeIndex, setActiveIndex] = React32.useState(null);
|
|
11248
|
+
const scrollRef = React32.useRef(null);
|
|
10930
11249
|
const activeStop = activeIndex !== null ? stops[activeIndex] : null;
|
|
10931
11250
|
const scrollBy = (dir) => {
|
|
10932
11251
|
if (!scrollRef.current) return;
|
|
@@ -11018,18 +11337,18 @@ function Lightbox({
|
|
|
11018
11337
|
onClose
|
|
11019
11338
|
}) {
|
|
11020
11339
|
var _a;
|
|
11021
|
-
const [index, setIndex] =
|
|
11340
|
+
const [index, setIndex] = React32.useState(initialIndex);
|
|
11022
11341
|
const total = photos.length;
|
|
11023
11342
|
const photo = photos[index];
|
|
11024
|
-
const prev =
|
|
11343
|
+
const prev = React32.useCallback(
|
|
11025
11344
|
() => setIndex((i) => (i - 1 + total) % total),
|
|
11026
11345
|
[total]
|
|
11027
11346
|
);
|
|
11028
|
-
const next =
|
|
11347
|
+
const next = React32.useCallback(
|
|
11029
11348
|
() => setIndex((i) => (i + 1) % total),
|
|
11030
11349
|
[total]
|
|
11031
11350
|
);
|
|
11032
|
-
|
|
11351
|
+
React32.useEffect(() => {
|
|
11033
11352
|
const onKey = (e) => {
|
|
11034
11353
|
if (e.key === "Escape") onClose();
|
|
11035
11354
|
if (e.key === "ArrowLeft") prev();
|
|
@@ -11197,7 +11516,7 @@ function GridGallery({
|
|
|
11197
11516
|
initialVisible,
|
|
11198
11517
|
onOpen
|
|
11199
11518
|
}) {
|
|
11200
|
-
const [expanded, setExpanded] =
|
|
11519
|
+
const [expanded, setExpanded] = React32.useState(false);
|
|
11201
11520
|
const cols = gridCols(photos.length);
|
|
11202
11521
|
const hasMore = photos.length > initialVisible;
|
|
11203
11522
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
@@ -11227,7 +11546,7 @@ function CompactGridGallery({
|
|
|
11227
11546
|
initialVisible,
|
|
11228
11547
|
onOpen
|
|
11229
11548
|
}) {
|
|
11230
|
-
const [expanded, setExpanded] =
|
|
11549
|
+
const [expanded, setExpanded] = React32.useState(false);
|
|
11231
11550
|
const hasMore = photos.length > initialVisible;
|
|
11232
11551
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
11233
11552
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -11256,7 +11575,7 @@ function MasonryGallery({
|
|
|
11256
11575
|
initialVisible,
|
|
11257
11576
|
onOpen
|
|
11258
11577
|
}) {
|
|
11259
|
-
const [expanded, setExpanded] =
|
|
11578
|
+
const [expanded, setExpanded] = React32.useState(false);
|
|
11260
11579
|
const hasMore = photos.length > initialVisible;
|
|
11261
11580
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
11262
11581
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -11329,7 +11648,7 @@ function FeaturedGallery({
|
|
|
11329
11648
|
photos,
|
|
11330
11649
|
onOpen
|
|
11331
11650
|
}) {
|
|
11332
|
-
const [expanded, setExpanded] =
|
|
11651
|
+
const [expanded, setExpanded] = React32.useState(false);
|
|
11333
11652
|
const featured = photos.slice(0, 3);
|
|
11334
11653
|
const extra = photos.slice(3);
|
|
11335
11654
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -11527,9 +11846,9 @@ function PhotoGallery({
|
|
|
11527
11846
|
onPhotoClick,
|
|
11528
11847
|
className
|
|
11529
11848
|
}) {
|
|
11530
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
11531
|
-
const [carouselIndex, setCarouselIndex] =
|
|
11532
|
-
const normalised =
|
|
11849
|
+
const [lightboxIndex, setLightboxIndex] = React32.useState(null);
|
|
11850
|
+
const [carouselIndex, setCarouselIndex] = React32.useState(0);
|
|
11851
|
+
const normalised = React32.useMemo(() => photos.map(normalise), [photos]);
|
|
11533
11852
|
const handleOpen = (index) => {
|
|
11534
11853
|
setLightboxIndex(index);
|
|
11535
11854
|
onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
|
|
@@ -11615,7 +11934,7 @@ function ItineraryDay({
|
|
|
11615
11934
|
photoLayout = "rounded",
|
|
11616
11935
|
className
|
|
11617
11936
|
}) {
|
|
11618
|
-
const photoList =
|
|
11937
|
+
const photoList = React32.useMemo(() => normalisePhotos(photos), [photos]);
|
|
11619
11938
|
const isFullBleed = photoLayout === "fullBleed" || photoLayout === "fullBleedBottom";
|
|
11620
11939
|
const photoPosition = photoLayout === "fullBleedBottom" ? "bottom" : "top";
|
|
11621
11940
|
const gallery = photoList.length > 0 && /* @__PURE__ */ jsx(
|
|
@@ -11670,8 +11989,8 @@ function MenuTrip({
|
|
|
11670
11989
|
bold = true,
|
|
11671
11990
|
className
|
|
11672
11991
|
}) {
|
|
11673
|
-
const scrollRef =
|
|
11674
|
-
|
|
11992
|
+
const scrollRef = React32.useRef(null);
|
|
11993
|
+
React32.useEffect(() => {
|
|
11675
11994
|
if (!scrollRef.current || !activeSection) return;
|
|
11676
11995
|
const container = scrollRef.current;
|
|
11677
11996
|
const btn = container.querySelector(
|
|
@@ -11867,8 +12186,8 @@ function PricingTrip({
|
|
|
11867
12186
|
className
|
|
11868
12187
|
}) {
|
|
11869
12188
|
const rOuter = sharp ? "rounded-none" : "rounded-2xl";
|
|
11870
|
-
const [showEstimates, setShowEstimates] =
|
|
11871
|
-
const [showPriceInfo, setShowPriceInfo] =
|
|
12189
|
+
const [showEstimates, setShowEstimates] = React32.useState(false);
|
|
12190
|
+
const [showPriceInfo, setShowPriceInfo] = React32.useState(false);
|
|
11872
12191
|
if (variant === "compact") {
|
|
11873
12192
|
const showOverlay = showPriceInfo && (!!priceInfo || !!currencyEstimates && currencyEstimates.length > 0);
|
|
11874
12193
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
|
|
@@ -12308,14 +12627,14 @@ function SiteHeader({
|
|
|
12308
12627
|
}) {
|
|
12309
12628
|
const t = VARIANT[variant];
|
|
12310
12629
|
const resolvedLogo = logoSrc != null ? logoSrc : variant === "white" ? logoSrcDark : logoSrcLight;
|
|
12311
|
-
const [openMenu, setOpenMenu] =
|
|
12312
|
-
const [langOpen, setLangOpen] =
|
|
12313
|
-
const [mobileOpen, setMobileOpen] =
|
|
12314
|
-
const [openMobileSection, setOpenMobileSection] =
|
|
12315
|
-
const [activeLang, setActiveLang] =
|
|
12630
|
+
const [openMenu, setOpenMenu] = React32.useState(null);
|
|
12631
|
+
const [langOpen, setLangOpen] = React32.useState(false);
|
|
12632
|
+
const [mobileOpen, setMobileOpen] = React32.useState(false);
|
|
12633
|
+
const [openMobileSection, setOpenMobileSection] = React32.useState(null);
|
|
12634
|
+
const [activeLang, setActiveLang] = React32.useState(currentLanguage);
|
|
12316
12635
|
const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
|
|
12317
|
-
const menuCloseTimer =
|
|
12318
|
-
const langCloseTimer =
|
|
12636
|
+
const menuCloseTimer = React32.useRef(void 0);
|
|
12637
|
+
const langCloseTimer = React32.useRef(void 0);
|
|
12319
12638
|
const handleMenuEnter = (label) => {
|
|
12320
12639
|
clearTimeout(menuCloseTimer.current);
|
|
12321
12640
|
setOpenMenu(label);
|
|
@@ -12336,7 +12655,7 @@ function SiteHeader({
|
|
|
12336
12655
|
setOpenMenu(null);
|
|
12337
12656
|
setLangOpen(false);
|
|
12338
12657
|
};
|
|
12339
|
-
|
|
12658
|
+
React32.useEffect(() => () => {
|
|
12340
12659
|
clearTimeout(menuCloseTimer.current);
|
|
12341
12660
|
clearTimeout(langCloseTimer.current);
|
|
12342
12661
|
}, []);
|
|
@@ -12612,7 +12931,7 @@ function SiteHeader({
|
|
|
12612
12931
|
), children: [
|
|
12613
12932
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
|
|
12614
12933
|
const isActive = lang.code === activeLang;
|
|
12615
|
-
return /* @__PURE__ */ jsxs(
|
|
12934
|
+
return /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
12616
12935
|
i > 0 && /* @__PURE__ */ jsx("span", { className: cn(
|
|
12617
12936
|
"text-xs select-none",
|
|
12618
12937
|
variant === "white" ? "text-border" : "text-white/15"
|
|
@@ -12674,8 +12993,8 @@ function SiteHeader({
|
|
|
12674
12993
|
);
|
|
12675
12994
|
}
|
|
12676
12995
|
function ThemeToggle({ className }) {
|
|
12677
|
-
const [dark, setDark] =
|
|
12678
|
-
|
|
12996
|
+
const [dark, setDark] = React32.useState(false);
|
|
12997
|
+
React32.useEffect(() => {
|
|
12679
12998
|
const saved = localStorage.getItem("theme");
|
|
12680
12999
|
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
12681
13000
|
const isDark = saved === "dark" || !saved && prefersDark;
|
|
@@ -12725,7 +13044,7 @@ var chipVariants = cva(
|
|
|
12725
13044
|
}
|
|
12726
13045
|
}
|
|
12727
13046
|
);
|
|
12728
|
-
var Chip =
|
|
13047
|
+
var Chip = React32.forwardRef(function Chip2(_a, ref) {
|
|
12729
13048
|
var _b = _a, { className, variant, size, href, children } = _b, props = __objRest(_b, ["className", "variant", "size", "href", "children"]);
|
|
12730
13049
|
const classes = cn(chipVariants({ variant, size }), className);
|
|
12731
13050
|
if (href) {
|
|
@@ -12827,7 +13146,7 @@ function TripCardEditorial(props) {
|
|
|
12827
13146
|
tag,
|
|
12828
13147
|
tagHref
|
|
12829
13148
|
} = props;
|
|
12830
|
-
const [internalFav, setInternalFav] =
|
|
13149
|
+
const [internalFav, setInternalFav] = React32.useState(false);
|
|
12831
13150
|
const favorited = favoritedProp != null ? favoritedProp : internalFav;
|
|
12832
13151
|
const handleFav = (e) => {
|
|
12833
13152
|
e.preventDefault();
|
|
@@ -13338,7 +13657,7 @@ function BlogPost({
|
|
|
13338
13657
|
) }),
|
|
13339
13658
|
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 bg-gradient-to-t from-black/90 via-black/45 to-transparent" }),
|
|
13340
13659
|
/* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 bottom-0", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-3xl px-6 sm:px-8 pb-9 sm:pb-11", children: [
|
|
13341
|
-
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(
|
|
13660
|
+
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
13342
13661
|
i > 0 && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
13343
13662
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
13344
13663
|
"a",
|
|
@@ -13392,7 +13711,7 @@ function BlogPost({
|
|
|
13392
13711
|
] });
|
|
13393
13712
|
}
|
|
13394
13713
|
function useHlsVideo(videoRef, src) {
|
|
13395
|
-
|
|
13714
|
+
React32.useEffect(() => {
|
|
13396
13715
|
if (!src || !videoRef.current) return;
|
|
13397
13716
|
const video = videoRef.current;
|
|
13398
13717
|
if (!src.includes(".m3u8")) return;
|
|
@@ -13436,11 +13755,11 @@ function TripHeader({
|
|
|
13436
13755
|
className
|
|
13437
13756
|
}) {
|
|
13438
13757
|
var _a;
|
|
13439
|
-
const [heroIndex, setHeroIndex] =
|
|
13440
|
-
const [videoReady, setVideoReady] =
|
|
13441
|
-
const videoRef =
|
|
13758
|
+
const [heroIndex, setHeroIndex] = React32.useState(0);
|
|
13759
|
+
const [videoReady, setVideoReady] = React32.useState(false);
|
|
13760
|
+
const videoRef = React32.useRef(null);
|
|
13442
13761
|
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
13443
|
-
const validImages =
|
|
13762
|
+
const validImages = React32.useMemo(
|
|
13444
13763
|
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
13445
13764
|
[images]
|
|
13446
13765
|
);
|
|
@@ -13455,7 +13774,7 @@ function TripHeader({
|
|
|
13455
13774
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
13456
13775
|
const hasMeta = !!(destination || duration);
|
|
13457
13776
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
13458
|
-
|
|
13777
|
+
React32.useEffect(() => {
|
|
13459
13778
|
if (!videoUrl) return;
|
|
13460
13779
|
const el = videoRef.current;
|
|
13461
13780
|
if (!el) return;
|
|
@@ -13598,7 +13917,7 @@ function TripHeader({
|
|
|
13598
13917
|
chips && chips.length > 0 ? siteHeader ? "-mt-[200px] sm:-mt-[214px]" : "-mt-[168px] sm:-mt-[182px]" : siteHeader ? "-mt-44" : "-mt-36"
|
|
13599
13918
|
),
|
|
13600
13919
|
children: [
|
|
13601
|
-
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(
|
|
13920
|
+
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
13602
13921
|
i > 0 && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
13603
13922
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
|
|
13604
13923
|
] }, i)) }),
|
|
@@ -13764,10 +14083,10 @@ function LanguagePicker({
|
|
|
13764
14083
|
}) {
|
|
13765
14084
|
var _a;
|
|
13766
14085
|
const t = VARIANT2[variant];
|
|
13767
|
-
const [open, setOpen] =
|
|
13768
|
-
const ref =
|
|
14086
|
+
const [open, setOpen] = React32.useState(false);
|
|
14087
|
+
const ref = React32.useRef(null);
|
|
13769
14088
|
const active = (_a = languages.find((l) => l.code === currentLanguage)) != null ? _a : languages[0];
|
|
13770
|
-
|
|
14089
|
+
React32.useEffect(() => {
|
|
13771
14090
|
if (!open) return;
|
|
13772
14091
|
const onDocClick = (e) => {
|
|
13773
14092
|
if (ref.current && !ref.current.contains(e.target)) {
|
|
@@ -13968,7 +14287,7 @@ function SiteFooter({
|
|
|
13968
14287
|
children: wrapper
|
|
13969
14288
|
},
|
|
13970
14289
|
b.alt + i
|
|
13971
|
-
) : /* @__PURE__ */ jsx(
|
|
14290
|
+
) : /* @__PURE__ */ jsx(React32.Fragment, { children: wrapper }, b.alt + i);
|
|
13972
14291
|
}) })
|
|
13973
14292
|
] }),
|
|
13974
14293
|
themes.length > 0 && /* @__PURE__ */ jsxs("div", { className: "lg:col-span-3", children: [
|
|
@@ -14143,10 +14462,10 @@ function TripPage({
|
|
|
14143
14462
|
className
|
|
14144
14463
|
}) {
|
|
14145
14464
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
|
|
14146
|
-
const [activeSection, setActiveSection] =
|
|
14147
|
-
const [accordionValue, setAccordionValue] =
|
|
14148
|
-
const [faqsExpanded, setFaqsExpanded] =
|
|
14149
|
-
const accordionSectionIds =
|
|
14465
|
+
const [activeSection, setActiveSection] = React32.useState("");
|
|
14466
|
+
const [accordionValue, setAccordionValue] = React32.useState([]);
|
|
14467
|
+
const [faqsExpanded, setFaqsExpanded] = React32.useState(false);
|
|
14468
|
+
const accordionSectionIds = React32.useMemo(
|
|
14150
14469
|
() => /* @__PURE__ */ new Set([
|
|
14151
14470
|
"when-it-operates",
|
|
14152
14471
|
"how-to-get-there",
|
|
@@ -14160,18 +14479,18 @@ function TripPage({
|
|
|
14160
14479
|
]),
|
|
14161
14480
|
[]
|
|
14162
14481
|
);
|
|
14163
|
-
const [navFloating, setNavFloating] =
|
|
14164
|
-
const [navHidden, setNavHidden] =
|
|
14165
|
-
const [isFloating, setIsFloating] =
|
|
14166
|
-
const [sidebarPos, setSidebarPos] =
|
|
14167
|
-
const [pricingBarVisible, setPricingBarVisible] =
|
|
14168
|
-
const navRef =
|
|
14169
|
-
const navSentinelRef =
|
|
14170
|
-
const sentinelRef =
|
|
14171
|
-
const sidebarPlaceholderRef =
|
|
14172
|
-
const pricingBarRef =
|
|
14173
|
-
const galleryRef =
|
|
14174
|
-
const sections =
|
|
14482
|
+
const [navFloating, setNavFloating] = React32.useState(false);
|
|
14483
|
+
const [navHidden, setNavHidden] = React32.useState(false);
|
|
14484
|
+
const [isFloating, setIsFloating] = React32.useState(false);
|
|
14485
|
+
const [sidebarPos, setSidebarPos] = React32.useState(null);
|
|
14486
|
+
const [pricingBarVisible, setPricingBarVisible] = React32.useState(false);
|
|
14487
|
+
const navRef = React32.useRef(null);
|
|
14488
|
+
const navSentinelRef = React32.useRef(null);
|
|
14489
|
+
const sentinelRef = React32.useRef(null);
|
|
14490
|
+
const sidebarPlaceholderRef = React32.useRef(null);
|
|
14491
|
+
const pricingBarRef = React32.useRef(null);
|
|
14492
|
+
const galleryRef = React32.useRef(null);
|
|
14493
|
+
const sections = React32.useMemo(
|
|
14175
14494
|
() => {
|
|
14176
14495
|
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2;
|
|
14177
14496
|
return [
|
|
@@ -14193,7 +14512,7 @@ function TripPage({
|
|
|
14193
14512
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
14194
14513
|
[]
|
|
14195
14514
|
);
|
|
14196
|
-
|
|
14515
|
+
React32.useEffect(() => {
|
|
14197
14516
|
const sentinel = navSentinelRef.current;
|
|
14198
14517
|
if (!sentinel) return;
|
|
14199
14518
|
const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -14201,7 +14520,7 @@ function TripPage({
|
|
|
14201
14520
|
update();
|
|
14202
14521
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
14203
14522
|
}, []);
|
|
14204
|
-
|
|
14523
|
+
React32.useEffect(() => {
|
|
14205
14524
|
const sentinel = sentinelRef.current;
|
|
14206
14525
|
if (!sentinel) return;
|
|
14207
14526
|
const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -14209,7 +14528,7 @@ function TripPage({
|
|
|
14209
14528
|
update();
|
|
14210
14529
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
14211
14530
|
}, []);
|
|
14212
|
-
|
|
14531
|
+
React32.useEffect(() => {
|
|
14213
14532
|
const measure = () => {
|
|
14214
14533
|
if (!sidebarPlaceholderRef.current) return;
|
|
14215
14534
|
const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
|
|
@@ -14219,7 +14538,7 @@ function TripPage({
|
|
|
14219
14538
|
window.addEventListener("resize", measure);
|
|
14220
14539
|
return () => window.removeEventListener("resize", measure);
|
|
14221
14540
|
}, [isFloating]);
|
|
14222
|
-
|
|
14541
|
+
React32.useEffect(() => {
|
|
14223
14542
|
const check = () => {
|
|
14224
14543
|
var _a2;
|
|
14225
14544
|
const target = (_a2 = galleryRef.current) != null ? _a2 : pricingBarRef.current;
|
|
@@ -14230,7 +14549,7 @@ function TripPage({
|
|
|
14230
14549
|
check();
|
|
14231
14550
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
14232
14551
|
}, []);
|
|
14233
|
-
|
|
14552
|
+
React32.useEffect(() => {
|
|
14234
14553
|
const check = () => {
|
|
14235
14554
|
if (!pricingBarRef.current) return;
|
|
14236
14555
|
setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
|
|
@@ -14239,7 +14558,7 @@ function TripPage({
|
|
|
14239
14558
|
check();
|
|
14240
14559
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
14241
14560
|
}, []);
|
|
14242
|
-
|
|
14561
|
+
React32.useEffect(() => {
|
|
14243
14562
|
if (sections.length === 0) return;
|
|
14244
14563
|
setActiveSection(sections[0].id);
|
|
14245
14564
|
const update = () => {
|
|
@@ -14714,7 +15033,7 @@ function TripPage({
|
|
|
14714
15033
|
}
|
|
14715
15034
|
);
|
|
14716
15035
|
}
|
|
14717
|
-
function
|
|
15036
|
+
function SectionHeading2({
|
|
14718
15037
|
eyebrow,
|
|
14719
15038
|
title,
|
|
14720
15039
|
rightSlot
|
|
@@ -14764,11 +15083,11 @@ function CategoryPage2({
|
|
|
14764
15083
|
className
|
|
14765
15084
|
}) {
|
|
14766
15085
|
var _a;
|
|
14767
|
-
const [videoReady, setVideoReady] =
|
|
14768
|
-
const videoRef =
|
|
15086
|
+
const [videoReady, setVideoReady] = React32.useState(false);
|
|
15087
|
+
const videoRef = React32.useRef(null);
|
|
14769
15088
|
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
14770
15089
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
14771
|
-
|
|
15090
|
+
React32.useEffect(() => {
|
|
14772
15091
|
if (!videoUrl) return;
|
|
14773
15092
|
const el = videoRef.current;
|
|
14774
15093
|
if (!el) return;
|
|
@@ -14783,13 +15102,13 @@ function CategoryPage2({
|
|
|
14783
15102
|
io.observe(el);
|
|
14784
15103
|
return () => io.disconnect();
|
|
14785
15104
|
}, [videoUrl]);
|
|
14786
|
-
const [faqsExpanded, setFaqsExpanded] =
|
|
14787
|
-
const [tripsExpanded, setTripsExpanded] =
|
|
14788
|
-
const [filterValue, setFilterValue] =
|
|
14789
|
-
const [sort, setSort] =
|
|
15105
|
+
const [faqsExpanded, setFaqsExpanded] = React32.useState(false);
|
|
15106
|
+
const [tripsExpanded, setTripsExpanded] = React32.useState(false);
|
|
15107
|
+
const [filterValue, setFilterValue] = React32.useState({});
|
|
15108
|
+
const [sort, setSort] = React32.useState(
|
|
14790
15109
|
defaultSort != null ? defaultSort : (_a = sortOptions == null ? void 0 : sortOptions[0]) == null ? void 0 : _a.id
|
|
14791
15110
|
);
|
|
14792
|
-
const sortedTrips =
|
|
15111
|
+
const sortedTrips = React32.useMemo(() => {
|
|
14793
15112
|
const active = Object.entries(filterValue).filter(
|
|
14794
15113
|
([, vals]) => vals && vals.length > 0
|
|
14795
15114
|
);
|
|
@@ -14893,7 +15212,7 @@ function CategoryPage2({
|
|
|
14893
15212
|
/* @__PURE__ */ jsxs("div", { className: "relative mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
14894
15213
|
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => {
|
|
14895
15214
|
const isLast = i === breadcrumb.length - 1;
|
|
14896
|
-
return /* @__PURE__ */ jsxs(
|
|
15215
|
+
return /* @__PURE__ */ jsxs(React32.Fragment, { children: [
|
|
14897
15216
|
i > 0 && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
14898
15217
|
crumb.href && !isLast ? /* @__PURE__ */ jsx(
|
|
14899
15218
|
"a",
|
|
@@ -14923,7 +15242,7 @@ function CategoryPage2({
|
|
|
14923
15242
|
),
|
|
14924
15243
|
popularTours && popularTours.length > 0 && /* @__PURE__ */ jsxs("section", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-12", children: [
|
|
14925
15244
|
/* @__PURE__ */ jsx(
|
|
14926
|
-
|
|
15245
|
+
SectionHeading2,
|
|
14927
15246
|
{
|
|
14928
15247
|
eyebrow: popularToursEyebrow,
|
|
14929
15248
|
title: popularToursTitle
|
|
@@ -14943,7 +15262,7 @@ function CategoryPage2({
|
|
|
14943
15262
|
}) }) })
|
|
14944
15263
|
] }),
|
|
14945
15264
|
/* @__PURE__ */ jsxs("section", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 pt-6 sm:pt-8 pb-12", children: [
|
|
14946
|
-
(tripsTitle || tripsEyebrow) && /* @__PURE__ */ jsx(
|
|
15265
|
+
(tripsTitle || tripsEyebrow) && /* @__PURE__ */ jsx(SectionHeading2, { eyebrow: tripsEyebrow, title: tripsTitle != null ? tripsTitle : "" }),
|
|
14947
15266
|
filterGroups && filterGroups.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-6", children: /* @__PURE__ */ jsx(
|
|
14948
15267
|
FilterPanel,
|
|
14949
15268
|
{
|
|
@@ -15181,12 +15500,12 @@ function Toast({
|
|
|
15181
15500
|
duration = 6e3,
|
|
15182
15501
|
className
|
|
15183
15502
|
}) {
|
|
15184
|
-
const [mounted, setMounted] =
|
|
15185
|
-
const [visible, setVisible] =
|
|
15186
|
-
|
|
15503
|
+
const [mounted, setMounted] = React32.useState(false);
|
|
15504
|
+
const [visible, setVisible] = React32.useState(true);
|
|
15505
|
+
React32.useEffect(() => {
|
|
15187
15506
|
setMounted(true);
|
|
15188
15507
|
}, []);
|
|
15189
|
-
|
|
15508
|
+
React32.useEffect(() => {
|
|
15190
15509
|
if (duration === 0) return;
|
|
15191
15510
|
const t = setTimeout(() => {
|
|
15192
15511
|
setVisible(false);
|
|
@@ -16688,8 +17007,8 @@ function ShareWidget({
|
|
|
16688
17007
|
title = "Invite friends & lower the price",
|
|
16689
17008
|
className
|
|
16690
17009
|
}) {
|
|
16691
|
-
const [copied, setCopied] =
|
|
16692
|
-
const [showToast, setShowToast] =
|
|
17010
|
+
const [copied, setCopied] = React32.useState(false);
|
|
17011
|
+
const [showToast, setShowToast] = React32.useState(false);
|
|
16693
17012
|
const encodedUrl = encodeURIComponent(url);
|
|
16694
17013
|
const encodedMsg = encodeURIComponent(`${message} ${url}`);
|
|
16695
17014
|
const channels = [
|
|
@@ -16839,6 +17158,6 @@ function StickyBookingCard({
|
|
|
16839
17158
|
);
|
|
16840
17159
|
}
|
|
16841
17160
|
|
|
16842
|
-
export { ActivityCard, AgentContactCard, Alert, AskExo, BirthDateField, BlogCard, BlogPost, BookingAdventureCard, BookingCancellationEmail, BookingConfirmedCard, BookingCreatedEmail, BookingDetails, BookingForm, BookingOtpEmail, BookingPaymentConfirmationEmail, BookingShell, BookingSummary, Button, COUNTRIES, CategoryPage2, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, STATUS_MAP as DEPARTURE_STATUS_MAP, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, ExoOrb, FilterPanel, FloatingInput, FloatingSelect, GroupProgressBar, GroupStatusBanner, Itinerary, ItineraryDay, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, NotificationEmail, OTPCodeInput, Offer, OfferAdventureCard, ParticipantCounter, ParticipantList, PartnerBookingCreatedEmail, PartnerRegistrationCompleteEmail, PaymentAmountSelector, PaymentDetailsBlock, PaymentMethodSelector, PaymentModalShell, PaymentReceiptEmail, PaymentReminderEmail, PhoneCountrySelect, PhotoGallery, Picture, PriceProgress, PricingMatrixCard, PricingTrip, RegistrationForm, RegistrationProgressBar, RegistrationReminderEmail, RegistrationReminderIndividualEmail, RegistrationSuccessCard, ShareWidget, SiteHeader, StatusBadge2 as StatusBadge, StickyBookingCard, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TransferDetailsBlock, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, TrustpilotEmbed, buttonVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, webpVariantUrl, wrapEmailHtml };
|
|
17161
|
+
export { ActivityCard, AgentContactCard, Alert, AskExo, BirthDateField, BlogCard, BlogPost, BookingAdventureCard, BookingCancellationEmail, BookingConfirmedCard, BookingCreatedEmail, BookingDetails, BookingForm, BookingOtpEmail, BookingPaymentConfirmationEmail, BookingShell, BookingSummary, Button, COUNTRIES, CancellationForm, CategoryPage2, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, STATUS_MAP as DEPARTURE_STATUS_MAP, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, ExoOrb, FilterPanel, FloatingInput, FloatingSelect, GroupProgressBar, GroupStatusBanner, Itinerary, ItineraryDay, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, NotificationEmail, OTPCodeInput, Offer, OfferAdventureCard, ParticipantCounter, ParticipantList, PartnerBookingCreatedEmail, PartnerRegistrationCompleteEmail, PaymentAmountSelector, PaymentDetailsBlock, PaymentMethodSelector, PaymentModalShell, PaymentReceiptEmail, PaymentReminderEmail, PhoneCountrySelect, PhotoGallery, Picture, PriceProgress, PricingMatrixCard, PricingTrip, RegistrationForm, RegistrationProgressBar, RegistrationReminderEmail, RegistrationReminderIndividualEmail, RegistrationSuccessCard, ShareWidget, SiteHeader, StatusBadge2 as StatusBadge, StickyBookingCard, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TransferDetailsBlock, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, TrustpilotEmbed, buttonVariants, cn, emailTokens, formatCpf, getStripeAppearance, itineraryDaySpecIcons, stripeAppearance, validateCpf, webpVariantUrl, wrapEmailHtml };
|
|
16843
17162
|
//# sourceMappingURL=index.js.map
|
|
16844
17163
|
//# sourceMappingURL=index.js.map
|