@planetaexo/design-system 0.12.1 → 0.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs 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,10 @@ function BookingConfirmationEmail({
4019
4020
  numberOfPeople,
4020
4021
  host,
4021
4022
  labels,
4022
- className
4023
+ className,
4024
+ nextSteps,
4025
+ nextStepsImportant,
4026
+ directBookingLinkLabel
4023
4027
  }) {
4024
4028
  const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
4025
4029
  const ctaStyle = {
@@ -4036,12 +4040,13 @@ function BookingConfirmationEmail({
4036
4040
  const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: addTravellersUrl, style: ctaStyle, children: l.ctaButton }) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: ctaStyle, role: "presentation", children: l.ctaButton });
4037
4041
  const tableRows = [
4038
4042
  { label: l.bookingNumberLabel, value: bookingNumber },
4039
- { label: l.activityLabel, value: activity },
4043
+ ...activity && activity.trim().length > 0 ? [{ label: l.activityLabel, value: activity }] : [],
4040
4044
  { label: l.adventureLabel, value: adventure },
4041
4045
  { label: l.startingDateLabel, value: startingDate },
4042
4046
  { label: l.numberOfPeopleLabel, value: String(numberOfPeople) },
4043
4047
  { label: l.hostLabel, value: host }
4044
4048
  ];
4049
+ const showNextSteps = Array.isArray(nextSteps) && nextSteps.length > 0;
4045
4050
  return /* @__PURE__ */ jsxRuntime.jsxs(
4046
4051
  "div",
4047
4052
  {
@@ -4071,8 +4076,37 @@ function BookingConfirmationEmail({
4071
4076
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 16px 4px 0", color: emailTokens.mutedForeground }, children: row.label }),
4072
4077
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "4px 0", fontWeight: "500", color: emailTokens.foreground }, children: row.value })
4073
4078
  ] }, i)) }) }),
4079
+ showNextSteps && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4080
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
4081
+ /* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "20px", fontWeight: "700", color: emailTokens.foreground, fontFamily: emailTokens.fontFamily, fontSize: "18px" }, children: l.nextStepsHeading }),
4082
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { borderRadius: "12px", border: `1px solid ${emailTokens.border}`, padding: "20px", marginBottom: "24px" }, children: nextSteps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx("table", { cellPadding: 0, cellSpacing: 0, style: { borderCollapse: "collapse", width: "100%", marginBottom: i < nextSteps.length - 1 ? "16px" : "0" }, children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
4083
+ /* @__PURE__ */ jsxRuntime.jsx("td", { style: { verticalAlign: "top", width: "32px", paddingRight: "14px" }, children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: {
4084
+ display: "inline-block",
4085
+ height: "24px",
4086
+ width: "24px",
4087
+ lineHeight: "24px",
4088
+ textAlign: "center",
4089
+ borderRadius: "9999px",
4090
+ backgroundColor: emailTokens.primaryLight,
4091
+ fontSize: "12px",
4092
+ fontWeight: "700",
4093
+ color: emailTokens.primary,
4094
+ marginTop: "2px"
4095
+ }, children: i + 1 }) }),
4096
+ /* @__PURE__ */ jsxRuntime.jsx("td", { style: { verticalAlign: "top" }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "14px", color: emailTokens.bodyText, lineHeight: "1.6", margin: 0 }, children: step }) })
4097
+ ] }) }) }, i)) }),
4098
+ nextStepsImportant && nextStepsImportant.trim().length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "32px", fontSize: "14px", color: emailTokens.foreground, lineHeight: "1.6" }, children: nextStepsImportant.split("\n").map((line, idx, arr) => /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
4099
+ line,
4100
+ idx < arr.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
4101
+ ] }, idx)) })
4102
+ ] }),
4074
4103
  /* @__PURE__ */ jsxRuntime.jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
4075
4104
  /* @__PURE__ */ jsxRuntime.jsx("p", { style: { marginBottom: "16px" }, children: l.postCtaMessage }),
4105
+ addTravellersUrl && directBookingLinkLabel && directBookingLinkLabel.trim().length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { style: { marginBottom: "16px", fontSize: "14px", color: emailTokens.mutedForeground }, children: [
4106
+ directBookingLinkLabel,
4107
+ " ",
4108
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: addTravellersUrl, style: { color: emailTokens.primary, wordBreak: "break-all" }, children: addTravellersUrl })
4109
+ ] }),
4076
4110
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: l.closingMessage })
4077
4111
  ]
4078
4112
  }
@@ -4265,176 +4299,6 @@ function TravellerFormInviteEmail({
4265
4299
  }
4266
4300
  );
4267
4301
  }
4268
- function BookingWelcomeNewSystemEmail({
4269
- greeting,
4270
- introParagraph,
4271
- bookingsHeading,
4272
- bookings,
4273
- bookingFormsCompleteLabel,
4274
- bookingFormsPendingLabel,
4275
- bookingFormsNoneLabel,
4276
- ctaLabel,
4277
- bookingCodeLabel,
4278
- signatureLine,
4279
- footerText,
4280
- logoUrl,
4281
- className
4282
- }) {
4283
- const ctaStyle = {
4284
- display: "inline-block",
4285
- backgroundColor: emailTokens.primary,
4286
- color: emailTokens.primaryForeground,
4287
- padding: "10px 20px",
4288
- borderRadius: "6px",
4289
- fontSize: "14px",
4290
- fontWeight: 600,
4291
- textDecoration: "none",
4292
- fontFamily: emailTokens.fontFamily
4293
- };
4294
- return /* @__PURE__ */ jsxRuntime.jsxs(
4295
- "div",
4296
- {
4297
- style: {
4298
- fontFamily: emailTokens.fontFamily,
4299
- color: emailTokens.foreground,
4300
- maxWidth: "600px",
4301
- margin: "0 auto",
4302
- padding: "32px",
4303
- border: `1px solid ${emailTokens.border}`,
4304
- borderRadius: "12px",
4305
- backgroundColor: emailTokens.white
4306
- },
4307
- className,
4308
- children: [
4309
- /* @__PURE__ */ jsxRuntime.jsx(EmailLogo, { src: logoUrl }),
4310
- /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "16px", lineHeight: "1.5", margin: "0 0 12px" }, children: greeting }),
4311
- /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "15px", lineHeight: "1.5", margin: "0 0 24px" }, children: introParagraph }),
4312
- /* @__PURE__ */ jsxRuntime.jsx(
4313
- "hr",
4314
- {
4315
- style: {
4316
- border: "none",
4317
- borderTop: `1px solid ${emailTokens.border}`,
4318
- margin: "0 0 24px"
4319
- }
4320
- }
4321
- ),
4322
- /* @__PURE__ */ jsxRuntime.jsx(
4323
- "p",
4324
- {
4325
- style: {
4326
- fontSize: "15px",
4327
- fontWeight: 700,
4328
- margin: "0 0 16px",
4329
- color: emailTokens.foreground
4330
- },
4331
- children: bookingsHeading
4332
- }
4333
- ),
4334
- /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 24px" }, children: bookings.map((b) => {
4335
- const statusLine = b.formsStatus === "COMPLETO" ? bookingFormsCompleteLabel : b.formsStatus === "SEM_FORM" ? bookingFormsNoneLabel != null ? bookingFormsNoneLabel : "" : bookingFormsPendingLabel(b.formsCompleted, b.formsRequired);
4336
- const statusIcon = b.formsStatus === "COMPLETO" ? "\u2713" : b.formsStatus === "SEM_FORM" ? "" : "\u26A0";
4337
- const statusColor = b.formsStatus === "COMPLETO" ? emailTokens.green : b.formsStatus === "SEM_FORM" ? emailTokens.mutedForeground : emailTokens.destructive;
4338
- return /* @__PURE__ */ jsxRuntime.jsxs(
4339
- "li",
4340
- {
4341
- style: {
4342
- marginBottom: "16px",
4343
- padding: "16px",
4344
- backgroundColor: emailTokens.muted,
4345
- border: `1px solid ${emailTokens.border}`,
4346
- borderRadius: "8px"
4347
- },
4348
- children: [
4349
- /* @__PURE__ */ jsxRuntime.jsx(
4350
- "p",
4351
- {
4352
- style: {
4353
- fontSize: "15px",
4354
- fontWeight: 600,
4355
- margin: "0 0 6px",
4356
- color: emailTokens.foreground
4357
- },
4358
- children: b.adventureName
4359
- }
4360
- ),
4361
- /* @__PURE__ */ jsxRuntime.jsx(
4362
- "p",
4363
- {
4364
- style: {
4365
- fontSize: "13px",
4366
- color: emailTokens.mutedForeground,
4367
- margin: "0 0 4px"
4368
- },
4369
- children: b.startDate
4370
- }
4371
- ),
4372
- /* @__PURE__ */ jsxRuntime.jsxs(
4373
- "p",
4374
- {
4375
- style: {
4376
- fontSize: "13px",
4377
- color: emailTokens.mutedForeground,
4378
- margin: "0 0 8px"
4379
- },
4380
- children: [
4381
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontWeight: 600 }, children: bookingCodeLabel }),
4382
- " ",
4383
- /* @__PURE__ */ jsxRuntime.jsxs(
4384
- "span",
4385
- {
4386
- style: {
4387
- fontFamily: emailTokens.fontFamily,
4388
- color: emailTokens.foreground,
4389
- fontWeight: 600
4390
- },
4391
- children: [
4392
- "#",
4393
- b.bookingId
4394
- ]
4395
- }
4396
- )
4397
- ]
4398
- }
4399
- ),
4400
- statusLine && /* @__PURE__ */ jsxRuntime.jsxs(
4401
- "p",
4402
- {
4403
- style: {
4404
- fontSize: "13px",
4405
- color: statusColor,
4406
- margin: "0 0 12px",
4407
- fontWeight: 500
4408
- },
4409
- children: [
4410
- statusIcon ? `${statusIcon} ` : "",
4411
- statusLine
4412
- ]
4413
- }
4414
- ),
4415
- /* @__PURE__ */ jsxRuntime.jsx("a", { href: b.bookingPublicUrl, style: ctaStyle, children: ctaLabel })
4416
- ]
4417
- },
4418
- b.bookingId
4419
- );
4420
- }) }),
4421
- footerText && /* @__PURE__ */ jsxRuntime.jsx(
4422
- "p",
4423
- {
4424
- style: {
4425
- color: emailTokens.mutedForeground,
4426
- fontSize: "13px",
4427
- lineHeight: "1.5",
4428
- margin: "0 0 16px"
4429
- },
4430
- children: footerText
4431
- }
4432
- ),
4433
- /* @__PURE__ */ jsxRuntime.jsx("p", { style: { fontSize: "14px", lineHeight: "1.5", margin: "0" }, children: signatureLine })
4434
- ]
4435
- }
4436
- );
4437
- }
4438
4302
  function CounterField({
4439
4303
  label,
4440
4304
  sublabel,
@@ -4549,11 +4413,11 @@ function DatePickerField({
4549
4413
  fromDate,
4550
4414
  className
4551
4415
  }) {
4552
- const [open, setOpen] = React22__namespace.useState(false);
4553
- const containerRef = React22__namespace.useRef(null);
4554
- const [calendarWidth, setCalendarWidth] = React22__namespace.useState();
4416
+ const [open, setOpen] = React23__namespace.useState(false);
4417
+ const containerRef = React23__namespace.useRef(null);
4418
+ const [calendarWidth, setCalendarWidth] = React23__namespace.useState();
4555
4419
  const hasValue = !!value;
4556
- React22__namespace.useEffect(() => {
4420
+ React23__namespace.useEffect(() => {
4557
4421
  if (!containerRef.current) return;
4558
4422
  const observer = new ResizeObserver(([entry]) => {
4559
4423
  setCalendarWidth(entry.contentRect.width);
@@ -4662,7 +4526,7 @@ function BookingForm({
4662
4526
  subtitle = "Free enquiry \u2013 no commitment",
4663
4527
  className
4664
4528
  }) {
4665
- const [values, setValues] = React22__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
4529
+ const [values, setValues] = React23__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
4666
4530
  const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
4667
4531
  const handleSubmit = (e) => {
4668
4532
  e.preventDefault();
@@ -5194,11 +5058,11 @@ function FloatingTextarea({
5194
5058
  }
5195
5059
  function SelectField({ field, value, onChange, error, disabled }) {
5196
5060
  var _a, _b, _c;
5197
- const [open, setOpen] = React22__namespace.useState(false);
5198
- const containerRef = React22__namespace.useRef(null);
5061
+ const [open, setOpen] = React23__namespace.useState(false);
5062
+ const containerRef = React23__namespace.useRef(null);
5199
5063
  const options = (_a = field.options) != null ? _a : [];
5200
5064
  const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
5201
- React22__namespace.useEffect(() => {
5065
+ React23__namespace.useEffect(() => {
5202
5066
  if (!open) return;
5203
5067
  const handleOutside = (e) => {
5204
5068
  if (containerRef.current && !containerRef.current.contains(e.target)) {
@@ -5587,11 +5451,11 @@ function RegistrationForm({
5587
5451
  readOnly = false
5588
5452
  }) {
5589
5453
  var _a;
5590
- const L = React22__namespace.useMemo(
5454
+ const L = React23__namespace.useMemo(
5591
5455
  () => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
5592
5456
  [labels]
5593
5457
  );
5594
- const sortedFields = React22__namespace.useMemo(
5458
+ const sortedFields = React23__namespace.useMemo(
5595
5459
  () => [...fields].sort((a, b) => {
5596
5460
  var _a2, _b;
5597
5461
  return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
@@ -5599,7 +5463,7 @@ function RegistrationForm({
5599
5463
  [fields]
5600
5464
  );
5601
5465
  const isControlled = values !== void 0;
5602
- const [internal, setInternal] = React22__namespace.useState(
5466
+ const [internal, setInternal] = React23__namespace.useState(
5603
5467
  () => initializeValues(
5604
5468
  sortedFields,
5605
5469
  defaultValues != null ? defaultValues : {},
@@ -5607,9 +5471,9 @@ function RegistrationForm({
5607
5471
  includeTerms
5608
5472
  )
5609
5473
  );
5610
- const [submitAttempted, setSubmitAttempted] = React22__namespace.useState(false);
5611
- const [validationErrors, setValidationErrors] = React22__namespace.useState({});
5612
- React22__namespace.useEffect(() => {
5474
+ const [submitAttempted, setSubmitAttempted] = React23__namespace.useState(false);
5475
+ const [validationErrors, setValidationErrors] = React23__namespace.useState({});
5476
+ React23__namespace.useEffect(() => {
5613
5477
  if (isControlled) return;
5614
5478
  setInternal((prev) => {
5615
5479
  const next = initializeValues(
@@ -5666,7 +5530,7 @@ function RegistrationForm({
5666
5530
  const termsError = submitAttempted && termsEnabled && !termsAccepted;
5667
5531
  const firstErrorFieldId = Object.keys(fieldErrors)[0];
5668
5532
  const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
5669
- React22__namespace.useEffect(() => {
5533
+ React23__namespace.useEffect(() => {
5670
5534
  if (!submitAttempted || !scrollTargetId) return;
5671
5535
  const timer = setTimeout(() => {
5672
5536
  const elem = document.getElementById(scrollTargetId);
@@ -6120,10 +5984,10 @@ var OTPCodeInput = ({
6120
5984
  id,
6121
5985
  required
6122
5986
  }) => {
6123
- const baseId = id != null ? id : React22__namespace.useId();
6124
- const inputRef = React22__namespace.useRef(null);
6125
- const [focused, setFocused] = React22__namespace.useState(false);
6126
- const digits = React22__namespace.useMemo(() => {
5987
+ const baseId = id != null ? id : React23__namespace.useId();
5988
+ const inputRef = React23__namespace.useRef(null);
5989
+ const [focused, setFocused] = React23__namespace.useState(false);
5990
+ const digits = React23__namespace.useMemo(() => {
6127
5991
  const arr = value.split("").slice(0, length);
6128
5992
  while (arr.length < length) arr.push("");
6129
5993
  return arr;
@@ -6239,7 +6103,7 @@ function Checkbox(_a) {
6239
6103
  })
6240
6104
  );
6241
6105
  }
6242
- var AccordionVariantContext = React22__namespace.createContext("default");
6106
+ var AccordionVariantContext = React23__namespace.createContext("default");
6243
6107
  function Accordion(_a) {
6244
6108
  var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
6245
6109
  return /* @__PURE__ */ jsxRuntime.jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -6257,7 +6121,7 @@ function Accordion(_a) {
6257
6121
  }
6258
6122
  function AccordionItem(_a) {
6259
6123
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
6260
- const variant = React22__namespace.useContext(AccordionVariantContext);
6124
+ const variant = React23__namespace.useContext(AccordionVariantContext);
6261
6125
  return /* @__PURE__ */ jsxRuntime.jsx(
6262
6126
  accordion.Accordion.Item,
6263
6127
  __spreadValues({
@@ -6278,7 +6142,7 @@ function AccordionTrigger(_a) {
6278
6142
  "className",
6279
6143
  "children"
6280
6144
  ]);
6281
- const variant = React22__namespace.useContext(AccordionVariantContext);
6145
+ const variant = React23__namespace.useContext(AccordionVariantContext);
6282
6146
  return /* @__PURE__ */ jsxRuntime.jsx(accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
6283
6147
  accordion.Accordion.Trigger,
6284
6148
  __spreadProps(__spreadValues({
@@ -6332,7 +6196,7 @@ function AccordionContent(_a) {
6332
6196
  "className",
6333
6197
  "children"
6334
6198
  ]);
6335
- const variant = React22__namespace.useContext(AccordionVariantContext);
6199
+ const variant = React23__namespace.useContext(AccordionVariantContext);
6336
6200
  return /* @__PURE__ */ jsxRuntime.jsx(
6337
6201
  accordion.Accordion.Panel,
6338
6202
  __spreadProps(__spreadValues({
@@ -6364,7 +6228,7 @@ function FilterPanel({
6364
6228
  title = "Filters",
6365
6229
  className
6366
6230
  }) {
6367
- const [internalValue, setInternalValue] = React22__namespace.useState(
6231
+ const [internalValue, setInternalValue] = React23__namespace.useState(
6368
6232
  () => Object.fromEntries(groups.map((g) => [g.id, []]))
6369
6233
  );
6370
6234
  const selected = value != null ? value : internalValue;
@@ -6526,11 +6390,11 @@ function ItineraryModal({
6526
6390
  onNext
6527
6391
  }) {
6528
6392
  var _a, _b, _c;
6529
- const [imgIndex, setImgIndex] = React22__namespace.useState(0);
6393
+ const [imgIndex, setImgIndex] = React23__namespace.useState(0);
6530
6394
  const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
6531
6395
  const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
6532
6396
  const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
6533
- React22__namespace.useEffect(() => {
6397
+ React23__namespace.useEffect(() => {
6534
6398
  setImgIndex(0);
6535
6399
  }, [stop == null ? void 0 : stop.dayNumber]);
6536
6400
  if (!stop) return null;
@@ -6657,8 +6521,8 @@ function ItineraryModal({
6657
6521
  ) });
6658
6522
  }
6659
6523
  function Itinerary({ title, subtitle, stops, className }) {
6660
- const [activeIndex, setActiveIndex] = React22__namespace.useState(null);
6661
- const scrollRef = React22__namespace.useRef(null);
6524
+ const [activeIndex, setActiveIndex] = React23__namespace.useState(null);
6525
+ const scrollRef = React23__namespace.useRef(null);
6662
6526
  const activeStop = activeIndex !== null ? stops[activeIndex] : null;
6663
6527
  const scrollBy = (dir) => {
6664
6528
  if (!scrollRef.current) return;
@@ -6744,8 +6608,8 @@ function MenuTrip({
6744
6608
  bold = true,
6745
6609
  className
6746
6610
  }) {
6747
- const scrollRef = React22__namespace.useRef(null);
6748
- React22__namespace.useEffect(() => {
6611
+ const scrollRef = React23__namespace.useRef(null);
6612
+ React23__namespace.useEffect(() => {
6749
6613
  if (!scrollRef.current || !activeSection) return;
6750
6614
  const container = scrollRef.current;
6751
6615
  const btn = container.querySelector(
@@ -6891,18 +6755,18 @@ function Lightbox({
6891
6755
  onClose
6892
6756
  }) {
6893
6757
  var _a;
6894
- const [index, setIndex] = React22__namespace.useState(initialIndex);
6758
+ const [index, setIndex] = React23__namespace.useState(initialIndex);
6895
6759
  const total = photos.length;
6896
6760
  const photo = photos[index];
6897
- const prev = React22__namespace.useCallback(
6761
+ const prev = React23__namespace.useCallback(
6898
6762
  () => setIndex((i) => (i - 1 + total) % total),
6899
6763
  [total]
6900
6764
  );
6901
- const next = React22__namespace.useCallback(
6765
+ const next = React23__namespace.useCallback(
6902
6766
  () => setIndex((i) => (i + 1) % total),
6903
6767
  [total]
6904
6768
  );
6905
- React22__namespace.useEffect(() => {
6769
+ React23__namespace.useEffect(() => {
6906
6770
  const onKey = (e) => {
6907
6771
  if (e.key === "Escape") onClose();
6908
6772
  if (e.key === "ArrowLeft") prev();
@@ -7096,7 +6960,7 @@ function GridGallery({
7096
6960
  initialVisible,
7097
6961
  onOpen
7098
6962
  }) {
7099
- const [expanded, setExpanded] = React22__namespace.useState(false);
6963
+ const [expanded, setExpanded] = React23__namespace.useState(false);
7100
6964
  const cols = gridCols(photos.length);
7101
6965
  const hasMore = photos.length > initialVisible;
7102
6966
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
@@ -7126,7 +6990,7 @@ function MasonryGallery({
7126
6990
  initialVisible,
7127
6991
  onOpen
7128
6992
  }) {
7129
- const [expanded, setExpanded] = React22__namespace.useState(false);
6993
+ const [expanded, setExpanded] = React23__namespace.useState(false);
7130
6994
  const hasMore = photos.length > initialVisible;
7131
6995
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
7132
6996
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -7199,7 +7063,7 @@ function FeaturedGallery({
7199
7063
  photos,
7200
7064
  onOpen
7201
7065
  }) {
7202
- const [expanded, setExpanded] = React22__namespace.useState(false);
7066
+ const [expanded, setExpanded] = React23__namespace.useState(false);
7203
7067
  const featured = photos.slice(0, 3);
7204
7068
  const extra = photos.slice(3);
7205
7069
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -7276,8 +7140,8 @@ function PhotoGallery({
7276
7140
  onPhotoClick,
7277
7141
  className
7278
7142
  }) {
7279
- const [lightboxIndex, setLightboxIndex] = React22__namespace.useState(null);
7280
- const normalised = React22__namespace.useMemo(() => photos.map(normalise), [photos]);
7143
+ const [lightboxIndex, setLightboxIndex] = React23__namespace.useState(null);
7144
+ const normalised = React23__namespace.useMemo(() => photos.map(normalise), [photos]);
7281
7145
  const handleOpen = (index) => {
7282
7146
  setLightboxIndex(index);
7283
7147
  onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
@@ -7366,7 +7230,7 @@ function PricingTrip({
7366
7230
  variant = "card",
7367
7231
  className
7368
7232
  }) {
7369
- const [showPricing, setShowPricing] = React22__namespace.useState(false);
7233
+ const [showPricing, setShowPricing] = React23__namespace.useState(false);
7370
7234
  if (variant === "compact") {
7371
7235
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", className), children: [
7372
7236
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -7689,14 +7553,14 @@ function SiteHeader({
7689
7553
  className
7690
7554
  }) {
7691
7555
  const t = VARIANT[variant];
7692
- const [openMenu, setOpenMenu] = 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);
7556
+ const [openMenu, setOpenMenu] = React23__namespace.useState(null);
7557
+ const [langOpen, setLangOpen] = React23__namespace.useState(false);
7558
+ const [mobileOpen, setMobileOpen] = React23__namespace.useState(false);
7559
+ const [openMobileSection, setOpenMobileSection] = React23__namespace.useState(null);
7560
+ const [activeLang, setActiveLang] = React23__namespace.useState(currentLanguage);
7697
7561
  const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
7698
- const menuCloseTimer = React22__namespace.useRef(void 0);
7699
- const langCloseTimer = React22__namespace.useRef(void 0);
7562
+ const menuCloseTimer = React23__namespace.useRef(void 0);
7563
+ const langCloseTimer = React23__namespace.useRef(void 0);
7700
7564
  const handleMenuEnter = (label) => {
7701
7565
  clearTimeout(menuCloseTimer.current);
7702
7566
  setOpenMenu(label);
@@ -7717,7 +7581,7 @@ function SiteHeader({
7717
7581
  setOpenMenu(null);
7718
7582
  setLangOpen(false);
7719
7583
  };
7720
- React22__namespace.useEffect(() => () => {
7584
+ React23__namespace.useEffect(() => () => {
7721
7585
  clearTimeout(menuCloseTimer.current);
7722
7586
  clearTimeout(langCloseTimer.current);
7723
7587
  }, []);
@@ -7982,7 +7846,7 @@ function SiteHeader({
7982
7846
  ), children: [
7983
7847
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
7984
7848
  const isActive = lang.code === activeLang;
7985
- return /* @__PURE__ */ jsxRuntime.jsxs(React22__namespace.Fragment, { children: [
7849
+ return /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
7986
7850
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
7987
7851
  "text-xs select-none",
7988
7852
  variant === "white" ? "text-border" : "text-white/15"
@@ -8044,8 +7908,8 @@ function SiteHeader({
8044
7908
  );
8045
7909
  }
8046
7910
  function ThemeToggle({ className }) {
8047
- const [dark, setDark] = React22__namespace.useState(false);
8048
- React22__namespace.useEffect(() => {
7911
+ const [dark, setDark] = React23__namespace.useState(false);
7912
+ React23__namespace.useEffect(() => {
8049
7913
  const saved = localStorage.getItem("theme");
8050
7914
  const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
8051
7915
  const isDark = saved === "dark" || !saved && prefersDark;
@@ -8196,7 +8060,7 @@ function TripCard({
8196
8060
  );
8197
8061
  }
8198
8062
  function useHlsVideo(videoRef, src) {
8199
- React22__namespace.useEffect(() => {
8063
+ React23__namespace.useEffect(() => {
8200
8064
  if (!src || !videoRef.current) return;
8201
8065
  const video = videoRef.current;
8202
8066
  if (!src.includes(".m3u8")) return;
@@ -8238,11 +8102,11 @@ function TripHeader({
8238
8102
  className
8239
8103
  }) {
8240
8104
  var _a;
8241
- const [heroIndex, setHeroIndex] = React22__namespace.useState(0);
8242
- const [videoReady, setVideoReady] = React22__namespace.useState(false);
8243
- const videoRef = React22__namespace.useRef(null);
8105
+ const [heroIndex, setHeroIndex] = React23__namespace.useState(0);
8106
+ const [videoReady, setVideoReady] = React23__namespace.useState(false);
8107
+ const videoRef = React23__namespace.useRef(null);
8244
8108
  const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
8245
- const validImages = React22__namespace.useMemo(
8109
+ const validImages = React23__namespace.useMemo(
8246
8110
  () => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
8247
8111
  [images]
8248
8112
  );
@@ -8257,7 +8121,7 @@ function TripHeader({
8257
8121
  const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
8258
8122
  const hasMeta = !!(destination || duration);
8259
8123
  useHlsVideo(videoRef, isHls ? videoUrl : void 0);
8260
- React22__namespace.useEffect(() => {
8124
+ React23__namespace.useEffect(() => {
8261
8125
  if (!videoUrl) return;
8262
8126
  const el = videoRef.current;
8263
8127
  if (!el) return;
@@ -8399,7 +8263,7 @@ function TripHeader({
8399
8263
  siteHeader ? "-mt-44" : "-mt-36"
8400
8264
  ),
8401
8265
  children: [
8402
- breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxRuntime.jsxs(React22__namespace.Fragment, { children: [
8266
+ breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxRuntime.jsxs(React23__namespace.Fragment, { children: [
8403
8267
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
8404
8268
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
8405
8269
  ] }, i)) }),
@@ -8499,19 +8363,19 @@ function TripPage({
8499
8363
  features,
8500
8364
  className
8501
8365
  }) {
8502
- const [activeSection, setActiveSection] = 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(
8366
+ const [activeSection, setActiveSection] = React23__namespace.useState("");
8367
+ const [navFloating, setNavFloating] = React23__namespace.useState(false);
8368
+ const [navHidden, setNavHidden] = React23__namespace.useState(false);
8369
+ const [isFloating, setIsFloating] = React23__namespace.useState(false);
8370
+ const [sidebarPos, setSidebarPos] = React23__namespace.useState(null);
8371
+ const [pricingBarVisible, setPricingBarVisible] = React23__namespace.useState(false);
8372
+ const navRef = React23__namespace.useRef(null);
8373
+ const navSentinelRef = React23__namespace.useRef(null);
8374
+ const sentinelRef = React23__namespace.useRef(null);
8375
+ const sidebarPlaceholderRef = React23__namespace.useRef(null);
8376
+ const pricingBarRef = React23__namespace.useRef(null);
8377
+ const galleryRef = React23__namespace.useRef(null);
8378
+ const sections = React23__namespace.useMemo(
8515
8379
  () => [
8516
8380
  { id: "key-info", label: "Key info", show: !!(infoGroups == null ? void 0 : infoGroups.length) },
8517
8381
  { id: "overview", label: "Overview", show: !!overview },
@@ -8526,7 +8390,7 @@ function TripPage({
8526
8390
  // eslint-disable-next-line react-hooks/exhaustive-deps
8527
8391
  []
8528
8392
  );
8529
- React22__namespace.useEffect(() => {
8393
+ React23__namespace.useEffect(() => {
8530
8394
  const sentinel = navSentinelRef.current;
8531
8395
  if (!sentinel) return;
8532
8396
  const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
@@ -8534,7 +8398,7 @@ function TripPage({
8534
8398
  update();
8535
8399
  return () => document.removeEventListener("scroll", update, { capture: true });
8536
8400
  }, []);
8537
- React22__namespace.useEffect(() => {
8401
+ React23__namespace.useEffect(() => {
8538
8402
  const sentinel = sentinelRef.current;
8539
8403
  if (!sentinel) return;
8540
8404
  const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
@@ -8542,7 +8406,7 @@ function TripPage({
8542
8406
  update();
8543
8407
  return () => document.removeEventListener("scroll", update, { capture: true });
8544
8408
  }, []);
8545
- React22__namespace.useEffect(() => {
8409
+ React23__namespace.useEffect(() => {
8546
8410
  const measure = () => {
8547
8411
  if (!sidebarPlaceholderRef.current) return;
8548
8412
  const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
@@ -8552,7 +8416,7 @@ function TripPage({
8552
8416
  window.addEventListener("resize", measure);
8553
8417
  return () => window.removeEventListener("resize", measure);
8554
8418
  }, [isFloating]);
8555
- React22__namespace.useEffect(() => {
8419
+ React23__namespace.useEffect(() => {
8556
8420
  const check = () => {
8557
8421
  var _a;
8558
8422
  const target = (_a = galleryRef.current) != null ? _a : pricingBarRef.current;
@@ -8563,7 +8427,7 @@ function TripPage({
8563
8427
  check();
8564
8428
  return () => document.removeEventListener("scroll", check, { capture: true });
8565
8429
  }, []);
8566
- React22__namespace.useEffect(() => {
8430
+ React23__namespace.useEffect(() => {
8567
8431
  const check = () => {
8568
8432
  if (!pricingBarRef.current) return;
8569
8433
  setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
@@ -8572,7 +8436,7 @@ function TripPage({
8572
8436
  check();
8573
8437
  return () => document.removeEventListener("scroll", check, { capture: true });
8574
8438
  }, []);
8575
- React22__namespace.useEffect(() => {
8439
+ React23__namespace.useEffect(() => {
8576
8440
  if (sections.length === 0) return;
8577
8441
  setActiveSection(sections[0].id);
8578
8442
  const update = () => {
@@ -8937,12 +8801,12 @@ function Toast({
8937
8801
  duration = 6e3,
8938
8802
  className
8939
8803
  }) {
8940
- const [mounted, setMounted] = React22__namespace.useState(false);
8941
- const [visible, setVisible] = React22__namespace.useState(true);
8942
- React22__namespace.useEffect(() => {
8804
+ const [mounted, setMounted] = React23__namespace.useState(false);
8805
+ const [visible, setVisible] = React23__namespace.useState(true);
8806
+ React23__namespace.useEffect(() => {
8943
8807
  setMounted(true);
8944
8808
  }, []);
8945
- React22__namespace.useEffect(() => {
8809
+ React23__namespace.useEffect(() => {
8946
8810
  if (duration === 0) return;
8947
8811
  const t = setTimeout(() => {
8948
8812
  setVisible(false);
@@ -9349,21 +9213,21 @@ function LeadCapturePopup({
9349
9213
  }) {
9350
9214
  var _a;
9351
9215
  const config = __spreadValues(__spreadValues({}, DEFAULTS), _config);
9352
- const [open, setOpen] = 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(() => {
9216
+ const [open, setOpen] = React23.useState(false);
9217
+ const [closing, setClosing] = React23.useState(false);
9218
+ const [submitted, setSubmitted] = React23.useState(false);
9219
+ const [submitting, setSubmitting] = React23.useState(false);
9220
+ const [error, setError] = React23.useState(null);
9221
+ const [name, setName] = React23.useState("");
9222
+ const [email, setEmail] = React23.useState("");
9223
+ const [travelDate, setTravelDate] = React23.useState("");
9224
+ const panelRef = React23.useRef(null);
9225
+ const nameRef = React23.useRef(null);
9226
+ const show = React23.useCallback(() => {
9363
9227
  if (isDismissed()) return;
9364
9228
  setOpen(true);
9365
9229
  }, []);
9366
- React22.useEffect(() => {
9230
+ React23.useEffect(() => {
9367
9231
  var _a2;
9368
9232
  if (isDismissed()) return;
9369
9233
  if (config.trigger === "delay") {
@@ -9390,7 +9254,7 @@ function LeadCapturePopup({
9390
9254
  return () => window.removeEventListener("scroll", handler);
9391
9255
  }
9392
9256
  }, [config.trigger, config.delaySeconds, config.scrollPercent, show]);
9393
- React22.useEffect(() => {
9257
+ React23.useEffect(() => {
9394
9258
  if (open && !submitted) {
9395
9259
  requestAnimationFrame(() => {
9396
9260
  var _a2;
@@ -9398,7 +9262,7 @@ function LeadCapturePopup({
9398
9262
  });
9399
9263
  }
9400
9264
  }, [open, submitted]);
9401
- const close = React22.useCallback(() => {
9265
+ const close = React23.useCallback(() => {
9402
9266
  setClosing(true);
9403
9267
  setDismissed(config.dismissDays);
9404
9268
  setTimeout(() => {
@@ -9406,7 +9270,7 @@ function LeadCapturePopup({
9406
9270
  setClosing(false);
9407
9271
  }, 250);
9408
9272
  }, [config.dismissDays]);
9409
- React22.useEffect(() => {
9273
+ React23.useEffect(() => {
9410
9274
  if (!open) return;
9411
9275
  const handler = (e) => {
9412
9276
  if (e.key === "Escape") close();
@@ -9414,7 +9278,7 @@ function LeadCapturePopup({
9414
9278
  document.addEventListener("keydown", handler);
9415
9279
  return () => document.removeEventListener("keydown", handler);
9416
9280
  }, [open, close]);
9417
- const onOverlayClick = React22.useCallback(
9281
+ const onOverlayClick = React23.useCallback(
9418
9282
  (e) => {
9419
9283
  if (panelRef.current && !panelRef.current.contains(e.target)) {
9420
9284
  close();
@@ -9657,7 +9521,6 @@ exports.BookingDetails = BookingDetails;
9657
9521
  exports.BookingForm = BookingForm;
9658
9522
  exports.BookingOtpEmail = BookingOtpEmail;
9659
9523
  exports.BookingShell = BookingShell;
9660
- exports.BookingWelcomeNewSystemEmail = BookingWelcomeNewSystemEmail;
9661
9524
  exports.Button = Button;
9662
9525
  exports.COUNTRIES = COUNTRIES;
9663
9526
  exports.CounterField = CounterField;