@planetaexo/design-system 0.63.0 → 0.64.0

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 React31 = require('react');
3
+ var React32 = 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 React31__namespace = /*#__PURE__*/_interopNamespace(React31);
40
+ var React32__namespace = /*#__PURE__*/_interopNamespace(React32);
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 = React31__namespace.forwardRef(
105
+ var Button = React32__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(
@@ -331,10 +331,10 @@ function DialogDescription(_a) {
331
331
  }, props)
332
332
  );
333
333
  }
334
- var FloatingInput = React31__namespace.forwardRef(
334
+ var FloatingInput = React32__namespace.forwardRef(
335
335
  (_a, ref) => {
336
336
  var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
337
- const inputId = id != null ? id : React31__namespace.useId();
337
+ const inputId = id != null ? id : React32__namespace.useId();
338
338
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", className), children: [
339
339
  /* @__PURE__ */ jsxRuntime.jsx(
340
340
  "input",
@@ -374,10 +374,10 @@ var FloatingInput = React31__namespace.forwardRef(
374
374
  }
375
375
  );
376
376
  FloatingInput.displayName = "FloatingInput";
377
- var FloatingSelect = React31__namespace.forwardRef(
377
+ var FloatingSelect = React32__namespace.forwardRef(
378
378
  (_a, ref) => {
379
379
  var _b = _a, { label, error, id, className, required, children, value } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children", "value"]);
380
- const inputId = id != null ? id : React31__namespace.useId();
380
+ const inputId = id != null ? id : React32__namespace.useId();
381
381
  const hasValue = typeof value === "string" ? value !== "" : value !== void 0 && value !== null;
382
382
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", className), children: [
383
383
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -641,11 +641,11 @@ function PhoneCountrySelect({
641
641
  disabled
642
642
  }) {
643
643
  var _a;
644
- const [open, setOpen] = React31__namespace.useState(false);
645
- const containerRef = React31__namespace.useRef(null);
646
- const listRef = React31__namespace.useRef(null);
644
+ const [open, setOpen] = React32__namespace.useState(false);
645
+ const containerRef = React32__namespace.useRef(null);
646
+ const listRef = React32__namespace.useRef(null);
647
647
  const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
648
- React31__namespace.useEffect(() => {
648
+ React32__namespace.useEffect(() => {
649
649
  if (!open) return;
650
650
  const handler = (e) => {
651
651
  var _a2;
@@ -656,7 +656,7 @@ function PhoneCountrySelect({
656
656
  document.addEventListener("mousedown", handler);
657
657
  return () => document.removeEventListener("mousedown", handler);
658
658
  }, [open]);
659
- React31__namespace.useEffect(() => {
659
+ React32__namespace.useEffect(() => {
660
660
  if (!open || !listRef.current) return;
661
661
  const activeEl = listRef.current.querySelector("[data-selected=true]");
662
662
  activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
@@ -926,8 +926,8 @@ function CalendarDayButton(_a) {
926
926
  "locale"
927
927
  ]);
928
928
  const defaultClassNames = reactDayPicker.getDefaultClassNames();
929
- const ref = React31__namespace.useRef(null);
930
- React31__namespace.useEffect(() => {
929
+ const ref = React32__namespace.useRef(null);
930
+ React32__namespace.useEffect(() => {
931
931
  var _a2;
932
932
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
933
933
  }, [modifiers.focused]);
@@ -958,16 +958,16 @@ function BirthDateField({
958
958
  className,
959
959
  disabled
960
960
  }) {
961
- const [open, setOpen] = React31__namespace.useState(false);
962
- const [text, setText] = React31__namespace.useState(
961
+ const [open, setOpen] = React32__namespace.useState(false);
962
+ const [text, setText] = React32__namespace.useState(
963
963
  value ? dateFns.format(value, "dd/MM/yyyy") : ""
964
964
  );
965
- const containerRef = React31__namespace.useRef(null);
966
- const inputId = React31__namespace.useId();
967
- React31__namespace.useEffect(() => {
965
+ const containerRef = React32__namespace.useRef(null);
966
+ const inputId = React32__namespace.useId();
967
+ React32__namespace.useEffect(() => {
968
968
  setText(value ? dateFns.format(value, "dd/MM/yyyy") : "");
969
969
  }, [value]);
970
- React31__namespace.useEffect(() => {
970
+ React32__namespace.useEffect(() => {
971
971
  if (!open) return;
972
972
  const handler = (e) => {
973
973
  var _a;
@@ -1176,14 +1176,14 @@ function CountrySearchField({
1176
1176
  }) {
1177
1177
  var _a;
1178
1178
  const list = countries != null ? countries : COUNTRIES;
1179
- const [query, setQuery] = React31__namespace.useState("");
1180
- const [open, setOpen] = React31__namespace.useState(false);
1181
- const containerRef = React31__namespace.useRef(null);
1182
- const searchRef = React31__namespace.useRef(null);
1179
+ const [query, setQuery] = React32__namespace.useState("");
1180
+ const [open, setOpen] = React32__namespace.useState(false);
1181
+ const containerRef = React32__namespace.useRef(null);
1182
+ const searchRef = React32__namespace.useRef(null);
1183
1183
  const selected = list.find((c) => c.code === value);
1184
1184
  const isFloated = open || !!selected;
1185
1185
  const filtered = query.trim() ? list.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : list;
1186
- React31__namespace.useEffect(() => {
1186
+ React32__namespace.useEffect(() => {
1187
1187
  if (!open) return;
1188
1188
  const handler = (e) => {
1189
1189
  var _a2;
@@ -1328,10 +1328,10 @@ function AdventureCard({
1328
1328
  }) {
1329
1329
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
1330
1330
  const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
1331
- const [checkedInternal, setCheckedInternal] = React31__namespace.useState(
1331
+ const [checkedInternal, setCheckedInternal] = React32__namespace.useState(
1332
1332
  new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
1333
1333
  );
1334
- const [openDescriptionId, setOpenDescriptionId] = React31__namespace.useState(null);
1334
+ const [openDescriptionId, setOpenDescriptionId] = React32__namespace.useState(null);
1335
1335
  const openDescriptionOptional = openDescriptionId ? (_e = adventure.optionals) == null ? void 0 : _e.find((o) => o.id === openDescriptionId) : void 0;
1336
1336
  const isChecked = (opt) => {
1337
1337
  var _a2;
@@ -1787,7 +1787,7 @@ function BookingShell({
1787
1787
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
1788
1788
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
1789
1789
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: title }),
1790
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxRuntime.jsxs(React31__namespace.Fragment, { children: [
1790
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxRuntime.jsxs(React32__namespace.Fragment, { children: [
1791
1791
  /* @__PURE__ */ jsxRuntime.jsx(
1792
1792
  "span",
1793
1793
  {
@@ -1986,7 +1986,7 @@ function TermsSection({
1986
1986
  termsContent
1987
1987
  }) {
1988
1988
  var _a;
1989
- const [modalOpen, setModalOpen] = React31__namespace.useState(false);
1989
+ const [modalOpen, setModalOpen] = React32__namespace.useState(false);
1990
1990
  const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
1991
1991
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
1992
1992
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
@@ -2124,9 +2124,9 @@ function BookingWizard({
2124
2124
  }) {
2125
2125
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T;
2126
2126
  const wizardSteps = WIZARD_STEPS_FN(labels);
2127
- const [step, setStep] = React31__namespace.useState("responsible");
2128
- const [error, setError] = React31__namespace.useState(null);
2129
- const [responsible, setResponsible] = React31__namespace.useState({
2127
+ const [step, setStep] = React32__namespace.useState("responsible");
2128
+ const [error, setError] = React32__namespace.useState(null);
2129
+ const [responsible, setResponsible] = React32__namespace.useState({
2130
2130
  firstName: "",
2131
2131
  lastName: "",
2132
2132
  email: "",
@@ -2145,7 +2145,7 @@ function BookingWizard({
2145
2145
  return s + ((_b2 = (_a2 = a.slots) == null ? void 0 : _a2.children) != null ? _b2 : 0);
2146
2146
  }, 0);
2147
2147
  const totalPax = totalAdults + totalChildren;
2148
- const [travellers, setTravellers] = React31__namespace.useState(
2148
+ const [travellers, setTravellers] = React32__namespace.useState(
2149
2149
  Array.from({ length: Math.max(totalPax, 1) }, () => ({
2150
2150
  firstName: "",
2151
2151
  lastName: "",
@@ -2153,9 +2153,9 @@ function BookingWizard({
2153
2153
  email: ""
2154
2154
  }))
2155
2155
  );
2156
- const [payAmount, setPayAmount] = React31__namespace.useState("full");
2157
- const [payMethod, setPayMethod] = React31__namespace.useState("stripe");
2158
- const [termsAccepted, setTermsAccepted] = React31__namespace.useState(false);
2156
+ const [payAmount, setPayAmount] = React32__namespace.useState("full");
2157
+ const [payMethod, setPayMethod] = React32__namespace.useState("stripe");
2158
+ const [termsAccepted, setTermsAccepted] = React32__namespace.useState(false);
2159
2159
  const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
2160
2160
  const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
2161
2161
  const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
@@ -2383,7 +2383,7 @@ function Offer({
2383
2383
  className
2384
2384
  }) {
2385
2385
  var _a, _b, _c;
2386
- const [showBooking, setShowBooking] = React31__namespace.useState(false);
2386
+ const [showBooking, setShowBooking] = React32__namespace.useState(false);
2387
2387
  const isShowingCheckout = !confirmedState && (!!checkoutSlot || internalDemoCheckout && showBooking);
2388
2388
  const handleBook = () => {
2389
2389
  if (!checkoutSlot && !externalBookingFlow && internalDemoCheckout) {
@@ -2750,7 +2750,7 @@ function AdventureSection({
2750
2750
  labels
2751
2751
  }) {
2752
2752
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
2753
- const [detailsOpen, setDetailsOpen] = React31__namespace.useState(false);
2753
+ const [detailsOpen, setDetailsOpen] = React32__namespace.useState(false);
2754
2754
  const handleCopyUrl = (url) => {
2755
2755
  if (onCopyFormLink) {
2756
2756
  onCopyFormLink(url);
@@ -3289,8 +3289,8 @@ function AddTravellerDialog({
3289
3289
  errorMessage
3290
3290
  }) {
3291
3291
  var _a, _b, _c, _d, _e;
3292
- const [form, setForm] = React31__namespace.useState(() => createInitialAddFormData(config));
3293
- React31__namespace.useEffect(() => {
3292
+ const [form, setForm] = React32__namespace.useState(() => createInitialAddFormData(config));
3293
+ React32__namespace.useEffect(() => {
3294
3294
  if (open) {
3295
3295
  setForm(createInitialAddFormData(config));
3296
3296
  }
@@ -3350,7 +3350,7 @@ function EditTravellerDialog({
3350
3350
  errorMessage
3351
3351
  }) {
3352
3352
  var _a, _b, _c, _d, _e;
3353
- const [form, setForm] = React31__namespace.useState(() => ({
3353
+ const [form, setForm] = React32__namespace.useState(() => ({
3354
3354
  firstName: "",
3355
3355
  lastName: "",
3356
3356
  email: "",
@@ -3359,7 +3359,7 @@ function EditTravellerDialog({
3359
3359
  birthDate: "",
3360
3360
  personType: "ADULT"
3361
3361
  }));
3362
- React31__namespace.useEffect(() => {
3362
+ React32__namespace.useEffect(() => {
3363
3363
  var _a2, _b2, _c2, _d2, _e2, _f;
3364
3364
  if (open && traveller) {
3365
3365
  setForm({
@@ -3695,48 +3695,48 @@ function BookingDetails({
3695
3695
  const hasSubmitAddTraveller = !!onSubmitAddTraveller;
3696
3696
  const hasSubmitEditTraveller = !!onSubmitEditTraveller;
3697
3697
  const hasConfirmRemoveTraveller = !!onConfirmRemoveTraveller;
3698
- const [addModalState, setAddModalState] = React31__namespace.useState({
3698
+ const [addModalState, setAddModalState] = React32__namespace.useState({
3699
3699
  open: false,
3700
3700
  adventureId: null
3701
3701
  });
3702
- const [editModalState, setEditModalState] = React31__namespace.useState({ open: false, adventureId: null, traveller: null });
3703
- const [deleteModalState, setDeleteModalState] = React31__namespace.useState({ open: false, adventureId: null, traveller: null });
3704
- const [resendInviteDialogState, setResendInviteDialogState] = React31__namespace.useState({ open: false, traveller: null });
3705
- const handleRequestOpenAddModal = React31__namespace.useCallback((adventureId) => {
3702
+ const [editModalState, setEditModalState] = React32__namespace.useState({ open: false, adventureId: null, traveller: null });
3703
+ const [deleteModalState, setDeleteModalState] = React32__namespace.useState({ open: false, adventureId: null, traveller: null });
3704
+ const [resendInviteDialogState, setResendInviteDialogState] = React32__namespace.useState({ open: false, traveller: null });
3705
+ const handleRequestOpenAddModal = React32__namespace.useCallback((adventureId) => {
3706
3706
  setAddModalState({ open: true, adventureId });
3707
3707
  }, []);
3708
- const handleRequestOpenEditModal = React31__namespace.useCallback(
3708
+ const handleRequestOpenEditModal = React32__namespace.useCallback(
3709
3709
  (adventureId, traveller) => {
3710
3710
  setEditModalState({ open: true, adventureId, traveller });
3711
3711
  },
3712
3712
  []
3713
3713
  );
3714
- const handleRequestOpenDeleteModal = React31__namespace.useCallback(
3714
+ const handleRequestOpenDeleteModal = React32__namespace.useCallback(
3715
3715
  (adventureId, traveller) => {
3716
3716
  setDeleteModalState({ open: true, adventureId, traveller });
3717
3717
  },
3718
3718
  []
3719
3719
  );
3720
- const handleRequestOpenResendInviteDialog = React31__namespace.useCallback(
3720
+ const handleRequestOpenResendInviteDialog = React32__namespace.useCallback(
3721
3721
  (traveller) => {
3722
3722
  setResendInviteDialogState({ open: true, traveller });
3723
3723
  },
3724
3724
  []
3725
3725
  );
3726
- const closeAddModal = React31__namespace.useCallback(() => {
3726
+ const closeAddModal = React32__namespace.useCallback(() => {
3727
3727
  setAddModalState({ open: false, adventureId: null });
3728
3728
  }, []);
3729
- const closeEditModal = React31__namespace.useCallback(() => {
3729
+ const closeEditModal = React32__namespace.useCallback(() => {
3730
3730
  setEditModalState({ open: false, adventureId: null, traveller: null });
3731
3731
  }, []);
3732
- const closeDeleteModal = React31__namespace.useCallback(() => {
3732
+ const closeDeleteModal = React32__namespace.useCallback(() => {
3733
3733
  setDeleteModalState({ open: false, adventureId: null, traveller: null });
3734
3734
  }, []);
3735
- const closeResendInviteDialog = React31__namespace.useCallback(() => {
3735
+ const closeResendInviteDialog = React32__namespace.useCallback(() => {
3736
3736
  setResendInviteDialogState({ open: false, traveller: null });
3737
3737
  }, []);
3738
- const submitInFlightRef = React31__namespace.useRef(false);
3739
- const handleAddSubmit = React31__namespace.useCallback(
3738
+ const submitInFlightRef = React32__namespace.useRef(false);
3739
+ const handleAddSubmit = React32__namespace.useCallback(
3740
3740
  async (adventureId, data) => {
3741
3741
  if (!onSubmitAddTraveller) return;
3742
3742
  if (submitInFlightRef.current) return;
@@ -3751,7 +3751,7 @@ function BookingDetails({
3751
3751
  },
3752
3752
  [onSubmitAddTraveller, closeAddModal]
3753
3753
  );
3754
- const handleEditSubmit = React31__namespace.useCallback(
3754
+ const handleEditSubmit = React32__namespace.useCallback(
3755
3755
  async (adventureId, travellerId, data) => {
3756
3756
  if (!onSubmitEditTraveller) return;
3757
3757
  if (submitInFlightRef.current) return;
@@ -3766,7 +3766,7 @@ function BookingDetails({
3766
3766
  },
3767
3767
  [onSubmitEditTraveller, closeEditModal]
3768
3768
  );
3769
- const handleDeleteConfirm = React31__namespace.useCallback(
3769
+ const handleDeleteConfirm = React32__namespace.useCallback(
3770
3770
  async (adventureId, travellerId) => {
3771
3771
  if (!onConfirmRemoveTraveller) return;
3772
3772
  if (submitInFlightRef.current) return;
@@ -5563,7 +5563,7 @@ function BookingCreatedEmail({
5563
5563
  }, children: i + 1 }) }),
5564
5564
  /* @__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 }) })
5565
5565
  ] }) }) }, i)) }),
5566
- 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(React31__namespace.Fragment, { children: [
5566
+ 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(React32__namespace.Fragment, { children: [
5567
5567
  idx === 0 ? /* @__PURE__ */ jsxRuntime.jsx("strong", { children: line }) : line,
5568
5568
  idx < arr.length - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
5569
5569
  ] }, idx)) })
@@ -7932,11 +7932,11 @@ function DatePickerField({
7932
7932
  fromDate,
7933
7933
  className
7934
7934
  }) {
7935
- const [open, setOpen] = React31__namespace.useState(false);
7936
- const containerRef = React31__namespace.useRef(null);
7937
- const [calendarWidth, setCalendarWidth] = React31__namespace.useState();
7935
+ const [open, setOpen] = React32__namespace.useState(false);
7936
+ const containerRef = React32__namespace.useRef(null);
7937
+ const [calendarWidth, setCalendarWidth] = React32__namespace.useState();
7938
7938
  const hasValue = !!value;
7939
- React31__namespace.useEffect(() => {
7939
+ React32__namespace.useEffect(() => {
7940
7940
  if (!containerRef.current) return;
7941
7941
  const observer = new ResizeObserver(([entry]) => {
7942
7942
  setCalendarWidth(entry.contentRect.width);
@@ -8045,7 +8045,7 @@ function BookingForm({
8045
8045
  subtitle = "Free enquiry \u2013 no commitment",
8046
8046
  className
8047
8047
  }) {
8048
- const [values, setValues] = React31__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
8048
+ const [values, setValues] = React32__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
8049
8049
  const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
8050
8050
  const handleSubmit = (e) => {
8051
8051
  e.preventDefault();
@@ -8613,11 +8613,11 @@ function FloatingTextarea({
8613
8613
  }
8614
8614
  function SelectField({ field, value, onChange, error, disabled }) {
8615
8615
  var _a, _b, _c;
8616
- const [open, setOpen] = React31__namespace.useState(false);
8617
- const containerRef = React31__namespace.useRef(null);
8616
+ const [open, setOpen] = React32__namespace.useState(false);
8617
+ const containerRef = React32__namespace.useRef(null);
8618
8618
  const options = (_a = field.options) != null ? _a : [];
8619
8619
  const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
8620
- React31__namespace.useEffect(() => {
8620
+ React32__namespace.useEffect(() => {
8621
8621
  if (!open) return;
8622
8622
  const handleOutside = (e) => {
8623
8623
  if (containerRef.current && !containerRef.current.contains(e.target)) {
@@ -9085,11 +9085,11 @@ function RegistrationForm({
9085
9085
  readOnly = false
9086
9086
  }) {
9087
9087
  var _a;
9088
- const L = React31__namespace.useMemo(
9088
+ const L = React32__namespace.useMemo(
9089
9089
  () => __spreadValues(__spreadValues({}, DEFAULT_LABELS12), labels != null ? labels : {}),
9090
9090
  [labels]
9091
9091
  );
9092
- const sortedFields = React31__namespace.useMemo(
9092
+ const sortedFields = React32__namespace.useMemo(
9093
9093
  () => [...fields].sort((a, b) => {
9094
9094
  var _a2, _b;
9095
9095
  return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
@@ -9097,7 +9097,7 @@ function RegistrationForm({
9097
9097
  [fields]
9098
9098
  );
9099
9099
  const isControlled = values !== void 0;
9100
- const [internal, setInternal] = React31__namespace.useState(
9100
+ const [internal, setInternal] = React32__namespace.useState(
9101
9101
  () => initializeValues(
9102
9102
  sortedFields,
9103
9103
  defaultValues != null ? defaultValues : {},
@@ -9105,9 +9105,9 @@ function RegistrationForm({
9105
9105
  includeTerms
9106
9106
  )
9107
9107
  );
9108
- const [submitAttempted, setSubmitAttempted] = React31__namespace.useState(false);
9109
- const [validationErrors, setValidationErrors] = React31__namespace.useState({});
9110
- React31__namespace.useEffect(() => {
9108
+ const [submitAttempted, setSubmitAttempted] = React32__namespace.useState(false);
9109
+ const [validationErrors, setValidationErrors] = React32__namespace.useState({});
9110
+ React32__namespace.useEffect(() => {
9111
9111
  if (isControlled) return;
9112
9112
  setInternal((prev) => {
9113
9113
  const next = initializeValues(
@@ -9164,7 +9164,7 @@ function RegistrationForm({
9164
9164
  const termsError = submitAttempted && termsEnabled && !termsAccepted;
9165
9165
  const firstErrorFieldId = Object.keys(fieldErrors)[0];
9166
9166
  const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
9167
- React31__namespace.useEffect(() => {
9167
+ React32__namespace.useEffect(() => {
9168
9168
  if (!submitAttempted || !scrollTargetId) return;
9169
9169
  const timer = setTimeout(() => {
9170
9170
  const elem = document.getElementById(scrollTargetId);
@@ -9617,6 +9617,281 @@ function RegistrationSuccessCard({
9617
9617
  }
9618
9618
  );
9619
9619
  }
9620
+ var OTHER = "OTHER";
9621
+ function SectionHeading({ children }) {
9622
+ return /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-heading font-bold text-foreground mb-3", children });
9623
+ }
9624
+ function FieldError({ children }) {
9625
+ if (!children) return null;
9626
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children });
9627
+ }
9628
+ function CancellationForm({
9629
+ adventures,
9630
+ identity,
9631
+ labels,
9632
+ onSubmit,
9633
+ submitting = false,
9634
+ error,
9635
+ className
9636
+ }) {
9637
+ var _a, _b, _c;
9638
+ const [selectedAdventureIds, setSelectedAdventureIds] = React32__namespace.useState(/* @__PURE__ */ new Set());
9639
+ const [participantsByAdventure, setParticipantsByAdventure] = React32__namespace.useState({});
9640
+ const [reasonCode, setReasonCode] = React32__namespace.useState("");
9641
+ const [reasonOther, setReasonOther] = React32__namespace.useState("");
9642
+ const [refundPreference, setRefundPreference] = React32__namespace.useState("");
9643
+ const [refundOther, setRefundOther] = React32__namespace.useState("");
9644
+ const [agreedToPolicy, setAgreedToPolicy] = React32__namespace.useState(false);
9645
+ const [contactName, setContactName] = React32__namespace.useState((_a = identity == null ? void 0 : identity.name) != null ? _a : "");
9646
+ const [contactEmail, setContactEmail] = React32__namespace.useState((_b = identity == null ? void 0 : identity.email) != null ? _b : "");
9647
+ const [contactPhone, setContactPhone] = React32__namespace.useState((_c = identity == null ? void 0 : identity.phone) != null ? _c : "");
9648
+ const [errors, setErrors] = React32__namespace.useState({});
9649
+ const allParticipantsOf = React32__namespace.useCallback(
9650
+ (advId) => {
9651
+ var _a2, _b2;
9652
+ return new Set(((_b2 = (_a2 = adventures.find((a) => a.id === advId)) == null ? void 0 : _a2.participants) != null ? _b2 : []).map((p) => p.id));
9653
+ },
9654
+ [adventures]
9655
+ );
9656
+ function toggleAdventure(advId, on) {
9657
+ setSelectedAdventureIds((prev) => {
9658
+ const next = new Set(prev);
9659
+ if (on) next.add(advId);
9660
+ else next.delete(advId);
9661
+ return next;
9662
+ });
9663
+ setParticipantsByAdventure((prev) => {
9664
+ const next = __spreadValues({}, prev);
9665
+ if (on) next[advId] = allParticipantsOf(advId);
9666
+ else delete next[advId];
9667
+ return next;
9668
+ });
9669
+ }
9670
+ function toggleParticipant(advId, travellerId, on) {
9671
+ setParticipantsByAdventure((prev) => {
9672
+ var _a2;
9673
+ const set = new Set((_a2 = prev[advId]) != null ? _a2 : []);
9674
+ if (on) set.add(travellerId);
9675
+ else set.delete(travellerId);
9676
+ return __spreadProps(__spreadValues({}, prev), { [advId]: set });
9677
+ });
9678
+ }
9679
+ function selectAll() {
9680
+ const allAdv = new Set(adventures.map((a) => a.id));
9681
+ const byAdv = {};
9682
+ for (const a of adventures) byAdv[a.id] = new Set(a.participants.map((p) => p.id));
9683
+ setSelectedAdventureIds(allAdv);
9684
+ setParticipantsByAdventure(byAdv);
9685
+ }
9686
+ const allSelected = adventures.length > 0 && adventures.every((a) => selectedAdventureIds.has(a.id));
9687
+ function validate() {
9688
+ var _a2;
9689
+ const next = {};
9690
+ const selAdvIds = adventures.filter((a) => selectedAdventureIds.has(a.id)).map((a) => a.id);
9691
+ if (selAdvIds.length === 0) next.adventures = labels.errorSelectAdventure;
9692
+ for (const advId of selAdvIds) {
9693
+ const set = participantsByAdventure[advId];
9694
+ if (!set || set.size === 0) next.participants = labels.errorSelectParticipants;
9695
+ }
9696
+ if (!reasonCode) next.reason = labels.errorReasonRequired;
9697
+ else if (reasonCode === OTHER && !reasonOther.trim()) next.reason = labels.errorReasonOtherRequired;
9698
+ if (!refundPreference) next.refund = labels.errorRefundRequired;
9699
+ else if (refundPreference === OTHER && !refundOther.trim())
9700
+ next.refund = labels.errorRefundOtherRequired;
9701
+ if (!agreedToPolicy) next.agreement = labels.errorAgreementRequired;
9702
+ setErrors(next);
9703
+ if (Object.keys(next).length > 0) return { ok: false };
9704
+ const travellerIds = /* @__PURE__ */ new Set();
9705
+ for (const advId of selAdvIds) {
9706
+ for (const tid of (_a2 = participantsByAdventure[advId]) != null ? _a2 : []) travellerIds.add(tid);
9707
+ }
9708
+ return {
9709
+ ok: true,
9710
+ values: {
9711
+ selectedBookingAdventureIds: selAdvIds,
9712
+ selectedTravellerIds: [...travellerIds],
9713
+ reasonCode,
9714
+ reasonOther: reasonCode === OTHER ? reasonOther.trim() : "",
9715
+ refundPreference,
9716
+ refundOther: refundPreference === OTHER ? refundOther.trim() : "",
9717
+ agreedToPolicy,
9718
+ contact: { name: contactName.trim(), email: contactEmail.trim(), phone: contactPhone.trim() }
9719
+ }
9720
+ };
9721
+ }
9722
+ function handleSubmit(e) {
9723
+ e.preventDefault();
9724
+ const r = validate();
9725
+ if (r.ok && r.values) void onSubmit(r.values);
9726
+ }
9727
+ return /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, className: cn("space-y-8", className), noValidate: true, children: [
9728
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
9729
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { children: labels.identityHeading }),
9730
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3", children: [
9731
+ /* @__PURE__ */ jsxRuntime.jsx(
9732
+ FloatingInput,
9733
+ {
9734
+ label: labels.contactNameLabel,
9735
+ value: contactName,
9736
+ onChange: (e) => setContactName(e.target.value)
9737
+ }
9738
+ ),
9739
+ /* @__PURE__ */ jsxRuntime.jsx(
9740
+ FloatingInput,
9741
+ {
9742
+ label: labels.contactEmailLabel,
9743
+ type: "email",
9744
+ value: contactEmail,
9745
+ onChange: (e) => setContactEmail(e.target.value)
9746
+ }
9747
+ ),
9748
+ /* @__PURE__ */ jsxRuntime.jsx(
9749
+ FloatingInput,
9750
+ {
9751
+ label: labels.contactPhoneLabel,
9752
+ value: contactPhone,
9753
+ onChange: (e) => setContactPhone(e.target.value)
9754
+ }
9755
+ )
9756
+ ] })
9757
+ ] }),
9758
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
9759
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3 mb-3", children: [
9760
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { children: labels.adventuresHeading }),
9761
+ adventures.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", variant: "link", size: "sm", onClick: selectAll, disabled: allSelected, children: labels.selectAllLabel })
9762
+ ] }),
9763
+ labels.adventuresHint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mb-3", children: labels.adventuresHint }),
9764
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: adventures.map((adv) => {
9765
+ var _a2;
9766
+ const selected = selectedAdventureIds.has(adv.id);
9767
+ const partSet = (_a2 = participantsByAdventure[adv.id]) != null ? _a2 : /* @__PURE__ */ new Set();
9768
+ return /* @__PURE__ */ jsxRuntime.jsxs(
9769
+ "div",
9770
+ {
9771
+ className: cn(
9772
+ "rounded-lg border p-4 transition-colors",
9773
+ selected ? "border-primary bg-primary/5" : "border-border bg-card"
9774
+ ),
9775
+ children: [
9776
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
9777
+ /* @__PURE__ */ jsxRuntime.jsx(
9778
+ "input",
9779
+ {
9780
+ type: "checkbox",
9781
+ className: "mt-1 h-4 w-4 accent-primary",
9782
+ checked: selected,
9783
+ onChange: (e) => toggleAdventure(adv.id, e.target.checked)
9784
+ }
9785
+ ),
9786
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1", children: [
9787
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block font-ui font-medium text-foreground", children: adv.name }),
9788
+ adv.dateRange && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-sm text-muted-foreground", children: adv.dateRange })
9789
+ ] })
9790
+ ] }),
9791
+ selected && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 pl-7 space-y-4", children: [
9792
+ adv.cancellationPolicy && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md bg-muted/50 border border-border p-3", children: [
9793
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-1", children: labels.policyHeading }),
9794
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground whitespace-pre-line", children: adv.cancellationPolicy })
9795
+ ] }),
9796
+ adv.participants.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
9797
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-2", children: labels.participantsHeading }),
9798
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: adv.participants.map((p) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
9799
+ /* @__PURE__ */ jsxRuntime.jsx(
9800
+ "input",
9801
+ {
9802
+ type: "checkbox",
9803
+ className: "h-4 w-4 accent-primary",
9804
+ checked: partSet.has(p.id),
9805
+ onChange: (e) => toggleParticipant(adv.id, p.id, e.target.checked)
9806
+ }
9807
+ ),
9808
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground", children: p.name })
9809
+ ] }, p.id)) })
9810
+ ] })
9811
+ ] })
9812
+ ]
9813
+ },
9814
+ adv.id
9815
+ );
9816
+ }) }),
9817
+ /* @__PURE__ */ jsxRuntime.jsx(FieldError, { children: errors.adventures }),
9818
+ /* @__PURE__ */ jsxRuntime.jsx(FieldError, { children: errors.participants })
9819
+ ] }),
9820
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
9821
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { children: labels.reasonHeading }),
9822
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: labels.reasonOptions.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
9823
+ /* @__PURE__ */ jsxRuntime.jsx(
9824
+ "input",
9825
+ {
9826
+ type: "radio",
9827
+ name: "cancellation-reason",
9828
+ className: "h-4 w-4 accent-primary",
9829
+ checked: reasonCode === opt.value,
9830
+ onChange: () => setReasonCode(opt.value)
9831
+ }
9832
+ ),
9833
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground", children: opt.label })
9834
+ ] }, opt.value)) }),
9835
+ reasonCode === OTHER && /* @__PURE__ */ jsxRuntime.jsx(
9836
+ "textarea",
9837
+ {
9838
+ className: "mt-3 w-full rounded-lg border border-border bg-background px-3 py-2 text-base text-foreground font-ui focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
9839
+ rows: 3,
9840
+ placeholder: labels.reasonOtherLabel,
9841
+ value: reasonOther,
9842
+ onChange: (e) => setReasonOther(e.target.value),
9843
+ maxLength: 1e3
9844
+ }
9845
+ ),
9846
+ /* @__PURE__ */ jsxRuntime.jsx(FieldError, { children: errors.reason })
9847
+ ] }),
9848
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
9849
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { children: labels.refundHeading }),
9850
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: labels.refundOptions.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
9851
+ /* @__PURE__ */ jsxRuntime.jsx(
9852
+ "input",
9853
+ {
9854
+ type: "radio",
9855
+ name: "cancellation-refund",
9856
+ className: "h-4 w-4 accent-primary",
9857
+ checked: refundPreference === opt.value,
9858
+ onChange: () => setRefundPreference(opt.value)
9859
+ }
9860
+ ),
9861
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground", children: opt.label })
9862
+ ] }, opt.value)) }),
9863
+ refundPreference === OTHER && /* @__PURE__ */ jsxRuntime.jsx(
9864
+ "textarea",
9865
+ {
9866
+ className: "mt-3 w-full rounded-lg border border-border bg-background px-3 py-2 text-base text-foreground font-ui focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
9867
+ rows: 3,
9868
+ placeholder: labels.refundOtherLabel,
9869
+ value: refundOther,
9870
+ onChange: (e) => setRefundOther(e.target.value),
9871
+ maxLength: 1e3
9872
+ }
9873
+ ),
9874
+ /* @__PURE__ */ jsxRuntime.jsx(FieldError, { children: errors.refund })
9875
+ ] }),
9876
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
9877
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-start gap-3 cursor-pointer", children: [
9878
+ /* @__PURE__ */ jsxRuntime.jsx(
9879
+ "input",
9880
+ {
9881
+ type: "checkbox",
9882
+ className: "mt-1 h-4 w-4 accent-primary",
9883
+ checked: agreedToPolicy,
9884
+ onChange: (e) => setAgreedToPolicy(e.target.checked)
9885
+ }
9886
+ ),
9887
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground", children: labels.agreementLabel })
9888
+ ] }),
9889
+ /* @__PURE__ */ jsxRuntime.jsx(FieldError, { children: errors.agreement })
9890
+ ] }),
9891
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive font-ui", role: "alert", children: error }),
9892
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", variant: "destructive", size: "lg", disabled: submitting, className: "w-full", children: submitting ? labels.submittingLabel : labels.submitLabel })
9893
+ ] });
9894
+ }
9620
9895
  var OTPCodeInput = ({
9621
9896
  value,
9622
9897
  onChange,
@@ -9628,10 +9903,10 @@ var OTPCodeInput = ({
9628
9903
  id,
9629
9904
  required
9630
9905
  }) => {
9631
- const baseId = id != null ? id : React31__namespace.useId();
9632
- const inputRef = React31__namespace.useRef(null);
9633
- const [focused, setFocused] = React31__namespace.useState(false);
9634
- const digits = React31__namespace.useMemo(() => {
9906
+ const baseId = id != null ? id : React32__namespace.useId();
9907
+ const inputRef = React32__namespace.useRef(null);
9908
+ const [focused, setFocused] = React32__namespace.useState(false);
9909
+ const digits = React32__namespace.useMemo(() => {
9635
9910
  const arr = value.split("").slice(0, length);
9636
9911
  while (arr.length < length) arr.push("");
9637
9912
  return arr;
@@ -9744,7 +10019,7 @@ function Checkbox(_a) {
9744
10019
  })
9745
10020
  );
9746
10021
  }
9747
- var AccordionVariantContext = React31__namespace.createContext("default");
10022
+ var AccordionVariantContext = React32__namespace.createContext("default");
9748
10023
  function Accordion(_a) {
9749
10024
  var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
9750
10025
  return /* @__PURE__ */ jsxRuntime.jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -9762,7 +10037,7 @@ function Accordion(_a) {
9762
10037
  }
9763
10038
  function AccordionItem(_a) {
9764
10039
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
9765
- const variant = React31__namespace.useContext(AccordionVariantContext);
10040
+ const variant = React32__namespace.useContext(AccordionVariantContext);
9766
10041
  return /* @__PURE__ */ jsxRuntime.jsx(
9767
10042
  accordion.Accordion.Item,
9768
10043
  __spreadValues({
@@ -9783,7 +10058,7 @@ function AccordionTrigger(_a) {
9783
10058
  "className",
9784
10059
  "children"
9785
10060
  ]);
9786
- const variant = React31__namespace.useContext(AccordionVariantContext);
10061
+ const variant = React32__namespace.useContext(AccordionVariantContext);
9787
10062
  return /* @__PURE__ */ jsxRuntime.jsx(accordion.Accordion.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
9788
10063
  accordion.Accordion.Trigger,
9789
10064
  __spreadProps(__spreadValues({
@@ -9837,7 +10112,7 @@ function AccordionContent(_a) {
9837
10112
  "className",
9838
10113
  "children"
9839
10114
  ]);
9840
- const variant = React31__namespace.useContext(AccordionVariantContext);
10115
+ const variant = React32__namespace.useContext(AccordionVariantContext);
9841
10116
  return /* @__PURE__ */ jsxRuntime.jsx(
9842
10117
  accordion.Accordion.Panel,
9843
10118
  __spreadProps(__spreadValues({
@@ -10055,15 +10330,15 @@ function FilterPanel({
10055
10330
  onSortChange
10056
10331
  }) {
10057
10332
  var _a, _b;
10058
- const resolvedGroups = React31__namespace.useMemo(() => resolveGroups(groups), [groups]);
10059
- const [internalValue, setInternalValue] = React31__namespace.useState(
10333
+ const resolvedGroups = React32__namespace.useMemo(() => resolveGroups(groups), [groups]);
10334
+ const [internalValue, setInternalValue] = React32__namespace.useState(
10060
10335
  () => Object.fromEntries(groups.map((g) => [g.id, []]))
10061
10336
  );
10062
10337
  const selected = value != null ? value : internalValue;
10063
- const [expandedItems, setExpandedItems] = React31__namespace.useState(
10338
+ const [expandedItems, setExpandedItems] = React32__namespace.useState(
10064
10339
  () => new Set(groups.flatMap((g) => getDefaultExpandedIds(g.items)))
10065
10340
  );
10066
- const toggleExpanded = React31__namespace.useCallback((id) => {
10341
+ const toggleExpanded = React32__namespace.useCallback((id) => {
10067
10342
  setExpandedItems((prev) => {
10068
10343
  const next = new Set(prev);
10069
10344
  if (next.has(id)) next.delete(id);
@@ -10447,11 +10722,11 @@ function FilterPanel({
10447
10722
  var TRUSTPILOT_SCRIPT_SRC = "https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js";
10448
10723
  function TrustpilotEmbed({ config }) {
10449
10724
  var _a, _b, _c, _d, _e, _f;
10450
- const ref = React31__namespace.useRef(null);
10451
- const [widgetReady, setWidgetReady] = React31__namespace.useState(false);
10452
- const [delayPassed, setDelayPassed] = React31__namespace.useState(false);
10725
+ const ref = React32__namespace.useRef(null);
10726
+ const [widgetReady, setWidgetReady] = React32__namespace.useState(false);
10727
+ const [delayPassed, setDelayPassed] = React32__namespace.useState(false);
10453
10728
  const showFallback = delayPassed && !widgetReady;
10454
- React31__namespace.useEffect(() => {
10729
+ React32__namespace.useEffect(() => {
10455
10730
  var _a2;
10456
10731
  if (typeof document === "undefined" || !ref.current) return;
10457
10732
  const node = ref.current;
@@ -10639,7 +10914,7 @@ function webpVariantUrl(src) {
10639
10914
  return `${withoutQuery}.webp${query}`;
10640
10915
  }
10641
10916
  function PictureLoader() {
10642
- const gradientId = React31__namespace.useId();
10917
+ const gradientId = React32__namespace.useId();
10643
10918
  return /* @__PURE__ */ jsxRuntime.jsx(
10644
10919
  "span",
10645
10920
  {
@@ -10709,10 +10984,10 @@ function Picture(_a) {
10709
10984
  "onError"
10710
10985
  ]);
10711
10986
  var _a2;
10712
- const ref = React31__namespace.useRef(null);
10713
- const [visible, setVisible] = React31__namespace.useState(eager);
10714
- const [loaded, setLoaded] = React31__namespace.useState(false);
10715
- React31__namespace.useEffect(() => {
10987
+ const ref = React32__namespace.useRef(null);
10988
+ const [visible, setVisible] = React32__namespace.useState(eager);
10989
+ const [loaded, setLoaded] = React32__namespace.useState(false);
10990
+ React32__namespace.useEffect(() => {
10716
10991
  if (eager || visible) return;
10717
10992
  const el = ref.current;
10718
10993
  if (!el || typeof IntersectionObserver === "undefined") {
@@ -10731,7 +11006,7 @@ function Picture(_a) {
10731
11006
  io.observe(el);
10732
11007
  return () => io.disconnect();
10733
11008
  }, [eager, visible, rootMargin]);
10734
- React31__namespace.useEffect(() => {
11009
+ React32__namespace.useEffect(() => {
10735
11010
  setLoaded(false);
10736
11011
  }, [src]);
10737
11012
  const webp = webpVariantUrl(src);
@@ -10859,11 +11134,11 @@ function ItineraryModal({
10859
11134
  onNext
10860
11135
  }) {
10861
11136
  var _a, _b, _c;
10862
- const [imgIndex, setImgIndex] = React31__namespace.useState(0);
11137
+ const [imgIndex, setImgIndex] = React32__namespace.useState(0);
10863
11138
  const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
10864
11139
  const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
10865
11140
  const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
10866
- React31__namespace.useEffect(() => {
11141
+ React32__namespace.useEffect(() => {
10867
11142
  setImgIndex(0);
10868
11143
  }, [stop == null ? void 0 : stop.dayNumber]);
10869
11144
  if (!stop) return null;
@@ -10990,8 +11265,8 @@ function ItineraryModal({
10990
11265
  ) });
10991
11266
  }
10992
11267
  function Itinerary({ title, subtitle, stops, className }) {
10993
- const [activeIndex, setActiveIndex] = React31__namespace.useState(null);
10994
- const scrollRef = React31__namespace.useRef(null);
11268
+ const [activeIndex, setActiveIndex] = React32__namespace.useState(null);
11269
+ const scrollRef = React32__namespace.useRef(null);
10995
11270
  const activeStop = activeIndex !== null ? stops[activeIndex] : null;
10996
11271
  const scrollBy = (dir) => {
10997
11272
  if (!scrollRef.current) return;
@@ -11083,18 +11358,18 @@ function Lightbox({
11083
11358
  onClose
11084
11359
  }) {
11085
11360
  var _a;
11086
- const [index, setIndex] = React31__namespace.useState(initialIndex);
11361
+ const [index, setIndex] = React32__namespace.useState(initialIndex);
11087
11362
  const total = photos.length;
11088
11363
  const photo = photos[index];
11089
- const prev = React31__namespace.useCallback(
11364
+ const prev = React32__namespace.useCallback(
11090
11365
  () => setIndex((i) => (i - 1 + total) % total),
11091
11366
  [total]
11092
11367
  );
11093
- const next = React31__namespace.useCallback(
11368
+ const next = React32__namespace.useCallback(
11094
11369
  () => setIndex((i) => (i + 1) % total),
11095
11370
  [total]
11096
11371
  );
11097
- React31__namespace.useEffect(() => {
11372
+ React32__namespace.useEffect(() => {
11098
11373
  const onKey = (e) => {
11099
11374
  if (e.key === "Escape") onClose();
11100
11375
  if (e.key === "ArrowLeft") prev();
@@ -11262,7 +11537,7 @@ function GridGallery({
11262
11537
  initialVisible,
11263
11538
  onOpen
11264
11539
  }) {
11265
- const [expanded, setExpanded] = React31__namespace.useState(false);
11540
+ const [expanded, setExpanded] = React32__namespace.useState(false);
11266
11541
  const cols = gridCols(photos.length);
11267
11542
  const hasMore = photos.length > initialVisible;
11268
11543
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
@@ -11292,7 +11567,7 @@ function CompactGridGallery({
11292
11567
  initialVisible,
11293
11568
  onOpen
11294
11569
  }) {
11295
- const [expanded, setExpanded] = React31__namespace.useState(false);
11570
+ const [expanded, setExpanded] = React32__namespace.useState(false);
11296
11571
  const hasMore = photos.length > initialVisible;
11297
11572
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
11298
11573
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -11321,7 +11596,7 @@ function MasonryGallery({
11321
11596
  initialVisible,
11322
11597
  onOpen
11323
11598
  }) {
11324
- const [expanded, setExpanded] = React31__namespace.useState(false);
11599
+ const [expanded, setExpanded] = React32__namespace.useState(false);
11325
11600
  const hasMore = photos.length > initialVisible;
11326
11601
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
11327
11602
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -11394,7 +11669,7 @@ function FeaturedGallery({
11394
11669
  photos,
11395
11670
  onOpen
11396
11671
  }) {
11397
- const [expanded, setExpanded] = React31__namespace.useState(false);
11672
+ const [expanded, setExpanded] = React32__namespace.useState(false);
11398
11673
  const featured = photos.slice(0, 3);
11399
11674
  const extra = photos.slice(3);
11400
11675
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -11592,9 +11867,9 @@ function PhotoGallery({
11592
11867
  onPhotoClick,
11593
11868
  className
11594
11869
  }) {
11595
- const [lightboxIndex, setLightboxIndex] = React31__namespace.useState(null);
11596
- const [carouselIndex, setCarouselIndex] = React31__namespace.useState(0);
11597
- const normalised = React31__namespace.useMemo(() => photos.map(normalise), [photos]);
11870
+ const [lightboxIndex, setLightboxIndex] = React32__namespace.useState(null);
11871
+ const [carouselIndex, setCarouselIndex] = React32__namespace.useState(0);
11872
+ const normalised = React32__namespace.useMemo(() => photos.map(normalise), [photos]);
11598
11873
  const handleOpen = (index) => {
11599
11874
  setLightboxIndex(index);
11600
11875
  onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
@@ -11680,7 +11955,7 @@ function ItineraryDay({
11680
11955
  photoLayout = "rounded",
11681
11956
  className
11682
11957
  }) {
11683
- const photoList = React31__namespace.useMemo(() => normalisePhotos(photos), [photos]);
11958
+ const photoList = React32__namespace.useMemo(() => normalisePhotos(photos), [photos]);
11684
11959
  const isFullBleed = photoLayout === "fullBleed" || photoLayout === "fullBleedBottom";
11685
11960
  const photoPosition = photoLayout === "fullBleedBottom" ? "bottom" : "top";
11686
11961
  const gallery = photoList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
@@ -11735,8 +12010,8 @@ function MenuTrip({
11735
12010
  bold = true,
11736
12011
  className
11737
12012
  }) {
11738
- const scrollRef = React31__namespace.useRef(null);
11739
- React31__namespace.useEffect(() => {
12013
+ const scrollRef = React32__namespace.useRef(null);
12014
+ React32__namespace.useEffect(() => {
11740
12015
  if (!scrollRef.current || !activeSection) return;
11741
12016
  const container = scrollRef.current;
11742
12017
  const btn = container.querySelector(
@@ -11932,8 +12207,8 @@ function PricingTrip({
11932
12207
  className
11933
12208
  }) {
11934
12209
  const rOuter = sharp ? "rounded-none" : "rounded-2xl";
11935
- const [showEstimates, setShowEstimates] = React31__namespace.useState(false);
11936
- const [showPriceInfo, setShowPriceInfo] = React31__namespace.useState(false);
12210
+ const [showEstimates, setShowEstimates] = React32__namespace.useState(false);
12211
+ const [showPriceInfo, setShowPriceInfo] = React32__namespace.useState(false);
11937
12212
  if (variant === "compact") {
11938
12213
  const showOverlay = showPriceInfo && (!!priceInfo || !!currencyEstimates && currencyEstimates.length > 0);
11939
12214
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2", className), children: [
@@ -12373,14 +12648,14 @@ function SiteHeader({
12373
12648
  }) {
12374
12649
  const t = VARIANT[variant];
12375
12650
  const resolvedLogo = logoSrc != null ? logoSrc : variant === "white" ? logoSrcDark : logoSrcLight;
12376
- const [openMenu, setOpenMenu] = React31__namespace.useState(null);
12377
- const [langOpen, setLangOpen] = React31__namespace.useState(false);
12378
- const [mobileOpen, setMobileOpen] = React31__namespace.useState(false);
12379
- const [openMobileSection, setOpenMobileSection] = React31__namespace.useState(null);
12380
- const [activeLang, setActiveLang] = React31__namespace.useState(currentLanguage);
12651
+ const [openMenu, setOpenMenu] = React32__namespace.useState(null);
12652
+ const [langOpen, setLangOpen] = React32__namespace.useState(false);
12653
+ const [mobileOpen, setMobileOpen] = React32__namespace.useState(false);
12654
+ const [openMobileSection, setOpenMobileSection] = React32__namespace.useState(null);
12655
+ const [activeLang, setActiveLang] = React32__namespace.useState(currentLanguage);
12381
12656
  const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
12382
- const menuCloseTimer = React31__namespace.useRef(void 0);
12383
- const langCloseTimer = React31__namespace.useRef(void 0);
12657
+ const menuCloseTimer = React32__namespace.useRef(void 0);
12658
+ const langCloseTimer = React32__namespace.useRef(void 0);
12384
12659
  const handleMenuEnter = (label) => {
12385
12660
  clearTimeout(menuCloseTimer.current);
12386
12661
  setOpenMenu(label);
@@ -12401,7 +12676,7 @@ function SiteHeader({
12401
12676
  setOpenMenu(null);
12402
12677
  setLangOpen(false);
12403
12678
  };
12404
- React31__namespace.useEffect(() => () => {
12679
+ React32__namespace.useEffect(() => () => {
12405
12680
  clearTimeout(menuCloseTimer.current);
12406
12681
  clearTimeout(langCloseTimer.current);
12407
12682
  }, []);
@@ -12677,7 +12952,7 @@ function SiteHeader({
12677
12952
  ), children: [
12678
12953
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
12679
12954
  const isActive = lang.code === activeLang;
12680
- return /* @__PURE__ */ jsxRuntime.jsxs(React31__namespace.Fragment, { children: [
12955
+ return /* @__PURE__ */ jsxRuntime.jsxs(React32__namespace.Fragment, { children: [
12681
12956
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
12682
12957
  "text-xs select-none",
12683
12958
  variant === "white" ? "text-border" : "text-white/15"
@@ -12739,8 +13014,8 @@ function SiteHeader({
12739
13014
  );
12740
13015
  }
12741
13016
  function ThemeToggle({ className }) {
12742
- const [dark, setDark] = React31__namespace.useState(false);
12743
- React31__namespace.useEffect(() => {
13017
+ const [dark, setDark] = React32__namespace.useState(false);
13018
+ React32__namespace.useEffect(() => {
12744
13019
  const saved = localStorage.getItem("theme");
12745
13020
  const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
12746
13021
  const isDark = saved === "dark" || !saved && prefersDark;
@@ -12790,7 +13065,7 @@ var chipVariants = classVarianceAuthority.cva(
12790
13065
  }
12791
13066
  }
12792
13067
  );
12793
- var Chip = React31__namespace.forwardRef(function Chip2(_a, ref) {
13068
+ var Chip = React32__namespace.forwardRef(function Chip2(_a, ref) {
12794
13069
  var _b = _a, { className, variant, size, href, children } = _b, props = __objRest(_b, ["className", "variant", "size", "href", "children"]);
12795
13070
  const classes = cn(chipVariants({ variant, size }), className);
12796
13071
  if (href) {
@@ -12892,7 +13167,7 @@ function TripCardEditorial(props) {
12892
13167
  tag,
12893
13168
  tagHref
12894
13169
  } = props;
12895
- const [internalFav, setInternalFav] = React31__namespace.useState(false);
13170
+ const [internalFav, setInternalFav] = React32__namespace.useState(false);
12896
13171
  const favorited = favoritedProp != null ? favoritedProp : internalFav;
12897
13172
  const handleFav = (e) => {
12898
13173
  e.preventDefault();
@@ -13403,7 +13678,7 @@ function BlogPost({
13403
13678
  ) }),
13404
13679
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 bg-gradient-to-t from-black/90 via-black/45 to-transparent" }),
13405
13680
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-x-0 bottom-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-3xl px-6 sm:px-8 pb-9 sm:pb-11", children: [
13406
- 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(React31__namespace.Fragment, { children: [
13681
+ 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(React32__namespace.Fragment, { children: [
13407
13682
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
13408
13683
  crumb.href ? /* @__PURE__ */ jsxRuntime.jsx(
13409
13684
  "a",
@@ -13457,7 +13732,7 @@ function BlogPost({
13457
13732
  ] });
13458
13733
  }
13459
13734
  function useHlsVideo(videoRef, src) {
13460
- React31__namespace.useEffect(() => {
13735
+ React32__namespace.useEffect(() => {
13461
13736
  if (!src || !videoRef.current) return;
13462
13737
  const video = videoRef.current;
13463
13738
  if (!src.includes(".m3u8")) return;
@@ -13501,11 +13776,11 @@ function TripHeader({
13501
13776
  className
13502
13777
  }) {
13503
13778
  var _a;
13504
- const [heroIndex, setHeroIndex] = React31__namespace.useState(0);
13505
- const [videoReady, setVideoReady] = React31__namespace.useState(false);
13506
- const videoRef = React31__namespace.useRef(null);
13779
+ const [heroIndex, setHeroIndex] = React32__namespace.useState(0);
13780
+ const [videoReady, setVideoReady] = React32__namespace.useState(false);
13781
+ const videoRef = React32__namespace.useRef(null);
13507
13782
  const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
13508
- const validImages = React31__namespace.useMemo(
13783
+ const validImages = React32__namespace.useMemo(
13509
13784
  () => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
13510
13785
  [images]
13511
13786
  );
@@ -13520,7 +13795,7 @@ function TripHeader({
13520
13795
  const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
13521
13796
  const hasMeta = !!(destination || duration);
13522
13797
  useHlsVideo(videoRef, isHls ? videoUrl : void 0);
13523
- React31__namespace.useEffect(() => {
13798
+ React32__namespace.useEffect(() => {
13524
13799
  if (!videoUrl) return;
13525
13800
  const el = videoRef.current;
13526
13801
  if (!el) return;
@@ -13663,7 +13938,7 @@ function TripHeader({
13663
13938
  chips && chips.length > 0 ? siteHeader ? "-mt-[200px] sm:-mt-[214px]" : "-mt-[168px] sm:-mt-[182px]" : siteHeader ? "-mt-44" : "-mt-36"
13664
13939
  ),
13665
13940
  children: [
13666
- 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(React31__namespace.Fragment, { children: [
13941
+ 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(React32__namespace.Fragment, { children: [
13667
13942
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
13668
13943
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
13669
13944
  ] }, i)) }),
@@ -13829,10 +14104,10 @@ function LanguagePicker({
13829
14104
  }) {
13830
14105
  var _a;
13831
14106
  const t = VARIANT2[variant];
13832
- const [open, setOpen] = React31__namespace.useState(false);
13833
- const ref = React31__namespace.useRef(null);
14107
+ const [open, setOpen] = React32__namespace.useState(false);
14108
+ const ref = React32__namespace.useRef(null);
13834
14109
  const active = (_a = languages.find((l) => l.code === currentLanguage)) != null ? _a : languages[0];
13835
- React31__namespace.useEffect(() => {
14110
+ React32__namespace.useEffect(() => {
13836
14111
  if (!open) return;
13837
14112
  const onDocClick = (e) => {
13838
14113
  if (ref.current && !ref.current.contains(e.target)) {
@@ -14033,7 +14308,7 @@ function SiteFooter({
14033
14308
  children: wrapper
14034
14309
  },
14035
14310
  b.alt + i
14036
- ) : /* @__PURE__ */ jsxRuntime.jsx(React31__namespace.Fragment, { children: wrapper }, b.alt + i);
14311
+ ) : /* @__PURE__ */ jsxRuntime.jsx(React32__namespace.Fragment, { children: wrapper }, b.alt + i);
14037
14312
  }) })
14038
14313
  ] }),
14039
14314
  themes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lg:col-span-3", children: [
@@ -14208,10 +14483,10 @@ function TripPage({
14208
14483
  className
14209
14484
  }) {
14210
14485
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
14211
- const [activeSection, setActiveSection] = React31__namespace.useState("");
14212
- const [accordionValue, setAccordionValue] = React31__namespace.useState([]);
14213
- const [faqsExpanded, setFaqsExpanded] = React31__namespace.useState(false);
14214
- const accordionSectionIds = React31__namespace.useMemo(
14486
+ const [activeSection, setActiveSection] = React32__namespace.useState("");
14487
+ const [accordionValue, setAccordionValue] = React32__namespace.useState([]);
14488
+ const [faqsExpanded, setFaqsExpanded] = React32__namespace.useState(false);
14489
+ const accordionSectionIds = React32__namespace.useMemo(
14215
14490
  () => /* @__PURE__ */ new Set([
14216
14491
  "when-it-operates",
14217
14492
  "how-to-get-there",
@@ -14225,18 +14500,18 @@ function TripPage({
14225
14500
  ]),
14226
14501
  []
14227
14502
  );
14228
- const [navFloating, setNavFloating] = React31__namespace.useState(false);
14229
- const [navHidden, setNavHidden] = React31__namespace.useState(false);
14230
- const [isFloating, setIsFloating] = React31__namespace.useState(false);
14231
- const [sidebarPos, setSidebarPos] = React31__namespace.useState(null);
14232
- const [pricingBarVisible, setPricingBarVisible] = React31__namespace.useState(false);
14233
- const navRef = React31__namespace.useRef(null);
14234
- const navSentinelRef = React31__namespace.useRef(null);
14235
- const sentinelRef = React31__namespace.useRef(null);
14236
- const sidebarPlaceholderRef = React31__namespace.useRef(null);
14237
- const pricingBarRef = React31__namespace.useRef(null);
14238
- const galleryRef = React31__namespace.useRef(null);
14239
- const sections = React31__namespace.useMemo(
14503
+ const [navFloating, setNavFloating] = React32__namespace.useState(false);
14504
+ const [navHidden, setNavHidden] = React32__namespace.useState(false);
14505
+ const [isFloating, setIsFloating] = React32__namespace.useState(false);
14506
+ const [sidebarPos, setSidebarPos] = React32__namespace.useState(null);
14507
+ const [pricingBarVisible, setPricingBarVisible] = React32__namespace.useState(false);
14508
+ const navRef = React32__namespace.useRef(null);
14509
+ const navSentinelRef = React32__namespace.useRef(null);
14510
+ const sentinelRef = React32__namespace.useRef(null);
14511
+ const sidebarPlaceholderRef = React32__namespace.useRef(null);
14512
+ const pricingBarRef = React32__namespace.useRef(null);
14513
+ const galleryRef = React32__namespace.useRef(null);
14514
+ const sections = React32__namespace.useMemo(
14240
14515
  () => {
14241
14516
  var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2;
14242
14517
  return [
@@ -14258,7 +14533,7 @@ function TripPage({
14258
14533
  // eslint-disable-next-line react-hooks/exhaustive-deps
14259
14534
  []
14260
14535
  );
14261
- React31__namespace.useEffect(() => {
14536
+ React32__namespace.useEffect(() => {
14262
14537
  const sentinel = navSentinelRef.current;
14263
14538
  if (!sentinel) return;
14264
14539
  const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
@@ -14266,7 +14541,7 @@ function TripPage({
14266
14541
  update();
14267
14542
  return () => document.removeEventListener("scroll", update, { capture: true });
14268
14543
  }, []);
14269
- React31__namespace.useEffect(() => {
14544
+ React32__namespace.useEffect(() => {
14270
14545
  const sentinel = sentinelRef.current;
14271
14546
  if (!sentinel) return;
14272
14547
  const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
@@ -14274,7 +14549,7 @@ function TripPage({
14274
14549
  update();
14275
14550
  return () => document.removeEventListener("scroll", update, { capture: true });
14276
14551
  }, []);
14277
- React31__namespace.useEffect(() => {
14552
+ React32__namespace.useEffect(() => {
14278
14553
  const measure = () => {
14279
14554
  if (!sidebarPlaceholderRef.current) return;
14280
14555
  const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
@@ -14284,7 +14559,7 @@ function TripPage({
14284
14559
  window.addEventListener("resize", measure);
14285
14560
  return () => window.removeEventListener("resize", measure);
14286
14561
  }, [isFloating]);
14287
- React31__namespace.useEffect(() => {
14562
+ React32__namespace.useEffect(() => {
14288
14563
  const check = () => {
14289
14564
  var _a2;
14290
14565
  const target = (_a2 = galleryRef.current) != null ? _a2 : pricingBarRef.current;
@@ -14295,7 +14570,7 @@ function TripPage({
14295
14570
  check();
14296
14571
  return () => document.removeEventListener("scroll", check, { capture: true });
14297
14572
  }, []);
14298
- React31__namespace.useEffect(() => {
14573
+ React32__namespace.useEffect(() => {
14299
14574
  const check = () => {
14300
14575
  if (!pricingBarRef.current) return;
14301
14576
  setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
@@ -14304,7 +14579,7 @@ function TripPage({
14304
14579
  check();
14305
14580
  return () => document.removeEventListener("scroll", check, { capture: true });
14306
14581
  }, []);
14307
- React31__namespace.useEffect(() => {
14582
+ React32__namespace.useEffect(() => {
14308
14583
  if (sections.length === 0) return;
14309
14584
  setActiveSection(sections[0].id);
14310
14585
  const update = () => {
@@ -14779,7 +15054,7 @@ function TripPage({
14779
15054
  }
14780
15055
  );
14781
15056
  }
14782
- function SectionHeading({
15057
+ function SectionHeading2({
14783
15058
  eyebrow,
14784
15059
  title,
14785
15060
  rightSlot
@@ -14829,11 +15104,11 @@ function CategoryPage2({
14829
15104
  className
14830
15105
  }) {
14831
15106
  var _a;
14832
- const [videoReady, setVideoReady] = React31__namespace.useState(false);
14833
- const videoRef = React31__namespace.useRef(null);
15107
+ const [videoReady, setVideoReady] = React32__namespace.useState(false);
15108
+ const videoRef = React32__namespace.useRef(null);
14834
15109
  const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
14835
15110
  useHlsVideo(videoRef, isHls ? videoUrl : void 0);
14836
- React31__namespace.useEffect(() => {
15111
+ React32__namespace.useEffect(() => {
14837
15112
  if (!videoUrl) return;
14838
15113
  const el = videoRef.current;
14839
15114
  if (!el) return;
@@ -14848,13 +15123,13 @@ function CategoryPage2({
14848
15123
  io.observe(el);
14849
15124
  return () => io.disconnect();
14850
15125
  }, [videoUrl]);
14851
- const [faqsExpanded, setFaqsExpanded] = React31__namespace.useState(false);
14852
- const [tripsExpanded, setTripsExpanded] = React31__namespace.useState(false);
14853
- const [filterValue, setFilterValue] = React31__namespace.useState({});
14854
- const [sort, setSort] = React31__namespace.useState(
15126
+ const [faqsExpanded, setFaqsExpanded] = React32__namespace.useState(false);
15127
+ const [tripsExpanded, setTripsExpanded] = React32__namespace.useState(false);
15128
+ const [filterValue, setFilterValue] = React32__namespace.useState({});
15129
+ const [sort, setSort] = React32__namespace.useState(
14855
15130
  defaultSort != null ? defaultSort : (_a = sortOptions == null ? void 0 : sortOptions[0]) == null ? void 0 : _a.id
14856
15131
  );
14857
- const sortedTrips = React31__namespace.useMemo(() => {
15132
+ const sortedTrips = React32__namespace.useMemo(() => {
14858
15133
  const active = Object.entries(filterValue).filter(
14859
15134
  ([, vals]) => vals && vals.length > 0
14860
15135
  );
@@ -14958,7 +15233,7 @@ function CategoryPage2({
14958
15233
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
14959
15234
  breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => {
14960
15235
  const isLast = i === breadcrumb.length - 1;
14961
- return /* @__PURE__ */ jsxRuntime.jsxs(React31__namespace.Fragment, { children: [
15236
+ return /* @__PURE__ */ jsxRuntime.jsxs(React32__namespace.Fragment, { children: [
14962
15237
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
14963
15238
  crumb.href && !isLast ? /* @__PURE__ */ jsxRuntime.jsx(
14964
15239
  "a",
@@ -14988,7 +15263,7 @@ function CategoryPage2({
14988
15263
  ),
14989
15264
  popularTours && popularTours.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-12", children: [
14990
15265
  /* @__PURE__ */ jsxRuntime.jsx(
14991
- SectionHeading,
15266
+ SectionHeading2,
14992
15267
  {
14993
15268
  eyebrow: popularToursEyebrow,
14994
15269
  title: popularToursTitle
@@ -15008,7 +15283,7 @@ function CategoryPage2({
15008
15283
  }) }) })
15009
15284
  ] }),
15010
15285
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 pt-6 sm:pt-8 pb-12", children: [
15011
- (tripsTitle || tripsEyebrow) && /* @__PURE__ */ jsxRuntime.jsx(SectionHeading, { eyebrow: tripsEyebrow, title: tripsTitle != null ? tripsTitle : "" }),
15286
+ (tripsTitle || tripsEyebrow) && /* @__PURE__ */ jsxRuntime.jsx(SectionHeading2, { eyebrow: tripsEyebrow, title: tripsTitle != null ? tripsTitle : "" }),
15012
15287
  filterGroups && filterGroups.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(
15013
15288
  FilterPanel,
15014
15289
  {
@@ -15246,12 +15521,12 @@ function Toast({
15246
15521
  duration = 6e3,
15247
15522
  className
15248
15523
  }) {
15249
- const [mounted, setMounted] = React31__namespace.useState(false);
15250
- const [visible, setVisible] = React31__namespace.useState(true);
15251
- React31__namespace.useEffect(() => {
15524
+ const [mounted, setMounted] = React32__namespace.useState(false);
15525
+ const [visible, setVisible] = React32__namespace.useState(true);
15526
+ React32__namespace.useEffect(() => {
15252
15527
  setMounted(true);
15253
15528
  }, []);
15254
- React31__namespace.useEffect(() => {
15529
+ React32__namespace.useEffect(() => {
15255
15530
  if (duration === 0) return;
15256
15531
  const t = setTimeout(() => {
15257
15532
  setVisible(false);
@@ -15658,21 +15933,21 @@ function LeadCapturePopup({
15658
15933
  }) {
15659
15934
  var _a;
15660
15935
  const config = __spreadValues(__spreadValues({}, DEFAULTS), _config);
15661
- const [open, setOpen] = React31.useState(false);
15662
- const [closing, setClosing] = React31.useState(false);
15663
- const [submitted, setSubmitted] = React31.useState(false);
15664
- const [submitting, setSubmitting] = React31.useState(false);
15665
- const [error, setError] = React31.useState(null);
15666
- const [name, setName] = React31.useState("");
15667
- const [email, setEmail] = React31.useState("");
15668
- const [travelDate, setTravelDate] = React31.useState("");
15669
- const panelRef = React31.useRef(null);
15670
- const nameRef = React31.useRef(null);
15671
- const show = React31.useCallback(() => {
15936
+ const [open, setOpen] = React32.useState(false);
15937
+ const [closing, setClosing] = React32.useState(false);
15938
+ const [submitted, setSubmitted] = React32.useState(false);
15939
+ const [submitting, setSubmitting] = React32.useState(false);
15940
+ const [error, setError] = React32.useState(null);
15941
+ const [name, setName] = React32.useState("");
15942
+ const [email, setEmail] = React32.useState("");
15943
+ const [travelDate, setTravelDate] = React32.useState("");
15944
+ const panelRef = React32.useRef(null);
15945
+ const nameRef = React32.useRef(null);
15946
+ const show = React32.useCallback(() => {
15672
15947
  if (isDismissed()) return;
15673
15948
  setOpen(true);
15674
15949
  }, []);
15675
- React31.useEffect(() => {
15950
+ React32.useEffect(() => {
15676
15951
  var _a2;
15677
15952
  if (isDismissed()) return;
15678
15953
  if (config.trigger === "delay") {
@@ -15699,7 +15974,7 @@ function LeadCapturePopup({
15699
15974
  return () => window.removeEventListener("scroll", handler);
15700
15975
  }
15701
15976
  }, [config.trigger, config.delaySeconds, config.scrollPercent, show]);
15702
- React31.useEffect(() => {
15977
+ React32.useEffect(() => {
15703
15978
  if (open && !submitted) {
15704
15979
  requestAnimationFrame(() => {
15705
15980
  var _a2;
@@ -15707,7 +15982,7 @@ function LeadCapturePopup({
15707
15982
  });
15708
15983
  }
15709
15984
  }, [open, submitted]);
15710
- const close = React31.useCallback(() => {
15985
+ const close = React32.useCallback(() => {
15711
15986
  setClosing(true);
15712
15987
  setDismissed(config.dismissDays);
15713
15988
  setTimeout(() => {
@@ -15715,7 +15990,7 @@ function LeadCapturePopup({
15715
15990
  setClosing(false);
15716
15991
  }, 250);
15717
15992
  }, [config.dismissDays]);
15718
- React31.useEffect(() => {
15993
+ React32.useEffect(() => {
15719
15994
  if (!open) return;
15720
15995
  const handler = (e) => {
15721
15996
  if (e.key === "Escape") close();
@@ -15723,7 +15998,7 @@ function LeadCapturePopup({
15723
15998
  document.addEventListener("keydown", handler);
15724
15999
  return () => document.removeEventListener("keydown", handler);
15725
16000
  }, [open, close]);
15726
- const onOverlayClick = React31.useCallback(
16001
+ const onOverlayClick = React32.useCallback(
15727
16002
  (e) => {
15728
16003
  if (panelRef.current && !panelRef.current.contains(e.target)) {
15729
16004
  close();
@@ -15961,11 +16236,11 @@ function ExoOrb({
15961
16236
  trackCursor = true,
15962
16237
  className
15963
16238
  }) {
15964
- const uid = React31.useId().replace(/:/g, "");
16239
+ const uid = React32.useId().replace(/:/g, "");
15965
16240
  const id = (name) => `exo-orb-${uid}-${name}`;
15966
- const rootRef = React31.useRef(null);
15967
- const pupilRef = React31.useRef(null);
15968
- React31.useEffect(() => {
16241
+ const rootRef = React32.useRef(null);
16242
+ const pupilRef = React32.useRef(null);
16243
+ React32.useEffect(() => {
15969
16244
  if (!trackCursor) return;
15970
16245
  if (typeof window === "undefined") return;
15971
16246
  if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
@@ -16161,13 +16436,13 @@ function AskExo({
16161
16436
  teaserDelayMs = 2500,
16162
16437
  teaserDurationMs = 6e3
16163
16438
  }) {
16164
- const [open, setOpen] = React31.useState(false);
16165
- const [question, setQuestion] = React31.useState("");
16166
- const [teaserVisible, setTeaserVisible] = React31.useState(false);
16439
+ const [open, setOpen] = React32.useState(false);
16440
+ const [question, setQuestion] = React32.useState("");
16441
+ const [teaserVisible, setTeaserVisible] = React32.useState(false);
16167
16442
  const teaserEnabled = !!teaser && teaser !== "";
16168
- const inputRef = React31.useRef(null);
16169
- const textareaRef = React31.useRef(null);
16170
- React31.useEffect(() => {
16443
+ const inputRef = React32.useRef(null);
16444
+ const textareaRef = React32.useRef(null);
16445
+ React32.useEffect(() => {
16171
16446
  if (!open) {
16172
16447
  setQuestion("");
16173
16448
  return;
@@ -16179,7 +16454,7 @@ function AskExo({
16179
16454
  }, 200);
16180
16455
  return () => clearTimeout(t);
16181
16456
  }, [open, variant]);
16182
- React31.useEffect(() => {
16457
+ React32.useEffect(() => {
16183
16458
  if (!open) return;
16184
16459
  const onKey = (e) => {
16185
16460
  if (e.key === "Escape") setOpen(false);
@@ -16187,7 +16462,7 @@ function AskExo({
16187
16462
  document.addEventListener("keydown", onKey);
16188
16463
  return () => document.removeEventListener("keydown", onKey);
16189
16464
  }, [open]);
16190
- React31.useEffect(() => {
16465
+ React32.useEffect(() => {
16191
16466
  if (!teaserEnabled || open) return;
16192
16467
  if (typeof window === "undefined") return;
16193
16468
  const showTimer = setTimeout(() => setTeaserVisible(true), teaserDelayMs);
@@ -16200,7 +16475,7 @@ function AskExo({
16200
16475
  clearTimeout(hideTimer);
16201
16476
  };
16202
16477
  }, [teaserEnabled, teaserDelayMs, teaserDurationMs, open]);
16203
- React31.useEffect(() => {
16478
+ React32.useEffect(() => {
16204
16479
  if (open) setTeaserVisible(false);
16205
16480
  }, [open]);
16206
16481
  const askExo = (q) => {
@@ -16753,8 +17028,8 @@ function ShareWidget({
16753
17028
  title = "Invite friends & lower the price",
16754
17029
  className
16755
17030
  }) {
16756
- const [copied, setCopied] = React31__namespace.useState(false);
16757
- const [showToast, setShowToast] = React31__namespace.useState(false);
17031
+ const [copied, setCopied] = React32__namespace.useState(false);
17032
+ const [showToast, setShowToast] = React32__namespace.useState(false);
16758
17033
  const encodedUrl = encodeURIComponent(url);
16759
17034
  const encodedMsg = encodeURIComponent(`${message} ${url}`);
16760
17035
  const channels = [
@@ -16923,6 +17198,7 @@ exports.BookingShell = BookingShell;
16923
17198
  exports.BookingSummary = BookingSummary;
16924
17199
  exports.Button = Button;
16925
17200
  exports.COUNTRIES = COUNTRIES;
17201
+ exports.CancellationForm = CancellationForm;
16926
17202
  exports.CategoryPage2 = CategoryPage2;
16927
17203
  exports.CounterField = CounterField;
16928
17204
  exports.CountrySearchField = CountrySearchField;