@planetaexo/design-system 0.12.1 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React22 = require('react');
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 React22__namespace = /*#__PURE__*/_interopNamespace(React22);
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 = React22__namespace.forwardRef(
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 = React22__namespace.forwardRef(
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 : React22__namespace.useId();
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 = React22__namespace.forwardRef(
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 : React22__namespace.useId();
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] = React22__namespace.useState(false);
637
- const containerRef = React22__namespace.useRef(null);
638
- const listRef = React22__namespace.useRef(null);
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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 = React22__namespace.useRef(null);
922
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(false);
954
- const [text, setText] = React22__namespace.useState(
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 = React22__namespace.useRef(null);
958
- const inputId = React22__namespace.useId();
959
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState("");
1172
- const [open, setOpen] = React22__namespace.useState(false);
1173
- const containerRef = React22__namespace.useRef(null);
1174
- const searchRef = React22__namespace.useRef(null);
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(
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(React22__namespace.Fragment, { children: [
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] = React22__namespace.useState(false);
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] = React22__namespace.useState("responsible");
1913
- const [error, setError] = React22__namespace.useState(null);
1914
- const [responsible, setResponsible] = React22__namespace.useState({
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] = React22__namespace.useState(
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] = React22__namespace.useState("full");
1942
- const [payMethod, setPayMethod] = React22__namespace.useState("stripe");
1943
- const [termsAccepted, setTermsAccepted] = React22__namespace.useState(false);
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(() => createInitialAddFormData(config));
2969
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(() => ({
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState({
3305
+ const [addModalState, setAddModalState] = React23__namespace.useState({
3306
3306
  open: false,
3307
3307
  adventureId: null
3308
3308
  });
3309
- const [editModalState, setEditModalState] = React22__namespace.useState({ open: false, adventureId: null, traveller: null });
3310
- const [deleteModalState, setDeleteModalState] = React22__namespace.useState({ open: false, adventureId: null, traveller: null });
3311
- const handleRequestOpenAddModal = React22__namespace.useCallback((adventureId) => {
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 = React22__namespace.useCallback(
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 = React22__namespace.useCallback(
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 = React22__namespace.useCallback(() => {
3326
+ const closeAddModal = React23__namespace.useCallback(() => {
3327
3327
  setAddModalState({ open: false, adventureId: null });
3328
3328
  }, []);
3329
- const closeEditModal = React22__namespace.useCallback(() => {
3329
+ const closeEditModal = React23__namespace.useCallback(() => {
3330
3330
  setEditModalState({ open: false, adventureId: null, traveller: null });
3331
3331
  }, []);
3332
- const closeDeleteModal = React22__namespace.useCallback(() => {
3332
+ const closeDeleteModal = React23__namespace.useCallback(() => {
3333
3333
  setDeleteModalState({ open: false, adventureId: null, traveller: null });
3334
3334
  }, []);
3335
- const handleAddSubmit = React22__namespace.useCallback(
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 = React22__namespace.useCallback(
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 = React22__namespace.useCallback(
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] = React22__namespace.useState(false);
4553
- const containerRef = React22__namespace.useRef(null);
4554
- const [calendarWidth, setCalendarWidth] = React22__namespace.useState();
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
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] = React22__namespace.useState(false);
5198
- const containerRef = React22__namespace.useRef(null);
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
- React22__namespace.useEffect(() => {
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 = React22__namespace.useMemo(
5448
+ const L = React23__namespace.useMemo(
5591
5449
  () => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
5592
5450
  [labels]
5593
5451
  );
5594
- const sortedFields = React22__namespace.useMemo(
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] = React22__namespace.useState(
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] = React22__namespace.useState(false);
5611
- const [validationErrors, setValidationErrors] = React22__namespace.useState({});
5612
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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 : React22__namespace.useId();
6124
- const inputRef = React22__namespace.useRef(null);
6125
- const [focused, setFocused] = React22__namespace.useState(false);
6126
- const digits = React22__namespace.useMemo(() => {
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 = React22__namespace.createContext("default");
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 = React22__namespace.useContext(AccordionVariantContext);
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 = React22__namespace.useContext(AccordionVariantContext);
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 = React22__namespace.useContext(AccordionVariantContext);
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] = React22__namespace.useState(
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] = React22__namespace.useState(0);
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(null);
6661
- const scrollRef = React22__namespace.useRef(null);
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 = React22__namespace.useRef(null);
6748
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(initialIndex);
6752
+ const [index, setIndex] = React23__namespace.useState(initialIndex);
6895
6753
  const total = photos.length;
6896
6754
  const photo = photos[index];
6897
- const prev = React22__namespace.useCallback(
6755
+ const prev = React23__namespace.useCallback(
6898
6756
  () => setIndex((i) => (i - 1 + total) % total),
6899
6757
  [total]
6900
6758
  );
6901
- const next = React22__namespace.useCallback(
6759
+ const next = React23__namespace.useCallback(
6902
6760
  () => setIndex((i) => (i + 1) % total),
6903
6761
  [total]
6904
6762
  );
6905
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(null);
7280
- const normalised = React22__namespace.useMemo(() => photos.map(normalise), [photos]);
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] = React22__namespace.useState(false);
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] = React22__namespace.useState(null);
7693
- const [langOpen, setLangOpen] = React22__namespace.useState(false);
7694
- const [mobileOpen, setMobileOpen] = React22__namespace.useState(false);
7695
- const [openMobileSection, setOpenMobileSection] = React22__namespace.useState(null);
7696
- const [activeLang, setActiveLang] = React22__namespace.useState(currentLanguage);
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 = React22__namespace.useRef(void 0);
7699
- const langCloseTimer = React22__namespace.useRef(void 0);
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
- React22__namespace.useEffect(() => () => {
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(React22__namespace.Fragment, { children: [
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] = React22__namespace.useState(false);
8048
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(0);
8242
- const [videoReady, setVideoReady] = React22__namespace.useState(false);
8243
- const videoRef = React22__namespace.useRef(null);
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 = React22__namespace.useMemo(
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
- React22__namespace.useEffect(() => {
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(React22__namespace.Fragment, { children: [
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] = React22__namespace.useState("");
8503
- const [navFloating, setNavFloating] = React22__namespace.useState(false);
8504
- const [navHidden, setNavHidden] = React22__namespace.useState(false);
8505
- const [isFloating, setIsFloating] = React22__namespace.useState(false);
8506
- const [sidebarPos, setSidebarPos] = React22__namespace.useState(null);
8507
- const [pricingBarVisible, setPricingBarVisible] = React22__namespace.useState(false);
8508
- const navRef = React22__namespace.useRef(null);
8509
- const navSentinelRef = React22__namespace.useRef(null);
8510
- const sentinelRef = React22__namespace.useRef(null);
8511
- const sidebarPlaceholderRef = React22__namespace.useRef(null);
8512
- const pricingBarRef = React22__namespace.useRef(null);
8513
- const galleryRef = React22__namespace.useRef(null);
8514
- const sections = React22__namespace.useMemo(
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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] = React22__namespace.useState(false);
8941
- const [visible, setVisible] = React22__namespace.useState(true);
8942
- React22__namespace.useEffect(() => {
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
- React22__namespace.useEffect(() => {
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] = React22.useState(false);
9353
- const [closing, setClosing] = React22.useState(false);
9354
- const [submitted, setSubmitted] = React22.useState(false);
9355
- const [submitting, setSubmitting] = React22.useState(false);
9356
- const [error, setError] = React22.useState(null);
9357
- const [name, setName] = React22.useState("");
9358
- const [email, setEmail] = React22.useState("");
9359
- const [travelDate, setTravelDate] = React22.useState("");
9360
- const panelRef = React22.useRef(null);
9361
- const nameRef = React22.useRef(null);
9362
- const show = React22.useCallback(() => {
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
- React22.useEffect(() => {
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
- React22.useEffect(() => {
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 = React22.useCallback(() => {
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
- React22.useEffect(() => {
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 = React22.useCallback(
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;