@planetaexo/design-system 0.12.0 → 0.12.2
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 +181 -324
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -55
- package/dist/index.d.ts +17 -55
- package/dist/index.js +165 -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,9 @@ function BookingConfirmationEmail({
|
|
|
4019
4020
|
numberOfPeople,
|
|
4020
4021
|
host,
|
|
4021
4022
|
labels,
|
|
4022
|
-
className
|
|
4023
|
+
className,
|
|
4024
|
+
nextSteps,
|
|
4025
|
+
nextStepsImportant
|
|
4023
4026
|
}) {
|
|
4024
4027
|
const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
|
|
4025
4028
|
const ctaStyle = {
|
|
@@ -4036,12 +4039,13 @@ function BookingConfirmationEmail({
|
|
|
4036
4039
|
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
4040
|
const tableRows = [
|
|
4038
4041
|
{ label: l.bookingNumberLabel, value: bookingNumber },
|
|
4039
|
-
{ label: l.activityLabel, value: activity },
|
|
4042
|
+
...activity && activity.trim().length > 0 ? [{ label: l.activityLabel, value: activity }] : [],
|
|
4040
4043
|
{ label: l.adventureLabel, value: adventure },
|
|
4041
4044
|
{ label: l.startingDateLabel, value: startingDate },
|
|
4042
4045
|
{ label: l.numberOfPeopleLabel, value: String(numberOfPeople) },
|
|
4043
4046
|
{ label: l.hostLabel, value: host }
|
|
4044
4047
|
];
|
|
4048
|
+
const showNextSteps = Array.isArray(nextSteps) && nextSteps.length > 0;
|
|
4045
4049
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4046
4050
|
"div",
|
|
4047
4051
|
{
|
|
@@ -4071,6 +4075,30 @@ function BookingConfirmationEmail({
|
|
|
4071
4075
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 16px 4px 0", color: emailTokens.mutedForeground }, children: row.label }),
|
|
4072
4076
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 0", fontWeight: "500", color: emailTokens.foreground }, children: row.value })
|
|
4073
4077
|
] }, i)) }) }),
|
|
4078
|
+
showNextSteps && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4079
|
+
/* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4080
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "20px", fontWeight: "700", color: emailTokens.foreground, fontFamily: emailTokens.fontFamily, fontSize: "18px" }, children: l.nextStepsHeading }),
|
|
4081
|
+
/* @__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: [
|
|
4082
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { style: { verticalAlign: "top", width: "32px", paddingRight: "14px" }, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
|
|
4083
|
+
display: "inline-block",
|
|
4084
|
+
height: "24px",
|
|
4085
|
+
width: "24px",
|
|
4086
|
+
lineHeight: "24px",
|
|
4087
|
+
textAlign: "center",
|
|
4088
|
+
borderRadius: "9999px",
|
|
4089
|
+
backgroundColor: emailTokens.primaryLight,
|
|
4090
|
+
fontSize: "12px",
|
|
4091
|
+
fontWeight: "700",
|
|
4092
|
+
color: emailTokens.primary,
|
|
4093
|
+
marginTop: "2px"
|
|
4094
|
+
}, children: i + 1 }) }),
|
|
4095
|
+
/* @__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 }) })
|
|
4096
|
+
] }) }) }, i)) }),
|
|
4097
|
+
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: [
|
|
4098
|
+
line,
|
|
4099
|
+
idx < arr.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
|
|
4100
|
+
] }, idx)) })
|
|
4101
|
+
] }),
|
|
4074
4102
|
/* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
|
|
4075
4103
|
/* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "16px" }, children: l.postCtaMessage }),
|
|
4076
4104
|
/* @__PURE__ */ jsxRuntime.jsx("p", { children: l.closingMessage })
|
|
@@ -4265,176 +4293,6 @@ function TravellerFormInviteEmail({
|
|
|
4265
4293
|
}
|
|
4266
4294
|
);
|
|
4267
4295
|
}
|
|
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
4296
|
function CounterField({
|
|
4439
4297
|
label,
|
|
4440
4298
|
sublabel,
|
|
@@ -4549,11 +4407,11 @@ function DatePickerField({
|
|
|
4549
4407
|
fromDate,
|
|
4550
4408
|
className
|
|
4551
4409
|
}) {
|
|
4552
|
-
const [open, setOpen] =
|
|
4553
|
-
const containerRef =
|
|
4554
|
-
const [calendarWidth, setCalendarWidth] =
|
|
4410
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
4411
|
+
const containerRef = React23__namespace.useRef(null);
|
|
4412
|
+
const [calendarWidth, setCalendarWidth] = React23__namespace.useState();
|
|
4555
4413
|
const hasValue = !!value;
|
|
4556
|
-
|
|
4414
|
+
React23__namespace.useEffect(() => {
|
|
4557
4415
|
if (!containerRef.current) return;
|
|
4558
4416
|
const observer = new ResizeObserver(([entry]) => {
|
|
4559
4417
|
setCalendarWidth(entry.contentRect.width);
|
|
@@ -4662,7 +4520,7 @@ function BookingForm({
|
|
|
4662
4520
|
subtitle = "Free enquiry \u2013 no commitment",
|
|
4663
4521
|
className
|
|
4664
4522
|
}) {
|
|
4665
|
-
const [values, setValues] =
|
|
4523
|
+
const [values, setValues] = React23__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
4666
4524
|
const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
4667
4525
|
const handleSubmit = (e) => {
|
|
4668
4526
|
e.preventDefault();
|
|
@@ -5194,11 +5052,11 @@ function FloatingTextarea({
|
|
|
5194
5052
|
}
|
|
5195
5053
|
function SelectField({ field, value, onChange, error, disabled }) {
|
|
5196
5054
|
var _a, _b, _c;
|
|
5197
|
-
const [open, setOpen] =
|
|
5198
|
-
const containerRef =
|
|
5055
|
+
const [open, setOpen] = React23__namespace.useState(false);
|
|
5056
|
+
const containerRef = React23__namespace.useRef(null);
|
|
5199
5057
|
const options = (_a = field.options) != null ? _a : [];
|
|
5200
5058
|
const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
|
|
5201
|
-
|
|
5059
|
+
React23__namespace.useEffect(() => {
|
|
5202
5060
|
if (!open) return;
|
|
5203
5061
|
const handleOutside = (e) => {
|
|
5204
5062
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -5587,11 +5445,11 @@ function RegistrationForm({
|
|
|
5587
5445
|
readOnly = false
|
|
5588
5446
|
}) {
|
|
5589
5447
|
var _a;
|
|
5590
|
-
const L =
|
|
5448
|
+
const L = React23__namespace.useMemo(
|
|
5591
5449
|
() => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
|
|
5592
5450
|
[labels]
|
|
5593
5451
|
);
|
|
5594
|
-
const sortedFields =
|
|
5452
|
+
const sortedFields = React23__namespace.useMemo(
|
|
5595
5453
|
() => [...fields].sort((a, b) => {
|
|
5596
5454
|
var _a2, _b;
|
|
5597
5455
|
return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
|
|
@@ -5599,7 +5457,7 @@ function RegistrationForm({
|
|
|
5599
5457
|
[fields]
|
|
5600
5458
|
);
|
|
5601
5459
|
const isControlled = values !== void 0;
|
|
5602
|
-
const [internal, setInternal] =
|
|
5460
|
+
const [internal, setInternal] = React23__namespace.useState(
|
|
5603
5461
|
() => initializeValues(
|
|
5604
5462
|
sortedFields,
|
|
5605
5463
|
defaultValues != null ? defaultValues : {},
|
|
@@ -5607,9 +5465,9 @@ function RegistrationForm({
|
|
|
5607
5465
|
includeTerms
|
|
5608
5466
|
)
|
|
5609
5467
|
);
|
|
5610
|
-
const [submitAttempted, setSubmitAttempted] =
|
|
5611
|
-
const [validationErrors, setValidationErrors] =
|
|
5612
|
-
|
|
5468
|
+
const [submitAttempted, setSubmitAttempted] = React23__namespace.useState(false);
|
|
5469
|
+
const [validationErrors, setValidationErrors] = React23__namespace.useState({});
|
|
5470
|
+
React23__namespace.useEffect(() => {
|
|
5613
5471
|
if (isControlled) return;
|
|
5614
5472
|
setInternal((prev) => {
|
|
5615
5473
|
const next = initializeValues(
|
|
@@ -5666,7 +5524,7 @@ function RegistrationForm({
|
|
|
5666
5524
|
const termsError = submitAttempted && termsEnabled && !termsAccepted;
|
|
5667
5525
|
const firstErrorFieldId = Object.keys(fieldErrors)[0];
|
|
5668
5526
|
const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
|
|
5669
|
-
|
|
5527
|
+
React23__namespace.useEffect(() => {
|
|
5670
5528
|
if (!submitAttempted || !scrollTargetId) return;
|
|
5671
5529
|
const timer = setTimeout(() => {
|
|
5672
5530
|
const elem = document.getElementById(scrollTargetId);
|
|
@@ -6120,10 +5978,10 @@ var OTPCodeInput = ({
|
|
|
6120
5978
|
id,
|
|
6121
5979
|
required
|
|
6122
5980
|
}) => {
|
|
6123
|
-
const baseId = id != null ? id :
|
|
6124
|
-
const inputRef =
|
|
6125
|
-
const [focused, setFocused] =
|
|
6126
|
-
const digits =
|
|
5981
|
+
const baseId = id != null ? id : React23__namespace.useId();
|
|
5982
|
+
const inputRef = React23__namespace.useRef(null);
|
|
5983
|
+
const [focused, setFocused] = React23__namespace.useState(false);
|
|
5984
|
+
const digits = React23__namespace.useMemo(() => {
|
|
6127
5985
|
const arr = value.split("").slice(0, length);
|
|
6128
5986
|
while (arr.length < length) arr.push("");
|
|
6129
5987
|
return arr;
|
|
@@ -6239,7 +6097,7 @@ function Checkbox(_a) {
|
|
|
6239
6097
|
})
|
|
6240
6098
|
);
|
|
6241
6099
|
}
|
|
6242
|
-
var AccordionVariantContext =
|
|
6100
|
+
var AccordionVariantContext = React23__namespace.createContext("default");
|
|
6243
6101
|
function Accordion(_a) {
|
|
6244
6102
|
var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
|
|
6245
6103
|
return /* @__PURE__ */ jsxRuntime.jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6257,7 +6115,7 @@ function Accordion(_a) {
|
|
|
6257
6115
|
}
|
|
6258
6116
|
function AccordionItem(_a) {
|
|
6259
6117
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6260
|
-
const variant =
|
|
6118
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6261
6119
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6262
6120
|
accordion.Accordion.Item,
|
|
6263
6121
|
__spreadValues({
|
|
@@ -6278,7 +6136,7 @@ function AccordionTrigger(_a) {
|
|
|
6278
6136
|
"className",
|
|
6279
6137
|
"children"
|
|
6280
6138
|
]);
|
|
6281
|
-
const variant =
|
|
6139
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6282
6140
|
return /* @__PURE__ */ jsxRuntime.jsx(accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6283
6141
|
accordion.Accordion.Trigger,
|
|
6284
6142
|
__spreadProps(__spreadValues({
|
|
@@ -6332,7 +6190,7 @@ function AccordionContent(_a) {
|
|
|
6332
6190
|
"className",
|
|
6333
6191
|
"children"
|
|
6334
6192
|
]);
|
|
6335
|
-
const variant =
|
|
6193
|
+
const variant = React23__namespace.useContext(AccordionVariantContext);
|
|
6336
6194
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6337
6195
|
accordion.Accordion.Panel,
|
|
6338
6196
|
__spreadProps(__spreadValues({
|
|
@@ -6364,7 +6222,7 @@ function FilterPanel({
|
|
|
6364
6222
|
title = "Filters",
|
|
6365
6223
|
className
|
|
6366
6224
|
}) {
|
|
6367
|
-
const [internalValue, setInternalValue] =
|
|
6225
|
+
const [internalValue, setInternalValue] = React23__namespace.useState(
|
|
6368
6226
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
6369
6227
|
);
|
|
6370
6228
|
const selected = value != null ? value : internalValue;
|
|
@@ -6526,11 +6384,11 @@ function ItineraryModal({
|
|
|
6526
6384
|
onNext
|
|
6527
6385
|
}) {
|
|
6528
6386
|
var _a, _b, _c;
|
|
6529
|
-
const [imgIndex, setImgIndex] =
|
|
6387
|
+
const [imgIndex, setImgIndex] = React23__namespace.useState(0);
|
|
6530
6388
|
const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
|
|
6531
6389
|
const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
|
|
6532
6390
|
const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
|
|
6533
|
-
|
|
6391
|
+
React23__namespace.useEffect(() => {
|
|
6534
6392
|
setImgIndex(0);
|
|
6535
6393
|
}, [stop == null ? void 0 : stop.dayNumber]);
|
|
6536
6394
|
if (!stop) return null;
|
|
@@ -6657,8 +6515,8 @@ function ItineraryModal({
|
|
|
6657
6515
|
) });
|
|
6658
6516
|
}
|
|
6659
6517
|
function Itinerary({ title, subtitle, stops, className }) {
|
|
6660
|
-
const [activeIndex, setActiveIndex] =
|
|
6661
|
-
const scrollRef =
|
|
6518
|
+
const [activeIndex, setActiveIndex] = React23__namespace.useState(null);
|
|
6519
|
+
const scrollRef = React23__namespace.useRef(null);
|
|
6662
6520
|
const activeStop = activeIndex !== null ? stops[activeIndex] : null;
|
|
6663
6521
|
const scrollBy = (dir) => {
|
|
6664
6522
|
if (!scrollRef.current) return;
|
|
@@ -6744,8 +6602,8 @@ function MenuTrip({
|
|
|
6744
6602
|
bold = true,
|
|
6745
6603
|
className
|
|
6746
6604
|
}) {
|
|
6747
|
-
const scrollRef =
|
|
6748
|
-
|
|
6605
|
+
const scrollRef = React23__namespace.useRef(null);
|
|
6606
|
+
React23__namespace.useEffect(() => {
|
|
6749
6607
|
if (!scrollRef.current || !activeSection) return;
|
|
6750
6608
|
const container = scrollRef.current;
|
|
6751
6609
|
const btn = container.querySelector(
|
|
@@ -6891,18 +6749,18 @@ function Lightbox({
|
|
|
6891
6749
|
onClose
|
|
6892
6750
|
}) {
|
|
6893
6751
|
var _a;
|
|
6894
|
-
const [index, setIndex] =
|
|
6752
|
+
const [index, setIndex] = React23__namespace.useState(initialIndex);
|
|
6895
6753
|
const total = photos.length;
|
|
6896
6754
|
const photo = photos[index];
|
|
6897
|
-
const prev =
|
|
6755
|
+
const prev = React23__namespace.useCallback(
|
|
6898
6756
|
() => setIndex((i) => (i - 1 + total) % total),
|
|
6899
6757
|
[total]
|
|
6900
6758
|
);
|
|
6901
|
-
const next =
|
|
6759
|
+
const next = React23__namespace.useCallback(
|
|
6902
6760
|
() => setIndex((i) => (i + 1) % total),
|
|
6903
6761
|
[total]
|
|
6904
6762
|
);
|
|
6905
|
-
|
|
6763
|
+
React23__namespace.useEffect(() => {
|
|
6906
6764
|
const onKey = (e) => {
|
|
6907
6765
|
if (e.key === "Escape") onClose();
|
|
6908
6766
|
if (e.key === "ArrowLeft") prev();
|
|
@@ -7096,7 +6954,7 @@ function GridGallery({
|
|
|
7096
6954
|
initialVisible,
|
|
7097
6955
|
onOpen
|
|
7098
6956
|
}) {
|
|
7099
|
-
const [expanded, setExpanded] =
|
|
6957
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7100
6958
|
const cols = gridCols(photos.length);
|
|
7101
6959
|
const hasMore = photos.length > initialVisible;
|
|
7102
6960
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
@@ -7126,7 +6984,7 @@ function MasonryGallery({
|
|
|
7126
6984
|
initialVisible,
|
|
7127
6985
|
onOpen
|
|
7128
6986
|
}) {
|
|
7129
|
-
const [expanded, setExpanded] =
|
|
6987
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7130
6988
|
const hasMore = photos.length > initialVisible;
|
|
7131
6989
|
const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
|
|
7132
6990
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -7199,7 +7057,7 @@ function FeaturedGallery({
|
|
|
7199
7057
|
photos,
|
|
7200
7058
|
onOpen
|
|
7201
7059
|
}) {
|
|
7202
|
-
const [expanded, setExpanded] =
|
|
7060
|
+
const [expanded, setExpanded] = React23__namespace.useState(false);
|
|
7203
7061
|
const featured = photos.slice(0, 3);
|
|
7204
7062
|
const extra = photos.slice(3);
|
|
7205
7063
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -7276,8 +7134,8 @@ function PhotoGallery({
|
|
|
7276
7134
|
onPhotoClick,
|
|
7277
7135
|
className
|
|
7278
7136
|
}) {
|
|
7279
|
-
const [lightboxIndex, setLightboxIndex] =
|
|
7280
|
-
const normalised =
|
|
7137
|
+
const [lightboxIndex, setLightboxIndex] = React23__namespace.useState(null);
|
|
7138
|
+
const normalised = React23__namespace.useMemo(() => photos.map(normalise), [photos]);
|
|
7281
7139
|
const handleOpen = (index) => {
|
|
7282
7140
|
setLightboxIndex(index);
|
|
7283
7141
|
onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
|
|
@@ -7366,7 +7224,7 @@ function PricingTrip({
|
|
|
7366
7224
|
variant = "card",
|
|
7367
7225
|
className
|
|
7368
7226
|
}) {
|
|
7369
|
-
const [showPricing, setShowPricing] =
|
|
7227
|
+
const [showPricing, setShowPricing] = React23__namespace.useState(false);
|
|
7370
7228
|
if (variant === "compact") {
|
|
7371
7229
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", className), children: [
|
|
7372
7230
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -7689,14 +7547,14 @@ function SiteHeader({
|
|
|
7689
7547
|
className
|
|
7690
7548
|
}) {
|
|
7691
7549
|
const t = VARIANT[variant];
|
|
7692
|
-
const [openMenu, setOpenMenu] =
|
|
7693
|
-
const [langOpen, setLangOpen] =
|
|
7694
|
-
const [mobileOpen, setMobileOpen] =
|
|
7695
|
-
const [openMobileSection, setOpenMobileSection] =
|
|
7696
|
-
const [activeLang, setActiveLang] =
|
|
7550
|
+
const [openMenu, setOpenMenu] = React23__namespace.useState(null);
|
|
7551
|
+
const [langOpen, setLangOpen] = React23__namespace.useState(false);
|
|
7552
|
+
const [mobileOpen, setMobileOpen] = React23__namespace.useState(false);
|
|
7553
|
+
const [openMobileSection, setOpenMobileSection] = React23__namespace.useState(null);
|
|
7554
|
+
const [activeLang, setActiveLang] = React23__namespace.useState(currentLanguage);
|
|
7697
7555
|
const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
|
|
7698
|
-
const menuCloseTimer =
|
|
7699
|
-
const langCloseTimer =
|
|
7556
|
+
const menuCloseTimer = React23__namespace.useRef(void 0);
|
|
7557
|
+
const langCloseTimer = React23__namespace.useRef(void 0);
|
|
7700
7558
|
const handleMenuEnter = (label) => {
|
|
7701
7559
|
clearTimeout(menuCloseTimer.current);
|
|
7702
7560
|
setOpenMenu(label);
|
|
@@ -7717,7 +7575,7 @@ function SiteHeader({
|
|
|
7717
7575
|
setOpenMenu(null);
|
|
7718
7576
|
setLangOpen(false);
|
|
7719
7577
|
};
|
|
7720
|
-
|
|
7578
|
+
React23__namespace.useEffect(() => () => {
|
|
7721
7579
|
clearTimeout(menuCloseTimer.current);
|
|
7722
7580
|
clearTimeout(langCloseTimer.current);
|
|
7723
7581
|
}, []);
|
|
@@ -7982,7 +7840,7 @@ function SiteHeader({
|
|
|
7982
7840
|
), children: [
|
|
7983
7841
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
|
|
7984
7842
|
const isActive = lang.code === activeLang;
|
|
7985
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7843
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
|
|
7986
7844
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
|
|
7987
7845
|
"text-xs select-none",
|
|
7988
7846
|
variant === "white" ? "text-border" : "text-white/15"
|
|
@@ -8044,8 +7902,8 @@ function SiteHeader({
|
|
|
8044
7902
|
);
|
|
8045
7903
|
}
|
|
8046
7904
|
function ThemeToggle({ className }) {
|
|
8047
|
-
const [dark, setDark] =
|
|
8048
|
-
|
|
7905
|
+
const [dark, setDark] = React23__namespace.useState(false);
|
|
7906
|
+
React23__namespace.useEffect(() => {
|
|
8049
7907
|
const saved = localStorage.getItem("theme");
|
|
8050
7908
|
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
8051
7909
|
const isDark = saved === "dark" || !saved && prefersDark;
|
|
@@ -8196,7 +8054,7 @@ function TripCard({
|
|
|
8196
8054
|
);
|
|
8197
8055
|
}
|
|
8198
8056
|
function useHlsVideo(videoRef, src) {
|
|
8199
|
-
|
|
8057
|
+
React23__namespace.useEffect(() => {
|
|
8200
8058
|
if (!src || !videoRef.current) return;
|
|
8201
8059
|
const video = videoRef.current;
|
|
8202
8060
|
if (!src.includes(".m3u8")) return;
|
|
@@ -8238,11 +8096,11 @@ function TripHeader({
|
|
|
8238
8096
|
className
|
|
8239
8097
|
}) {
|
|
8240
8098
|
var _a;
|
|
8241
|
-
const [heroIndex, setHeroIndex] =
|
|
8242
|
-
const [videoReady, setVideoReady] =
|
|
8243
|
-
const videoRef =
|
|
8099
|
+
const [heroIndex, setHeroIndex] = React23__namespace.useState(0);
|
|
8100
|
+
const [videoReady, setVideoReady] = React23__namespace.useState(false);
|
|
8101
|
+
const videoRef = React23__namespace.useRef(null);
|
|
8244
8102
|
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
8245
|
-
const validImages =
|
|
8103
|
+
const validImages = React23__namespace.useMemo(
|
|
8246
8104
|
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
8247
8105
|
[images]
|
|
8248
8106
|
);
|
|
@@ -8257,7 +8115,7 @@ function TripHeader({
|
|
|
8257
8115
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
8258
8116
|
const hasMeta = !!(destination || duration);
|
|
8259
8117
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
8260
|
-
|
|
8118
|
+
React23__namespace.useEffect(() => {
|
|
8261
8119
|
if (!videoUrl) return;
|
|
8262
8120
|
const el = videoRef.current;
|
|
8263
8121
|
if (!el) return;
|
|
@@ -8399,7 +8257,7 @@ function TripHeader({
|
|
|
8399
8257
|
siteHeader ? "-mt-44" : "-mt-36"
|
|
8400
8258
|
),
|
|
8401
8259
|
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(
|
|
8260
|
+
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
8261
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
|
|
8404
8262
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
|
|
8405
8263
|
] }, i)) }),
|
|
@@ -8499,19 +8357,19 @@ function TripPage({
|
|
|
8499
8357
|
features,
|
|
8500
8358
|
className
|
|
8501
8359
|
}) {
|
|
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 =
|
|
8360
|
+
const [activeSection, setActiveSection] = React23__namespace.useState("");
|
|
8361
|
+
const [navFloating, setNavFloating] = React23__namespace.useState(false);
|
|
8362
|
+
const [navHidden, setNavHidden] = React23__namespace.useState(false);
|
|
8363
|
+
const [isFloating, setIsFloating] = React23__namespace.useState(false);
|
|
8364
|
+
const [sidebarPos, setSidebarPos] = React23__namespace.useState(null);
|
|
8365
|
+
const [pricingBarVisible, setPricingBarVisible] = React23__namespace.useState(false);
|
|
8366
|
+
const navRef = React23__namespace.useRef(null);
|
|
8367
|
+
const navSentinelRef = React23__namespace.useRef(null);
|
|
8368
|
+
const sentinelRef = React23__namespace.useRef(null);
|
|
8369
|
+
const sidebarPlaceholderRef = React23__namespace.useRef(null);
|
|
8370
|
+
const pricingBarRef = React23__namespace.useRef(null);
|
|
8371
|
+
const galleryRef = React23__namespace.useRef(null);
|
|
8372
|
+
const sections = React23__namespace.useMemo(
|
|
8515
8373
|
() => [
|
|
8516
8374
|
{ id: "key-info", label: "Key info", show: !!(infoGroups == null ? void 0 : infoGroups.length) },
|
|
8517
8375
|
{ id: "overview", label: "Overview", show: !!overview },
|
|
@@ -8526,7 +8384,7 @@ function TripPage({
|
|
|
8526
8384
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8527
8385
|
[]
|
|
8528
8386
|
);
|
|
8529
|
-
|
|
8387
|
+
React23__namespace.useEffect(() => {
|
|
8530
8388
|
const sentinel = navSentinelRef.current;
|
|
8531
8389
|
if (!sentinel) return;
|
|
8532
8390
|
const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8534,7 +8392,7 @@ function TripPage({
|
|
|
8534
8392
|
update();
|
|
8535
8393
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8536
8394
|
}, []);
|
|
8537
|
-
|
|
8395
|
+
React23__namespace.useEffect(() => {
|
|
8538
8396
|
const sentinel = sentinelRef.current;
|
|
8539
8397
|
if (!sentinel) return;
|
|
8540
8398
|
const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
|
|
@@ -8542,7 +8400,7 @@ function TripPage({
|
|
|
8542
8400
|
update();
|
|
8543
8401
|
return () => document.removeEventListener("scroll", update, { capture: true });
|
|
8544
8402
|
}, []);
|
|
8545
|
-
|
|
8403
|
+
React23__namespace.useEffect(() => {
|
|
8546
8404
|
const measure = () => {
|
|
8547
8405
|
if (!sidebarPlaceholderRef.current) return;
|
|
8548
8406
|
const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
|
|
@@ -8552,7 +8410,7 @@ function TripPage({
|
|
|
8552
8410
|
window.addEventListener("resize", measure);
|
|
8553
8411
|
return () => window.removeEventListener("resize", measure);
|
|
8554
8412
|
}, [isFloating]);
|
|
8555
|
-
|
|
8413
|
+
React23__namespace.useEffect(() => {
|
|
8556
8414
|
const check = () => {
|
|
8557
8415
|
var _a;
|
|
8558
8416
|
const target = (_a = galleryRef.current) != null ? _a : pricingBarRef.current;
|
|
@@ -8563,7 +8421,7 @@ function TripPage({
|
|
|
8563
8421
|
check();
|
|
8564
8422
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8565
8423
|
}, []);
|
|
8566
|
-
|
|
8424
|
+
React23__namespace.useEffect(() => {
|
|
8567
8425
|
const check = () => {
|
|
8568
8426
|
if (!pricingBarRef.current) return;
|
|
8569
8427
|
setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
|
|
@@ -8572,7 +8430,7 @@ function TripPage({
|
|
|
8572
8430
|
check();
|
|
8573
8431
|
return () => document.removeEventListener("scroll", check, { capture: true });
|
|
8574
8432
|
}, []);
|
|
8575
|
-
|
|
8433
|
+
React23__namespace.useEffect(() => {
|
|
8576
8434
|
if (sections.length === 0) return;
|
|
8577
8435
|
setActiveSection(sections[0].id);
|
|
8578
8436
|
const update = () => {
|
|
@@ -8937,12 +8795,12 @@ function Toast({
|
|
|
8937
8795
|
duration = 6e3,
|
|
8938
8796
|
className
|
|
8939
8797
|
}) {
|
|
8940
|
-
const [mounted, setMounted] =
|
|
8941
|
-
const [visible, setVisible] =
|
|
8942
|
-
|
|
8798
|
+
const [mounted, setMounted] = React23__namespace.useState(false);
|
|
8799
|
+
const [visible, setVisible] = React23__namespace.useState(true);
|
|
8800
|
+
React23__namespace.useEffect(() => {
|
|
8943
8801
|
setMounted(true);
|
|
8944
8802
|
}, []);
|
|
8945
|
-
|
|
8803
|
+
React23__namespace.useEffect(() => {
|
|
8946
8804
|
if (duration === 0) return;
|
|
8947
8805
|
const t = setTimeout(() => {
|
|
8948
8806
|
setVisible(false);
|
|
@@ -9349,21 +9207,21 @@ function LeadCapturePopup({
|
|
|
9349
9207
|
}) {
|
|
9350
9208
|
var _a;
|
|
9351
9209
|
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 =
|
|
9210
|
+
const [open, setOpen] = React23.useState(false);
|
|
9211
|
+
const [closing, setClosing] = React23.useState(false);
|
|
9212
|
+
const [submitted, setSubmitted] = React23.useState(false);
|
|
9213
|
+
const [submitting, setSubmitting] = React23.useState(false);
|
|
9214
|
+
const [error, setError] = React23.useState(null);
|
|
9215
|
+
const [name, setName] = React23.useState("");
|
|
9216
|
+
const [email, setEmail] = React23.useState("");
|
|
9217
|
+
const [travelDate, setTravelDate] = React23.useState("");
|
|
9218
|
+
const panelRef = React23.useRef(null);
|
|
9219
|
+
const nameRef = React23.useRef(null);
|
|
9220
|
+
const show = React23.useCallback(() => {
|
|
9363
9221
|
if (isDismissed()) return;
|
|
9364
9222
|
setOpen(true);
|
|
9365
9223
|
}, []);
|
|
9366
|
-
|
|
9224
|
+
React23.useEffect(() => {
|
|
9367
9225
|
var _a2;
|
|
9368
9226
|
if (isDismissed()) return;
|
|
9369
9227
|
if (config.trigger === "delay") {
|
|
@@ -9390,7 +9248,7 @@ function LeadCapturePopup({
|
|
|
9390
9248
|
return () => window.removeEventListener("scroll", handler);
|
|
9391
9249
|
}
|
|
9392
9250
|
}, [config.trigger, config.delaySeconds, config.scrollPercent, show]);
|
|
9393
|
-
|
|
9251
|
+
React23.useEffect(() => {
|
|
9394
9252
|
if (open && !submitted) {
|
|
9395
9253
|
requestAnimationFrame(() => {
|
|
9396
9254
|
var _a2;
|
|
@@ -9398,7 +9256,7 @@ function LeadCapturePopup({
|
|
|
9398
9256
|
});
|
|
9399
9257
|
}
|
|
9400
9258
|
}, [open, submitted]);
|
|
9401
|
-
const close =
|
|
9259
|
+
const close = React23.useCallback(() => {
|
|
9402
9260
|
setClosing(true);
|
|
9403
9261
|
setDismissed(config.dismissDays);
|
|
9404
9262
|
setTimeout(() => {
|
|
@@ -9406,7 +9264,7 @@ function LeadCapturePopup({
|
|
|
9406
9264
|
setClosing(false);
|
|
9407
9265
|
}, 250);
|
|
9408
9266
|
}, [config.dismissDays]);
|
|
9409
|
-
|
|
9267
|
+
React23.useEffect(() => {
|
|
9410
9268
|
if (!open) return;
|
|
9411
9269
|
const handler = (e) => {
|
|
9412
9270
|
if (e.key === "Escape") close();
|
|
@@ -9414,7 +9272,7 @@ function LeadCapturePopup({
|
|
|
9414
9272
|
document.addEventListener("keydown", handler);
|
|
9415
9273
|
return () => document.removeEventListener("keydown", handler);
|
|
9416
9274
|
}, [open, close]);
|
|
9417
|
-
const onOverlayClick =
|
|
9275
|
+
const onOverlayClick = React23.useCallback(
|
|
9418
9276
|
(e) => {
|
|
9419
9277
|
if (panelRef.current && !panelRef.current.contains(e.target)) {
|
|
9420
9278
|
close();
|
|
@@ -9657,7 +9515,6 @@ exports.BookingDetails = BookingDetails;
|
|
|
9657
9515
|
exports.BookingForm = BookingForm;
|
|
9658
9516
|
exports.BookingOtpEmail = BookingOtpEmail;
|
|
9659
9517
|
exports.BookingShell = BookingShell;
|
|
9660
|
-
exports.BookingWelcomeNewSystemEmail = BookingWelcomeNewSystemEmail;
|
|
9661
9518
|
exports.Button = Button;
|
|
9662
9519
|
exports.COUNTRIES = COUNTRIES;
|
|
9663
9520
|
exports.CounterField = CounterField;
|