@planetaexo/design-system 0.12.1 → 0.12.3
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 +187 -324
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -55
- package/dist/index.d.ts +25 -55
- package/dist/index.js +171 -307
- 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 React23 from 'react';
|
|
2
2
|
import { useState, useRef, useCallback, useEffect } 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 = React23.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(
|
|
@@ -302,10 +302,10 @@ function DialogDescription(_a) {
|
|
|
302
302
|
}, props)
|
|
303
303
|
);
|
|
304
304
|
}
|
|
305
|
-
var FloatingInput =
|
|
305
|
+
var FloatingInput = React23.forwardRef(
|
|
306
306
|
(_a, ref) => {
|
|
307
307
|
var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
|
|
308
|
-
const inputId = id != null ? id :
|
|
308
|
+
const inputId = id != null ? id : React23.useId();
|
|
309
309
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
|
|
310
310
|
/* @__PURE__ */ jsx(
|
|
311
311
|
"input",
|
|
@@ -345,10 +345,10 @@ var FloatingInput = React22.forwardRef(
|
|
|
345
345
|
}
|
|
346
346
|
);
|
|
347
347
|
FloatingInput.displayName = "FloatingInput";
|
|
348
|
-
var FloatingSelect =
|
|
348
|
+
var FloatingSelect = React23.forwardRef(
|
|
349
349
|
(_a, ref) => {
|
|
350
350
|
var _b = _a, { label, error, id, className, required, children, value } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children", "value"]);
|
|
351
|
-
const inputId = id != null ? id :
|
|
351
|
+
const inputId = id != null ? id : React23.useId();
|
|
352
352
|
const hasValue = typeof value === "string" ? value !== "" : value !== void 0 && value !== null;
|
|
353
353
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
|
|
354
354
|
/* @__PURE__ */ jsx(
|
|
@@ -612,11 +612,11 @@ function PhoneCountrySelect({
|
|
|
612
612
|
disabled
|
|
613
613
|
}) {
|
|
614
614
|
var _a;
|
|
615
|
-
const [open, setOpen] =
|
|
616
|
-
const containerRef =
|
|
617
|
-
const listRef =
|
|
615
|
+
const [open, setOpen] = React23.useState(false);
|
|
616
|
+
const containerRef = React23.useRef(null);
|
|
617
|
+
const listRef = React23.useRef(null);
|
|
618
618
|
const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
|
|
619
|
-
|
|
619
|
+
React23.useEffect(() => {
|
|
620
620
|
if (!open) return;
|
|
621
621
|
const handler = (e) => {
|
|
622
622
|
var _a2;
|
|
@@ -627,7 +627,7 @@ function PhoneCountrySelect({
|
|
|
627
627
|
document.addEventListener("mousedown", handler);
|
|
628
628
|
return () => document.removeEventListener("mousedown", handler);
|
|
629
629
|
}, [open]);
|
|
630
|
-
|
|
630
|
+
React23.useEffect(() => {
|
|
631
631
|
if (!open || !listRef.current) return;
|
|
632
632
|
const activeEl = listRef.current.querySelector("[data-selected=true]");
|
|
633
633
|
activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
|
|
@@ -897,8 +897,8 @@ function CalendarDayButton(_a) {
|
|
|
897
897
|
"locale"
|
|
898
898
|
]);
|
|
899
899
|
const defaultClassNames = getDefaultClassNames();
|
|
900
|
-
const ref =
|
|
901
|
-
|
|
900
|
+
const ref = React23.useRef(null);
|
|
901
|
+
React23.useEffect(() => {
|
|
902
902
|
var _a2;
|
|
903
903
|
if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
|
|
904
904
|
}, [modifiers.focused]);
|
|
@@ -929,16 +929,16 @@ function BirthDateField({
|
|
|
929
929
|
className,
|
|
930
930
|
disabled
|
|
931
931
|
}) {
|
|
932
|
-
const [open, setOpen] =
|
|
933
|
-
const [text, setText] =
|
|
932
|
+
const [open, setOpen] = React23.useState(false);
|
|
933
|
+
const [text, setText] = React23.useState(
|
|
934
934
|
value ? format(value, "dd/MM/yyyy") : ""
|
|
935
935
|
);
|
|
936
|
-
const containerRef =
|
|
937
|
-
const inputId =
|
|
938
|
-
|
|
936
|
+
const containerRef = React23.useRef(null);
|
|
937
|
+
const inputId = React23.useId();
|
|
938
|
+
React23.useEffect(() => {
|
|
939
939
|
setText(value ? format(value, "dd/MM/yyyy") : "");
|
|
940
940
|
}, [value]);
|
|
941
|
-
|
|
941
|
+
React23.useEffect(() => {
|
|
942
942
|
if (!open) return;
|
|
943
943
|
const handler = (e) => {
|
|
944
944
|
var _a;
|
|
@@ -1147,14 +1147,14 @@ function CountrySearchField({
|
|
|
1147
1147
|
}) {
|
|
1148
1148
|
var _a;
|
|
1149
1149
|
const list = countries != null ? countries : COUNTRIES;
|
|
1150
|
-
const [query, setQuery] =
|
|
1151
|
-
const [open, setOpen] =
|
|
1152
|
-
const containerRef =
|
|
1153
|
-
const searchRef =
|
|
1150
|
+
const [query, setQuery] = React23.useState("");
|
|
1151
|
+
const [open, setOpen] = React23.useState(false);
|
|
1152
|
+
const containerRef = React23.useRef(null);
|
|
1153
|
+
const searchRef = React23.useRef(null);
|
|
1154
1154
|
const selected = list.find((c) => c.code === value);
|
|
1155
1155
|
const isFloated = open || !!selected;
|
|
1156
1156
|
const filtered = query.trim() ? list.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : list;
|
|
1157
|
-
|
|
1157
|
+
React23.useEffect(() => {
|
|
1158
1158
|
if (!open) return;
|
|
1159
1159
|
const handler = (e) => {
|
|
1160
1160
|
var _a2;
|
|
@@ -1264,7 +1264,7 @@ function Alert({ variant = "info", children, className }) {
|
|
|
1264
1264
|
function AdventureCard({ adventure }) {
|
|
1265
1265
|
var _a, _b, _c, _d, _e, _f;
|
|
1266
1266
|
const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
|
|
1267
|
-
const [checkedInternal, setCheckedInternal] =
|
|
1267
|
+
const [checkedInternal, setCheckedInternal] = React23.useState(
|
|
1268
1268
|
new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
|
|
1269
1269
|
);
|
|
1270
1270
|
const isChecked = (opt) => {
|
|
@@ -1601,7 +1601,7 @@ function BookingShell({
|
|
|
1601
1601
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
|
|
1602
1602
|
/* @__PURE__ */ jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
|
|
1603
1603
|
/* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: title }),
|
|
1604
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(
|
|
1604
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
|
|
1605
1605
|
/* @__PURE__ */ jsx(
|
|
1606
1606
|
"span",
|
|
1607
1607
|
{
|
|
@@ -1800,7 +1800,7 @@ function TermsSection({
|
|
|
1800
1800
|
termsContent
|
|
1801
1801
|
}) {
|
|
1802
1802
|
var _a;
|
|
1803
|
-
const [modalOpen, setModalOpen] =
|
|
1803
|
+
const [modalOpen, setModalOpen] = React23.useState(false);
|
|
1804
1804
|
const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
|
|
1805
1805
|
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
|
|
1806
1806
|
/* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
|
|
@@ -1888,9 +1888,9 @@ function BookingWizard({
|
|
|
1888
1888
|
depositInfo,
|
|
1889
1889
|
onCancel
|
|
1890
1890
|
}) {
|
|
1891
|
-
const [step, setStep] =
|
|
1892
|
-
const [error, setError] =
|
|
1893
|
-
const [responsible, setResponsible] =
|
|
1891
|
+
const [step, setStep] = React23.useState("responsible");
|
|
1892
|
+
const [error, setError] = React23.useState(null);
|
|
1893
|
+
const [responsible, setResponsible] = React23.useState({
|
|
1894
1894
|
firstName: "",
|
|
1895
1895
|
lastName: "",
|
|
1896
1896
|
email: "",
|
|
@@ -1909,7 +1909,7 @@ function BookingWizard({
|
|
|
1909
1909
|
return s + ((_b = (_a = a.slots) == null ? void 0 : _a.children) != null ? _b : 0);
|
|
1910
1910
|
}, 0);
|
|
1911
1911
|
const totalPax = totalAdults + totalChildren;
|
|
1912
|
-
const [travellers, setTravellers] =
|
|
1912
|
+
const [travellers, setTravellers] = React23.useState(
|
|
1913
1913
|
Array.from({ length: Math.max(totalPax, 1) }, () => ({
|
|
1914
1914
|
firstName: "",
|
|
1915
1915
|
lastName: "",
|
|
@@ -1917,9 +1917,9 @@ function BookingWizard({
|
|
|
1917
1917
|
email: ""
|
|
1918
1918
|
}))
|
|
1919
1919
|
);
|
|
1920
|
-
const [payAmount, setPayAmount] =
|
|
1921
|
-
const [payMethod, setPayMethod] =
|
|
1922
|
-
const [termsAccepted, setTermsAccepted] =
|
|
1920
|
+
const [payAmount, setPayAmount] = React23.useState("full");
|
|
1921
|
+
const [payMethod, setPayMethod] = React23.useState("stripe");
|
|
1922
|
+
const [termsAccepted, setTermsAccepted] = React23.useState(false);
|
|
1923
1923
|
const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
|
|
1924
1924
|
const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
|
|
1925
1925
|
const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
|
|
@@ -2120,7 +2120,7 @@ function Offer({
|
|
|
2120
2120
|
continueDisabled,
|
|
2121
2121
|
className
|
|
2122
2122
|
}) {
|
|
2123
|
-
const [showBooking, setShowBooking] =
|
|
2123
|
+
const [showBooking, setShowBooking] = React23.useState(false);
|
|
2124
2124
|
const isShowingCheckout = !!checkoutSlot || showBooking;
|
|
2125
2125
|
const handleBook = () => {
|
|
2126
2126
|
if (!checkoutSlot && !externalBookingFlow) setShowBooking(true);
|
|
@@ -2458,7 +2458,7 @@ function AdventureSection({
|
|
|
2458
2458
|
cannotRemoveLastTravellerLabel
|
|
2459
2459
|
}) {
|
|
2460
2460
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2461
|
-
const [detailsOpen, setDetailsOpen] =
|
|
2461
|
+
const [detailsOpen, setDetailsOpen] = React23.useState(false);
|
|
2462
2462
|
const handleCopyUrl = (url) => {
|
|
2463
2463
|
if (onCopyFormLink) {
|
|
2464
2464
|
onCopyFormLink(url);
|
|
@@ -2944,8 +2944,8 @@ function AddTravellerDialog({
|
|
|
2944
2944
|
errorMessage
|
|
2945
2945
|
}) {
|
|
2946
2946
|
var _a, _b, _c, _d, _e;
|
|
2947
|
-
const [form, setForm] =
|
|
2948
|
-
|
|
2947
|
+
const [form, setForm] = React23.useState(() => createInitialAddFormData(config));
|
|
2948
|
+
React23.useEffect(() => {
|
|
2949
2949
|
if (open) {
|
|
2950
2950
|
setForm(createInitialAddFormData(config));
|
|
2951
2951
|
}
|
|
@@ -3005,7 +3005,7 @@ function EditTravellerDialog({
|
|
|
3005
3005
|
errorMessage
|
|
3006
3006
|
}) {
|
|
3007
3007
|
var _a, _b, _c, _d, _e;
|
|
3008
|
-
const [form, setForm] =
|
|
3008
|
+
const [form, setForm] = React23.useState(() => ({
|
|
3009
3009
|
firstName: "",
|
|
3010
3010
|
lastName: "",
|
|
3011
3011
|
email: "",
|
|
@@ -3014,7 +3014,7 @@ function EditTravellerDialog({
|
|
|
3014
3014
|
birthDate: "",
|
|
3015
3015
|
personType: "ADULT"
|
|
3016
3016
|
}));
|
|
3017
|
-
|
|
3017
|
+
React23.useEffect(() => {
|
|
3018
3018
|
var _a2, _b2, _c2, _d2, _e2, _f;
|
|
3019
3019
|
if (open && traveller) {
|
|
3020
3020
|
setForm({
|
|
@@ -3281,37 +3281,37 @@ function BookingDetails({
|
|
|
3281
3281
|
const hasSubmitAddTraveller = !!onSubmitAddTraveller;
|
|
3282
3282
|
const hasSubmitEditTraveller = !!onSubmitEditTraveller;
|
|
3283
3283
|
const hasConfirmRemoveTraveller = !!onConfirmRemoveTraveller;
|
|
3284
|
-
const [addModalState, setAddModalState] =
|
|
3284
|
+
const [addModalState, setAddModalState] = React23.useState({
|
|
3285
3285
|
open: false,
|
|
3286
3286
|
adventureId: null
|
|
3287
3287
|
});
|
|
3288
|
-
const [editModalState, setEditModalState] =
|
|
3289
|
-
const [deleteModalState, setDeleteModalState] =
|
|
3290
|
-
const handleRequestOpenAddModal =
|
|
3288
|
+
const [editModalState, setEditModalState] = React23.useState({ open: false, adventureId: null, traveller: null });
|
|
3289
|
+
const [deleteModalState, setDeleteModalState] = React23.useState({ open: false, adventureId: null, traveller: null });
|
|
3290
|
+
const handleRequestOpenAddModal = React23.useCallback((adventureId) => {
|
|
3291
3291
|
setAddModalState({ open: true, adventureId });
|
|
3292
3292
|
}, []);
|
|
3293
|
-
const handleRequestOpenEditModal =
|
|
3293
|
+
const handleRequestOpenEditModal = React23.useCallback(
|
|
3294
3294
|
(adventureId, traveller) => {
|
|
3295
3295
|
setEditModalState({ open: true, adventureId, traveller });
|
|
3296
3296
|
},
|
|
3297
3297
|
[]
|
|
3298
3298
|
);
|
|
3299
|
-
const handleRequestOpenDeleteModal =
|
|
3299
|
+
const handleRequestOpenDeleteModal = React23.useCallback(
|
|
3300
3300
|
(adventureId, traveller) => {
|
|
3301
3301
|
setDeleteModalState({ open: true, adventureId, traveller });
|
|
3302
3302
|
},
|
|
3303
3303
|
[]
|
|
3304
3304
|
);
|
|
3305
|
-
const closeAddModal =
|
|
3305
|
+
const closeAddModal = React23.useCallback(() => {
|
|
3306
3306
|
setAddModalState({ open: false, adventureId: null });
|
|
3307
3307
|
}, []);
|
|
3308
|
-
const closeEditModal =
|
|
3308
|
+
const closeEditModal = React23.useCallback(() => {
|
|
3309
3309
|
setEditModalState({ open: false, adventureId: null, traveller: null });
|
|
3310
3310
|
}, []);
|
|
3311
|
-
const closeDeleteModal =
|
|
3311
|
+
const closeDeleteModal = React23.useCallback(() => {
|
|
3312
3312
|
setDeleteModalState({ open: false, adventureId: null, traveller: null });
|
|
3313
3313
|
}, []);
|
|
3314
|
-
const handleAddSubmit =
|
|
3314
|
+
const handleAddSubmit = React23.useCallback(
|
|
3315
3315
|
async (adventureId, data) => {
|
|
3316
3316
|
if (!onSubmitAddTraveller) return;
|
|
3317
3317
|
try {
|
|
@@ -3322,7 +3322,7 @@ function BookingDetails({
|
|
|
3322
3322
|
},
|
|
3323
3323
|
[onSubmitAddTraveller, closeAddModal]
|
|
3324
3324
|
);
|
|
3325
|
-
const handleEditSubmit =
|
|
3325
|
+
const handleEditSubmit = React23.useCallback(
|
|
3326
3326
|
async (adventureId, travellerId, data) => {
|
|
3327
3327
|
if (!onSubmitEditTraveller) return;
|
|
3328
3328
|
try {
|
|
@@ -3333,7 +3333,7 @@ function BookingDetails({
|
|
|
3333
3333
|
},
|
|
3334
3334
|
[onSubmitEditTraveller, closeEditModal]
|
|
3335
3335
|
);
|
|
3336
|
-
const handleDeleteConfirm =
|
|
3336
|
+
const handleDeleteConfirm = React23.useCallback(
|
|
3337
3337
|
async (adventureId, travellerId) => {
|
|
3338
3338
|
if (!onConfirmRemoveTraveller) return;
|
|
3339
3339
|
try {
|
|
@@ -3985,7 +3985,8 @@ var DEFAULT_LABELS2 = {
|
|
|
3985
3985
|
numberOfPeopleLabel: "Number of People:",
|
|
3986
3986
|
hostLabel: "Host:",
|
|
3987
3987
|
postCtaMessage: "After adding everyone, you will also receive your own registration email, just like the other travellers. Please make sure everyone completes this step so we can organise everything properly.",
|
|
3988
|
-
closingMessage: "If you have any questions, just reply to this email \u2014 happy to help."
|
|
3988
|
+
closingMessage: "If you have any questions, just reply to this email \u2014 happy to help.",
|
|
3989
|
+
nextStepsHeading: "Next steps:"
|
|
3989
3990
|
};
|
|
3990
3991
|
function BookingConfirmationEmail({
|
|
3991
3992
|
recipientName,
|
|
@@ -3998,7 +3999,10 @@ function BookingConfirmationEmail({
|
|
|
3998
3999
|
numberOfPeople,
|
|
3999
4000
|
host,
|
|
4000
4001
|
labels,
|
|
4001
|
-
className
|
|
4002
|
+
className,
|
|
4003
|
+
nextSteps,
|
|
4004
|
+
nextStepsImportant,
|
|
4005
|
+
directBookingLinkLabel
|
|
4002
4006
|
}) {
|
|
4003
4007
|
const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
|
|
4004
4008
|
const ctaStyle = {
|
|
@@ -4015,12 +4019,13 @@ function BookingConfirmationEmail({
|
|
|
4015
4019
|
const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsx("a", { href: addTravellersUrl, style: ctaStyle, children: l.ctaButton }) : /* @__PURE__ */ jsx("span", { style: ctaStyle, role: "presentation", children: l.ctaButton });
|
|
4016
4020
|
const tableRows = [
|
|
4017
4021
|
{ label: l.bookingNumberLabel, value: bookingNumber },
|
|
4018
|
-
{ label: l.activityLabel, value: activity },
|
|
4022
|
+
...activity && activity.trim().length > 0 ? [{ label: l.activityLabel, value: activity }] : [],
|
|
4019
4023
|
{ label: l.adventureLabel, value: adventure },
|
|
4020
4024
|
{ label: l.startingDateLabel, value: startingDate },
|
|
4021
4025
|
{ label: l.numberOfPeopleLabel, value: String(numberOfPeople) },
|
|
4022
4026
|
{ label: l.hostLabel, value: host }
|
|
4023
4027
|
];
|
|
4028
|
+
const showNextSteps = Array.isArray(nextSteps) && nextSteps.length > 0;
|
|
4024
4029
|
return /* @__PURE__ */ jsxs(
|
|
4025
4030
|
"div",
|
|
4026
4031
|
{
|
|
@@ -4050,8 +4055,37 @@ function BookingConfirmationEmail({
|
|
|
4050
4055
|
/* @__PURE__ */ jsx("td", { style: { padding: "4px 16px 4px 0", color: emailTokens.mutedForeground }, children: row.label }),
|
|
4051
4056
|
/* @__PURE__ */ jsx("td", { style: { padding: "4px 0", fontWeight: "500", color: emailTokens.foreground }, children: row.value })
|
|
4052
4057
|
] }, i)) }) }),
|
|
4058
|
+
showNextSteps && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4059
|
+
/* @__PURE__ */ jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4060
|
+
/* @__PURE__ */ jsx("p", { style: { marginBottom: "20px", fontWeight: "700", color: emailTokens.foreground, fontFamily: emailTokens.fontFamily, fontSize: "18px" }, children: l.nextStepsHeading }),
|
|
4061
|
+
/* @__PURE__ */ jsx("div", { style: { borderRadius: "12px", border: `1px solid ${emailTokens.border}`, padding: "20px", marginBottom: "24px" }, children: nextSteps.map((step, i) => /* @__PURE__ */ jsx("table", { cellPadding: 0, cellSpacing: 0, style: { borderCollapse: "collapse", width: "100%", marginBottom: i < nextSteps.length - 1 ? "16px" : "0" }, children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
4062
|
+
/* @__PURE__ */ jsx("td", { style: { verticalAlign: "top", width: "32px", paddingRight: "14px" }, children: /* @__PURE__ */ jsx("span", { style: {
|
|
4063
|
+
display: "inline-block",
|
|
4064
|
+
height: "24px",
|
|
4065
|
+
width: "24px",
|
|
4066
|
+
lineHeight: "24px",
|
|
4067
|
+
textAlign: "center",
|
|
4068
|
+
borderRadius: "9999px",
|
|
4069
|
+
backgroundColor: emailTokens.primaryLight,
|
|
4070
|
+
fontSize: "12px",
|
|
4071
|
+
fontWeight: "700",
|
|
4072
|
+
color: emailTokens.primary,
|
|
4073
|
+
marginTop: "2px"
|
|
4074
|
+
}, children: i + 1 }) }),
|
|
4075
|
+
/* @__PURE__ */ jsx("td", { style: { verticalAlign: "top" }, children: /* @__PURE__ */ jsx("p", { style: { fontSize: "14px", color: emailTokens.bodyText, lineHeight: "1.6", margin: 0 }, children: step }) })
|
|
4076
|
+
] }) }) }, i)) }),
|
|
4077
|
+
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(React23.Fragment, { children: [
|
|
4078
|
+
line,
|
|
4079
|
+
idx < arr.length - 1 ? /* @__PURE__ */ jsx("br", {}) : null
|
|
4080
|
+
] }, idx)) })
|
|
4081
|
+
] }),
|
|
4053
4082
|
/* @__PURE__ */ jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4054
4083
|
/* @__PURE__ */ jsx("p", { style: { marginBottom: "16px" }, children: l.postCtaMessage }),
|
|
4084
|
+
addTravellersUrl && directBookingLinkLabel && directBookingLinkLabel.trim().length > 0 && /* @__PURE__ */ jsxs("p", { style: { marginBottom: "16px", fontSize: "14px", color: emailTokens.mutedForeground }, children: [
|
|
4085
|
+
directBookingLinkLabel,
|
|
4086
|
+
" ",
|
|
4087
|
+
/* @__PURE__ */ jsx("a", { href: addTravellersUrl, style: { color: emailTokens.primary, wordBreak: "break-all" }, children: addTravellersUrl })
|
|
4088
|
+
] }),
|
|
4055
4089
|
/* @__PURE__ */ jsx("p", { children: l.closingMessage })
|
|
4056
4090
|
]
|
|
4057
4091
|
}
|
|
@@ -4244,176 +4278,6 @@ function TravellerFormInviteEmail({
|
|
|
4244
4278
|
}
|
|
4245
4279
|
);
|
|
4246
4280
|
}
|
|
4247
|
-
function BookingWelcomeNewSystemEmail({
|
|
4248
|
-
greeting,
|
|
4249
|
-
introParagraph,
|
|
4250
|
-
bookingsHeading,
|
|
4251
|
-
bookings,
|
|
4252
|
-
bookingFormsCompleteLabel,
|
|
4253
|
-
bookingFormsPendingLabel,
|
|
4254
|
-
bookingFormsNoneLabel,
|
|
4255
|
-
ctaLabel,
|
|
4256
|
-
bookingCodeLabel,
|
|
4257
|
-
signatureLine,
|
|
4258
|
-
footerText,
|
|
4259
|
-
logoUrl,
|
|
4260
|
-
className
|
|
4261
|
-
}) {
|
|
4262
|
-
const ctaStyle = {
|
|
4263
|
-
display: "inline-block",
|
|
4264
|
-
backgroundColor: emailTokens.primary,
|
|
4265
|
-
color: emailTokens.primaryForeground,
|
|
4266
|
-
padding: "10px 20px",
|
|
4267
|
-
borderRadius: "6px",
|
|
4268
|
-
fontSize: "14px",
|
|
4269
|
-
fontWeight: 600,
|
|
4270
|
-
textDecoration: "none",
|
|
4271
|
-
fontFamily: emailTokens.fontFamily
|
|
4272
|
-
};
|
|
4273
|
-
return /* @__PURE__ */ jsxs(
|
|
4274
|
-
"div",
|
|
4275
|
-
{
|
|
4276
|
-
style: {
|
|
4277
|
-
fontFamily: emailTokens.fontFamily,
|
|
4278
|
-
color: emailTokens.foreground,
|
|
4279
|
-
maxWidth: "600px",
|
|
4280
|
-
margin: "0 auto",
|
|
4281
|
-
padding: "32px",
|
|
4282
|
-
border: `1px solid ${emailTokens.border}`,
|
|
4283
|
-
borderRadius: "12px",
|
|
4284
|
-
backgroundColor: emailTokens.white
|
|
4285
|
-
},
|
|
4286
|
-
className,
|
|
4287
|
-
children: [
|
|
4288
|
-
/* @__PURE__ */ jsx(EmailLogo, { src: logoUrl }),
|
|
4289
|
-
/* @__PURE__ */ jsx("p", { style: { fontSize: "16px", lineHeight: "1.5", margin: "0 0 12px" }, children: greeting }),
|
|
4290
|
-
/* @__PURE__ */ jsx("p", { style: { fontSize: "15px", lineHeight: "1.5", margin: "0 0 24px" }, children: introParagraph }),
|
|
4291
|
-
/* @__PURE__ */ jsx(
|
|
4292
|
-
"hr",
|
|
4293
|
-
{
|
|
4294
|
-
style: {
|
|
4295
|
-
border: "none",
|
|
4296
|
-
borderTop: `1px solid ${emailTokens.border}`,
|
|
4297
|
-
margin: "0 0 24px"
|
|
4298
|
-
}
|
|
4299
|
-
}
|
|
4300
|
-
),
|
|
4301
|
-
/* @__PURE__ */ jsx(
|
|
4302
|
-
"p",
|
|
4303
|
-
{
|
|
4304
|
-
style: {
|
|
4305
|
-
fontSize: "15px",
|
|
4306
|
-
fontWeight: 700,
|
|
4307
|
-
margin: "0 0 16px",
|
|
4308
|
-
color: emailTokens.foreground
|
|
4309
|
-
},
|
|
4310
|
-
children: bookingsHeading
|
|
4311
|
-
}
|
|
4312
|
-
),
|
|
4313
|
-
/* @__PURE__ */ jsx("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 24px" }, children: bookings.map((b) => {
|
|
4314
|
-
const statusLine = b.formsStatus === "COMPLETO" ? bookingFormsCompleteLabel : b.formsStatus === "SEM_FORM" ? bookingFormsNoneLabel != null ? bookingFormsNoneLabel : "" : bookingFormsPendingLabel(b.formsCompleted, b.formsRequired);
|
|
4315
|
-
const statusIcon = b.formsStatus === "COMPLETO" ? "\u2713" : b.formsStatus === "SEM_FORM" ? "" : "\u26A0";
|
|
4316
|
-
const statusColor = b.formsStatus === "COMPLETO" ? emailTokens.green : b.formsStatus === "SEM_FORM" ? emailTokens.mutedForeground : emailTokens.destructive;
|
|
4317
|
-
return /* @__PURE__ */ jsxs(
|
|
4318
|
-
"li",
|
|
4319
|
-
{
|
|
4320
|
-
style: {
|
|
4321
|
-
marginBottom: "16px",
|
|
4322
|
-
padding: "16px",
|
|
4323
|
-
backgroundColor: emailTokens.muted,
|
|
4324
|
-
border: `1px solid ${emailTokens.border}`,
|
|
4325
|
-
borderRadius: "8px"
|
|
4326
|
-
},
|
|
4327
|
-
children: [
|
|
4328
|
-
/* @__PURE__ */ jsx(
|
|
4329
|
-
"p",
|
|
4330
|
-
{
|
|
4331
|
-
style: {
|
|
4332
|
-
fontSize: "15px",
|
|
4333
|
-
fontWeight: 600,
|
|
4334
|
-
margin: "0 0 6px",
|
|
4335
|
-
color: emailTokens.foreground
|
|
4336
|
-
},
|
|
4337
|
-
children: b.adventureName
|
|
4338
|
-
}
|
|
4339
|
-
),
|
|
4340
|
-
/* @__PURE__ */ jsx(
|
|
4341
|
-
"p",
|
|
4342
|
-
{
|
|
4343
|
-
style: {
|
|
4344
|
-
fontSize: "13px",
|
|
4345
|
-
color: emailTokens.mutedForeground,
|
|
4346
|
-
margin: "0 0 4px"
|
|
4347
|
-
},
|
|
4348
|
-
children: b.startDate
|
|
4349
|
-
}
|
|
4350
|
-
),
|
|
4351
|
-
/* @__PURE__ */ jsxs(
|
|
4352
|
-
"p",
|
|
4353
|
-
{
|
|
4354
|
-
style: {
|
|
4355
|
-
fontSize: "13px",
|
|
4356
|
-
color: emailTokens.mutedForeground,
|
|
4357
|
-
margin: "0 0 8px"
|
|
4358
|
-
},
|
|
4359
|
-
children: [
|
|
4360
|
-
/* @__PURE__ */ jsx("span", { style: { fontWeight: 600 }, children: bookingCodeLabel }),
|
|
4361
|
-
" ",
|
|
4362
|
-
/* @__PURE__ */ jsxs(
|
|
4363
|
-
"span",
|
|
4364
|
-
{
|
|
4365
|
-
style: {
|
|
4366
|
-
fontFamily: emailTokens.fontFamily,
|
|
4367
|
-
color: emailTokens.foreground,
|
|
4368
|
-
fontWeight: 600
|
|
4369
|
-
},
|
|
4370
|
-
children: [
|
|
4371
|
-
"#",
|
|
4372
|
-
b.bookingId
|
|
4373
|
-
]
|
|
4374
|
-
}
|
|
4375
|
-
)
|
|
4376
|
-
]
|
|
4377
|
-
}
|
|
4378
|
-
),
|
|
4379
|
-
statusLine && /* @__PURE__ */ jsxs(
|
|
4380
|
-
"p",
|
|
4381
|
-
{
|
|
4382
|
-
style: {
|
|
4383
|
-
fontSize: "13px",
|
|
4384
|
-
color: statusColor,
|
|
4385
|
-
margin: "0 0 12px",
|
|
4386
|
-
fontWeight: 500
|
|
4387
|
-
},
|
|
4388
|
-
children: [
|
|
4389
|
-
statusIcon ? `${statusIcon} ` : "",
|
|
4390
|
-
statusLine
|
|
4391
|
-
]
|
|
4392
|
-
}
|
|
4393
|
-
),
|
|
4394
|
-
/* @__PURE__ */ jsx("a", { href: b.bookingPublicUrl, style: ctaStyle, children: ctaLabel })
|
|
4395
|
-
]
|
|
4396
|
-
},
|
|
4397
|
-
b.bookingId
|
|
4398
|
-
);
|
|
4399
|
-
}) }),
|
|
4400
|
-
footerText && /* @__PURE__ */ jsx(
|
|
4401
|
-
"p",
|
|
4402
|
-
{
|
|
4403
|
-
style: {
|
|
4404
|
-
color: emailTokens.mutedForeground,
|
|
4405
|
-
fontSize: "13px",
|
|
4406
|
-
lineHeight: "1.5",
|
|
4407
|
-
margin: "0 0 16px"
|
|
4408
|
-
},
|
|
4409
|
-
children: footerText
|
|
4410
|
-
}
|
|
4411
|
-
),
|
|
4412
|
-
/* @__PURE__ */ jsx("p", { style: { fontSize: "14px", lineHeight: "1.5", margin: "0" }, children: signatureLine })
|
|
4413
|
-
]
|
|
4414
|
-
}
|
|
4415
|
-
);
|
|
4416
|
-
}
|
|
4417
4281
|
function CounterField({
|
|
4418
4282
|
label,
|
|
4419
4283
|
sublabel,
|
|
@@ -4528,11 +4392,11 @@ function DatePickerField({
|
|
|
4528
4392
|
fromDate,
|
|
4529
4393
|
className
|
|
4530
4394
|
}) {
|
|
4531
|
-
const [open, setOpen] =
|
|
4532
|
-
const containerRef =
|
|
4533
|
-
const [calendarWidth, setCalendarWidth] =
|
|
4395
|
+
const [open, setOpen] = React23.useState(false);
|
|
4396
|
+
const containerRef = React23.useRef(null);
|
|
4397
|
+
const [calendarWidth, setCalendarWidth] = React23.useState();
|
|
4534
4398
|
const hasValue = !!value;
|
|
4535
|
-
|
|
4399
|
+
React23.useEffect(() => {
|
|
4536
4400
|
if (!containerRef.current) return;
|
|
4537
4401
|
const observer = new ResizeObserver(([entry]) => {
|
|
4538
4402
|
setCalendarWidth(entry.contentRect.width);
|
|
@@ -4641,7 +4505,7 @@ function BookingForm({
|
|
|
4641
4505
|
subtitle = "Free enquiry \u2013 no commitment",
|
|
4642
4506
|
className
|
|
4643
4507
|
}) {
|
|
4644
|
-
const [values, setValues] =
|
|
4508
|
+
const [values, setValues] = React23.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
4645
4509
|
const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
4646
4510
|
const handleSubmit = (e) => {
|
|
4647
4511
|
e.preventDefault();
|
|
@@ -5173,11 +5037,11 @@ function FloatingTextarea({
|
|
|
5173
5037
|
}
|
|
5174
5038
|
function SelectField({ field, value, onChange, error, disabled }) {
|
|
5175
5039
|
var _a, _b, _c;
|
|
5176
|
-
const [open, setOpen] =
|
|
5177
|
-
const containerRef =
|
|
5040
|
+
const [open, setOpen] = React23.useState(false);
|
|
5041
|
+
const containerRef = React23.useRef(null);
|
|
5178
5042
|
const options = (_a = field.options) != null ? _a : [];
|
|
5179
5043
|
const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
|
|
5180
|
-
|
|
5044
|
+
React23.useEffect(() => {
|
|
5181
5045
|
if (!open) return;
|
|
5182
5046
|
const handleOutside = (e) => {
|
|
5183
5047
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -5566,11 +5430,11 @@ function RegistrationForm({
|
|
|
5566
5430
|
readOnly = false
|
|
5567
5431
|
}) {
|
|
5568
5432
|
var _a;
|
|
5569
|
-
const L =
|
|
5433
|
+
const L = React23.useMemo(
|
|
5570
5434
|
() => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
|
|
5571
5435
|
[labels]
|
|
5572
5436
|
);
|
|
5573
|
-
const sortedFields =
|
|
5437
|
+
const sortedFields = React23.useMemo(
|
|
5574
5438
|
() => [...fields].sort((a, b) => {
|
|
5575
5439
|
var _a2, _b;
|
|
5576
5440
|
return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
|
|
@@ -5578,7 +5442,7 @@ function RegistrationForm({
|
|
|
5578
5442
|
[fields]
|
|
5579
5443
|
);
|
|
5580
5444
|
const isControlled = values !== void 0;
|
|
5581
|
-
const [internal, setInternal] =
|
|
5445
|
+
const [internal, setInternal] = React23.useState(
|
|
5582
5446
|
() => initializeValues(
|
|
5583
5447
|
sortedFields,
|
|
5584
5448
|
defaultValues != null ? defaultValues : {},
|
|
@@ -5586,9 +5450,9 @@ function RegistrationForm({
|
|
|
5586
5450
|
includeTerms
|
|
5587
5451
|
)
|
|
5588
5452
|
);
|
|
5589
|
-
const [submitAttempted, setSubmitAttempted] =
|
|
5590
|
-
const [validationErrors, setValidationErrors] =
|
|
5591
|
-
|
|
5453
|
+
const [submitAttempted, setSubmitAttempted] = React23.useState(false);
|
|
5454
|
+
const [validationErrors, setValidationErrors] = React23.useState({});
|
|
5455
|
+
React23.useEffect(() => {
|
|
5592
5456
|
if (isControlled) return;
|
|
5593
5457
|
setInternal((prev) => {
|
|
5594
5458
|
const next = initializeValues(
|
|
@@ -5645,7 +5509,7 @@ function RegistrationForm({
|
|
|
5645
5509
|
const termsError = submitAttempted && termsEnabled && !termsAccepted;
|
|
5646
5510
|
const firstErrorFieldId = Object.keys(fieldErrors)[0];
|
|
5647
5511
|
const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
|
|
5648
|
-
|
|
5512
|
+
React23.useEffect(() => {
|
|
5649
5513
|
if (!submitAttempted || !scrollTargetId) return;
|
|
5650
5514
|
const timer = setTimeout(() => {
|
|
5651
5515
|
const elem = document.getElementById(scrollTargetId);
|
|
@@ -6099,10 +5963,10 @@ var OTPCodeInput = ({
|
|
|
6099
5963
|
id,
|
|
6100
5964
|
required
|
|
6101
5965
|
}) => {
|
|
6102
|
-
const baseId = id != null ? id :
|
|
6103
|
-
const inputRef =
|
|
6104
|
-
const [focused, setFocused] =
|
|
6105
|
-
const digits =
|
|
5966
|
+
const baseId = id != null ? id : React23.useId();
|
|
5967
|
+
const inputRef = React23.useRef(null);
|
|
5968
|
+
const [focused, setFocused] = React23.useState(false);
|
|
5969
|
+
const digits = React23.useMemo(() => {
|
|
6106
5970
|
const arr = value.split("").slice(0, length);
|
|
6107
5971
|
while (arr.length < length) arr.push("");
|
|
6108
5972
|
return arr;
|
|
@@ -6218,7 +6082,7 @@ function Checkbox(_a) {
|
|
|
6218
6082
|
})
|
|
6219
6083
|
);
|
|
6220
6084
|
}
|
|
6221
|
-
var AccordionVariantContext =
|
|
6085
|
+
var AccordionVariantContext = React23.createContext("default");
|
|
6222
6086
|
function Accordion(_a) {
|
|
6223
6087
|
var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
|
|
6224
6088
|
return /* @__PURE__ */ jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
|
|
@@ -6236,7 +6100,7 @@ function Accordion(_a) {
|
|
|
6236
6100
|
}
|
|
6237
6101
|
function AccordionItem(_a) {
|
|
6238
6102
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6239
|
-
const variant =
|
|
6103
|
+
const variant = React23.useContext(AccordionVariantContext);
|
|
6240
6104
|
return /* @__PURE__ */ jsx(
|
|
6241
6105
|
Accordion$1.Item,
|
|
6242
6106
|
__spreadValues({
|
|
@@ -6257,7 +6121,7 @@ function AccordionTrigger(_a) {
|
|
|
6257
6121
|
"className",
|
|
6258
6122
|
"children"
|
|
6259
6123
|
]);
|
|
6260
|
-
const variant =
|
|
6124
|
+
const variant = React23.useContext(AccordionVariantContext);
|
|
6261
6125
|
return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
|
|
6262
6126
|
Accordion$1.Trigger,
|
|
6263
6127
|
__spreadProps(__spreadValues({
|
|
@@ -6311,7 +6175,7 @@ function AccordionContent(_a) {
|
|
|
6311
6175
|
"className",
|
|
6312
6176
|
"children"
|
|
6313
6177
|
]);
|
|
6314
|
-
const variant =
|
|
6178
|
+
const variant = React23.useContext(AccordionVariantContext);
|
|
6315
6179
|
return /* @__PURE__ */ jsx(
|
|
6316
6180
|
Accordion$1.Panel,
|
|
6317
6181
|
__spreadProps(__spreadValues({
|
|
@@ -6343,7 +6207,7 @@ function FilterPanel({
|
|
|
6343
6207
|
title = "Filters",
|
|
6344
6208
|
className
|
|
6345
6209
|
}) {
|
|
6346
|
-
const [internalValue, setInternalValue] =
|
|
6210
|
+
const [internalValue, setInternalValue] = React23.useState(
|
|
6347
6211
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
6348
6212
|
);
|
|
6349
6213
|
const selected = value != null ? value : internalValue;
|
|
@@ -6505,11 +6369,11 @@ function ItineraryModal({
|
|
|
6505
6369
|
onNext
|
|
6506
6370
|
}) {
|
|
6507
6371
|
var _a, _b, _c;
|
|
6508
|
-
const [imgIndex, setImgIndex] =
|
|
6372
|
+
const [imgIndex, setImgIndex] = React23.useState(0);
|
|
6509
6373
|
const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
|
|
6510
6374
|
const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
|
|
6511
6375
|
const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
|
|
6512
|
-
|
|
6376
|
+
React23.useEffect(() => {
|
|
6513
6377
|
setImgIndex(0);
|
|
6514
6378
|
}, [stop == null ? void 0 : stop.dayNumber]);
|
|
6515
6379
|
if (!stop) return null;
|
|
@@ -6636,8 +6500,8 @@ function ItineraryModal({
|
|
|
6636
6500
|
) });
|
|
6637
6501
|
}
|
|
6638
6502
|
function Itinerary({ title, subtitle, stops, className }) {
|
|
6639
|
-
const [activeIndex, setActiveIndex] =
|
|
6640
|
-
const scrollRef =
|
|
6503
|
+
const [activeIndex, setActiveIndex] = React23.useState(null);
|
|
6504
|
+
const scrollRef = React23.useRef(null);
|
|
6641
6505
|
const activeStop = activeIndex !== null ? stops[activeIndex] : null;
|
|
6642
6506
|
const scrollBy = (dir) => {
|
|
6643
6507
|
if (!scrollRef.current) return;
|
|
@@ -6723,8 +6587,8 @@ function MenuTrip({
|
|
|
6723
6587
|
bold = true,
|
|
6724
6588
|
className
|
|
6725
6589
|
}) {
|
|
6726
|
-
const scrollRef =
|
|
6727
|
-
|
|
6590
|
+
const scrollRef = React23.useRef(null);
|
|
6591
|
+
React23.useEffect(() => {
|
|
6728
6592
|
if (!scrollRef.current || !activeSection) return;
|
|
6729
6593
|
const container = scrollRef.current;
|
|
6730
6594
|
const btn = container.querySelector(
|
|
@@ -6870,18 +6734,18 @@ function Lightbox({
|
|
|
6870
6734
|
onClose
|
|
6871
6735
|
}) {
|
|
6872
6736
|
var _a;
|
|
6873
|
-
const [index, setIndex] =
|
|
6737
|
+
const [index, setIndex] = React23.useState(initialIndex);
|
|
6874
6738
|
const total = photos.length;
|
|
6875
6739
|
const photo = photos[index];
|
|
6876
|
-
const prev =
|
|
6740
|
+
const prev = React23.useCallback(
|
|
6877
6741
|
() => setIndex((i) => (i - 1 + total) % total),
|
|
6878
6742
|
[total]
|
|
6879
6743
|
);
|
|
6880
|
-
const next =
|
|
6744
|
+
const next = React23.useCallback(
|
|
6881
6745
|
() => setIndex((i) => (i + 1) % total),
|
|
6882
6746
|
[total]
|
|
6883
6747
|
);
|
|
6884
|
-
|
|
6748
|
+
React23.useEffect(() => {
|
|
6885
6749
|
const onKey = (e) => {
|
|
6886
6750
|
if (e.key === "Escape") onClose();
|
|
6887
6751
|
if (e.key === "ArrowLeft") prev();
|
|
@@ -7075,7 +6939,7 @@ function GridGallery({
|
|
|
7075
6939
|
initialVisible,
|
|
7076
6940
|
onOpen
|
|
7077
6941
|
}) {
|
|
7078
|
-
const [expanded, setExpanded] =
|
|
6942
|
+
const [expanded, setExpanded] = React23.useState(false);
|
|
7079
6943
|
const cols = gridCols(photos.length);
|
|
7080
6944
|
const hasMore = photos.length > initialVisible;
|
|
7081
6945
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
@@ -7105,7 +6969,7 @@ function MasonryGallery({
|
|
|
7105
6969
|
initialVisible,
|
|
7106
6970
|
onOpen
|
|
7107
6971
|
}) {
|
|
7108
|
-
const [expanded, setExpanded] =
|
|
6972
|
+
const [expanded, setExpanded] = React23.useState(false);
|
|
7109
6973
|
const hasMore = photos.length > initialVisible;
|
|
7110
6974
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
7111
6975
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -7178,7 +7042,7 @@ function FeaturedGallery({
|
|
|
7178
7042
|
photos,
|
|
7179
7043
|
onOpen
|
|
7180
7044
|
}) {
|
|
7181
|
-
const [expanded, setExpanded] =
|
|
7045
|
+
const [expanded, setExpanded] = React23.useState(false);
|
|
7182
7046
|
const featured = photos.slice(0, 3);
|
|
7183
7047
|
const extra = photos.slice(3);
|
|
7184
7048
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -7255,8 +7119,8 @@ function PhotoGallery({
|
|
|
7255
7119
|
onPhotoClick,
|
|
7256
7120
|
className
|
|
7257
7121
|
}) {
|
|
7258
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
7259
|
-
const normalised =
|
|
7122
|
+
const [lightboxIndex, setLightboxIndex] = React23.useState(null);
|
|
7123
|
+
const normalised = React23.useMemo(() => photos.map(normalise), [photos]);
|
|
7260
7124
|
const handleOpen = (index) => {
|
|
7261
7125
|
setLightboxIndex(index);
|
|
7262
7126
|
onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
|
|
@@ -7345,7 +7209,7 @@ function PricingTrip({
|
|
|
7345
7209
|
variant = "card",
|
|
7346
7210
|
className
|
|
7347
7211
|
}) {
|
|
7348
|
-
const [showPricing, setShowPricing] =
|
|
7212
|
+
const [showPricing, setShowPricing] = React23.useState(false);
|
|
7349
7213
|
if (variant === "compact") {
|
|
7350
7214
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3", className), children: [
|
|
7351
7215
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -7668,14 +7532,14 @@ function SiteHeader({
|
|
|
7668
7532
|
className
|
|
7669
7533
|
}) {
|
|
7670
7534
|
const t = VARIANT[variant];
|
|
7671
|
-
const [openMenu, setOpenMenu] =
|
|
7672
|
-
const [langOpen, setLangOpen] =
|
|
7673
|
-
const [mobileOpen, setMobileOpen] =
|
|
7674
|
-
const [openMobileSection, setOpenMobileSection] =
|
|
7675
|
-
const [activeLang, setActiveLang] =
|
|
7535
|
+
const [openMenu, setOpenMenu] = React23.useState(null);
|
|
7536
|
+
const [langOpen, setLangOpen] = React23.useState(false);
|
|
7537
|
+
const [mobileOpen, setMobileOpen] = React23.useState(false);
|
|
7538
|
+
const [openMobileSection, setOpenMobileSection] = React23.useState(null);
|
|
7539
|
+
const [activeLang, setActiveLang] = React23.useState(currentLanguage);
|
|
7676
7540
|
const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
|
|
7677
|
-
const menuCloseTimer =
|
|
7678
|
-
const langCloseTimer =
|
|
7541
|
+
const menuCloseTimer = React23.useRef(void 0);
|
|
7542
|
+
const langCloseTimer = React23.useRef(void 0);
|
|
7679
7543
|
const handleMenuEnter = (label) => {
|
|
7680
7544
|
clearTimeout(menuCloseTimer.current);
|
|
7681
7545
|
setOpenMenu(label);
|
|
@@ -7696,7 +7560,7 @@ function SiteHeader({
|
|
|
7696
7560
|
setOpenMenu(null);
|
|
7697
7561
|
setLangOpen(false);
|
|
7698
7562
|
};
|
|
7699
|
-
|
|
7563
|
+
React23.useEffect(() => () => {
|
|
7700
7564
|
clearTimeout(menuCloseTimer.current);
|
|
7701
7565
|
clearTimeout(langCloseTimer.current);
|
|
7702
7566
|
}, []);
|
|
@@ -7961,7 +7825,7 @@ function SiteHeader({
|
|
|
7961
7825
|
), children: [
|
|
7962
7826
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
|
|
7963
7827
|
const isActive = lang.code === activeLang;
|
|
7964
|
-
return /* @__PURE__ */ jsxs(
|
|
7828
|
+
return /* @__PURE__ */ jsxs(React23.Fragment, { children: [
|
|
7965
7829
|
i > 0 && /* @__PURE__ */ jsx("span", { className: cn(
|
|
7966
7830
|
"text-xs select-none",
|
|
7967
7831
|
variant === "white" ? "text-border" : "text-white/15"
|
|
@@ -8023,8 +7887,8 @@ function SiteHeader({
|
|
|
8023
7887
|
);
|
|
8024
7888
|
}
|
|
8025
7889
|
function ThemeToggle({ className }) {
|
|
8026
|
-
const [dark, setDark] =
|
|
8027
|
-
|
|
7890
|
+
const [dark, setDark] = React23.useState(false);
|
|
7891
|
+
React23.useEffect(() => {
|
|
8028
7892
|
const saved = localStorage.getItem("theme");
|
|
8029
7893
|
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
8030
7894
|
const isDark = saved === "dark" || !saved && prefersDark;
|
|
@@ -8175,7 +8039,7 @@ function TripCard({
|
|
|
8175
8039
|
);
|
|
8176
8040
|
}
|
|
8177
8041
|
function useHlsVideo(videoRef, src) {
|
|
8178
|
-
|
|
8042
|
+
React23.useEffect(() => {
|
|
8179
8043
|
if (!src || !videoRef.current) return;
|
|
8180
8044
|
const video = videoRef.current;
|
|
8181
8045
|
if (!src.includes(".m3u8")) return;
|
|
@@ -8217,11 +8081,11 @@ function TripHeader({
|
|
|
8217
8081
|
className
|
|
8218
8082
|
}) {
|
|
8219
8083
|
var _a;
|
|
8220
|
-
const [heroIndex, setHeroIndex] =
|
|
8221
|
-
const [videoReady, setVideoReady] =
|
|
8222
|
-
const videoRef =
|
|
8084
|
+
const [heroIndex, setHeroIndex] = React23.useState(0);
|
|
8085
|
+
const [videoReady, setVideoReady] = React23.useState(false);
|
|
8086
|
+
const videoRef = React23.useRef(null);
|
|
8223
8087
|
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
8224
|
-
const validImages =
|
|
8088
|
+
const validImages = React23.useMemo(
|
|
8225
8089
|
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
8226
8090
|
[images]
|
|
8227
8091
|
);
|
|
@@ -8236,7 +8100,7 @@ function TripHeader({
|
|
|
8236
8100
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
8237
8101
|
const hasMeta = !!(destination || duration);
|
|
8238
8102
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
8239
|
-
|
|
8103
|
+
React23.useEffect(() => {
|
|
8240
8104
|
if (!videoUrl) return;
|
|
8241
8105
|
const el = videoRef.current;
|
|
8242
8106
|
if (!el) return;
|
|
@@ -8378,7 +8242,7 @@ function TripHeader({
|
|
|
8378
8242
|
siteHeader ? "-mt-44" : "-mt-36"
|
|
8379
8243
|
),
|
|
8380
8244
|
children: [
|
|
8381
|
-
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(
|
|
8245
|
+
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(React23.Fragment, { children: [
|
|
8382
8246
|
i > 0 && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
8383
8247
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
|
|
8384
8248
|
] }, i)) }),
|
|
@@ -8478,19 +8342,19 @@ function TripPage({
|
|
|
8478
8342
|
features,
|
|
8479
8343
|
className
|
|
8480
8344
|
}) {
|
|
8481
|
-
const [activeSection, setActiveSection] =
|
|
8482
|
-
const [navFloating, setNavFloating] =
|
|
8483
|
-
const [navHidden, setNavHidden] =
|
|
8484
|
-
const [isFloating, setIsFloating] =
|
|
8485
|
-
const [sidebarPos, setSidebarPos] =
|
|
8486
|
-
const [pricingBarVisible, setPricingBarVisible] =
|
|
8487
|
-
const navRef =
|
|
8488
|
-
const navSentinelRef =
|
|
8489
|
-
const sentinelRef =
|
|
8490
|
-
const sidebarPlaceholderRef =
|
|
8491
|
-
const pricingBarRef =
|
|
8492
|
-
const galleryRef =
|
|
8493
|
-
const sections =
|
|
8345
|
+
const [activeSection, setActiveSection] = React23.useState("");
|
|
8346
|
+
const [navFloating, setNavFloating] = React23.useState(false);
|
|
8347
|
+
const [navHidden, setNavHidden] = React23.useState(false);
|
|
8348
|
+
const [isFloating, setIsFloating] = React23.useState(false);
|
|
8349
|
+
const [sidebarPos, setSidebarPos] = React23.useState(null);
|
|
8350
|
+
const [pricingBarVisible, setPricingBarVisible] = React23.useState(false);
|
|
8351
|
+
const navRef = React23.useRef(null);
|
|
8352
|
+
const navSentinelRef = React23.useRef(null);
|
|
8353
|
+
const sentinelRef = React23.useRef(null);
|
|
8354
|
+
const sidebarPlaceholderRef = React23.useRef(null);
|
|
8355
|
+
const pricingBarRef = React23.useRef(null);
|
|
8356
|
+
const galleryRef = React23.useRef(null);
|
|
8357
|
+
const sections = React23.useMemo(
|
|
8494
8358
|
() => [
|
|
8495
8359
|
{ id: "key-info", label: "Key info", show: !!(infoGroups == null ? void 0 : infoGroups.length) },
|
|
8496
8360
|
{ id: "overview", label: "Overview", show: !!overview },
|
|
@@ -8505,7 +8369,7 @@ function TripPage({
|
|
|
8505
8369
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8506
8370
|
[]
|
|
8507
8371
|
);
|
|
8508
|
-
|
|
8372
|
+
React23.useEffect(() => {
|
|
8509
8373
|
const sentinel = navSentinelRef.current;
|
|
8510
8374
|
if (!sentinel) return;
|
|
8511
8375
|
const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8513,7 +8377,7 @@ function TripPage({
|
|
|
8513
8377
|
update();
|
|
8514
8378
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8515
8379
|
}, []);
|
|
8516
|
-
|
|
8380
|
+
React23.useEffect(() => {
|
|
8517
8381
|
const sentinel = sentinelRef.current;
|
|
8518
8382
|
if (!sentinel) return;
|
|
8519
8383
|
const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8521,7 +8385,7 @@ function TripPage({
|
|
|
8521
8385
|
update();
|
|
8522
8386
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8523
8387
|
}, []);
|
|
8524
|
-
|
|
8388
|
+
React23.useEffect(() => {
|
|
8525
8389
|
const measure = () => {
|
|
8526
8390
|
if (!sidebarPlaceholderRef.current) return;
|
|
8527
8391
|
const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
|
|
@@ -8531,7 +8395,7 @@ function TripPage({
|
|
|
8531
8395
|
window.addEventListener("resize", measure);
|
|
8532
8396
|
return () => window.removeEventListener("resize", measure);
|
|
8533
8397
|
}, [isFloating]);
|
|
8534
|
-
|
|
8398
|
+
React23.useEffect(() => {
|
|
8535
8399
|
const check = () => {
|
|
8536
8400
|
var _a;
|
|
8537
8401
|
const target = (_a = galleryRef.current) != null ? _a : pricingBarRef.current;
|
|
@@ -8542,7 +8406,7 @@ function TripPage({
|
|
|
8542
8406
|
check();
|
|
8543
8407
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8544
8408
|
}, []);
|
|
8545
|
-
|
|
8409
|
+
React23.useEffect(() => {
|
|
8546
8410
|
const check = () => {
|
|
8547
8411
|
if (!pricingBarRef.current) return;
|
|
8548
8412
|
setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
|
|
@@ -8551,7 +8415,7 @@ function TripPage({
|
|
|
8551
8415
|
check();
|
|
8552
8416
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8553
8417
|
}, []);
|
|
8554
|
-
|
|
8418
|
+
React23.useEffect(() => {
|
|
8555
8419
|
if (sections.length === 0) return;
|
|
8556
8420
|
setActiveSection(sections[0].id);
|
|
8557
8421
|
const update = () => {
|
|
@@ -8916,12 +8780,12 @@ function Toast({
|
|
|
8916
8780
|
duration = 6e3,
|
|
8917
8781
|
className
|
|
8918
8782
|
}) {
|
|
8919
|
-
const [mounted, setMounted] =
|
|
8920
|
-
const [visible, setVisible] =
|
|
8921
|
-
|
|
8783
|
+
const [mounted, setMounted] = React23.useState(false);
|
|
8784
|
+
const [visible, setVisible] = React23.useState(true);
|
|
8785
|
+
React23.useEffect(() => {
|
|
8922
8786
|
setMounted(true);
|
|
8923
8787
|
}, []);
|
|
8924
|
-
|
|
8788
|
+
React23.useEffect(() => {
|
|
8925
8789
|
if (duration === 0) return;
|
|
8926
8790
|
const t = setTimeout(() => {
|
|
8927
8791
|
setVisible(false);
|
|
@@ -9625,6 +9489,6 @@ function LeadCapturePopup({
|
|
|
9625
9489
|
);
|
|
9626
9490
|
}
|
|
9627
9491
|
|
|
9628
|
-
export { ActivityCard, AgentContactCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell,
|
|
9492
|
+
export { ActivityCard, AgentContactCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, OTPCodeInput, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, RegistrationForm, RegistrationSuccessCard, SiteHeader, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, buttonVariants, cn, emailTokens, getStripeAppearance, stripeAppearance, wrapEmailHtml };
|
|
9629
9493
|
//# sourceMappingURL=index.js.map
|
|
9630
9494
|
//# sourceMappingURL=index.js.map
|