@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.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React23 = require('react');
|
|
4
4
|
var classVarianceAuthority = require('class-variance-authority');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
@@ -37,7 +37,7 @@ function _interopNamespace(e) {
|
|
|
37
37
|
return Object.freeze(n);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var React23__namespace = /*#__PURE__*/_interopNamespace(React23);
|
|
41
41
|
|
|
42
42
|
var __defProp = Object.defineProperty;
|
|
43
43
|
var __defProps = Object.defineProperties;
|
|
@@ -102,7 +102,7 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
);
|
|
105
|
-
var Button =
|
|
105
|
+
var Button = React23__namespace.forwardRef(
|
|
106
106
|
(_a, ref) => {
|
|
107
107
|
var _b = _a, { className, variant, size } = _b, props = __objRest(_b, ["className", "variant", "size"]);
|
|
108
108
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -323,10 +323,10 @@ function DialogDescription(_a) {
|
|
|
323
323
|
}, props)
|
|
324
324
|
);
|
|
325
325
|
}
|
|
326
|
-
var FloatingInput =
|
|
326
|
+
var FloatingInput = React23__namespace.forwardRef(
|
|
327
327
|
(_a, ref) => {
|
|
328
328
|
var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
|
|
329
|
-
const inputId = id != null ? id :
|
|
329
|
+
const inputId = id != null ? id : React23__namespace.useId();
|
|
330
330
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", className), children: [
|
|
331
331
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
332
332
|
"input",
|
|
@@ -366,10 +366,10 @@ var FloatingInput = React22__namespace.forwardRef(
|
|
|
366
366
|
}
|
|
367
367
|
);
|
|
368
368
|
FloatingInput.displayName = "FloatingInput";
|
|
369
|
-
var FloatingSelect =
|
|
369
|
+
var FloatingSelect = React23__namespace.forwardRef(
|
|
370
370
|
(_a, ref) => {
|
|
371
371
|
var _b = _a, { label, error, id, className, required, children, value } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children", "value"]);
|
|
372
|
-
const inputId = id != null ? id :
|
|
372
|
+
const inputId = id != null ? id : React23__namespace.useId();
|
|
373
373
|
const hasValue = typeof value === "string" ? value !== "" : value !== void 0 && value !== null;
|
|
374
374
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", className), children: [
|
|
375
375
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -633,11 +633,11 @@ function PhoneCountrySelect({
|
|
|
633
633
|
disabled
|
|
634
634
|
}) {
|
|
635
635
|
var _a;
|
|
636
|
-
const [open, setOpen] =
|
|
637
|
-
const containerRef =
|
|
638
|
-
const listRef =
|
|
636
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
637
|
+
const containerRef = React23__namespace.useRef(null);
|
|
638
|
+
const listRef = React23__namespace.useRef(null);
|
|
639
639
|
const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
|
|
640
|
-
|
|
640
|
+
React23__namespace.useEffect(() => {
|
|
641
641
|
if (!open) return;
|
|
642
642
|
const handler = (e) => {
|
|
643
643
|
var _a2;
|
|
@@ -648,7 +648,7 @@ function PhoneCountrySelect({
|
|
|
648
648
|
document.addEventListener("mousedown", handler);
|
|
649
649
|
return () => document.removeEventListener("mousedown", handler);
|
|
650
650
|
}, [open]);
|
|
651
|
-
|
|
651
|
+
React23__namespace.useEffect(() => {
|
|
652
652
|
if (!open || !listRef.current) return;
|
|
653
653
|
const activeEl = listRef.current.querySelector("[data-selected=true]");
|
|
654
654
|
activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
|
|
@@ -918,8 +918,8 @@ function CalendarDayButton(_a) {
|
|
|
918
918
|
"locale"
|
|
919
919
|
]);
|
|
920
920
|
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
921
|
-
const ref =
|
|
922
|
-
|
|
921
|
+
const ref = React23__namespace.useRef(null);
|
|
922
|
+
React23__namespace.useEffect(() => {
|
|
923
923
|
var _a2;
|
|
924
924
|
if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
|
|
925
925
|
}, [modifiers.focused]);
|
|
@@ -950,16 +950,16 @@ function BirthDateField({
|
|
|
950
950
|
className,
|
|
951
951
|
disabled
|
|
952
952
|
}) {
|
|
953
|
-
const [open, setOpen] =
|
|
954
|
-
const [text, setText] =
|
|
953
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
954
|
+
const [text, setText] = React23__namespace.useState(
|
|
955
955
|
value ? dateFns.format(value, "dd/MM/yyyy") : ""
|
|
956
956
|
);
|
|
957
|
-
const containerRef =
|
|
958
|
-
const inputId =
|
|
959
|
-
|
|
957
|
+
const containerRef = React23__namespace.useRef(null);
|
|
958
|
+
const inputId = React23__namespace.useId();
|
|
959
|
+
React23__namespace.useEffect(() => {
|
|
960
960
|
setText(value ? dateFns.format(value, "dd/MM/yyyy") : "");
|
|
961
961
|
}, [value]);
|
|
962
|
-
|
|
962
|
+
React23__namespace.useEffect(() => {
|
|
963
963
|
if (!open) return;
|
|
964
964
|
const handler = (e) => {
|
|
965
965
|
var _a;
|
|
@@ -1168,14 +1168,14 @@ function CountrySearchField({
|
|
|
1168
1168
|
}) {
|
|
1169
1169
|
var _a;
|
|
1170
1170
|
const list = countries != null ? countries : COUNTRIES;
|
|
1171
|
-
const [query, setQuery] =
|
|
1172
|
-
const [open, setOpen] =
|
|
1173
|
-
const containerRef =
|
|
1174
|
-
const searchRef =
|
|
1171
|
+
const [query, setQuery] = React23__namespace.useState("");
|
|
1172
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
1173
|
+
const containerRef = React23__namespace.useRef(null);
|
|
1174
|
+
const searchRef = React23__namespace.useRef(null);
|
|
1175
1175
|
const selected = list.find((c) => c.code === value);
|
|
1176
1176
|
const isFloated = open || !!selected;
|
|
1177
1177
|
const filtered = query.trim() ? list.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : list;
|
|
1178
|
-
|
|
1178
|
+
React23__namespace.useEffect(() => {
|
|
1179
1179
|
if (!open) return;
|
|
1180
1180
|
const handler = (e) => {
|
|
1181
1181
|
var _a2;
|
|
@@ -1285,7 +1285,7 @@ function Alert({ variant = "info", children, className }) {
|
|
|
1285
1285
|
function AdventureCard({ adventure }) {
|
|
1286
1286
|
var _a, _b, _c, _d, _e, _f;
|
|
1287
1287
|
const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
|
|
1288
|
-
const [checkedInternal, setCheckedInternal] =
|
|
1288
|
+
const [checkedInternal, setCheckedInternal] = React23__namespace.useState(
|
|
1289
1289
|
new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
|
|
1290
1290
|
);
|
|
1291
1291
|
const isChecked = (opt) => {
|
|
@@ -1622,7 +1622,7 @@ function BookingShell({
|
|
|
1622
1622
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
|
|
1623
1623
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
|
|
1624
1624
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: title }),
|
|
1625
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1625
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
|
|
1626
1626
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1627
1627
|
"span",
|
|
1628
1628
|
{
|
|
@@ -1821,7 +1821,7 @@ function TermsSection({
|
|
|
1821
1821
|
termsContent
|
|
1822
1822
|
}) {
|
|
1823
1823
|
var _a;
|
|
1824
|
-
const [modalOpen, setModalOpen] =
|
|
1824
|
+
const [modalOpen, setModalOpen] = React23__namespace.useState(false);
|
|
1825
1825
|
const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
|
|
1826
1826
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
|
|
1827
1827
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
|
|
@@ -1909,9 +1909,9 @@ function BookingWizard({
|
|
|
1909
1909
|
depositInfo,
|
|
1910
1910
|
onCancel
|
|
1911
1911
|
}) {
|
|
1912
|
-
const [step, setStep] =
|
|
1913
|
-
const [error, setError] =
|
|
1914
|
-
const [responsible, setResponsible] =
|
|
1912
|
+
const [step, setStep] = React23__namespace.useState("responsible");
|
|
1913
|
+
const [error, setError] = React23__namespace.useState(null);
|
|
1914
|
+
const [responsible, setResponsible] = React23__namespace.useState({
|
|
1915
1915
|
firstName: "",
|
|
1916
1916
|
lastName: "",
|
|
1917
1917
|
email: "",
|
|
@@ -1930,7 +1930,7 @@ function BookingWizard({
|
|
|
1930
1930
|
return s + ((_b = (_a = a.slots) == null ? void 0 : _a.children) != null ? _b : 0);
|
|
1931
1931
|
}, 0);
|
|
1932
1932
|
const totalPax = totalAdults + totalChildren;
|
|
1933
|
-
const [travellers, setTravellers] =
|
|
1933
|
+
const [travellers, setTravellers] = React23__namespace.useState(
|
|
1934
1934
|
Array.from({ length: Math.max(totalPax, 1) }, () => ({
|
|
1935
1935
|
firstName: "",
|
|
1936
1936
|
lastName: "",
|
|
@@ -1938,9 +1938,9 @@ function BookingWizard({
|
|
|
1938
1938
|
email: ""
|
|
1939
1939
|
}))
|
|
1940
1940
|
);
|
|
1941
|
-
const [payAmount, setPayAmount] =
|
|
1942
|
-
const [payMethod, setPayMethod] =
|
|
1943
|
-
const [termsAccepted, setTermsAccepted] =
|
|
1941
|
+
const [payAmount, setPayAmount] = React23__namespace.useState("full");
|
|
1942
|
+
const [payMethod, setPayMethod] = React23__namespace.useState("stripe");
|
|
1943
|
+
const [termsAccepted, setTermsAccepted] = React23__namespace.useState(false);
|
|
1944
1944
|
const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
|
|
1945
1945
|
const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
|
|
1946
1946
|
const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
|
|
@@ -2141,7 +2141,7 @@ function Offer({
|
|
|
2141
2141
|
continueDisabled,
|
|
2142
2142
|
className
|
|
2143
2143
|
}) {
|
|
2144
|
-
const [showBooking, setShowBooking] =
|
|
2144
|
+
const [showBooking, setShowBooking] = React23__namespace.useState(false);
|
|
2145
2145
|
const isShowingCheckout = !!checkoutSlot || showBooking;
|
|
2146
2146
|
const handleBook = () => {
|
|
2147
2147
|
if (!checkoutSlot && !externalBookingFlow) setShowBooking(true);
|
|
@@ -2479,7 +2479,7 @@ function AdventureSection({
|
|
|
2479
2479
|
cannotRemoveLastTravellerLabel
|
|
2480
2480
|
}) {
|
|
2481
2481
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2482
|
-
const [detailsOpen, setDetailsOpen] =
|
|
2482
|
+
const [detailsOpen, setDetailsOpen] = React23__namespace.useState(false);
|
|
2483
2483
|
const handleCopyUrl = (url) => {
|
|
2484
2484
|
if (onCopyFormLink) {
|
|
2485
2485
|
onCopyFormLink(url);
|
|
@@ -2965,8 +2965,8 @@ function AddTravellerDialog({
|
|
|
2965
2965
|
errorMessage
|
|
2966
2966
|
}) {
|
|
2967
2967
|
var _a, _b, _c, _d, _e;
|
|
2968
|
-
const [form, setForm] =
|
|
2969
|
-
|
|
2968
|
+
const [form, setForm] = React23__namespace.useState(() => createInitialAddFormData(config));
|
|
2969
|
+
React23__namespace.useEffect(() => {
|
|
2970
2970
|
if (open) {
|
|
2971
2971
|
setForm(createInitialAddFormData(config));
|
|
2972
2972
|
}
|
|
@@ -3026,7 +3026,7 @@ function EditTravellerDialog({
|
|
|
3026
3026
|
errorMessage
|
|
3027
3027
|
}) {
|
|
3028
3028
|
var _a, _b, _c, _d, _e;
|
|
3029
|
-
const [form, setForm] =
|
|
3029
|
+
const [form, setForm] = React23__namespace.useState(() => ({
|
|
3030
3030
|
firstName: "",
|
|
3031
3031
|
lastName: "",
|
|
3032
3032
|
email: "",
|
|
@@ -3035,7 +3035,7 @@ function EditTravellerDialog({
|
|
|
3035
3035
|
birthDate: "",
|
|
3036
3036
|
personType: "ADULT"
|
|
3037
3037
|
}));
|
|
3038
|
-
|
|
3038
|
+
React23__namespace.useEffect(() => {
|
|
3039
3039
|
var _a2, _b2, _c2, _d2, _e2, _f;
|
|
3040
3040
|
if (open && traveller) {
|
|
3041
3041
|
setForm({
|
|
@@ -3302,37 +3302,37 @@ function BookingDetails({
|
|
|
3302
3302
|
const hasSubmitAddTraveller = !!onSubmitAddTraveller;
|
|
3303
3303
|
const hasSubmitEditTraveller = !!onSubmitEditTraveller;
|
|
3304
3304
|
const hasConfirmRemoveTraveller = !!onConfirmRemoveTraveller;
|
|
3305
|
-
const [addModalState, setAddModalState] =
|
|
3305
|
+
const [addModalState, setAddModalState] = React23__namespace.useState({
|
|
3306
3306
|
open: false,
|
|
3307
3307
|
adventureId: null
|
|
3308
3308
|
});
|
|
3309
|
-
const [editModalState, setEditModalState] =
|
|
3310
|
-
const [deleteModalState, setDeleteModalState] =
|
|
3311
|
-
const handleRequestOpenAddModal =
|
|
3309
|
+
const [editModalState, setEditModalState] = React23__namespace.useState({ open: false, adventureId: null, traveller: null });
|
|
3310
|
+
const [deleteModalState, setDeleteModalState] = React23__namespace.useState({ open: false, adventureId: null, traveller: null });
|
|
3311
|
+
const handleRequestOpenAddModal = React23__namespace.useCallback((adventureId) => {
|
|
3312
3312
|
setAddModalState({ open: true, adventureId });
|
|
3313
3313
|
}, []);
|
|
3314
|
-
const handleRequestOpenEditModal =
|
|
3314
|
+
const handleRequestOpenEditModal = React23__namespace.useCallback(
|
|
3315
3315
|
(adventureId, traveller) => {
|
|
3316
3316
|
setEditModalState({ open: true, adventureId, traveller });
|
|
3317
3317
|
},
|
|
3318
3318
|
[]
|
|
3319
3319
|
);
|
|
3320
|
-
const handleRequestOpenDeleteModal =
|
|
3320
|
+
const handleRequestOpenDeleteModal = React23__namespace.useCallback(
|
|
3321
3321
|
(adventureId, traveller) => {
|
|
3322
3322
|
setDeleteModalState({ open: true, adventureId, traveller });
|
|
3323
3323
|
},
|
|
3324
3324
|
[]
|
|
3325
3325
|
);
|
|
3326
|
-
const closeAddModal =
|
|
3326
|
+
const closeAddModal = React23__namespace.useCallback(() => {
|
|
3327
3327
|
setAddModalState({ open: false, adventureId: null });
|
|
3328
3328
|
}, []);
|
|
3329
|
-
const closeEditModal =
|
|
3329
|
+
const closeEditModal = React23__namespace.useCallback(() => {
|
|
3330
3330
|
setEditModalState({ open: false, adventureId: null, traveller: null });
|
|
3331
3331
|
}, []);
|
|
3332
|
-
const closeDeleteModal =
|
|
3332
|
+
const closeDeleteModal = React23__namespace.useCallback(() => {
|
|
3333
3333
|
setDeleteModalState({ open: false, adventureId: null, traveller: null });
|
|
3334
3334
|
}, []);
|
|
3335
|
-
const handleAddSubmit =
|
|
3335
|
+
const handleAddSubmit = React23__namespace.useCallback(
|
|
3336
3336
|
async (adventureId, data) => {
|
|
3337
3337
|
if (!onSubmitAddTraveller) return;
|
|
3338
3338
|
try {
|
|
@@ -3343,7 +3343,7 @@ function BookingDetails({
|
|
|
3343
3343
|
},
|
|
3344
3344
|
[onSubmitAddTraveller, closeAddModal]
|
|
3345
3345
|
);
|
|
3346
|
-
const handleEditSubmit =
|
|
3346
|
+
const handleEditSubmit = React23__namespace.useCallback(
|
|
3347
3347
|
async (adventureId, travellerId, data) => {
|
|
3348
3348
|
if (!onSubmitEditTraveller) return;
|
|
3349
3349
|
try {
|
|
@@ -3354,7 +3354,7 @@ function BookingDetails({
|
|
|
3354
3354
|
},
|
|
3355
3355
|
[onSubmitEditTraveller, closeEditModal]
|
|
3356
3356
|
);
|
|
3357
|
-
const handleDeleteConfirm =
|
|
3357
|
+
const handleDeleteConfirm = React23__namespace.useCallback(
|
|
3358
3358
|
async (adventureId, travellerId) => {
|
|
3359
3359
|
if (!onConfirmRemoveTraveller) return;
|
|
3360
3360
|
try {
|
|
@@ -4006,7 +4006,8 @@ var DEFAULT_LABELS2 = {
|
|
|
4006
4006
|
numberOfPeopleLabel: "Number of People:",
|
|
4007
4007
|
hostLabel: "Host:",
|
|
4008
4008
|
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.",
|
|
4009
|
-
closingMessage: "If you have any questions, just reply to this email \u2014 happy to help."
|
|
4009
|
+
closingMessage: "If you have any questions, just reply to this email \u2014 happy to help.",
|
|
4010
|
+
nextStepsHeading: "Next steps:"
|
|
4010
4011
|
};
|
|
4011
4012
|
function BookingConfirmationEmail({
|
|
4012
4013
|
recipientName,
|
|
@@ -4019,7 +4020,10 @@ function BookingConfirmationEmail({
|
|
|
4019
4020
|
numberOfPeople,
|
|
4020
4021
|
host,
|
|
4021
4022
|
labels,
|
|
4022
|
-
className
|
|
4023
|
+
className,
|
|
4024
|
+
nextSteps,
|
|
4025
|
+
nextStepsImportant,
|
|
4026
|
+
directBookingLinkLabel
|
|
4023
4027
|
}) {
|
|
4024
4028
|
const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
|
|
4025
4029
|
const ctaStyle = {
|
|
@@ -4036,12 +4040,13 @@ function BookingConfirmationEmail({
|
|
|
4036
4040
|
const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: addTravellersUrl, style: ctaStyle, children: l.ctaButton }) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: ctaStyle, role: "presentation", children: l.ctaButton });
|
|
4037
4041
|
const tableRows = [
|
|
4038
4042
|
{ label: l.bookingNumberLabel, value: bookingNumber },
|
|
4039
|
-
{ label: l.activityLabel, value: activity },
|
|
4043
|
+
...activity && activity.trim().length > 0 ? [{ label: l.activityLabel, value: activity }] : [],
|
|
4040
4044
|
{ label: l.adventureLabel, value: adventure },
|
|
4041
4045
|
{ label: l.startingDateLabel, value: startingDate },
|
|
4042
4046
|
{ label: l.numberOfPeopleLabel, value: String(numberOfPeople) },
|
|
4043
4047
|
{ label: l.hostLabel, value: host }
|
|
4044
4048
|
];
|
|
4049
|
+
const showNextSteps = Array.isArray(nextSteps) && nextSteps.length > 0;
|
|
4045
4050
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4046
4051
|
"div",
|
|
4047
4052
|
{
|
|
@@ -4071,8 +4076,37 @@ function BookingConfirmationEmail({
|
|
|
4071
4076
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 16px 4px 0", color: emailTokens.mutedForeground }, children: row.label }),
|
|
4072
4077
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 0", fontWeight: "500", color: emailTokens.foreground }, children: row.value })
|
|
4073
4078
|
] }, i)) }) }),
|
|
4079
|
+
showNextSteps && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4080
|
+
/* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4081
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "20px", fontWeight: "700", color: emailTokens.foreground, fontFamily: emailTokens.fontFamily, fontSize: "18px" }, children: l.nextStepsHeading }),
|
|
4082
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { borderRadius: "12px", border: `1px solid ${emailTokens.border}`, padding: "20px", marginBottom: "24px" }, children: nextSteps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx("table", { cellPadding: 0, cellSpacing: 0, style: { borderCollapse: "collapse", width: "100%", marginBottom: i < nextSteps.length - 1 ? "16px" : "0" }, children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
4083
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { verticalAlign: "top", width: "32px", paddingRight: "14px" }, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
|
|
4084
|
+
display: "inline-block",
|
|
4085
|
+
height: "24px",
|
|
4086
|
+
width: "24px",
|
|
4087
|
+
lineHeight: "24px",
|
|
4088
|
+
textAlign: "center",
|
|
4089
|
+
borderRadius: "9999px",
|
|
4090
|
+
backgroundColor: emailTokens.primaryLight,
|
|
4091
|
+
fontSize: "12px",
|
|
4092
|
+
fontWeight: "700",
|
|
4093
|
+
color: emailTokens.primary,
|
|
4094
|
+
marginTop: "2px"
|
|
4095
|
+
}, children: i + 1 }) }),
|
|
4096
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { verticalAlign: "top" }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "14px", color: emailTokens.bodyText, lineHeight: "1.6", margin: 0 }, children: step }) })
|
|
4097
|
+
] }) }) }, i)) }),
|
|
4098
|
+
nextStepsImportant && nextStepsImportant.trim().length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "32px", fontSize: "14px", color: emailTokens.foreground, lineHeight: "1.6" }, children: nextStepsImportant.split("\n").map((line, idx, arr) => /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
|
|
4099
|
+
line,
|
|
4100
|
+
idx < arr.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
|
|
4101
|
+
] }, idx)) })
|
|
4102
|
+
] }),
|
|
4074
4103
|
/* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4075
4104
|
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "16px" }, children: l.postCtaMessage }),
|
|
4105
|
+
addTravellersUrl && directBookingLinkLabel && directBookingLinkLabel.trim().length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { style: { marginBottom: "16px", fontSize: "14px", color: emailTokens.mutedForeground }, children: [
|
|
4106
|
+
directBookingLinkLabel,
|
|
4107
|
+
" ",
|
|
4108
|
+
/* @__PURE__ */ jsxRuntime.jsx("a", { href: addTravellersUrl, style: { color: emailTokens.primary, wordBreak: "break-all" }, children: addTravellersUrl })
|
|
4109
|
+
] }),
|
|
4076
4110
|
/* @__PURE__ */ jsxRuntime.jsx("p", { children: l.closingMessage })
|
|
4077
4111
|
]
|
|
4078
4112
|
}
|
|
@@ -4265,176 +4299,6 @@ function TravellerFormInviteEmail({
|
|
|
4265
4299
|
}
|
|
4266
4300
|
);
|
|
4267
4301
|
}
|
|
4268
|
-
function BookingWelcomeNewSystemEmail({
|
|
4269
|
-
greeting,
|
|
4270
|
-
introParagraph,
|
|
4271
|
-
bookingsHeading,
|
|
4272
|
-
bookings,
|
|
4273
|
-
bookingFormsCompleteLabel,
|
|
4274
|
-
bookingFormsPendingLabel,
|
|
4275
|
-
bookingFormsNoneLabel,
|
|
4276
|
-
ctaLabel,
|
|
4277
|
-
bookingCodeLabel,
|
|
4278
|
-
signatureLine,
|
|
4279
|
-
footerText,
|
|
4280
|
-
logoUrl,
|
|
4281
|
-
className
|
|
4282
|
-
}) {
|
|
4283
|
-
const ctaStyle = {
|
|
4284
|
-
display: "inline-block",
|
|
4285
|
-
backgroundColor: emailTokens.primary,
|
|
4286
|
-
color: emailTokens.primaryForeground,
|
|
4287
|
-
padding: "10px 20px",
|
|
4288
|
-
borderRadius: "6px",
|
|
4289
|
-
fontSize: "14px",
|
|
4290
|
-
fontWeight: 600,
|
|
4291
|
-
textDecoration: "none",
|
|
4292
|
-
fontFamily: emailTokens.fontFamily
|
|
4293
|
-
};
|
|
4294
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4295
|
-
"div",
|
|
4296
|
-
{
|
|
4297
|
-
style: {
|
|
4298
|
-
fontFamily: emailTokens.fontFamily,
|
|
4299
|
-
color: emailTokens.foreground,
|
|
4300
|
-
maxWidth: "600px",
|
|
4301
|
-
margin: "0 auto",
|
|
4302
|
-
padding: "32px",
|
|
4303
|
-
border: `1px solid ${emailTokens.border}`,
|
|
4304
|
-
borderRadius: "12px",
|
|
4305
|
-
backgroundColor: emailTokens.white
|
|
4306
|
-
},
|
|
4307
|
-
className,
|
|
4308
|
-
children: [
|
|
4309
|
-
/* @__PURE__ */ jsxRuntime.jsx(EmailLogo, { src: logoUrl }),
|
|
4310
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "16px", lineHeight: "1.5", margin: "0 0 12px" }, children: greeting }),
|
|
4311
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "15px", lineHeight: "1.5", margin: "0 0 24px" }, children: introParagraph }),
|
|
4312
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4313
|
-
"hr",
|
|
4314
|
-
{
|
|
4315
|
-
style: {
|
|
4316
|
-
border: "none",
|
|
4317
|
-
borderTop: `1px solid ${emailTokens.border}`,
|
|
4318
|
-
margin: "0 0 24px"
|
|
4319
|
-
}
|
|
4320
|
-
}
|
|
4321
|
-
),
|
|
4322
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4323
|
-
"p",
|
|
4324
|
-
{
|
|
4325
|
-
style: {
|
|
4326
|
-
fontSize: "15px",
|
|
4327
|
-
fontWeight: 700,
|
|
4328
|
-
margin: "0 0 16px",
|
|
4329
|
-
color: emailTokens.foreground
|
|
4330
|
-
},
|
|
4331
|
-
children: bookingsHeading
|
|
4332
|
-
}
|
|
4333
|
-
),
|
|
4334
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 24px" }, children: bookings.map((b) => {
|
|
4335
|
-
const statusLine = b.formsStatus === "COMPLETO" ? bookingFormsCompleteLabel : b.formsStatus === "SEM_FORM" ? bookingFormsNoneLabel != null ? bookingFormsNoneLabel : "" : bookingFormsPendingLabel(b.formsCompleted, b.formsRequired);
|
|
4336
|
-
const statusIcon = b.formsStatus === "COMPLETO" ? "\u2713" : b.formsStatus === "SEM_FORM" ? "" : "\u26A0";
|
|
4337
|
-
const statusColor = b.formsStatus === "COMPLETO" ? emailTokens.green : b.formsStatus === "SEM_FORM" ? emailTokens.mutedForeground : emailTokens.destructive;
|
|
4338
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4339
|
-
"li",
|
|
4340
|
-
{
|
|
4341
|
-
style: {
|
|
4342
|
-
marginBottom: "16px",
|
|
4343
|
-
padding: "16px",
|
|
4344
|
-
backgroundColor: emailTokens.muted,
|
|
4345
|
-
border: `1px solid ${emailTokens.border}`,
|
|
4346
|
-
borderRadius: "8px"
|
|
4347
|
-
},
|
|
4348
|
-
children: [
|
|
4349
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4350
|
-
"p",
|
|
4351
|
-
{
|
|
4352
|
-
style: {
|
|
4353
|
-
fontSize: "15px",
|
|
4354
|
-
fontWeight: 600,
|
|
4355
|
-
margin: "0 0 6px",
|
|
4356
|
-
color: emailTokens.foreground
|
|
4357
|
-
},
|
|
4358
|
-
children: b.adventureName
|
|
4359
|
-
}
|
|
4360
|
-
),
|
|
4361
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4362
|
-
"p",
|
|
4363
|
-
{
|
|
4364
|
-
style: {
|
|
4365
|
-
fontSize: "13px",
|
|
4366
|
-
color: emailTokens.mutedForeground,
|
|
4367
|
-
margin: "0 0 4px"
|
|
4368
|
-
},
|
|
4369
|
-
children: b.startDate
|
|
4370
|
-
}
|
|
4371
|
-
),
|
|
4372
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4373
|
-
"p",
|
|
4374
|
-
{
|
|
4375
|
-
style: {
|
|
4376
|
-
fontSize: "13px",
|
|
4377
|
-
color: emailTokens.mutedForeground,
|
|
4378
|
-
margin: "0 0 8px"
|
|
4379
|
-
},
|
|
4380
|
-
children: [
|
|
4381
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontWeight: 600 }, children: bookingCodeLabel }),
|
|
4382
|
-
" ",
|
|
4383
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4384
|
-
"span",
|
|
4385
|
-
{
|
|
4386
|
-
style: {
|
|
4387
|
-
fontFamily: emailTokens.fontFamily,
|
|
4388
|
-
color: emailTokens.foreground,
|
|
4389
|
-
fontWeight: 600
|
|
4390
|
-
},
|
|
4391
|
-
children: [
|
|
4392
|
-
"#",
|
|
4393
|
-
b.bookingId
|
|
4394
|
-
]
|
|
4395
|
-
}
|
|
4396
|
-
)
|
|
4397
|
-
]
|
|
4398
|
-
}
|
|
4399
|
-
),
|
|
4400
|
-
statusLine && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4401
|
-
"p",
|
|
4402
|
-
{
|
|
4403
|
-
style: {
|
|
4404
|
-
fontSize: "13px",
|
|
4405
|
-
color: statusColor,
|
|
4406
|
-
margin: "0 0 12px",
|
|
4407
|
-
fontWeight: 500
|
|
4408
|
-
},
|
|
4409
|
-
children: [
|
|
4410
|
-
statusIcon ? `${statusIcon} ` : "",
|
|
4411
|
-
statusLine
|
|
4412
|
-
]
|
|
4413
|
-
}
|
|
4414
|
-
),
|
|
4415
|
-
/* @__PURE__ */ jsxRuntime.jsx("a", { href: b.bookingPublicUrl, style: ctaStyle, children: ctaLabel })
|
|
4416
|
-
]
|
|
4417
|
-
},
|
|
4418
|
-
b.bookingId
|
|
4419
|
-
);
|
|
4420
|
-
}) }),
|
|
4421
|
-
footerText && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4422
|
-
"p",
|
|
4423
|
-
{
|
|
4424
|
-
style: {
|
|
4425
|
-
color: emailTokens.mutedForeground,
|
|
4426
|
-
fontSize: "13px",
|
|
4427
|
-
lineHeight: "1.5",
|
|
4428
|
-
margin: "0 0 16px"
|
|
4429
|
-
},
|
|
4430
|
-
children: footerText
|
|
4431
|
-
}
|
|
4432
|
-
),
|
|
4433
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "14px", lineHeight: "1.5", margin: "0" }, children: signatureLine })
|
|
4434
|
-
]
|
|
4435
|
-
}
|
|
4436
|
-
);
|
|
4437
|
-
}
|
|
4438
4302
|
function CounterField({
|
|
4439
4303
|
label,
|
|
4440
4304
|
sublabel,
|
|
@@ -4549,11 +4413,11 @@ function DatePickerField({
|
|
|
4549
4413
|
fromDate,
|
|
4550
4414
|
className
|
|
4551
4415
|
}) {
|
|
4552
|
-
const [open, setOpen] =
|
|
4553
|
-
const containerRef =
|
|
4554
|
-
const [calendarWidth, setCalendarWidth] =
|
|
4416
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
4417
|
+
const containerRef = React23__namespace.useRef(null);
|
|
4418
|
+
const [calendarWidth, setCalendarWidth] = React23__namespace.useState();
|
|
4555
4419
|
const hasValue = !!value;
|
|
4556
|
-
|
|
4420
|
+
React23__namespace.useEffect(() => {
|
|
4557
4421
|
if (!containerRef.current) return;
|
|
4558
4422
|
const observer = new ResizeObserver(([entry]) => {
|
|
4559
4423
|
setCalendarWidth(entry.contentRect.width);
|
|
@@ -4662,7 +4526,7 @@ function BookingForm({
|
|
|
4662
4526
|
subtitle = "Free enquiry \u2013 no commitment",
|
|
4663
4527
|
className
|
|
4664
4528
|
}) {
|
|
4665
|
-
const [values, setValues] =
|
|
4529
|
+
const [values, setValues] = React23__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
4666
4530
|
const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
4667
4531
|
const handleSubmit = (e) => {
|
|
4668
4532
|
e.preventDefault();
|
|
@@ -5194,11 +5058,11 @@ function FloatingTextarea({
|
|
|
5194
5058
|
}
|
|
5195
5059
|
function SelectField({ field, value, onChange, error, disabled }) {
|
|
5196
5060
|
var _a, _b, _c;
|
|
5197
|
-
const [open, setOpen] =
|
|
5198
|
-
const containerRef =
|
|
5061
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
5062
|
+
const containerRef = React23__namespace.useRef(null);
|
|
5199
5063
|
const options = (_a = field.options) != null ? _a : [];
|
|
5200
5064
|
const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
|
|
5201
|
-
|
|
5065
|
+
React23__namespace.useEffect(() => {
|
|
5202
5066
|
if (!open) return;
|
|
5203
5067
|
const handleOutside = (e) => {
|
|
5204
5068
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -5587,11 +5451,11 @@ function RegistrationForm({
|
|
|
5587
5451
|
readOnly = false
|
|
5588
5452
|
}) {
|
|
5589
5453
|
var _a;
|
|
5590
|
-
const L =
|
|
5454
|
+
const L = React23__namespace.useMemo(
|
|
5591
5455
|
() => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
|
|
5592
5456
|
[labels]
|
|
5593
5457
|
);
|
|
5594
|
-
const sortedFields =
|
|
5458
|
+
const sortedFields = React23__namespace.useMemo(
|
|
5595
5459
|
() => [...fields].sort((a, b) => {
|
|
5596
5460
|
var _a2, _b;
|
|
5597
5461
|
return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
|
|
@@ -5599,7 +5463,7 @@ function RegistrationForm({
|
|
|
5599
5463
|
[fields]
|
|
5600
5464
|
);
|
|
5601
5465
|
const isControlled = values !== void 0;
|
|
5602
|
-
const [internal, setInternal] =
|
|
5466
|
+
const [internal, setInternal] = React23__namespace.useState(
|
|
5603
5467
|
() => initializeValues(
|
|
5604
5468
|
sortedFields,
|
|
5605
5469
|
defaultValues != null ? defaultValues : {},
|
|
@@ -5607,9 +5471,9 @@ function RegistrationForm({
|
|
|
5607
5471
|
includeTerms
|
|
5608
5472
|
)
|
|
5609
5473
|
);
|
|
5610
|
-
const [submitAttempted, setSubmitAttempted] =
|
|
5611
|
-
const [validationErrors, setValidationErrors] =
|
|
5612
|
-
|
|
5474
|
+
const [submitAttempted, setSubmitAttempted] = React23__namespace.useState(false);
|
|
5475
|
+
const [validationErrors, setValidationErrors] = React23__namespace.useState({});
|
|
5476
|
+
React23__namespace.useEffect(() => {
|
|
5613
5477
|
if (isControlled) return;
|
|
5614
5478
|
setInternal((prev) => {
|
|
5615
5479
|
const next = initializeValues(
|
|
@@ -5666,7 +5530,7 @@ function RegistrationForm({
|
|
|
5666
5530
|
const termsError = submitAttempted && termsEnabled && !termsAccepted;
|
|
5667
5531
|
const firstErrorFieldId = Object.keys(fieldErrors)[0];
|
|
5668
5532
|
const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
|
|
5669
|
-
|
|
5533
|
+
React23__namespace.useEffect(() => {
|
|
5670
5534
|
if (!submitAttempted || !scrollTargetId) return;
|
|
5671
5535
|
const timer = setTimeout(() => {
|
|
5672
5536
|
const elem = document.getElementById(scrollTargetId);
|
|
@@ -6120,10 +5984,10 @@ var OTPCodeInput = ({
|
|
|
6120
5984
|
id,
|
|
6121
5985
|
required
|
|
6122
5986
|
}) => {
|
|
6123
|
-
const baseId = id != null ? id :
|
|
6124
|
-
const inputRef =
|
|
6125
|
-
const [focused, setFocused] =
|
|
6126
|
-
const digits =
|
|
5987
|
+
const baseId = id != null ? id : React23__namespace.useId();
|
|
5988
|
+
const inputRef = React23__namespace.useRef(null);
|
|
5989
|
+
const [focused, setFocused] = React23__namespace.useState(false);
|
|
5990
|
+
const digits = React23__namespace.useMemo(() => {
|
|
6127
5991
|
const arr = value.split("").slice(0, length);
|
|
6128
5992
|
while (arr.length < length) arr.push("");
|
|
6129
5993
|
return arr;
|
|
@@ -6239,7 +6103,7 @@ function Checkbox(_a) {
|
|
|
6239
6103
|
})
|
|
6240
6104
|
);
|
|
6241
6105
|
}
|
|
6242
|
-
var AccordionVariantContext =
|
|
6106
|
+
var AccordionVariantContext = React23__namespace.createContext("default");
|
|
6243
6107
|
function Accordion(_a) {
|
|
6244
6108
|
var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
|
|
6245
6109
|
return /* @__PURE__ */ jsxRuntime.jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6257,7 +6121,7 @@ function Accordion(_a) {
|
|
|
6257
6121
|
}
|
|
6258
6122
|
function AccordionItem(_a) {
|
|
6259
6123
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6260
|
-
const variant =
|
|
6124
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6261
6125
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6262
6126
|
accordion.Accordion.Item,
|
|
6263
6127
|
__spreadValues({
|
|
@@ -6278,7 +6142,7 @@ function AccordionTrigger(_a) {
|
|
|
6278
6142
|
"className",
|
|
6279
6143
|
"children"
|
|
6280
6144
|
]);
|
|
6281
|
-
const variant =
|
|
6145
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6282
6146
|
return /* @__PURE__ */ jsxRuntime.jsx(accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6283
6147
|
accordion.Accordion.Trigger,
|
|
6284
6148
|
__spreadProps(__spreadValues({
|
|
@@ -6332,7 +6196,7 @@ function AccordionContent(_a) {
|
|
|
6332
6196
|
"className",
|
|
6333
6197
|
"children"
|
|
6334
6198
|
]);
|
|
6335
|
-
const variant =
|
|
6199
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6336
6200
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6337
6201
|
accordion.Accordion.Panel,
|
|
6338
6202
|
__spreadProps(__spreadValues({
|
|
@@ -6364,7 +6228,7 @@ function FilterPanel({
|
|
|
6364
6228
|
title = "Filters",
|
|
6365
6229
|
className
|
|
6366
6230
|
}) {
|
|
6367
|
-
const [internalValue, setInternalValue] =
|
|
6231
|
+
const [internalValue, setInternalValue] = React23__namespace.useState(
|
|
6368
6232
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
6369
6233
|
);
|
|
6370
6234
|
const selected = value != null ? value : internalValue;
|
|
@@ -6526,11 +6390,11 @@ function ItineraryModal({
|
|
|
6526
6390
|
onNext
|
|
6527
6391
|
}) {
|
|
6528
6392
|
var _a, _b, _c;
|
|
6529
|
-
const [imgIndex, setImgIndex] =
|
|
6393
|
+
const [imgIndex, setImgIndex] = React23__namespace.useState(0);
|
|
6530
6394
|
const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
|
|
6531
6395
|
const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
|
|
6532
6396
|
const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
|
|
6533
|
-
|
|
6397
|
+
React23__namespace.useEffect(() => {
|
|
6534
6398
|
setImgIndex(0);
|
|
6535
6399
|
}, [stop == null ? void 0 : stop.dayNumber]);
|
|
6536
6400
|
if (!stop) return null;
|
|
@@ -6657,8 +6521,8 @@ function ItineraryModal({
|
|
|
6657
6521
|
) });
|
|
6658
6522
|
}
|
|
6659
6523
|
function Itinerary({ title, subtitle, stops, className }) {
|
|
6660
|
-
const [activeIndex, setActiveIndex] =
|
|
6661
|
-
const scrollRef =
|
|
6524
|
+
const [activeIndex, setActiveIndex] = React23__namespace.useState(null);
|
|
6525
|
+
const scrollRef = React23__namespace.useRef(null);
|
|
6662
6526
|
const activeStop = activeIndex !== null ? stops[activeIndex] : null;
|
|
6663
6527
|
const scrollBy = (dir) => {
|
|
6664
6528
|
if (!scrollRef.current) return;
|
|
@@ -6744,8 +6608,8 @@ function MenuTrip({
|
|
|
6744
6608
|
bold = true,
|
|
6745
6609
|
className
|
|
6746
6610
|
}) {
|
|
6747
|
-
const scrollRef =
|
|
6748
|
-
|
|
6611
|
+
const scrollRef = React23__namespace.useRef(null);
|
|
6612
|
+
React23__namespace.useEffect(() => {
|
|
6749
6613
|
if (!scrollRef.current || !activeSection) return;
|
|
6750
6614
|
const container = scrollRef.current;
|
|
6751
6615
|
const btn = container.querySelector(
|
|
@@ -6891,18 +6755,18 @@ function Lightbox({
|
|
|
6891
6755
|
onClose
|
|
6892
6756
|
}) {
|
|
6893
6757
|
var _a;
|
|
6894
|
-
const [index, setIndex] =
|
|
6758
|
+
const [index, setIndex] = React23__namespace.useState(initialIndex);
|
|
6895
6759
|
const total = photos.length;
|
|
6896
6760
|
const photo = photos[index];
|
|
6897
|
-
const prev =
|
|
6761
|
+
const prev = React23__namespace.useCallback(
|
|
6898
6762
|
() => setIndex((i) => (i - 1 + total) % total),
|
|
6899
6763
|
[total]
|
|
6900
6764
|
);
|
|
6901
|
-
const next =
|
|
6765
|
+
const next = React23__namespace.useCallback(
|
|
6902
6766
|
() => setIndex((i) => (i + 1) % total),
|
|
6903
6767
|
[total]
|
|
6904
6768
|
);
|
|
6905
|
-
|
|
6769
|
+
React23__namespace.useEffect(() => {
|
|
6906
6770
|
const onKey = (e) => {
|
|
6907
6771
|
if (e.key === "Escape") onClose();
|
|
6908
6772
|
if (e.key === "ArrowLeft") prev();
|
|
@@ -7096,7 +6960,7 @@ function GridGallery({
|
|
|
7096
6960
|
initialVisible,
|
|
7097
6961
|
onOpen
|
|
7098
6962
|
}) {
|
|
7099
|
-
const [expanded, setExpanded] =
|
|
6963
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7100
6964
|
const cols = gridCols(photos.length);
|
|
7101
6965
|
const hasMore = photos.length > initialVisible;
|
|
7102
6966
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
@@ -7126,7 +6990,7 @@ function MasonryGallery({
|
|
|
7126
6990
|
initialVisible,
|
|
7127
6991
|
onOpen
|
|
7128
6992
|
}) {
|
|
7129
|
-
const [expanded, setExpanded] =
|
|
6993
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7130
6994
|
const hasMore = photos.length > initialVisible;
|
|
7131
6995
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
7132
6996
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -7199,7 +7063,7 @@ function FeaturedGallery({
|
|
|
7199
7063
|
photos,
|
|
7200
7064
|
onOpen
|
|
7201
7065
|
}) {
|
|
7202
|
-
const [expanded, setExpanded] =
|
|
7066
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7203
7067
|
const featured = photos.slice(0, 3);
|
|
7204
7068
|
const extra = photos.slice(3);
|
|
7205
7069
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -7276,8 +7140,8 @@ function PhotoGallery({
|
|
|
7276
7140
|
onPhotoClick,
|
|
7277
7141
|
className
|
|
7278
7142
|
}) {
|
|
7279
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
7280
|
-
const normalised =
|
|
7143
|
+
const [lightboxIndex, setLightboxIndex] = React23__namespace.useState(null);
|
|
7144
|
+
const normalised = React23__namespace.useMemo(() => photos.map(normalise), [photos]);
|
|
7281
7145
|
const handleOpen = (index) => {
|
|
7282
7146
|
setLightboxIndex(index);
|
|
7283
7147
|
onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
|
|
@@ -7366,7 +7230,7 @@ function PricingTrip({
|
|
|
7366
7230
|
variant = "card",
|
|
7367
7231
|
className
|
|
7368
7232
|
}) {
|
|
7369
|
-
const [showPricing, setShowPricing] =
|
|
7233
|
+
const [showPricing, setShowPricing] = React23__namespace.useState(false);
|
|
7370
7234
|
if (variant === "compact") {
|
|
7371
7235
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", className), children: [
|
|
7372
7236
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -7689,14 +7553,14 @@ function SiteHeader({
|
|
|
7689
7553
|
className
|
|
7690
7554
|
}) {
|
|
7691
7555
|
const t = VARIANT[variant];
|
|
7692
|
-
const [openMenu, setOpenMenu] =
|
|
7693
|
-
const [langOpen, setLangOpen] =
|
|
7694
|
-
const [mobileOpen, setMobileOpen] =
|
|
7695
|
-
const [openMobileSection, setOpenMobileSection] =
|
|
7696
|
-
const [activeLang, setActiveLang] =
|
|
7556
|
+
const [openMenu, setOpenMenu] = React23__namespace.useState(null);
|
|
7557
|
+
const [langOpen, setLangOpen] = React23__namespace.useState(false);
|
|
7558
|
+
const [mobileOpen, setMobileOpen] = React23__namespace.useState(false);
|
|
7559
|
+
const [openMobileSection, setOpenMobileSection] = React23__namespace.useState(null);
|
|
7560
|
+
const [activeLang, setActiveLang] = React23__namespace.useState(currentLanguage);
|
|
7697
7561
|
const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
|
|
7698
|
-
const menuCloseTimer =
|
|
7699
|
-
const langCloseTimer =
|
|
7562
|
+
const menuCloseTimer = React23__namespace.useRef(void 0);
|
|
7563
|
+
const langCloseTimer = React23__namespace.useRef(void 0);
|
|
7700
7564
|
const handleMenuEnter = (label) => {
|
|
7701
7565
|
clearTimeout(menuCloseTimer.current);
|
|
7702
7566
|
setOpenMenu(label);
|
|
@@ -7717,7 +7581,7 @@ function SiteHeader({
|
|
|
7717
7581
|
setOpenMenu(null);
|
|
7718
7582
|
setLangOpen(false);
|
|
7719
7583
|
};
|
|
7720
|
-
|
|
7584
|
+
React23__namespace.useEffect(() => () => {
|
|
7721
7585
|
clearTimeout(menuCloseTimer.current);
|
|
7722
7586
|
clearTimeout(langCloseTimer.current);
|
|
7723
7587
|
}, []);
|
|
@@ -7982,7 +7846,7 @@ function SiteHeader({
|
|
|
7982
7846
|
), children: [
|
|
7983
7847
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
|
|
7984
7848
|
const isActive = lang.code === activeLang;
|
|
7985
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7849
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
|
|
7986
7850
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
|
|
7987
7851
|
"text-xs select-none",
|
|
7988
7852
|
variant === "white" ? "text-border" : "text-white/15"
|
|
@@ -8044,8 +7908,8 @@ function SiteHeader({
|
|
|
8044
7908
|
);
|
|
8045
7909
|
}
|
|
8046
7910
|
function ThemeToggle({ className }) {
|
|
8047
|
-
const [dark, setDark] =
|
|
8048
|
-
|
|
7911
|
+
const [dark, setDark] = React23__namespace.useState(false);
|
|
7912
|
+
React23__namespace.useEffect(() => {
|
|
8049
7913
|
const saved = localStorage.getItem("theme");
|
|
8050
7914
|
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
8051
7915
|
const isDark = saved === "dark" || !saved && prefersDark;
|
|
@@ -8196,7 +8060,7 @@ function TripCard({
|
|
|
8196
8060
|
);
|
|
8197
8061
|
}
|
|
8198
8062
|
function useHlsVideo(videoRef, src) {
|
|
8199
|
-
|
|
8063
|
+
React23__namespace.useEffect(() => {
|
|
8200
8064
|
if (!src || !videoRef.current) return;
|
|
8201
8065
|
const video = videoRef.current;
|
|
8202
8066
|
if (!src.includes(".m3u8")) return;
|
|
@@ -8238,11 +8102,11 @@ function TripHeader({
|
|
|
8238
8102
|
className
|
|
8239
8103
|
}) {
|
|
8240
8104
|
var _a;
|
|
8241
|
-
const [heroIndex, setHeroIndex] =
|
|
8242
|
-
const [videoReady, setVideoReady] =
|
|
8243
|
-
const videoRef =
|
|
8105
|
+
const [heroIndex, setHeroIndex] = React23__namespace.useState(0);
|
|
8106
|
+
const [videoReady, setVideoReady] = React23__namespace.useState(false);
|
|
8107
|
+
const videoRef = React23__namespace.useRef(null);
|
|
8244
8108
|
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
8245
|
-
const validImages =
|
|
8109
|
+
const validImages = React23__namespace.useMemo(
|
|
8246
8110
|
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
8247
8111
|
[images]
|
|
8248
8112
|
);
|
|
@@ -8257,7 +8121,7 @@ function TripHeader({
|
|
|
8257
8121
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
8258
8122
|
const hasMeta = !!(destination || duration);
|
|
8259
8123
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
8260
|
-
|
|
8124
|
+
React23__namespace.useEffect(() => {
|
|
8261
8125
|
if (!videoUrl) return;
|
|
8262
8126
|
const el = videoRef.current;
|
|
8263
8127
|
if (!el) return;
|
|
@@ -8399,7 +8263,7 @@ function TripHeader({
|
|
|
8399
8263
|
siteHeader ? "-mt-44" : "-mt-36"
|
|
8400
8264
|
),
|
|
8401
8265
|
children: [
|
|
8402
|
-
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8266
|
+
breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
|
|
8403
8267
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
8404
8268
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
|
|
8405
8269
|
] }, i)) }),
|
|
@@ -8499,19 +8363,19 @@ function TripPage({
|
|
|
8499
8363
|
features,
|
|
8500
8364
|
className
|
|
8501
8365
|
}) {
|
|
8502
|
-
const [activeSection, setActiveSection] =
|
|
8503
|
-
const [navFloating, setNavFloating] =
|
|
8504
|
-
const [navHidden, setNavHidden] =
|
|
8505
|
-
const [isFloating, setIsFloating] =
|
|
8506
|
-
const [sidebarPos, setSidebarPos] =
|
|
8507
|
-
const [pricingBarVisible, setPricingBarVisible] =
|
|
8508
|
-
const navRef =
|
|
8509
|
-
const navSentinelRef =
|
|
8510
|
-
const sentinelRef =
|
|
8511
|
-
const sidebarPlaceholderRef =
|
|
8512
|
-
const pricingBarRef =
|
|
8513
|
-
const galleryRef =
|
|
8514
|
-
const sections =
|
|
8366
|
+
const [activeSection, setActiveSection] = React23__namespace.useState("");
|
|
8367
|
+
const [navFloating, setNavFloating] = React23__namespace.useState(false);
|
|
8368
|
+
const [navHidden, setNavHidden] = React23__namespace.useState(false);
|
|
8369
|
+
const [isFloating, setIsFloating] = React23__namespace.useState(false);
|
|
8370
|
+
const [sidebarPos, setSidebarPos] = React23__namespace.useState(null);
|
|
8371
|
+
const [pricingBarVisible, setPricingBarVisible] = React23__namespace.useState(false);
|
|
8372
|
+
const navRef = React23__namespace.useRef(null);
|
|
8373
|
+
const navSentinelRef = React23__namespace.useRef(null);
|
|
8374
|
+
const sentinelRef = React23__namespace.useRef(null);
|
|
8375
|
+
const sidebarPlaceholderRef = React23__namespace.useRef(null);
|
|
8376
|
+
const pricingBarRef = React23__namespace.useRef(null);
|
|
8377
|
+
const galleryRef = React23__namespace.useRef(null);
|
|
8378
|
+
const sections = React23__namespace.useMemo(
|
|
8515
8379
|
() => [
|
|
8516
8380
|
{ id: "key-info", label: "Key info", show: !!(infoGroups == null ? void 0 : infoGroups.length) },
|
|
8517
8381
|
{ id: "overview", label: "Overview", show: !!overview },
|
|
@@ -8526,7 +8390,7 @@ function TripPage({
|
|
|
8526
8390
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8527
8391
|
[]
|
|
8528
8392
|
);
|
|
8529
|
-
|
|
8393
|
+
React23__namespace.useEffect(() => {
|
|
8530
8394
|
const sentinel = navSentinelRef.current;
|
|
8531
8395
|
if (!sentinel) return;
|
|
8532
8396
|
const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8534,7 +8398,7 @@ function TripPage({
|
|
|
8534
8398
|
update();
|
|
8535
8399
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8536
8400
|
}, []);
|
|
8537
|
-
|
|
8401
|
+
React23__namespace.useEffect(() => {
|
|
8538
8402
|
const sentinel = sentinelRef.current;
|
|
8539
8403
|
if (!sentinel) return;
|
|
8540
8404
|
const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8542,7 +8406,7 @@ function TripPage({
|
|
|
8542
8406
|
update();
|
|
8543
8407
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8544
8408
|
}, []);
|
|
8545
|
-
|
|
8409
|
+
React23__namespace.useEffect(() => {
|
|
8546
8410
|
const measure = () => {
|
|
8547
8411
|
if (!sidebarPlaceholderRef.current) return;
|
|
8548
8412
|
const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
|
|
@@ -8552,7 +8416,7 @@ function TripPage({
|
|
|
8552
8416
|
window.addEventListener("resize", measure);
|
|
8553
8417
|
return () => window.removeEventListener("resize", measure);
|
|
8554
8418
|
}, [isFloating]);
|
|
8555
|
-
|
|
8419
|
+
React23__namespace.useEffect(() => {
|
|
8556
8420
|
const check = () => {
|
|
8557
8421
|
var _a;
|
|
8558
8422
|
const target = (_a = galleryRef.current) != null ? _a : pricingBarRef.current;
|
|
@@ -8563,7 +8427,7 @@ function TripPage({
|
|
|
8563
8427
|
check();
|
|
8564
8428
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8565
8429
|
}, []);
|
|
8566
|
-
|
|
8430
|
+
React23__namespace.useEffect(() => {
|
|
8567
8431
|
const check = () => {
|
|
8568
8432
|
if (!pricingBarRef.current) return;
|
|
8569
8433
|
setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
|
|
@@ -8572,7 +8436,7 @@ function TripPage({
|
|
|
8572
8436
|
check();
|
|
8573
8437
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8574
8438
|
}, []);
|
|
8575
|
-
|
|
8439
|
+
React23__namespace.useEffect(() => {
|
|
8576
8440
|
if (sections.length === 0) return;
|
|
8577
8441
|
setActiveSection(sections[0].id);
|
|
8578
8442
|
const update = () => {
|
|
@@ -8937,12 +8801,12 @@ function Toast({
|
|
|
8937
8801
|
duration = 6e3,
|
|
8938
8802
|
className
|
|
8939
8803
|
}) {
|
|
8940
|
-
const [mounted, setMounted] =
|
|
8941
|
-
const [visible, setVisible] =
|
|
8942
|
-
|
|
8804
|
+
const [mounted, setMounted] = React23__namespace.useState(false);
|
|
8805
|
+
const [visible, setVisible] = React23__namespace.useState(true);
|
|
8806
|
+
React23__namespace.useEffect(() => {
|
|
8943
8807
|
setMounted(true);
|
|
8944
8808
|
}, []);
|
|
8945
|
-
|
|
8809
|
+
React23__namespace.useEffect(() => {
|
|
8946
8810
|
if (duration === 0) return;
|
|
8947
8811
|
const t = setTimeout(() => {
|
|
8948
8812
|
setVisible(false);
|
|
@@ -9349,21 +9213,21 @@ function LeadCapturePopup({
|
|
|
9349
9213
|
}) {
|
|
9350
9214
|
var _a;
|
|
9351
9215
|
const config = __spreadValues(__spreadValues({}, DEFAULTS), _config);
|
|
9352
|
-
const [open, setOpen] =
|
|
9353
|
-
const [closing, setClosing] =
|
|
9354
|
-
const [submitted, setSubmitted] =
|
|
9355
|
-
const [submitting, setSubmitting] =
|
|
9356
|
-
const [error, setError] =
|
|
9357
|
-
const [name, setName] =
|
|
9358
|
-
const [email, setEmail] =
|
|
9359
|
-
const [travelDate, setTravelDate] =
|
|
9360
|
-
const panelRef =
|
|
9361
|
-
const nameRef =
|
|
9362
|
-
const show =
|
|
9216
|
+
const [open, setOpen] = React23.useState(false);
|
|
9217
|
+
const [closing, setClosing] = React23.useState(false);
|
|
9218
|
+
const [submitted, setSubmitted] = React23.useState(false);
|
|
9219
|
+
const [submitting, setSubmitting] = React23.useState(false);
|
|
9220
|
+
const [error, setError] = React23.useState(null);
|
|
9221
|
+
const [name, setName] = React23.useState("");
|
|
9222
|
+
const [email, setEmail] = React23.useState("");
|
|
9223
|
+
const [travelDate, setTravelDate] = React23.useState("");
|
|
9224
|
+
const panelRef = React23.useRef(null);
|
|
9225
|
+
const nameRef = React23.useRef(null);
|
|
9226
|
+
const show = React23.useCallback(() => {
|
|
9363
9227
|
if (isDismissed()) return;
|
|
9364
9228
|
setOpen(true);
|
|
9365
9229
|
}, []);
|
|
9366
|
-
|
|
9230
|
+
React23.useEffect(() => {
|
|
9367
9231
|
var _a2;
|
|
9368
9232
|
if (isDismissed()) return;
|
|
9369
9233
|
if (config.trigger === "delay") {
|
|
@@ -9390,7 +9254,7 @@ function LeadCapturePopup({
|
|
|
9390
9254
|
return () => window.removeEventListener("scroll", handler);
|
|
9391
9255
|
}
|
|
9392
9256
|
}, [config.trigger, config.delaySeconds, config.scrollPercent, show]);
|
|
9393
|
-
|
|
9257
|
+
React23.useEffect(() => {
|
|
9394
9258
|
if (open && !submitted) {
|
|
9395
9259
|
requestAnimationFrame(() => {
|
|
9396
9260
|
var _a2;
|
|
@@ -9398,7 +9262,7 @@ function LeadCapturePopup({
|
|
|
9398
9262
|
});
|
|
9399
9263
|
}
|
|
9400
9264
|
}, [open, submitted]);
|
|
9401
|
-
const close =
|
|
9265
|
+
const close = React23.useCallback(() => {
|
|
9402
9266
|
setClosing(true);
|
|
9403
9267
|
setDismissed(config.dismissDays);
|
|
9404
9268
|
setTimeout(() => {
|
|
@@ -9406,7 +9270,7 @@ function LeadCapturePopup({
|
|
|
9406
9270
|
setClosing(false);
|
|
9407
9271
|
}, 250);
|
|
9408
9272
|
}, [config.dismissDays]);
|
|
9409
|
-
|
|
9273
|
+
React23.useEffect(() => {
|
|
9410
9274
|
if (!open) return;
|
|
9411
9275
|
const handler = (e) => {
|
|
9412
9276
|
if (e.key === "Escape") close();
|
|
@@ -9414,7 +9278,7 @@ function LeadCapturePopup({
|
|
|
9414
9278
|
document.addEventListener("keydown", handler);
|
|
9415
9279
|
return () => document.removeEventListener("keydown", handler);
|
|
9416
9280
|
}, [open, close]);
|
|
9417
|
-
const onOverlayClick =
|
|
9281
|
+
const onOverlayClick = React23.useCallback(
|
|
9418
9282
|
(e) => {
|
|
9419
9283
|
if (panelRef.current && !panelRef.current.contains(e.target)) {
|
|
9420
9284
|
close();
|
|
@@ -9657,7 +9521,6 @@ exports.BookingDetails = BookingDetails;
|
|
|
9657
9521
|
exports.BookingForm = BookingForm;
|
|
9658
9522
|
exports.BookingOtpEmail = BookingOtpEmail;
|
|
9659
9523
|
exports.BookingShell = BookingShell;
|
|
9660
|
-
exports.BookingWelcomeNewSystemEmail = BookingWelcomeNewSystemEmail;
|
|
9661
9524
|
exports.Button = Button;
|
|
9662
9525
|
exports.COUNTRIES = COUNTRIES;
|
|
9663
9526
|
exports.CounterField = CounterField;
|