@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.js CHANGED
@@ -1,4 +1,4 @@
1
- import * as React22 from 'react';
1
+ import * as React23 from 'react';
2
2
  import { useState, useRef, useCallback, useEffect } from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { clsx } from 'clsx';
@@ -81,7 +81,7 @@ var buttonVariants = cva(
81
81
  }
82
82
  }
83
83
  );
84
- var Button = React22.forwardRef(
84
+ var Button = React23.forwardRef(
85
85
  (_a, ref) => {
86
86
  var _b = _a, { className, variant, size } = _b, props = __objRest(_b, ["className", "variant", "size"]);
87
87
  return /* @__PURE__ */ jsx(
@@ -302,10 +302,10 @@ function DialogDescription(_a) {
302
302
  }, props)
303
303
  );
304
304
  }
305
- var FloatingInput = React22.forwardRef(
305
+ var FloatingInput = React23.forwardRef(
306
306
  (_a, ref) => {
307
307
  var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
308
- const inputId = id != null ? id : React22.useId();
308
+ const inputId = id != null ? id : React23.useId();
309
309
  return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
310
310
  /* @__PURE__ */ jsx(
311
311
  "input",
@@ -345,10 +345,10 @@ var FloatingInput = React22.forwardRef(
345
345
  }
346
346
  );
347
347
  FloatingInput.displayName = "FloatingInput";
348
- var FloatingSelect = React22.forwardRef(
348
+ var FloatingSelect = React23.forwardRef(
349
349
  (_a, ref) => {
350
350
  var _b = _a, { label, error, id, className, required, children, value } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children", "value"]);
351
- const inputId = id != null ? id : React22.useId();
351
+ const inputId = id != null ? id : React23.useId();
352
352
  const hasValue = typeof value === "string" ? value !== "" : value !== void 0 && value !== null;
353
353
  return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
354
354
  /* @__PURE__ */ jsx(
@@ -612,11 +612,11 @@ function PhoneCountrySelect({
612
612
  disabled
613
613
  }) {
614
614
  var _a;
615
- const [open, setOpen] = React22.useState(false);
616
- const containerRef = React22.useRef(null);
617
- const listRef = React22.useRef(null);
615
+ const [open, setOpen] = React23.useState(false);
616
+ const containerRef = React23.useRef(null);
617
+ const listRef = React23.useRef(null);
618
618
  const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
619
- React22.useEffect(() => {
619
+ React23.useEffect(() => {
620
620
  if (!open) return;
621
621
  const handler = (e) => {
622
622
  var _a2;
@@ -627,7 +627,7 @@ function PhoneCountrySelect({
627
627
  document.addEventListener("mousedown", handler);
628
628
  return () => document.removeEventListener("mousedown", handler);
629
629
  }, [open]);
630
- React22.useEffect(() => {
630
+ React23.useEffect(() => {
631
631
  if (!open || !listRef.current) return;
632
632
  const activeEl = listRef.current.querySelector("[data-selected=true]");
633
633
  activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
@@ -897,8 +897,8 @@ function CalendarDayButton(_a) {
897
897
  "locale"
898
898
  ]);
899
899
  const defaultClassNames = getDefaultClassNames();
900
- const ref = React22.useRef(null);
901
- React22.useEffect(() => {
900
+ const ref = React23.useRef(null);
901
+ React23.useEffect(() => {
902
902
  var _a2;
903
903
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
904
904
  }, [modifiers.focused]);
@@ -929,16 +929,16 @@ function BirthDateField({
929
929
  className,
930
930
  disabled
931
931
  }) {
932
- const [open, setOpen] = React22.useState(false);
933
- const [text, setText] = React22.useState(
932
+ const [open, setOpen] = React23.useState(false);
933
+ const [text, setText] = React23.useState(
934
934
  value ? format(value, "dd/MM/yyyy") : ""
935
935
  );
936
- const containerRef = React22.useRef(null);
937
- const inputId = React22.useId();
938
- React22.useEffect(() => {
936
+ const containerRef = React23.useRef(null);
937
+ const inputId = React23.useId();
938
+ React23.useEffect(() => {
939
939
  setText(value ? format(value, "dd/MM/yyyy") : "");
940
940
  }, [value]);
941
- React22.useEffect(() => {
941
+ React23.useEffect(() => {
942
942
  if (!open) return;
943
943
  const handler = (e) => {
944
944
  var _a;
@@ -1147,14 +1147,14 @@ function CountrySearchField({
1147
1147
  }) {
1148
1148
  var _a;
1149
1149
  const list = countries != null ? countries : COUNTRIES;
1150
- const [query, setQuery] = React22.useState("");
1151
- const [open, setOpen] = React22.useState(false);
1152
- const containerRef = React22.useRef(null);
1153
- const searchRef = React22.useRef(null);
1150
+ const [query, setQuery] = React23.useState("");
1151
+ const [open, setOpen] = React23.useState(false);
1152
+ const containerRef = React23.useRef(null);
1153
+ const searchRef = React23.useRef(null);
1154
1154
  const selected = list.find((c) => c.code === value);
1155
1155
  const isFloated = open || !!selected;
1156
1156
  const filtered = query.trim() ? list.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : list;
1157
- React22.useEffect(() => {
1157
+ React23.useEffect(() => {
1158
1158
  if (!open) return;
1159
1159
  const handler = (e) => {
1160
1160
  var _a2;
@@ -1264,7 +1264,7 @@ function Alert({ variant = "info", children, className }) {
1264
1264
  function AdventureCard({ adventure }) {
1265
1265
  var _a, _b, _c, _d, _e, _f;
1266
1266
  const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
1267
- const [checkedInternal, setCheckedInternal] = React22.useState(
1267
+ const [checkedInternal, setCheckedInternal] = React23.useState(
1268
1268
  new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
1269
1269
  );
1270
1270
  const isChecked = (opt) => {
@@ -1601,7 +1601,7 @@ function BookingShell({
1601
1601
  return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
1602
1602
  /* @__PURE__ */ jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
1603
1603
  /* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: title }),
1604
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(React22.Fragment, { children: [
1604
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: steps.map((label, i) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
1605
1605
  /* @__PURE__ */ jsx(
1606
1606
  "span",
1607
1607
  {
@@ -1800,7 +1800,7 @@ function TermsSection({
1800
1800
  termsContent
1801
1801
  }) {
1802
1802
  var _a;
1803
- const [modalOpen, setModalOpen] = React22.useState(false);
1803
+ const [modalOpen, setModalOpen] = React23.useState(false);
1804
1804
  const i18n = (_a = TERMS_I18N[locale]) != null ? _a : TERMS_I18N.en;
1805
1805
  return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
1806
1806
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: title }),
@@ -1888,9 +1888,9 @@ function BookingWizard({
1888
1888
  depositInfo,
1889
1889
  onCancel
1890
1890
  }) {
1891
- const [step, setStep] = React22.useState("responsible");
1892
- const [error, setError] = React22.useState(null);
1893
- const [responsible, setResponsible] = React22.useState({
1891
+ const [step, setStep] = React23.useState("responsible");
1892
+ const [error, setError] = React23.useState(null);
1893
+ const [responsible, setResponsible] = React23.useState({
1894
1894
  firstName: "",
1895
1895
  lastName: "",
1896
1896
  email: "",
@@ -1909,7 +1909,7 @@ function BookingWizard({
1909
1909
  return s + ((_b = (_a = a.slots) == null ? void 0 : _a.children) != null ? _b : 0);
1910
1910
  }, 0);
1911
1911
  const totalPax = totalAdults + totalChildren;
1912
- const [travellers, setTravellers] = React22.useState(
1912
+ const [travellers, setTravellers] = React23.useState(
1913
1913
  Array.from({ length: Math.max(totalPax, 1) }, () => ({
1914
1914
  firstName: "",
1915
1915
  lastName: "",
@@ -1917,9 +1917,9 @@ function BookingWizard({
1917
1917
  email: ""
1918
1918
  }))
1919
1919
  );
1920
- const [payAmount, setPayAmount] = React22.useState("full");
1921
- const [payMethod, setPayMethod] = React22.useState("stripe");
1922
- const [termsAccepted, setTermsAccepted] = React22.useState(false);
1920
+ const [payAmount, setPayAmount] = React23.useState("full");
1921
+ const [payMethod, setPayMethod] = React23.useState("stripe");
1922
+ const [termsAccepted, setTermsAccepted] = React23.useState(false);
1923
1923
  const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
1924
1924
  const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
1925
1925
  const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
@@ -2120,7 +2120,7 @@ function Offer({
2120
2120
  continueDisabled,
2121
2121
  className
2122
2122
  }) {
2123
- const [showBooking, setShowBooking] = React22.useState(false);
2123
+ const [showBooking, setShowBooking] = React23.useState(false);
2124
2124
  const isShowingCheckout = !!checkoutSlot || showBooking;
2125
2125
  const handleBook = () => {
2126
2126
  if (!checkoutSlot && !externalBookingFlow) setShowBooking(true);
@@ -2458,7 +2458,7 @@ function AdventureSection({
2458
2458
  cannotRemoveLastTravellerLabel
2459
2459
  }) {
2460
2460
  var _a, _b, _c, _d, _e, _f, _g, _h;
2461
- const [detailsOpen, setDetailsOpen] = React22.useState(false);
2461
+ const [detailsOpen, setDetailsOpen] = React23.useState(false);
2462
2462
  const handleCopyUrl = (url) => {
2463
2463
  if (onCopyFormLink) {
2464
2464
  onCopyFormLink(url);
@@ -2944,8 +2944,8 @@ function AddTravellerDialog({
2944
2944
  errorMessage
2945
2945
  }) {
2946
2946
  var _a, _b, _c, _d, _e;
2947
- const [form, setForm] = React22.useState(() => createInitialAddFormData(config));
2948
- React22.useEffect(() => {
2947
+ const [form, setForm] = React23.useState(() => createInitialAddFormData(config));
2948
+ React23.useEffect(() => {
2949
2949
  if (open) {
2950
2950
  setForm(createInitialAddFormData(config));
2951
2951
  }
@@ -3005,7 +3005,7 @@ function EditTravellerDialog({
3005
3005
  errorMessage
3006
3006
  }) {
3007
3007
  var _a, _b, _c, _d, _e;
3008
- const [form, setForm] = React22.useState(() => ({
3008
+ const [form, setForm] = React23.useState(() => ({
3009
3009
  firstName: "",
3010
3010
  lastName: "",
3011
3011
  email: "",
@@ -3014,7 +3014,7 @@ function EditTravellerDialog({
3014
3014
  birthDate: "",
3015
3015
  personType: "ADULT"
3016
3016
  }));
3017
- React22.useEffect(() => {
3017
+ React23.useEffect(() => {
3018
3018
  var _a2, _b2, _c2, _d2, _e2, _f;
3019
3019
  if (open && traveller) {
3020
3020
  setForm({
@@ -3281,37 +3281,37 @@ function BookingDetails({
3281
3281
  const hasSubmitAddTraveller = !!onSubmitAddTraveller;
3282
3282
  const hasSubmitEditTraveller = !!onSubmitEditTraveller;
3283
3283
  const hasConfirmRemoveTraveller = !!onConfirmRemoveTraveller;
3284
- const [addModalState, setAddModalState] = React22.useState({
3284
+ const [addModalState, setAddModalState] = React23.useState({
3285
3285
  open: false,
3286
3286
  adventureId: null
3287
3287
  });
3288
- const [editModalState, setEditModalState] = React22.useState({ open: false, adventureId: null, traveller: null });
3289
- const [deleteModalState, setDeleteModalState] = React22.useState({ open: false, adventureId: null, traveller: null });
3290
- const handleRequestOpenAddModal = React22.useCallback((adventureId) => {
3288
+ const [editModalState, setEditModalState] = React23.useState({ open: false, adventureId: null, traveller: null });
3289
+ const [deleteModalState, setDeleteModalState] = React23.useState({ open: false, adventureId: null, traveller: null });
3290
+ const handleRequestOpenAddModal = React23.useCallback((adventureId) => {
3291
3291
  setAddModalState({ open: true, adventureId });
3292
3292
  }, []);
3293
- const handleRequestOpenEditModal = React22.useCallback(
3293
+ const handleRequestOpenEditModal = React23.useCallback(
3294
3294
  (adventureId, traveller) => {
3295
3295
  setEditModalState({ open: true, adventureId, traveller });
3296
3296
  },
3297
3297
  []
3298
3298
  );
3299
- const handleRequestOpenDeleteModal = React22.useCallback(
3299
+ const handleRequestOpenDeleteModal = React23.useCallback(
3300
3300
  (adventureId, traveller) => {
3301
3301
  setDeleteModalState({ open: true, adventureId, traveller });
3302
3302
  },
3303
3303
  []
3304
3304
  );
3305
- const closeAddModal = React22.useCallback(() => {
3305
+ const closeAddModal = React23.useCallback(() => {
3306
3306
  setAddModalState({ open: false, adventureId: null });
3307
3307
  }, []);
3308
- const closeEditModal = React22.useCallback(() => {
3308
+ const closeEditModal = React23.useCallback(() => {
3309
3309
  setEditModalState({ open: false, adventureId: null, traveller: null });
3310
3310
  }, []);
3311
- const closeDeleteModal = React22.useCallback(() => {
3311
+ const closeDeleteModal = React23.useCallback(() => {
3312
3312
  setDeleteModalState({ open: false, adventureId: null, traveller: null });
3313
3313
  }, []);
3314
- const handleAddSubmit = React22.useCallback(
3314
+ const handleAddSubmit = React23.useCallback(
3315
3315
  async (adventureId, data) => {
3316
3316
  if (!onSubmitAddTraveller) return;
3317
3317
  try {
@@ -3322,7 +3322,7 @@ function BookingDetails({
3322
3322
  },
3323
3323
  [onSubmitAddTraveller, closeAddModal]
3324
3324
  );
3325
- const handleEditSubmit = React22.useCallback(
3325
+ const handleEditSubmit = React23.useCallback(
3326
3326
  async (adventureId, travellerId, data) => {
3327
3327
  if (!onSubmitEditTraveller) return;
3328
3328
  try {
@@ -3333,7 +3333,7 @@ function BookingDetails({
3333
3333
  },
3334
3334
  [onSubmitEditTraveller, closeEditModal]
3335
3335
  );
3336
- const handleDeleteConfirm = React22.useCallback(
3336
+ const handleDeleteConfirm = React23.useCallback(
3337
3337
  async (adventureId, travellerId) => {
3338
3338
  if (!onConfirmRemoveTraveller) return;
3339
3339
  try {
@@ -3985,7 +3985,8 @@ var DEFAULT_LABELS2 = {
3985
3985
  numberOfPeopleLabel: "Number of People:",
3986
3986
  hostLabel: "Host:",
3987
3987
  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.",
3988
- closingMessage: "If you have any questions, just reply to this email \u2014 happy to help."
3988
+ closingMessage: "If you have any questions, just reply to this email \u2014 happy to help.",
3989
+ nextStepsHeading: "Next steps:"
3989
3990
  };
3990
3991
  function BookingConfirmationEmail({
3991
3992
  recipientName,
@@ -3998,7 +3999,10 @@ function BookingConfirmationEmail({
3998
3999
  numberOfPeople,
3999
4000
  host,
4000
4001
  labels,
4001
- className
4002
+ className,
4003
+ nextSteps,
4004
+ nextStepsImportant,
4005
+ directBookingLinkLabel
4002
4006
  }) {
4003
4007
  const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
4004
4008
  const ctaStyle = {
@@ -4015,12 +4019,13 @@ function BookingConfirmationEmail({
4015
4019
  const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsx("a", { href: addTravellersUrl, style: ctaStyle, children: l.ctaButton }) : /* @__PURE__ */ jsx("span", { style: ctaStyle, role: "presentation", children: l.ctaButton });
4016
4020
  const tableRows = [
4017
4021
  { label: l.bookingNumberLabel, value: bookingNumber },
4018
- { label: l.activityLabel, value: activity },
4022
+ ...activity && activity.trim().length > 0 ? [{ label: l.activityLabel, value: activity }] : [],
4019
4023
  { label: l.adventureLabel, value: adventure },
4020
4024
  { label: l.startingDateLabel, value: startingDate },
4021
4025
  { label: l.numberOfPeopleLabel, value: String(numberOfPeople) },
4022
4026
  { label: l.hostLabel, value: host }
4023
4027
  ];
4028
+ const showNextSteps = Array.isArray(nextSteps) && nextSteps.length > 0;
4024
4029
  return /* @__PURE__ */ jsxs(
4025
4030
  "div",
4026
4031
  {
@@ -4050,8 +4055,37 @@ function BookingConfirmationEmail({
4050
4055
  /* @__PURE__ */ jsx("td", { style: { padding: "4px 16px 4px 0", color: emailTokens.mutedForeground }, children: row.label }),
4051
4056
  /* @__PURE__ */ jsx("td", { style: { padding: "4px 0", fontWeight: "500", color: emailTokens.foreground }, children: row.value })
4052
4057
  ] }, i)) }) }),
4058
+ showNextSteps && /* @__PURE__ */ jsxs(Fragment, { children: [
4059
+ /* @__PURE__ */ jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
4060
+ /* @__PURE__ */ jsx("p", { style: { marginBottom: "20px", fontWeight: "700", color: emailTokens.foreground, fontFamily: emailTokens.fontFamily, fontSize: "18px" }, children: l.nextStepsHeading }),
4061
+ /* @__PURE__ */ jsx("div", { style: { borderRadius: "12px", border: `1px solid ${emailTokens.border}`, padding: "20px", marginBottom: "24px" }, children: nextSteps.map((step, i) => /* @__PURE__ */ jsx("table", { cellPadding: 0, cellSpacing: 0, style: { borderCollapse: "collapse", width: "100%", marginBottom: i < nextSteps.length - 1 ? "16px" : "0" }, children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsxs("tr", { children: [
4062
+ /* @__PURE__ */ jsx("td", { style: { verticalAlign: "top", width: "32px", paddingRight: "14px" }, children: /* @__PURE__ */ jsx("span", { style: {
4063
+ display: "inline-block",
4064
+ height: "24px",
4065
+ width: "24px",
4066
+ lineHeight: "24px",
4067
+ textAlign: "center",
4068
+ borderRadius: "9999px",
4069
+ backgroundColor: emailTokens.primaryLight,
4070
+ fontSize: "12px",
4071
+ fontWeight: "700",
4072
+ color: emailTokens.primary,
4073
+ marginTop: "2px"
4074
+ }, children: i + 1 }) }),
4075
+ /* @__PURE__ */ jsx("td", { style: { verticalAlign: "top" }, children: /* @__PURE__ */ jsx("p", { style: { fontSize: "14px", color: emailTokens.bodyText, lineHeight: "1.6", margin: 0 }, children: step }) })
4076
+ ] }) }) }, i)) }),
4077
+ nextStepsImportant && nextStepsImportant.trim().length > 0 && /* @__PURE__ */ jsx("p", { style: { marginBottom: "32px", fontSize: "14px", color: emailTokens.foreground, lineHeight: "1.6" }, children: nextStepsImportant.split("\n").map((line, idx, arr) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
4078
+ line,
4079
+ idx < arr.length - 1 ? /* @__PURE__ */ jsx("br", {}) : null
4080
+ ] }, idx)) })
4081
+ ] }),
4053
4082
  /* @__PURE__ */ jsx("hr", { style: { border: "none", borderTop: `1px solid ${emailTokens.border}`, marginBottom: "32px" } }),
4054
4083
  /* @__PURE__ */ jsx("p", { style: { marginBottom: "16px" }, children: l.postCtaMessage }),
4084
+ addTravellersUrl && directBookingLinkLabel && directBookingLinkLabel.trim().length > 0 && /* @__PURE__ */ jsxs("p", { style: { marginBottom: "16px", fontSize: "14px", color: emailTokens.mutedForeground }, children: [
4085
+ directBookingLinkLabel,
4086
+ " ",
4087
+ /* @__PURE__ */ jsx("a", { href: addTravellersUrl, style: { color: emailTokens.primary, wordBreak: "break-all" }, children: addTravellersUrl })
4088
+ ] }),
4055
4089
  /* @__PURE__ */ jsx("p", { children: l.closingMessage })
4056
4090
  ]
4057
4091
  }
@@ -4244,176 +4278,6 @@ function TravellerFormInviteEmail({
4244
4278
  }
4245
4279
  );
4246
4280
  }
4247
- function BookingWelcomeNewSystemEmail({
4248
- greeting,
4249
- introParagraph,
4250
- bookingsHeading,
4251
- bookings,
4252
- bookingFormsCompleteLabel,
4253
- bookingFormsPendingLabel,
4254
- bookingFormsNoneLabel,
4255
- ctaLabel,
4256
- bookingCodeLabel,
4257
- signatureLine,
4258
- footerText,
4259
- logoUrl,
4260
- className
4261
- }) {
4262
- const ctaStyle = {
4263
- display: "inline-block",
4264
- backgroundColor: emailTokens.primary,
4265
- color: emailTokens.primaryForeground,
4266
- padding: "10px 20px",
4267
- borderRadius: "6px",
4268
- fontSize: "14px",
4269
- fontWeight: 600,
4270
- textDecoration: "none",
4271
- fontFamily: emailTokens.fontFamily
4272
- };
4273
- return /* @__PURE__ */ jsxs(
4274
- "div",
4275
- {
4276
- style: {
4277
- fontFamily: emailTokens.fontFamily,
4278
- color: emailTokens.foreground,
4279
- maxWidth: "600px",
4280
- margin: "0 auto",
4281
- padding: "32px",
4282
- border: `1px solid ${emailTokens.border}`,
4283
- borderRadius: "12px",
4284
- backgroundColor: emailTokens.white
4285
- },
4286
- className,
4287
- children: [
4288
- /* @__PURE__ */ jsx(EmailLogo, { src: logoUrl }),
4289
- /* @__PURE__ */ jsx("p", { style: { fontSize: "16px", lineHeight: "1.5", margin: "0 0 12px" }, children: greeting }),
4290
- /* @__PURE__ */ jsx("p", { style: { fontSize: "15px", lineHeight: "1.5", margin: "0 0 24px" }, children: introParagraph }),
4291
- /* @__PURE__ */ jsx(
4292
- "hr",
4293
- {
4294
- style: {
4295
- border: "none",
4296
- borderTop: `1px solid ${emailTokens.border}`,
4297
- margin: "0 0 24px"
4298
- }
4299
- }
4300
- ),
4301
- /* @__PURE__ */ jsx(
4302
- "p",
4303
- {
4304
- style: {
4305
- fontSize: "15px",
4306
- fontWeight: 700,
4307
- margin: "0 0 16px",
4308
- color: emailTokens.foreground
4309
- },
4310
- children: bookingsHeading
4311
- }
4312
- ),
4313
- /* @__PURE__ */ jsx("ul", { style: { listStyle: "none", padding: 0, margin: "0 0 24px" }, children: bookings.map((b) => {
4314
- const statusLine = b.formsStatus === "COMPLETO" ? bookingFormsCompleteLabel : b.formsStatus === "SEM_FORM" ? bookingFormsNoneLabel != null ? bookingFormsNoneLabel : "" : bookingFormsPendingLabel(b.formsCompleted, b.formsRequired);
4315
- const statusIcon = b.formsStatus === "COMPLETO" ? "\u2713" : b.formsStatus === "SEM_FORM" ? "" : "\u26A0";
4316
- const statusColor = b.formsStatus === "COMPLETO" ? emailTokens.green : b.formsStatus === "SEM_FORM" ? emailTokens.mutedForeground : emailTokens.destructive;
4317
- return /* @__PURE__ */ jsxs(
4318
- "li",
4319
- {
4320
- style: {
4321
- marginBottom: "16px",
4322
- padding: "16px",
4323
- backgroundColor: emailTokens.muted,
4324
- border: `1px solid ${emailTokens.border}`,
4325
- borderRadius: "8px"
4326
- },
4327
- children: [
4328
- /* @__PURE__ */ jsx(
4329
- "p",
4330
- {
4331
- style: {
4332
- fontSize: "15px",
4333
- fontWeight: 600,
4334
- margin: "0 0 6px",
4335
- color: emailTokens.foreground
4336
- },
4337
- children: b.adventureName
4338
- }
4339
- ),
4340
- /* @__PURE__ */ jsx(
4341
- "p",
4342
- {
4343
- style: {
4344
- fontSize: "13px",
4345
- color: emailTokens.mutedForeground,
4346
- margin: "0 0 4px"
4347
- },
4348
- children: b.startDate
4349
- }
4350
- ),
4351
- /* @__PURE__ */ jsxs(
4352
- "p",
4353
- {
4354
- style: {
4355
- fontSize: "13px",
4356
- color: emailTokens.mutedForeground,
4357
- margin: "0 0 8px"
4358
- },
4359
- children: [
4360
- /* @__PURE__ */ jsx("span", { style: { fontWeight: 600 }, children: bookingCodeLabel }),
4361
- " ",
4362
- /* @__PURE__ */ jsxs(
4363
- "span",
4364
- {
4365
- style: {
4366
- fontFamily: emailTokens.fontFamily,
4367
- color: emailTokens.foreground,
4368
- fontWeight: 600
4369
- },
4370
- children: [
4371
- "#",
4372
- b.bookingId
4373
- ]
4374
- }
4375
- )
4376
- ]
4377
- }
4378
- ),
4379
- statusLine && /* @__PURE__ */ jsxs(
4380
- "p",
4381
- {
4382
- style: {
4383
- fontSize: "13px",
4384
- color: statusColor,
4385
- margin: "0 0 12px",
4386
- fontWeight: 500
4387
- },
4388
- children: [
4389
- statusIcon ? `${statusIcon} ` : "",
4390
- statusLine
4391
- ]
4392
- }
4393
- ),
4394
- /* @__PURE__ */ jsx("a", { href: b.bookingPublicUrl, style: ctaStyle, children: ctaLabel })
4395
- ]
4396
- },
4397
- b.bookingId
4398
- );
4399
- }) }),
4400
- footerText && /* @__PURE__ */ jsx(
4401
- "p",
4402
- {
4403
- style: {
4404
- color: emailTokens.mutedForeground,
4405
- fontSize: "13px",
4406
- lineHeight: "1.5",
4407
- margin: "0 0 16px"
4408
- },
4409
- children: footerText
4410
- }
4411
- ),
4412
- /* @__PURE__ */ jsx("p", { style: { fontSize: "14px", lineHeight: "1.5", margin: "0" }, children: signatureLine })
4413
- ]
4414
- }
4415
- );
4416
- }
4417
4281
  function CounterField({
4418
4282
  label,
4419
4283
  sublabel,
@@ -4528,11 +4392,11 @@ function DatePickerField({
4528
4392
  fromDate,
4529
4393
  className
4530
4394
  }) {
4531
- const [open, setOpen] = React22.useState(false);
4532
- const containerRef = React22.useRef(null);
4533
- const [calendarWidth, setCalendarWidth] = React22.useState();
4395
+ const [open, setOpen] = React23.useState(false);
4396
+ const containerRef = React23.useRef(null);
4397
+ const [calendarWidth, setCalendarWidth] = React23.useState();
4534
4398
  const hasValue = !!value;
4535
- React22.useEffect(() => {
4399
+ React23.useEffect(() => {
4536
4400
  if (!containerRef.current) return;
4537
4401
  const observer = new ResizeObserver(([entry]) => {
4538
4402
  setCalendarWidth(entry.contentRect.width);
@@ -4641,7 +4505,7 @@ function BookingForm({
4641
4505
  subtitle = "Free enquiry \u2013 no commitment",
4642
4506
  className
4643
4507
  }) {
4644
- const [values, setValues] = React22.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
4508
+ const [values, setValues] = React23.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
4645
4509
  const set = (key, value) => setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
4646
4510
  const handleSubmit = (e) => {
4647
4511
  e.preventDefault();
@@ -5173,11 +5037,11 @@ function FloatingTextarea({
5173
5037
  }
5174
5038
  function SelectField({ field, value, onChange, error, disabled }) {
5175
5039
  var _a, _b, _c;
5176
- const [open, setOpen] = React22.useState(false);
5177
- const containerRef = React22.useRef(null);
5040
+ const [open, setOpen] = React23.useState(false);
5041
+ const containerRef = React23.useRef(null);
5178
5042
  const options = (_a = field.options) != null ? _a : [];
5179
5043
  const selectedOpt = (_b = options.find((o) => o.value === value)) != null ? _b : null;
5180
- React22.useEffect(() => {
5044
+ React23.useEffect(() => {
5181
5045
  if (!open) return;
5182
5046
  const handleOutside = (e) => {
5183
5047
  if (containerRef.current && !containerRef.current.contains(e.target)) {
@@ -5566,11 +5430,11 @@ function RegistrationForm({
5566
5430
  readOnly = false
5567
5431
  }) {
5568
5432
  var _a;
5569
- const L = React22.useMemo(
5433
+ const L = React23.useMemo(
5570
5434
  () => __spreadValues(__spreadValues({}, DEFAULT_LABELS3), labels != null ? labels : {}),
5571
5435
  [labels]
5572
5436
  );
5573
- const sortedFields = React22.useMemo(
5437
+ const sortedFields = React23.useMemo(
5574
5438
  () => [...fields].sort((a, b) => {
5575
5439
  var _a2, _b;
5576
5440
  return ((_a2 = a.order) != null ? _a2 : 0) - ((_b = b.order) != null ? _b : 0);
@@ -5578,7 +5442,7 @@ function RegistrationForm({
5578
5442
  [fields]
5579
5443
  );
5580
5444
  const isControlled = values !== void 0;
5581
- const [internal, setInternal] = React22.useState(
5445
+ const [internal, setInternal] = React23.useState(
5582
5446
  () => initializeValues(
5583
5447
  sortedFields,
5584
5448
  defaultValues != null ? defaultValues : {},
@@ -5586,9 +5450,9 @@ function RegistrationForm({
5586
5450
  includeTerms
5587
5451
  )
5588
5452
  );
5589
- const [submitAttempted, setSubmitAttempted] = React22.useState(false);
5590
- const [validationErrors, setValidationErrors] = React22.useState({});
5591
- React22.useEffect(() => {
5453
+ const [submitAttempted, setSubmitAttempted] = React23.useState(false);
5454
+ const [validationErrors, setValidationErrors] = React23.useState({});
5455
+ React23.useEffect(() => {
5592
5456
  if (isControlled) return;
5593
5457
  setInternal((prev) => {
5594
5458
  const next = initializeValues(
@@ -5645,7 +5509,7 @@ function RegistrationForm({
5645
5509
  const termsError = submitAttempted && termsEnabled && !termsAccepted;
5646
5510
  const firstErrorFieldId = Object.keys(fieldErrors)[0];
5647
5511
  const scrollTargetId = firstErrorFieldId ? `rf-${firstErrorFieldId}` : termsError ? "rf-terms" : null;
5648
- React22.useEffect(() => {
5512
+ React23.useEffect(() => {
5649
5513
  if (!submitAttempted || !scrollTargetId) return;
5650
5514
  const timer = setTimeout(() => {
5651
5515
  const elem = document.getElementById(scrollTargetId);
@@ -6099,10 +5963,10 @@ var OTPCodeInput = ({
6099
5963
  id,
6100
5964
  required
6101
5965
  }) => {
6102
- const baseId = id != null ? id : React22.useId();
6103
- const inputRef = React22.useRef(null);
6104
- const [focused, setFocused] = React22.useState(false);
6105
- const digits = React22.useMemo(() => {
5966
+ const baseId = id != null ? id : React23.useId();
5967
+ const inputRef = React23.useRef(null);
5968
+ const [focused, setFocused] = React23.useState(false);
5969
+ const digits = React23.useMemo(() => {
6106
5970
  const arr = value.split("").slice(0, length);
6107
5971
  while (arr.length < length) arr.push("");
6108
5972
  return arr;
@@ -6218,7 +6082,7 @@ function Checkbox(_a) {
6218
6082
  })
6219
6083
  );
6220
6084
  }
6221
- var AccordionVariantContext = React22.createContext("default");
6085
+ var AccordionVariantContext = React23.createContext("default");
6222
6086
  function Accordion(_a) {
6223
6087
  var _b = _a, { className, variant = "default" } = _b, props = __objRest(_b, ["className", "variant"]);
6224
6088
  return /* @__PURE__ */ jsx(AccordionVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(
@@ -6236,7 +6100,7 @@ function Accordion(_a) {
6236
6100
  }
6237
6101
  function AccordionItem(_a) {
6238
6102
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
6239
- const variant = React22.useContext(AccordionVariantContext);
6103
+ const variant = React23.useContext(AccordionVariantContext);
6240
6104
  return /* @__PURE__ */ jsx(
6241
6105
  Accordion$1.Item,
6242
6106
  __spreadValues({
@@ -6257,7 +6121,7 @@ function AccordionTrigger(_a) {
6257
6121
  "className",
6258
6122
  "children"
6259
6123
  ]);
6260
- const variant = React22.useContext(AccordionVariantContext);
6124
+ const variant = React23.useContext(AccordionVariantContext);
6261
6125
  return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
6262
6126
  Accordion$1.Trigger,
6263
6127
  __spreadProps(__spreadValues({
@@ -6311,7 +6175,7 @@ function AccordionContent(_a) {
6311
6175
  "className",
6312
6176
  "children"
6313
6177
  ]);
6314
- const variant = React22.useContext(AccordionVariantContext);
6178
+ const variant = React23.useContext(AccordionVariantContext);
6315
6179
  return /* @__PURE__ */ jsx(
6316
6180
  Accordion$1.Panel,
6317
6181
  __spreadProps(__spreadValues({
@@ -6343,7 +6207,7 @@ function FilterPanel({
6343
6207
  title = "Filters",
6344
6208
  className
6345
6209
  }) {
6346
- const [internalValue, setInternalValue] = React22.useState(
6210
+ const [internalValue, setInternalValue] = React23.useState(
6347
6211
  () => Object.fromEntries(groups.map((g) => [g.id, []]))
6348
6212
  );
6349
6213
  const selected = value != null ? value : internalValue;
@@ -6505,11 +6369,11 @@ function ItineraryModal({
6505
6369
  onNext
6506
6370
  }) {
6507
6371
  var _a, _b, _c;
6508
- const [imgIndex, setImgIndex] = React22.useState(0);
6372
+ const [imgIndex, setImgIndex] = React23.useState(0);
6509
6373
  const images = stop ? [stop.coverImage, ...(_a = stop.images) != null ? _a : []] : [];
6510
6374
  const isFirst = (stop == null ? void 0 : stop.dayNumber) === ((_b = allStops[0]) == null ? void 0 : _b.dayNumber);
6511
6375
  const isLast = (stop == null ? void 0 : stop.dayNumber) === ((_c = allStops[allStops.length - 1]) == null ? void 0 : _c.dayNumber);
6512
- React22.useEffect(() => {
6376
+ React23.useEffect(() => {
6513
6377
  setImgIndex(0);
6514
6378
  }, [stop == null ? void 0 : stop.dayNumber]);
6515
6379
  if (!stop) return null;
@@ -6636,8 +6500,8 @@ function ItineraryModal({
6636
6500
  ) });
6637
6501
  }
6638
6502
  function Itinerary({ title, subtitle, stops, className }) {
6639
- const [activeIndex, setActiveIndex] = React22.useState(null);
6640
- const scrollRef = React22.useRef(null);
6503
+ const [activeIndex, setActiveIndex] = React23.useState(null);
6504
+ const scrollRef = React23.useRef(null);
6641
6505
  const activeStop = activeIndex !== null ? stops[activeIndex] : null;
6642
6506
  const scrollBy = (dir) => {
6643
6507
  if (!scrollRef.current) return;
@@ -6723,8 +6587,8 @@ function MenuTrip({
6723
6587
  bold = true,
6724
6588
  className
6725
6589
  }) {
6726
- const scrollRef = React22.useRef(null);
6727
- React22.useEffect(() => {
6590
+ const scrollRef = React23.useRef(null);
6591
+ React23.useEffect(() => {
6728
6592
  if (!scrollRef.current || !activeSection) return;
6729
6593
  const container = scrollRef.current;
6730
6594
  const btn = container.querySelector(
@@ -6870,18 +6734,18 @@ function Lightbox({
6870
6734
  onClose
6871
6735
  }) {
6872
6736
  var _a;
6873
- const [index, setIndex] = React22.useState(initialIndex);
6737
+ const [index, setIndex] = React23.useState(initialIndex);
6874
6738
  const total = photos.length;
6875
6739
  const photo = photos[index];
6876
- const prev = React22.useCallback(
6740
+ const prev = React23.useCallback(
6877
6741
  () => setIndex((i) => (i - 1 + total) % total),
6878
6742
  [total]
6879
6743
  );
6880
- const next = React22.useCallback(
6744
+ const next = React23.useCallback(
6881
6745
  () => setIndex((i) => (i + 1) % total),
6882
6746
  [total]
6883
6747
  );
6884
- React22.useEffect(() => {
6748
+ React23.useEffect(() => {
6885
6749
  const onKey = (e) => {
6886
6750
  if (e.key === "Escape") onClose();
6887
6751
  if (e.key === "ArrowLeft") prev();
@@ -7075,7 +6939,7 @@ function GridGallery({
7075
6939
  initialVisible,
7076
6940
  onOpen
7077
6941
  }) {
7078
- const [expanded, setExpanded] = React22.useState(false);
6942
+ const [expanded, setExpanded] = React23.useState(false);
7079
6943
  const cols = gridCols(photos.length);
7080
6944
  const hasMore = photos.length > initialVisible;
7081
6945
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
@@ -7105,7 +6969,7 @@ function MasonryGallery({
7105
6969
  initialVisible,
7106
6970
  onOpen
7107
6971
  }) {
7108
- const [expanded, setExpanded] = React22.useState(false);
6972
+ const [expanded, setExpanded] = React23.useState(false);
7109
6973
  const hasMore = photos.length > initialVisible;
7110
6974
  const visible = expanded || !hasMore ? photos : photos.slice(0, initialVisible);
7111
6975
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -7178,7 +7042,7 @@ function FeaturedGallery({
7178
7042
  photos,
7179
7043
  onOpen
7180
7044
  }) {
7181
- const [expanded, setExpanded] = React22.useState(false);
7045
+ const [expanded, setExpanded] = React23.useState(false);
7182
7046
  const featured = photos.slice(0, 3);
7183
7047
  const extra = photos.slice(3);
7184
7048
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -7255,8 +7119,8 @@ function PhotoGallery({
7255
7119
  onPhotoClick,
7256
7120
  className
7257
7121
  }) {
7258
- const [lightboxIndex, setLightboxIndex] = React22.useState(null);
7259
- const normalised = React22.useMemo(() => photos.map(normalise), [photos]);
7122
+ const [lightboxIndex, setLightboxIndex] = React23.useState(null);
7123
+ const normalised = React23.useMemo(() => photos.map(normalise), [photos]);
7260
7124
  const handleOpen = (index) => {
7261
7125
  setLightboxIndex(index);
7262
7126
  onPhotoClick == null ? void 0 : onPhotoClick(normalised[index].src, index);
@@ -7345,7 +7209,7 @@ function PricingTrip({
7345
7209
  variant = "card",
7346
7210
  className
7347
7211
  }) {
7348
- const [showPricing, setShowPricing] = React22.useState(false);
7212
+ const [showPricing, setShowPricing] = React23.useState(false);
7349
7213
  if (variant === "compact") {
7350
7214
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3", className), children: [
7351
7215
  /* @__PURE__ */ jsxs("div", { children: [
@@ -7668,14 +7532,14 @@ function SiteHeader({
7668
7532
  className
7669
7533
  }) {
7670
7534
  const t = VARIANT[variant];
7671
- const [openMenu, setOpenMenu] = React22.useState(null);
7672
- const [langOpen, setLangOpen] = React22.useState(false);
7673
- const [mobileOpen, setMobileOpen] = React22.useState(false);
7674
- const [openMobileSection, setOpenMobileSection] = React22.useState(null);
7675
- const [activeLang, setActiveLang] = React22.useState(currentLanguage);
7535
+ const [openMenu, setOpenMenu] = React23.useState(null);
7536
+ const [langOpen, setLangOpen] = React23.useState(false);
7537
+ const [mobileOpen, setMobileOpen] = React23.useState(false);
7538
+ const [openMobileSection, setOpenMobileSection] = React23.useState(null);
7539
+ const [activeLang, setActiveLang] = React23.useState(currentLanguage);
7676
7540
  const toggleMobileSection = (label) => setOpenMobileSection((prev) => prev === label ? null : label);
7677
- const menuCloseTimer = React22.useRef(void 0);
7678
- const langCloseTimer = React22.useRef(void 0);
7541
+ const menuCloseTimer = React23.useRef(void 0);
7542
+ const langCloseTimer = React23.useRef(void 0);
7679
7543
  const handleMenuEnter = (label) => {
7680
7544
  clearTimeout(menuCloseTimer.current);
7681
7545
  setOpenMenu(label);
@@ -7696,7 +7560,7 @@ function SiteHeader({
7696
7560
  setOpenMenu(null);
7697
7561
  setLangOpen(false);
7698
7562
  };
7699
- React22.useEffect(() => () => {
7563
+ React23.useEffect(() => () => {
7700
7564
  clearTimeout(menuCloseTimer.current);
7701
7565
  clearTimeout(langCloseTimer.current);
7702
7566
  }, []);
@@ -7961,7 +7825,7 @@ function SiteHeader({
7961
7825
  ), children: [
7962
7826
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: languages.map((lang, i) => {
7963
7827
  const isActive = lang.code === activeLang;
7964
- return /* @__PURE__ */ jsxs(React22.Fragment, { children: [
7828
+ return /* @__PURE__ */ jsxs(React23.Fragment, { children: [
7965
7829
  i > 0 && /* @__PURE__ */ jsx("span", { className: cn(
7966
7830
  "text-xs select-none",
7967
7831
  variant === "white" ? "text-border" : "text-white/15"
@@ -8023,8 +7887,8 @@ function SiteHeader({
8023
7887
  );
8024
7888
  }
8025
7889
  function ThemeToggle({ className }) {
8026
- const [dark, setDark] = React22.useState(false);
8027
- React22.useEffect(() => {
7890
+ const [dark, setDark] = React23.useState(false);
7891
+ React23.useEffect(() => {
8028
7892
  const saved = localStorage.getItem("theme");
8029
7893
  const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
8030
7894
  const isDark = saved === "dark" || !saved && prefersDark;
@@ -8175,7 +8039,7 @@ function TripCard({
8175
8039
  );
8176
8040
  }
8177
8041
  function useHlsVideo(videoRef, src) {
8178
- React22.useEffect(() => {
8042
+ React23.useEffect(() => {
8179
8043
  if (!src || !videoRef.current) return;
8180
8044
  const video = videoRef.current;
8181
8045
  if (!src.includes(".m3u8")) return;
@@ -8217,11 +8081,11 @@ function TripHeader({
8217
8081
  className
8218
8082
  }) {
8219
8083
  var _a;
8220
- const [heroIndex, setHeroIndex] = React22.useState(0);
8221
- const [videoReady, setVideoReady] = React22.useState(false);
8222
- const videoRef = React22.useRef(null);
8084
+ const [heroIndex, setHeroIndex] = React23.useState(0);
8085
+ const [videoReady, setVideoReady] = React23.useState(false);
8086
+ const videoRef = React23.useRef(null);
8223
8087
  const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
8224
- const validImages = React22.useMemo(
8088
+ const validImages = React23.useMemo(
8225
8089
  () => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
8226
8090
  [images]
8227
8091
  );
@@ -8236,7 +8100,7 @@ function TripHeader({
8236
8100
  const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
8237
8101
  const hasMeta = !!(destination || duration);
8238
8102
  useHlsVideo(videoRef, isHls ? videoUrl : void 0);
8239
- React22.useEffect(() => {
8103
+ React23.useEffect(() => {
8240
8104
  if (!videoUrl) return;
8241
8105
  const el = videoRef.current;
8242
8106
  if (!el) return;
@@ -8378,7 +8242,7 @@ function TripHeader({
8378
8242
  siteHeader ? "-mt-44" : "-mt-36"
8379
8243
  ),
8380
8244
  children: [
8381
- breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(React22.Fragment, { children: [
8245
+ breadcrumb && breadcrumb.length > 0 && /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center gap-1.5 flex-wrap", children: breadcrumb.map((crumb, i) => /* @__PURE__ */ jsxs(React23.Fragment, { children: [
8382
8246
  i > 0 && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-3 w-3 text-white/50 shrink-0" }),
8383
8247
  /* @__PURE__ */ jsx("span", { className: "text-xs text-white/70 font-ui hover:text-white/90 cursor-default", children: crumb.label })
8384
8248
  ] }, i)) }),
@@ -8478,19 +8342,19 @@ function TripPage({
8478
8342
  features,
8479
8343
  className
8480
8344
  }) {
8481
- const [activeSection, setActiveSection] = React22.useState("");
8482
- const [navFloating, setNavFloating] = React22.useState(false);
8483
- const [navHidden, setNavHidden] = React22.useState(false);
8484
- const [isFloating, setIsFloating] = React22.useState(false);
8485
- const [sidebarPos, setSidebarPos] = React22.useState(null);
8486
- const [pricingBarVisible, setPricingBarVisible] = React22.useState(false);
8487
- const navRef = React22.useRef(null);
8488
- const navSentinelRef = React22.useRef(null);
8489
- const sentinelRef = React22.useRef(null);
8490
- const sidebarPlaceholderRef = React22.useRef(null);
8491
- const pricingBarRef = React22.useRef(null);
8492
- const galleryRef = React22.useRef(null);
8493
- const sections = React22.useMemo(
8345
+ const [activeSection, setActiveSection] = React23.useState("");
8346
+ const [navFloating, setNavFloating] = React23.useState(false);
8347
+ const [navHidden, setNavHidden] = React23.useState(false);
8348
+ const [isFloating, setIsFloating] = React23.useState(false);
8349
+ const [sidebarPos, setSidebarPos] = React23.useState(null);
8350
+ const [pricingBarVisible, setPricingBarVisible] = React23.useState(false);
8351
+ const navRef = React23.useRef(null);
8352
+ const navSentinelRef = React23.useRef(null);
8353
+ const sentinelRef = React23.useRef(null);
8354
+ const sidebarPlaceholderRef = React23.useRef(null);
8355
+ const pricingBarRef = React23.useRef(null);
8356
+ const galleryRef = React23.useRef(null);
8357
+ const sections = React23.useMemo(
8494
8358
  () => [
8495
8359
  { id: "key-info", label: "Key info", show: !!(infoGroups == null ? void 0 : infoGroups.length) },
8496
8360
  { id: "overview", label: "Overview", show: !!overview },
@@ -8505,7 +8369,7 @@ function TripPage({
8505
8369
  // eslint-disable-next-line react-hooks/exhaustive-deps
8506
8370
  []
8507
8371
  );
8508
- React22.useEffect(() => {
8372
+ React23.useEffect(() => {
8509
8373
  const sentinel = navSentinelRef.current;
8510
8374
  if (!sentinel) return;
8511
8375
  const update = () => setNavFloating(sentinel.getBoundingClientRect().top < 1);
@@ -8513,7 +8377,7 @@ function TripPage({
8513
8377
  update();
8514
8378
  return () => document.removeEventListener("scroll", update, { capture: true });
8515
8379
  }, []);
8516
- React22.useEffect(() => {
8380
+ React23.useEffect(() => {
8517
8381
  const sentinel = sentinelRef.current;
8518
8382
  if (!sentinel) return;
8519
8383
  const update = () => setIsFloating(sentinel.getBoundingClientRect().top < 1);
@@ -8521,7 +8385,7 @@ function TripPage({
8521
8385
  update();
8522
8386
  return () => document.removeEventListener("scroll", update, { capture: true });
8523
8387
  }, []);
8524
- React22.useEffect(() => {
8388
+ React23.useEffect(() => {
8525
8389
  const measure = () => {
8526
8390
  if (!sidebarPlaceholderRef.current) return;
8527
8391
  const rect = sidebarPlaceholderRef.current.getBoundingClientRect();
@@ -8531,7 +8395,7 @@ function TripPage({
8531
8395
  window.addEventListener("resize", measure);
8532
8396
  return () => window.removeEventListener("resize", measure);
8533
8397
  }, [isFloating]);
8534
- React22.useEffect(() => {
8398
+ React23.useEffect(() => {
8535
8399
  const check = () => {
8536
8400
  var _a;
8537
8401
  const target = (_a = galleryRef.current) != null ? _a : pricingBarRef.current;
@@ -8542,7 +8406,7 @@ function TripPage({
8542
8406
  check();
8543
8407
  return () => document.removeEventListener("scroll", check, { capture: true });
8544
8408
  }, []);
8545
- React22.useEffect(() => {
8409
+ React23.useEffect(() => {
8546
8410
  const check = () => {
8547
8411
  if (!pricingBarRef.current) return;
8548
8412
  setNavHidden(pricingBarRef.current.getBoundingClientRect().top < window.innerHeight * 0.92);
@@ -8551,7 +8415,7 @@ function TripPage({
8551
8415
  check();
8552
8416
  return () => document.removeEventListener("scroll", check, { capture: true });
8553
8417
  }, []);
8554
- React22.useEffect(() => {
8418
+ React23.useEffect(() => {
8555
8419
  if (sections.length === 0) return;
8556
8420
  setActiveSection(sections[0].id);
8557
8421
  const update = () => {
@@ -8916,12 +8780,12 @@ function Toast({
8916
8780
  duration = 6e3,
8917
8781
  className
8918
8782
  }) {
8919
- const [mounted, setMounted] = React22.useState(false);
8920
- const [visible, setVisible] = React22.useState(true);
8921
- React22.useEffect(() => {
8783
+ const [mounted, setMounted] = React23.useState(false);
8784
+ const [visible, setVisible] = React23.useState(true);
8785
+ React23.useEffect(() => {
8922
8786
  setMounted(true);
8923
8787
  }, []);
8924
- React22.useEffect(() => {
8788
+ React23.useEffect(() => {
8925
8789
  if (duration === 0) return;
8926
8790
  const t = setTimeout(() => {
8927
8791
  setVisible(false);
@@ -9625,6 +9489,6 @@ function LeadCapturePopup({
9625
9489
  );
9626
9490
  }
9627
9491
 
9628
- export { ActivityCard, AgentContactCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell, BookingWelcomeNewSystemEmail, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, OTPCodeInput, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, RegistrationForm, RegistrationSuccessCard, SiteHeader, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, buttonVariants, cn, emailTokens, getStripeAppearance, stripeAppearance, wrapEmailHtml };
9492
+ export { ActivityCard, AgentContactCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, OTPCodeInput, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, RegistrationForm, RegistrationSuccessCard, SiteHeader, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, buttonVariants, cn, emailTokens, getStripeAppearance, stripeAppearance, wrapEmailHtml };
9629
9493
  //# sourceMappingURL=index.js.map
9630
9494
  //# sourceMappingURL=index.js.map