@planetaexo/design-system 0.64.0 → 0.65.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 +2012 -364
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +737 -12
- package/dist/index.d.ts +737 -12
- package/dist/index.js +1997 -366
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -638,7 +638,8 @@ function PhoneCountrySelect({
|
|
|
638
638
|
value,
|
|
639
639
|
onChange,
|
|
640
640
|
className,
|
|
641
|
-
disabled
|
|
641
|
+
disabled,
|
|
642
|
+
showDial = true
|
|
642
643
|
}) {
|
|
643
644
|
var _a;
|
|
644
645
|
const [open, setOpen] = React32__namespace.useState(false);
|
|
@@ -687,7 +688,7 @@ function PhoneCountrySelect({
|
|
|
687
688
|
),
|
|
688
689
|
children: [
|
|
689
690
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base leading-none", children: selected.flag }),
|
|
690
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: selected.dial }),
|
|
691
|
+
showDial && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: selected.dial }),
|
|
691
692
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
692
693
|
lucideReact.ChevronDownIcon,
|
|
693
694
|
{
|
|
@@ -7930,7 +7931,8 @@ function DatePickerField({
|
|
|
7930
7931
|
placeholder = "Select a date",
|
|
7931
7932
|
disabled,
|
|
7932
7933
|
fromDate,
|
|
7933
|
-
className
|
|
7934
|
+
className,
|
|
7935
|
+
error
|
|
7934
7936
|
}) {
|
|
7935
7937
|
const [open, setOpen] = React32__namespace.useState(false);
|
|
7936
7938
|
const containerRef = React32__namespace.useRef(null);
|
|
@@ -7944,78 +7946,91 @@ function DatePickerField({
|
|
|
7944
7946
|
observer.observe(containerRef.current);
|
|
7945
7947
|
return () => observer.disconnect();
|
|
7946
7948
|
}, []);
|
|
7947
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
7948
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
7949
|
-
|
|
7950
|
-
|
|
7951
|
-
|
|
7952
|
-
|
|
7953
|
-
|
|
7954
|
-
|
|
7955
|
-
|
|
7956
|
-
|
|
7957
|
-
|
|
7958
|
-
|
|
7959
|
-
|
|
7960
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
7961
|
-
"span",
|
|
7962
|
-
{
|
|
7963
|
-
className: cn(
|
|
7964
|
-
"pointer-events-none absolute left-3 transition-all duration-150 font-ui",
|
|
7965
|
-
hasValue || open ? "top-2 text-xs text-primary" : "top-1/2 -translate-y-1/2 text-base text-muted-foreground"
|
|
7966
|
-
),
|
|
7967
|
-
children: [
|
|
7968
|
-
label,
|
|
7969
|
-
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary ml-0.5", children: "*" })
|
|
7970
|
-
]
|
|
7971
|
-
}
|
|
7949
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: cn("w-full", className), children: [
|
|
7950
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
7951
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
7952
|
+
PopoverTrigger,
|
|
7953
|
+
{
|
|
7954
|
+
disabled,
|
|
7955
|
+
className: cn(
|
|
7956
|
+
"relative flex w-full items-center rounded-lg border border-border bg-background",
|
|
7957
|
+
"px-3 text-left text-base font-ui transition-colors h-14",
|
|
7958
|
+
"focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
7959
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
7960
|
+
open && "border-primary ring-1 ring-primary",
|
|
7961
|
+
error && "border-destructive focus:border-destructive focus:ring-destructive"
|
|
7972
7962
|
),
|
|
7973
|
-
|
|
7974
|
-
|
|
7963
|
+
children: [
|
|
7964
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
7965
|
+
"span",
|
|
7966
|
+
{
|
|
7967
|
+
className: cn(
|
|
7968
|
+
"pointer-events-none absolute left-3 transition-all duration-150 font-ui",
|
|
7969
|
+
hasValue || open ? "top-2 text-xs text-primary" : "top-1/2 -translate-y-1/2 text-base text-muted-foreground"
|
|
7970
|
+
),
|
|
7971
|
+
children: [
|
|
7972
|
+
label,
|
|
7973
|
+
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary ml-0.5", children: "*" })
|
|
7974
|
+
]
|
|
7975
|
+
}
|
|
7976
|
+
),
|
|
7977
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7978
|
+
"span",
|
|
7979
|
+
{
|
|
7980
|
+
className: cn(
|
|
7981
|
+
"flex-1 truncate mt-3",
|
|
7982
|
+
hasValue ? "text-foreground" : "invisible"
|
|
7983
|
+
),
|
|
7984
|
+
children: hasValue ? dateFns.format(value, "dd MMM yyyy") : placeholder
|
|
7985
|
+
}
|
|
7986
|
+
),
|
|
7987
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "ml-2 h-4 w-4 shrink-0 text-muted-foreground" })
|
|
7988
|
+
]
|
|
7989
|
+
}
|
|
7990
|
+
),
|
|
7991
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
7992
|
+
PopoverContent,
|
|
7993
|
+
{
|
|
7994
|
+
className: "p-0",
|
|
7995
|
+
align: "start",
|
|
7996
|
+
style: calendarWidth ? { width: calendarWidth } : void 0,
|
|
7997
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7998
|
+
Calendar,
|
|
7975
7999
|
{
|
|
7976
|
-
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
|
|
7980
|
-
|
|
8000
|
+
mode: "single",
|
|
8001
|
+
selected: value,
|
|
8002
|
+
onSelect: (date) => {
|
|
8003
|
+
onChange == null ? void 0 : onChange(date);
|
|
8004
|
+
setOpen(false);
|
|
8005
|
+
},
|
|
8006
|
+
fromDate: fromDate != null ? fromDate : /* @__PURE__ */ new Date(),
|
|
8007
|
+
className: "font-ui w-full",
|
|
8008
|
+
autoFocus: true
|
|
7981
8009
|
}
|
|
7982
|
-
)
|
|
7983
|
-
|
|
7984
|
-
|
|
7985
|
-
|
|
7986
|
-
)
|
|
7987
|
-
|
|
7988
|
-
|
|
7989
|
-
|
|
7990
|
-
|
|
7991
|
-
|
|
7992
|
-
style: calendarWidth ? { width: calendarWidth } : void 0,
|
|
7993
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7994
|
-
Calendar,
|
|
7995
|
-
{
|
|
7996
|
-
mode: "single",
|
|
7997
|
-
selected: value,
|
|
7998
|
-
onSelect: (date) => {
|
|
7999
|
-
onChange == null ? void 0 : onChange(date);
|
|
8000
|
-
setOpen(false);
|
|
8001
|
-
},
|
|
8002
|
-
fromDate: fromDate != null ? fromDate : /* @__PURE__ */ new Date(),
|
|
8003
|
-
className: "font-ui w-full",
|
|
8004
|
-
autoFocus: true
|
|
8005
|
-
}
|
|
8006
|
-
)
|
|
8007
|
-
}
|
|
8008
|
-
)
|
|
8009
|
-
] }) });
|
|
8010
|
+
)
|
|
8011
|
+
}
|
|
8012
|
+
)
|
|
8013
|
+
] }),
|
|
8014
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children: error })
|
|
8015
|
+
] });
|
|
8016
|
+
}
|
|
8017
|
+
function dialFor(iso) {
|
|
8018
|
+
var _a, _b;
|
|
8019
|
+
return (_b = (_a = PHONE_COUNTRIES.find((c) => c.code === iso)) == null ? void 0 : _a.dial) != null ? _b : "";
|
|
8010
8020
|
}
|
|
8021
|
+
var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
8011
8022
|
function FormSection({
|
|
8012
8023
|
title,
|
|
8024
|
+
required,
|
|
8013
8025
|
children,
|
|
8014
8026
|
className
|
|
8015
8027
|
}) {
|
|
8016
8028
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-5", className), children: [
|
|
8017
8029
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
|
|
8018
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8030
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-base font-bold text-foreground whitespace-nowrap font-heading", children: [
|
|
8031
|
+
title,
|
|
8032
|
+
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary ml-0.5", children: "*" })
|
|
8033
|
+
] }),
|
|
8019
8034
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-border" })
|
|
8020
8035
|
] }),
|
|
8021
8036
|
children
|
|
@@ -8031,24 +8046,67 @@ var defaultInitial = {
|
|
|
8031
8046
|
phoneCountry: "BR",
|
|
8032
8047
|
lastName: "",
|
|
8033
8048
|
firstName: "",
|
|
8034
|
-
country: "
|
|
8049
|
+
country: "",
|
|
8035
8050
|
phone: "",
|
|
8036
|
-
email: ""
|
|
8051
|
+
email: "",
|
|
8052
|
+
contactVia: "Email"
|
|
8037
8053
|
};
|
|
8038
8054
|
function BookingForm({
|
|
8039
8055
|
defaultValues,
|
|
8040
8056
|
onSubmit,
|
|
8041
|
-
submitLabel
|
|
8057
|
+
submitLabel,
|
|
8042
8058
|
loading = false,
|
|
8043
8059
|
showHeader = true,
|
|
8044
|
-
title
|
|
8045
|
-
subtitle
|
|
8060
|
+
title,
|
|
8061
|
+
subtitle,
|
|
8062
|
+
labels,
|
|
8046
8063
|
className
|
|
8047
8064
|
}) {
|
|
8065
|
+
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;
|
|
8066
|
+
const L = labels != null ? labels : {};
|
|
8067
|
+
const titleText = (_a = title != null ? title : L.title) != null ? _a : "Check availability for your trip";
|
|
8068
|
+
const subtitleText = (_b = subtitle != null ? subtitle : L.subtitle) != null ? _b : "Free enquiry \u2013 no commitment";
|
|
8069
|
+
const submitText = (_c = submitLabel != null ? submitLabel : L.submit) != null ? _c : "Send my request";
|
|
8048
8070
|
const [values, setValues] = React32__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
8049
|
-
const
|
|
8071
|
+
const [errors, setErrors] = React32__namespace.useState({});
|
|
8072
|
+
const set = (key, value) => {
|
|
8073
|
+
setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
8074
|
+
setErrors(
|
|
8075
|
+
(prev) => prev[key] ? __spreadProps(__spreadValues({}, prev), { [key]: void 0 }) : prev
|
|
8076
|
+
);
|
|
8077
|
+
};
|
|
8078
|
+
React32__namespace.useEffect(() => {
|
|
8079
|
+
if (!defaultValues) return;
|
|
8080
|
+
setValues((prev) => {
|
|
8081
|
+
let changed = false;
|
|
8082
|
+
const next = __spreadValues({}, prev);
|
|
8083
|
+
Object.keys(defaultValues).forEach(
|
|
8084
|
+
(k) => {
|
|
8085
|
+
const incoming = defaultValues[k];
|
|
8086
|
+
if (incoming === void 0 || incoming === "") return;
|
|
8087
|
+
if (prev[k] === defaultInitial[k]) {
|
|
8088
|
+
next[k] = incoming;
|
|
8089
|
+
changed = true;
|
|
8090
|
+
}
|
|
8091
|
+
}
|
|
8092
|
+
);
|
|
8093
|
+
return changed ? next : prev;
|
|
8094
|
+
});
|
|
8095
|
+
}, [defaultValues]);
|
|
8096
|
+
const reqMsg = (_d = L.errorRequired) != null ? _d : "This field is required";
|
|
8097
|
+
const emailMsg = (_e = L.errorEmail) != null ? _e : "Enter a valid email address";
|
|
8050
8098
|
const handleSubmit = (e) => {
|
|
8051
8099
|
e.preventDefault();
|
|
8100
|
+
const next = {};
|
|
8101
|
+
if (!values.firstName.trim()) next.firstName = reqMsg;
|
|
8102
|
+
if (!values.lastName.trim()) next.lastName = reqMsg;
|
|
8103
|
+
if (!values.email.trim()) next.email = reqMsg;
|
|
8104
|
+
else if (!EMAIL_RE.test(values.email.trim())) next.email = emailMsg;
|
|
8105
|
+
if (!values.travelDate) next.travelDate = reqMsg;
|
|
8106
|
+
if (!values.phone.trim()) next.phone = reqMsg;
|
|
8107
|
+
if (!values.contactVia) next.contactVia = reqMsg;
|
|
8108
|
+
setErrors(next);
|
|
8109
|
+
if (Object.keys(next).length > 0) return;
|
|
8052
8110
|
onSubmit == null ? void 0 : onSubmit(values);
|
|
8053
8111
|
};
|
|
8054
8112
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -8059,15 +8117,14 @@ function BookingForm({
|
|
|
8059
8117
|
noValidate: true,
|
|
8060
8118
|
children: [
|
|
8061
8119
|
showHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
8062
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-black uppercase tracking-wide text-foreground font-heading leading-tight", children:
|
|
8063
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-sm text-muted-foreground font-ui", children:
|
|
8120
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-black uppercase tracking-wide text-foreground font-heading leading-tight", children: titleText }),
|
|
8121
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-sm text-muted-foreground font-ui", children: subtitleText })
|
|
8064
8122
|
] }),
|
|
8065
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: "Who's joining the adventure?", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
8123
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: (_f = L.travelersSection) != null ? _f : "Who's joining the adventure?", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
8066
8124
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8067
8125
|
CounterField,
|
|
8068
8126
|
{
|
|
8069
|
-
label: "Adults",
|
|
8070
|
-
required: true,
|
|
8127
|
+
label: (_g = L.adults) != null ? _g : "Adults",
|
|
8071
8128
|
value: values.adults,
|
|
8072
8129
|
min: 1,
|
|
8073
8130
|
onChange: (v) => set("adults", v)
|
|
@@ -8076,30 +8133,30 @@ function BookingForm({
|
|
|
8076
8133
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8077
8134
|
CounterField,
|
|
8078
8135
|
{
|
|
8079
|
-
label: "Children",
|
|
8080
|
-
sublabel: "(under 12)",
|
|
8136
|
+
label: (_h = L.children) != null ? _h : "Children",
|
|
8137
|
+
sublabel: (_i = L.childrenSublabel) != null ? _i : "(under 12)",
|
|
8081
8138
|
value: values.children,
|
|
8082
8139
|
min: 0,
|
|
8083
8140
|
onChange: (v) => set("children", v)
|
|
8084
8141
|
}
|
|
8085
8142
|
)
|
|
8086
8143
|
] }) }),
|
|
8087
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: "Your next trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
8144
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: (_j = L.tripSection) != null ? _j : "Your next trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
8088
8145
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8089
8146
|
DatePickerField,
|
|
8090
8147
|
{
|
|
8091
|
-
label: "Travel date",
|
|
8148
|
+
label: (_k = L.travelDate) != null ? _k : "Travel date",
|
|
8092
8149
|
required: true,
|
|
8093
8150
|
value: values.travelDate,
|
|
8094
8151
|
onChange: (d) => set("travelDate", d),
|
|
8095
|
-
placeholder: "Pick a date"
|
|
8152
|
+
placeholder: (_l = L.pickDate) != null ? _l : "Pick a date",
|
|
8153
|
+
error: errors.travelDate
|
|
8096
8154
|
}
|
|
8097
8155
|
),
|
|
8098
8156
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8099
8157
|
FloatingInput,
|
|
8100
8158
|
{
|
|
8101
|
-
label: "Budget (per person)",
|
|
8102
|
-
required: true,
|
|
8159
|
+
label: (_m = L.budget) != null ? _m : "Budget (per person)",
|
|
8103
8160
|
type: "number",
|
|
8104
8161
|
min: 0,
|
|
8105
8162
|
value: values.budget,
|
|
@@ -8107,7 +8164,7 @@ function BookingForm({
|
|
|
8107
8164
|
}
|
|
8108
8165
|
)
|
|
8109
8166
|
] }) }),
|
|
8110
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: "Tell us about your trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
8167
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: (_n = L.projectSection) != null ? _n : "Tell us about your trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
8111
8168
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8112
8169
|
"textarea",
|
|
8113
8170
|
{
|
|
@@ -8135,140 +8192,184 @@ function BookingForm({
|
|
|
8135
8192
|
"peer-not-placeholder-shown:top-2 peer-not-placeholder-shown:text-xs peer-not-placeholder-shown:text-muted-foreground"
|
|
8136
8193
|
),
|
|
8137
8194
|
children: [
|
|
8138
|
-
"Your trip in a few words",
|
|
8195
|
+
(_o = L.projectLabel) != null ? _o : "Your trip in a few words",
|
|
8139
8196
|
" ",
|
|
8140
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-normal", children: "(optional)" })
|
|
8197
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-normal", children: (_p = L.optional) != null ? _p : "(optional)" })
|
|
8141
8198
|
]
|
|
8142
8199
|
}
|
|
8143
8200
|
)
|
|
8144
8201
|
] }) }),
|
|
8145
|
-
/* @__PURE__ */ jsxRuntime.jsxs(FormSection, { title: "Contact details", children: [
|
|
8202
|
+
/* @__PURE__ */ jsxRuntime.jsxs(FormSection, { title: (_q = L.contactSection) != null ? _q : "Contact details", children: [
|
|
8146
8203
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8147
8204
|
"div",
|
|
8148
8205
|
{
|
|
8149
8206
|
role: "radiogroup",
|
|
8150
|
-
"aria-label": "Title",
|
|
8207
|
+
"aria-label": (_r = L.titleAria) != null ? _r : "Title",
|
|
8151
8208
|
className: "flex flex-wrap items-center gap-x-6 gap-y-3",
|
|
8152
|
-
children: ["ms", "mr"].map((c) =>
|
|
8153
|
-
|
|
8154
|
-
|
|
8155
|
-
|
|
8156
|
-
|
|
8157
|
-
|
|
8158
|
-
|
|
8159
|
-
|
|
8160
|
-
|
|
8161
|
-
|
|
8162
|
-
|
|
8163
|
-
|
|
8164
|
-
|
|
8165
|
-
|
|
8166
|
-
|
|
8167
|
-
|
|
8168
|
-
|
|
8169
|
-
|
|
8170
|
-
|
|
8171
|
-
|
|
8172
|
-
|
|
8209
|
+
children: ["ms", "mr"].map((c) => {
|
|
8210
|
+
var _a2, _b2;
|
|
8211
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8212
|
+
"label",
|
|
8213
|
+
{
|
|
8214
|
+
className: "flex min-h-9 cursor-pointer items-center gap-2.5 font-ui text-sm text-foreground",
|
|
8215
|
+
children: [
|
|
8216
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8217
|
+
"input",
|
|
8218
|
+
{
|
|
8219
|
+
type: "radio",
|
|
8220
|
+
name: "civility",
|
|
8221
|
+
value: c,
|
|
8222
|
+
checked: values.civility === c,
|
|
8223
|
+
onChange: () => set("civility", c),
|
|
8224
|
+
className: "h-4 w-4 shrink-0 accent-primary cursor-pointer"
|
|
8225
|
+
}
|
|
8226
|
+
),
|
|
8227
|
+
c === "ms" ? (_a2 = L.ms) != null ? _a2 : "Ms." : (_b2 = L.mr) != null ? _b2 : "Mr."
|
|
8228
|
+
]
|
|
8229
|
+
},
|
|
8230
|
+
c
|
|
8231
|
+
);
|
|
8232
|
+
})
|
|
8173
8233
|
}
|
|
8174
8234
|
),
|
|
8175
8235
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 min-w-0", children: [
|
|
8176
8236
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8177
8237
|
FloatingInput,
|
|
8178
8238
|
{
|
|
8179
|
-
label: "Last name",
|
|
8239
|
+
label: (_s = L.lastName) != null ? _s : "Last name",
|
|
8180
8240
|
required: true,
|
|
8181
8241
|
value: values.lastName,
|
|
8182
|
-
onChange: (e) => set("lastName", e.target.value)
|
|
8242
|
+
onChange: (e) => set("lastName", e.target.value),
|
|
8243
|
+
error: errors.lastName
|
|
8183
8244
|
}
|
|
8184
8245
|
) }),
|
|
8185
8246
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8186
8247
|
FloatingInput,
|
|
8187
8248
|
{
|
|
8188
|
-
label: "First name",
|
|
8249
|
+
label: (_t = L.firstName) != null ? _t : "First name",
|
|
8189
8250
|
required: true,
|
|
8190
8251
|
value: values.firstName,
|
|
8191
|
-
onChange: (e) => set("firstName", e.target.value)
|
|
8252
|
+
onChange: (e) => set("firstName", e.target.value),
|
|
8253
|
+
error: errors.firstName
|
|
8192
8254
|
}
|
|
8193
8255
|
) }),
|
|
8194
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 sm:col-span-2 lg:col-span-1", children: /* @__PURE__ */ jsxRuntime.
|
|
8195
|
-
|
|
8256
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 sm:col-span-2 lg:col-span-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8257
|
+
CountrySearchField,
|
|
8196
8258
|
{
|
|
8197
|
-
label: "Country of residence",
|
|
8198
|
-
required: true,
|
|
8259
|
+
label: (_u = L.country) != null ? _u : "Country of residence",
|
|
8199
8260
|
value: values.country,
|
|
8200
|
-
onChange: (
|
|
8201
|
-
|
|
8202
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, hidden: true }),
|
|
8203
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "France", children: "France" }),
|
|
8204
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "Belgium", children: "Belgium" }),
|
|
8205
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "Switzerland", children: "Switzerland" }),
|
|
8206
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "Canada", children: "Canada" }),
|
|
8207
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "Luxembourg", children: "Luxembourg" }),
|
|
8208
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "United Kingdom", children: "United Kingdom" }),
|
|
8209
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "United States", children: "United States" }),
|
|
8210
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "Other", children: "Other" })
|
|
8211
|
-
]
|
|
8261
|
+
onChange: (code) => set("country", code),
|
|
8262
|
+
countries: COUNTRIES
|
|
8212
8263
|
}
|
|
8213
8264
|
) })
|
|
8214
8265
|
] }),
|
|
8215
8266
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: [
|
|
8216
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
8217
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8218
|
-
PhoneCountrySelect,
|
|
8219
|
-
{
|
|
8220
|
-
value: values.phoneCountry,
|
|
8221
|
-
onChange: (code) => set("phoneCountry", code),
|
|
8222
|
-
className: "shrink-0"
|
|
8223
|
-
}
|
|
8224
|
-
),
|
|
8225
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-w-0 flex-1", children: [
|
|
8267
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
8268
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full min-w-0", children: [
|
|
8226
8269
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8227
|
-
|
|
8270
|
+
PhoneCountrySelect,
|
|
8228
8271
|
{
|
|
8229
|
-
|
|
8230
|
-
|
|
8231
|
-
|
|
8232
|
-
|
|
8233
|
-
onChange: (e) => set("phone", e.target.value),
|
|
8234
|
-
className: cn(
|
|
8235
|
-
"peer block h-14 w-full rounded-r-lg border border-border bg-background",
|
|
8236
|
-
"px-3 pt-5 pb-2 text-base text-foreground font-ui",
|
|
8237
|
-
"transition-colors placeholder-transparent",
|
|
8238
|
-
"focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
|
|
8239
|
-
)
|
|
8272
|
+
value: values.phoneCountry,
|
|
8273
|
+
onChange: (code) => set("phoneCountry", code),
|
|
8274
|
+
className: "shrink-0",
|
|
8275
|
+
showDial: false
|
|
8240
8276
|
}
|
|
8241
8277
|
),
|
|
8242
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8243
|
-
|
|
8244
|
-
|
|
8245
|
-
|
|
8246
|
-
|
|
8247
|
-
|
|
8248
|
-
"
|
|
8249
|
-
|
|
8250
|
-
|
|
8251
|
-
|
|
8252
|
-
|
|
8253
|
-
|
|
8254
|
-
|
|
8255
|
-
|
|
8256
|
-
|
|
8257
|
-
|
|
8258
|
-
|
|
8278
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-w-0 flex-1", children: [
|
|
8279
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8280
|
+
"input",
|
|
8281
|
+
{
|
|
8282
|
+
id: "phone",
|
|
8283
|
+
type: "tel",
|
|
8284
|
+
placeholder: " ",
|
|
8285
|
+
value: `${dialFor(values.phoneCountry)} ${values.phone}`,
|
|
8286
|
+
onChange: (e) => {
|
|
8287
|
+
const dial = dialFor(values.phoneCountry);
|
|
8288
|
+
let national = e.target.value;
|
|
8289
|
+
if (national.startsWith(dial)) national = national.slice(dial.length);
|
|
8290
|
+
national = national.replace(/^\s+/, "");
|
|
8291
|
+
set("phone", national);
|
|
8292
|
+
},
|
|
8293
|
+
className: cn(
|
|
8294
|
+
"peer block h-14 w-full rounded-r-lg border border-border bg-background",
|
|
8295
|
+
"px-3 pt-5 pb-2 text-base text-foreground font-ui",
|
|
8296
|
+
"transition-colors placeholder-transparent",
|
|
8297
|
+
"focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
8298
|
+
errors.phone && "border-destructive focus:border-destructive focus:ring-destructive"
|
|
8299
|
+
)
|
|
8300
|
+
}
|
|
8301
|
+
),
|
|
8302
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8303
|
+
"label",
|
|
8304
|
+
{
|
|
8305
|
+
htmlFor: "phone",
|
|
8306
|
+
className: cn(
|
|
8307
|
+
"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2",
|
|
8308
|
+
"text-base text-muted-foreground font-ui transition-all duration-150",
|
|
8309
|
+
"peer-focus:top-3 peer-focus:translate-y-0 peer-focus:text-xs peer-focus:text-primary",
|
|
8310
|
+
"peer-not-placeholder-shown:top-3 peer-not-placeholder-shown:translate-y-0 peer-not-placeholder-shown:text-xs peer-not-placeholder-shown:text-muted-foreground"
|
|
8311
|
+
),
|
|
8312
|
+
children: [
|
|
8313
|
+
(_v = L.phone) != null ? _v : "Phone",
|
|
8314
|
+
" ",
|
|
8315
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: "*" })
|
|
8316
|
+
]
|
|
8317
|
+
}
|
|
8318
|
+
)
|
|
8319
|
+
] })
|
|
8320
|
+
] }),
|
|
8321
|
+
errors.phone && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children: errors.phone })
|
|
8259
8322
|
] }),
|
|
8260
8323
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8261
8324
|
FloatingInput,
|
|
8262
8325
|
{
|
|
8263
|
-
label: "Email",
|
|
8326
|
+
label: (_w = L.email) != null ? _w : "Email",
|
|
8264
8327
|
required: true,
|
|
8265
8328
|
type: "email",
|
|
8266
8329
|
value: values.email,
|
|
8267
|
-
onChange: (e) => set("email", e.target.value)
|
|
8330
|
+
onChange: (e) => set("email", e.target.value),
|
|
8331
|
+
error: errors.email
|
|
8268
8332
|
}
|
|
8269
8333
|
) })
|
|
8270
8334
|
] })
|
|
8271
8335
|
] }),
|
|
8336
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8337
|
+
FormSection,
|
|
8338
|
+
{
|
|
8339
|
+
title: (_x = L.contactViaSection) != null ? _x : "How should we contact you?",
|
|
8340
|
+
required: true,
|
|
8341
|
+
children: [
|
|
8342
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8343
|
+
"div",
|
|
8344
|
+
{
|
|
8345
|
+
role: "radiogroup",
|
|
8346
|
+
"aria-label": (_y = L.contactViaSection) != null ? _y : "How should we contact you?",
|
|
8347
|
+
className: "inline-flex flex-wrap rounded-full border border-border bg-background p-1",
|
|
8348
|
+
children: [
|
|
8349
|
+
["WhatsApp", (_z = L.contactViaWhatsApp) != null ? _z : "WhatsApp"],
|
|
8350
|
+
["Email", (_A = L.contactViaEmail) != null ? _A : "Email"],
|
|
8351
|
+
["Phone", (_B = L.contactViaPhone) != null ? _B : "Phone"]
|
|
8352
|
+
].map(([value, label]) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
8353
|
+
"button",
|
|
8354
|
+
{
|
|
8355
|
+
type: "button",
|
|
8356
|
+
role: "radio",
|
|
8357
|
+
"aria-checked": values.contactVia === value,
|
|
8358
|
+
onClick: () => set("contactVia", value),
|
|
8359
|
+
className: cn(
|
|
8360
|
+
"whitespace-nowrap rounded-full px-5 py-2 font-heading text-[13px] font-semibold transition-colors",
|
|
8361
|
+
values.contactVia === value ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:text-foreground"
|
|
8362
|
+
),
|
|
8363
|
+
children: label
|
|
8364
|
+
},
|
|
8365
|
+
value
|
|
8366
|
+
))
|
|
8367
|
+
}
|
|
8368
|
+
),
|
|
8369
|
+
errors.contactVia && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive font-ui", children: errors.contactVia })
|
|
8370
|
+
]
|
|
8371
|
+
}
|
|
8372
|
+
),
|
|
8272
8373
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center pt-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8273
8374
|
"button",
|
|
8274
8375
|
{
|
|
@@ -8303,8 +8404,8 @@ function BookingForm({
|
|
|
8303
8404
|
}
|
|
8304
8405
|
)
|
|
8305
8406
|
] }),
|
|
8306
|
-
"Sending\u2026"
|
|
8307
|
-
] }) :
|
|
8407
|
+
(_C = L.sending) != null ? _C : "Sending\u2026"
|
|
8408
|
+
] }) : submitText
|
|
8308
8409
|
}
|
|
8309
8410
|
) })
|
|
8310
8411
|
]
|
|
@@ -10053,56 +10154,66 @@ function AccordionItem(_a) {
|
|
|
10053
10154
|
function AccordionTrigger(_a) {
|
|
10054
10155
|
var _b = _a, {
|
|
10055
10156
|
className,
|
|
10056
|
-
children
|
|
10157
|
+
children,
|
|
10158
|
+
headingLevel
|
|
10057
10159
|
} = _b, props = __objRest(_b, [
|
|
10058
10160
|
"className",
|
|
10059
|
-
"children"
|
|
10161
|
+
"children",
|
|
10162
|
+
"headingLevel"
|
|
10060
10163
|
]);
|
|
10061
10164
|
const variant = React32__namespace.useContext(AccordionVariantContext);
|
|
10062
|
-
|
|
10063
|
-
|
|
10165
|
+
const headingRender = headingLevel === 2 ? /* @__PURE__ */ jsxRuntime.jsx("h2", {}) : headingLevel === 4 ? /* @__PURE__ */ jsxRuntime.jsx("h4", {}) : headingLevel === 5 ? /* @__PURE__ */ jsxRuntime.jsx("h5", {}) : headingLevel === 6 ? /* @__PURE__ */ jsxRuntime.jsx("h6", {}) : void 0;
|
|
10166
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10167
|
+
accordion.Accordion.Header,
|
|
10064
10168
|
__spreadProps(__spreadValues({
|
|
10065
|
-
|
|
10066
|
-
|
|
10067
|
-
|
|
10068
|
-
|
|
10069
|
-
|
|
10070
|
-
"
|
|
10071
|
-
|
|
10072
|
-
|
|
10073
|
-
|
|
10074
|
-
|
|
10075
|
-
|
|
10076
|
-
|
|
10077
|
-
|
|
10078
|
-
|
|
10079
|
-
|
|
10080
|
-
|
|
10081
|
-
|
|
10082
|
-
|
|
10083
|
-
|
|
10084
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10085
|
-
lucideReact.ChevronDownIcon,
|
|
10086
|
-
{
|
|
10087
|
-
"data-slot": "accordion-trigger-icon",
|
|
10088
|
-
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
10089
|
-
}
|
|
10090
|
-
),
|
|
10091
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10092
|
-
lucideReact.ChevronUpIcon,
|
|
10093
|
-
{
|
|
10094
|
-
"data-slot": "accordion-trigger-icon",
|
|
10095
|
-
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
10096
|
-
}
|
|
10169
|
+
className: "flex"
|
|
10170
|
+
}, headingRender ? { render: headingRender } : {}), {
|
|
10171
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10172
|
+
accordion.Accordion.Trigger,
|
|
10173
|
+
__spreadProps(__spreadValues({
|
|
10174
|
+
"data-slot": "accordion-trigger",
|
|
10175
|
+
className: cn(
|
|
10176
|
+
"group/accordion-trigger relative flex flex-1 items-center justify-between text-left transition-all outline-none",
|
|
10177
|
+
"focus-visible:ring-3 focus-visible:ring-ring/50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
|
|
10178
|
+
variant === "default" && [
|
|
10179
|
+
"rounded-lg border border-transparent py-2.5 text-sm font-medium",
|
|
10180
|
+
"hover:underline focus-visible:border-ring",
|
|
10181
|
+
"**:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground"
|
|
10182
|
+
],
|
|
10183
|
+
variant === "faq" && [
|
|
10184
|
+
"px-5 py-4 text-base font-bold",
|
|
10185
|
+
"hover:bg-muted/30 rounded-lg"
|
|
10186
|
+
],
|
|
10187
|
+
className
|
|
10097
10188
|
)
|
|
10098
|
-
|
|
10099
|
-
|
|
10100
|
-
|
|
10101
|
-
|
|
10102
|
-
|
|
10103
|
-
|
|
10189
|
+
}, props), {
|
|
10190
|
+
children: [
|
|
10191
|
+
children,
|
|
10192
|
+
variant === "default" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10193
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10194
|
+
lucideReact.ChevronDownIcon,
|
|
10195
|
+
{
|
|
10196
|
+
"data-slot": "accordion-trigger-icon",
|
|
10197
|
+
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
10198
|
+
}
|
|
10199
|
+
),
|
|
10200
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10201
|
+
lucideReact.ChevronUpIcon,
|
|
10202
|
+
{
|
|
10203
|
+
"data-slot": "accordion-trigger-icon",
|
|
10204
|
+
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
10205
|
+
}
|
|
10206
|
+
)
|
|
10207
|
+
] }),
|
|
10208
|
+
variant === "faq" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10209
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { className: "pointer-events-none shrink-0 size-5 text-foreground group-aria-expanded/accordion-trigger:hidden" }),
|
|
10210
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MinusIcon, { className: "pointer-events-none hidden shrink-0 size-5 text-foreground group-aria-expanded/accordion-trigger:inline" })
|
|
10211
|
+
] })
|
|
10212
|
+
]
|
|
10213
|
+
})
|
|
10214
|
+
)
|
|
10104
10215
|
})
|
|
10105
|
-
)
|
|
10216
|
+
);
|
|
10106
10217
|
}
|
|
10107
10218
|
function AccordionContent(_a) {
|
|
10108
10219
|
var _b = _a, {
|
|
@@ -10327,9 +10438,10 @@ function FilterPanel({
|
|
|
10327
10438
|
variant = "sidebar",
|
|
10328
10439
|
sortOptions,
|
|
10329
10440
|
sort,
|
|
10330
|
-
onSortChange
|
|
10441
|
+
onSortChange,
|
|
10442
|
+
labels
|
|
10331
10443
|
}) {
|
|
10332
|
-
var _a, _b;
|
|
10444
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
10333
10445
|
const resolvedGroups = React32__namespace.useMemo(() => resolveGroups(groups), [groups]);
|
|
10334
10446
|
const [internalValue, setInternalValue] = React32__namespace.useState(
|
|
10335
10447
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
@@ -10467,7 +10579,7 @@ function FilterPanel({
|
|
|
10467
10579
|
type: "button",
|
|
10468
10580
|
onClick: handleClearAll,
|
|
10469
10581
|
className: "text-sm font-ui font-semibold text-muted-foreground underline underline-offset-2 hover:text-foreground",
|
|
10470
|
-
children: "Clear all"
|
|
10582
|
+
children: (_b = labels == null ? void 0 : labels.clearAll) != null ? _b : "Clear all"
|
|
10471
10583
|
}
|
|
10472
10584
|
),
|
|
10473
10585
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -10481,9 +10593,8 @@ function FilterPanel({
|
|
|
10481
10593
|
}
|
|
10482
10594
|
),
|
|
10483
10595
|
children: [
|
|
10484
|
-
"Show ",
|
|
10485
|
-
totalSelected > 0 ? `(${totalSelected})` : ""
|
|
10486
|
-
" results"
|
|
10596
|
+
(_c = labels == null ? void 0 : labels.showResults) != null ? _c : "Show results",
|
|
10597
|
+
totalSelected > 0 ? ` (${totalSelected})` : ""
|
|
10487
10598
|
]
|
|
10488
10599
|
}
|
|
10489
10600
|
)
|
|
@@ -10508,7 +10619,7 @@ function FilterPanel({
|
|
|
10508
10619
|
}
|
|
10509
10620
|
),
|
|
10510
10621
|
children: [
|
|
10511
|
-
"Sort",
|
|
10622
|
+
(_d = labels == null ? void 0 : labels.sortLabel) != null ? _d : "Sort",
|
|
10512
10623
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" })
|
|
10513
10624
|
]
|
|
10514
10625
|
}
|
|
@@ -10618,14 +10729,15 @@ function FilterPanel({
|
|
|
10618
10729
|
className: "inline-flex items-center gap-1 rounded-full px-3 py-1.5 text-xs font-ui font-semibold text-muted-foreground hover:text-foreground transition-colors",
|
|
10619
10730
|
children: [
|
|
10620
10731
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "h-3 w-3" }),
|
|
10621
|
-
"Clear all
|
|
10732
|
+
(_e = labels == null ? void 0 : labels.clearAll) != null ? _e : "Clear all",
|
|
10733
|
+
" (",
|
|
10622
10734
|
totalSelected,
|
|
10623
10735
|
")"
|
|
10624
10736
|
]
|
|
10625
10737
|
}
|
|
10626
10738
|
),
|
|
10627
10739
|
sortOptions && sortOptions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
10628
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground font-ui hidden sm:inline", children: "Sort by" }),
|
|
10740
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground font-ui hidden sm:inline", children: (_f = labels == null ? void 0 : labels.sortByLabel) != null ? _f : "Sort by" }),
|
|
10629
10741
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
10630
10742
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
10631
10743
|
PopoverTrigger,
|
|
@@ -10642,7 +10754,7 @@ function FilterPanel({
|
|
|
10642
10754
|
}
|
|
10643
10755
|
),
|
|
10644
10756
|
children: [
|
|
10645
|
-
(
|
|
10757
|
+
(_g = activeSort == null ? void 0 : activeSort.label) != null ? _g : "Default",
|
|
10646
10758
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-3.5 w-3.5 text-muted-foreground" })
|
|
10647
10759
|
]
|
|
10648
10760
|
}
|
|
@@ -10714,7 +10826,7 @@ function FilterPanel({
|
|
|
10714
10826
|
{
|
|
10715
10827
|
onClick: handleClearAll,
|
|
10716
10828
|
className: "self-start text-sm text-muted-foreground underline underline-offset-2 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring font-ui",
|
|
10717
|
-
children: "Remove all filters"
|
|
10829
|
+
children: (_h = labels == null ? void 0 : labels.removeAllFilters) != null ? _h : "Remove all filters"
|
|
10718
10830
|
}
|
|
10719
10831
|
)
|
|
10720
10832
|
] });
|
|
@@ -10983,7 +11095,7 @@ function Picture(_a) {
|
|
|
10983
11095
|
"onLoad",
|
|
10984
11096
|
"onError"
|
|
10985
11097
|
]);
|
|
10986
|
-
var _a2;
|
|
11098
|
+
var _a2, _b2;
|
|
10987
11099
|
const ref = React32__namespace.useRef(null);
|
|
10988
11100
|
const [visible, setVisible] = React32__namespace.useState(eager);
|
|
10989
11101
|
const [loaded, setLoaded] = React32__namespace.useState(false);
|
|
@@ -11011,8 +11123,9 @@ function Picture(_a) {
|
|
|
11011
11123
|
}, [src]);
|
|
11012
11124
|
const webp = webpVariantUrl(src);
|
|
11013
11125
|
const realSrc = visible ? src : PLACEHOLDER_SRC;
|
|
11126
|
+
const resolvedTitle = (_a2 = imgProps.title) != null ? _a2 : typeof imgProps.alt === "string" && imgProps.alt.trim() ? imgProps.alt : void 0;
|
|
11014
11127
|
const decodingResolved = decoding != null ? decoding : eager ? void 0 : "async";
|
|
11015
|
-
const fetchPriorityResolved = (
|
|
11128
|
+
const fetchPriorityResolved = (_b2 = imgProps.fetchPriority) != null ? _b2 : eager ? void 0 : "low";
|
|
11016
11129
|
const handleLoad = (e) => {
|
|
11017
11130
|
if (visible) setLoaded(true);
|
|
11018
11131
|
onLoad == null ? void 0 : onLoad(e);
|
|
@@ -11038,6 +11151,7 @@ function Picture(_a) {
|
|
|
11038
11151
|
onLoad: handleLoad,
|
|
11039
11152
|
onError: handleError
|
|
11040
11153
|
}, imgProps), {
|
|
11154
|
+
title: resolvedTitle,
|
|
11041
11155
|
fetchPriority: fetchPriorityResolved,
|
|
11042
11156
|
style: mergedStyle
|
|
11043
11157
|
})
|
|
@@ -11061,6 +11175,7 @@ function Picture(_a) {
|
|
|
11061
11175
|
onLoad: handleLoad,
|
|
11062
11176
|
onError: handleError
|
|
11063
11177
|
}, imgProps), {
|
|
11178
|
+
title: resolvedTitle,
|
|
11064
11179
|
fetchPriority: fetchPriorityResolved,
|
|
11065
11180
|
style: mergedStyle
|
|
11066
11181
|
})
|
|
@@ -11355,9 +11470,10 @@ function gridCols(total) {
|
|
|
11355
11470
|
function Lightbox({
|
|
11356
11471
|
photos,
|
|
11357
11472
|
initialIndex,
|
|
11358
|
-
onClose
|
|
11473
|
+
onClose,
|
|
11474
|
+
labels
|
|
11359
11475
|
}) {
|
|
11360
|
-
var _a;
|
|
11476
|
+
var _a, _b, _c, _d;
|
|
11361
11477
|
const [index, setIndex] = React32__namespace.useState(initialIndex);
|
|
11362
11478
|
const total = photos.length;
|
|
11363
11479
|
const photo = photos[index];
|
|
@@ -11390,7 +11506,7 @@ function Lightbox({
|
|
|
11390
11506
|
type: "button",
|
|
11391
11507
|
onClick: onClose,
|
|
11392
11508
|
className: "absolute top-5 right-5 flex h-10 w-10 items-center justify-center rounded-full bg-white/10 text-white hover:bg-white/20 transition-colors z-10",
|
|
11393
|
-
"aria-label": "Close lightbox",
|
|
11509
|
+
"aria-label": (_a = labels == null ? void 0 : labels.close) != null ? _a : "Close lightbox",
|
|
11394
11510
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "h-5 w-5" })
|
|
11395
11511
|
}
|
|
11396
11512
|
),
|
|
@@ -11403,7 +11519,7 @@ function Lightbox({
|
|
|
11403
11519
|
prev();
|
|
11404
11520
|
},
|
|
11405
11521
|
className: "absolute left-4 top-1/2 -translate-y-1/2 flex h-11 w-11 items-center justify-center rounded-full bg-white/10 text-white hover:bg-white/25 transition-colors z-10",
|
|
11406
|
-
"aria-label": "Previous photo",
|
|
11522
|
+
"aria-label": (_b = labels == null ? void 0 : labels.previous) != null ? _b : "Previous photo",
|
|
11407
11523
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
11408
11524
|
}
|
|
11409
11525
|
),
|
|
@@ -11416,7 +11532,7 @@ function Lightbox({
|
|
|
11416
11532
|
next();
|
|
11417
11533
|
},
|
|
11418
11534
|
className: "absolute right-4 top-1/2 -translate-y-1/2 flex h-11 w-11 items-center justify-center rounded-full bg-white/10 text-white hover:bg-white/25 transition-colors z-10",
|
|
11419
|
-
"aria-label": "Next photo",
|
|
11535
|
+
"aria-label": (_c = labels == null ? void 0 : labels.next) != null ? _c : "Next photo",
|
|
11420
11536
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
11421
11537
|
}
|
|
11422
11538
|
),
|
|
@@ -11424,7 +11540,8 @@ function Lightbox({
|
|
|
11424
11540
|
Picture,
|
|
11425
11541
|
{
|
|
11426
11542
|
src: photo.src,
|
|
11427
|
-
alt: (
|
|
11543
|
+
alt: (_d = photo.alt) != null ? _d : `Photo ${index + 1}`,
|
|
11544
|
+
title: photo.caption,
|
|
11428
11545
|
className: "max-w-[calc(100%-6rem)] max-h-[calc(100vh-11rem)] object-contain rounded-lg shadow-2xl",
|
|
11429
11546
|
onClick: (e) => e.stopPropagation()
|
|
11430
11547
|
}
|
|
@@ -11494,6 +11611,7 @@ function PhotoTile({
|
|
|
11494
11611
|
{
|
|
11495
11612
|
src: photo.src,
|
|
11496
11613
|
alt: (_b = photo.alt) != null ? _b : `Photo ${index + 1}`,
|
|
11614
|
+
title: photo.caption,
|
|
11497
11615
|
className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11498
11616
|
loading: "lazy"
|
|
11499
11617
|
}
|
|
@@ -11507,8 +11625,10 @@ function PhotoTile({
|
|
|
11507
11625
|
function ShowMoreButton({
|
|
11508
11626
|
count,
|
|
11509
11627
|
expanded,
|
|
11510
|
-
onClick
|
|
11628
|
+
onClick,
|
|
11629
|
+
labels
|
|
11511
11630
|
}) {
|
|
11631
|
+
var _a, _b;
|
|
11512
11632
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center py-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11513
11633
|
"button",
|
|
11514
11634
|
{
|
|
@@ -11522,10 +11642,11 @@ function ShowMoreButton({
|
|
|
11522
11642
|
),
|
|
11523
11643
|
children: expanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11524
11644
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
11525
|
-
"Show less"
|
|
11645
|
+
(_a = labels == null ? void 0 : labels.showLess) != null ? _a : "Show less"
|
|
11526
11646
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11527
11647
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutGridIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
11528
|
-
"See more
|
|
11648
|
+
(_b = labels == null ? void 0 : labels.seeMore) != null ? _b : "See more",
|
|
11649
|
+
" (",
|
|
11529
11650
|
count,
|
|
11530
11651
|
")"
|
|
11531
11652
|
] })
|
|
@@ -11535,7 +11656,8 @@ function ShowMoreButton({
|
|
|
11535
11656
|
function GridGallery({
|
|
11536
11657
|
photos,
|
|
11537
11658
|
initialVisible,
|
|
11538
|
-
onOpen
|
|
11659
|
+
onOpen,
|
|
11660
|
+
labels
|
|
11539
11661
|
}) {
|
|
11540
11662
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11541
11663
|
const cols = gridCols(photos.length);
|
|
@@ -11557,7 +11679,8 @@ function GridGallery({
|
|
|
11557
11679
|
{
|
|
11558
11680
|
count: photos.length - initialVisible,
|
|
11559
11681
|
expanded,
|
|
11560
|
-
onClick: () => setExpanded((v) => !v)
|
|
11682
|
+
onClick: () => setExpanded((v) => !v),
|
|
11683
|
+
labels
|
|
11561
11684
|
}
|
|
11562
11685
|
)
|
|
11563
11686
|
] });
|
|
@@ -11565,7 +11688,8 @@ function GridGallery({
|
|
|
11565
11688
|
function CompactGridGallery({
|
|
11566
11689
|
photos,
|
|
11567
11690
|
initialVisible,
|
|
11568
|
-
onOpen
|
|
11691
|
+
onOpen,
|
|
11692
|
+
labels
|
|
11569
11693
|
}) {
|
|
11570
11694
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11571
11695
|
const hasMore = photos.length > initialVisible;
|
|
@@ -11586,7 +11710,8 @@ function CompactGridGallery({
|
|
|
11586
11710
|
{
|
|
11587
11711
|
count: photos.length - initialVisible,
|
|
11588
11712
|
expanded,
|
|
11589
|
-
onClick: () => setExpanded((v) => !v)
|
|
11713
|
+
onClick: () => setExpanded((v) => !v),
|
|
11714
|
+
labels
|
|
11590
11715
|
}
|
|
11591
11716
|
)
|
|
11592
11717
|
] });
|
|
@@ -11594,7 +11719,8 @@ function CompactGridGallery({
|
|
|
11594
11719
|
function MasonryGallery({
|
|
11595
11720
|
photos,
|
|
11596
11721
|
initialVisible,
|
|
11597
|
-
onOpen
|
|
11722
|
+
onOpen,
|
|
11723
|
+
labels
|
|
11598
11724
|
}) {
|
|
11599
11725
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11600
11726
|
const hasMore = photos.length > initialVisible;
|
|
@@ -11615,6 +11741,7 @@ function MasonryGallery({
|
|
|
11615
11741
|
{
|
|
11616
11742
|
src: p.src,
|
|
11617
11743
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 1}`,
|
|
11744
|
+
title: p.caption,
|
|
11618
11745
|
className: "w-full h-auto object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11619
11746
|
loading: "lazy"
|
|
11620
11747
|
}
|
|
@@ -11630,7 +11757,8 @@ function MasonryGallery({
|
|
|
11630
11757
|
{
|
|
11631
11758
|
count: photos.length - initialVisible,
|
|
11632
11759
|
expanded,
|
|
11633
|
-
onClick: () => setExpanded((v) => !v)
|
|
11760
|
+
onClick: () => setExpanded((v) => !v),
|
|
11761
|
+
labels
|
|
11634
11762
|
}
|
|
11635
11763
|
)
|
|
11636
11764
|
] });
|
|
@@ -11654,6 +11782,7 @@ function FilmstripGallery({
|
|
|
11654
11782
|
{
|
|
11655
11783
|
src: p.src,
|
|
11656
11784
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 1}`,
|
|
11785
|
+
title: p.caption,
|
|
11657
11786
|
className: "h-full w-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11658
11787
|
loading: "lazy"
|
|
11659
11788
|
}
|
|
@@ -11667,7 +11796,8 @@ function FilmstripGallery({
|
|
|
11667
11796
|
}
|
|
11668
11797
|
function FeaturedGallery({
|
|
11669
11798
|
photos,
|
|
11670
|
-
onOpen
|
|
11799
|
+
onOpen,
|
|
11800
|
+
labels
|
|
11671
11801
|
}) {
|
|
11672
11802
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11673
11803
|
const featured = photos.slice(0, 3);
|
|
@@ -11719,6 +11849,7 @@ function FeaturedGallery({
|
|
|
11719
11849
|
{
|
|
11720
11850
|
src: p.src,
|
|
11721
11851
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 4}`,
|
|
11852
|
+
title: p.caption,
|
|
11722
11853
|
className: "h-full w-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11723
11854
|
loading: "lazy"
|
|
11724
11855
|
}
|
|
@@ -11734,7 +11865,8 @@ function FeaturedGallery({
|
|
|
11734
11865
|
{
|
|
11735
11866
|
count: extra.length,
|
|
11736
11867
|
expanded,
|
|
11737
|
-
onClick: () => setExpanded((v) => !v)
|
|
11868
|
+
onClick: () => setExpanded((v) => !v),
|
|
11869
|
+
labels
|
|
11738
11870
|
}
|
|
11739
11871
|
)
|
|
11740
11872
|
] });
|
|
@@ -11802,6 +11934,7 @@ function CarouselGallery({
|
|
|
11802
11934
|
{
|
|
11803
11935
|
src: photo.src,
|
|
11804
11936
|
alt: (_a = photo.alt) != null ? _a : `Photo ${index + 1}`,
|
|
11937
|
+
title: photo.caption,
|
|
11805
11938
|
className: "h-full w-full object-cover transition-transform duration-500 group-hover/photo:scale-[1.02]",
|
|
11806
11939
|
loading: "lazy"
|
|
11807
11940
|
},
|
|
@@ -11865,6 +11998,7 @@ function PhotoGallery({
|
|
|
11865
11998
|
variant = "grid",
|
|
11866
11999
|
initialVisible = 6,
|
|
11867
12000
|
onPhotoClick,
|
|
12001
|
+
labels,
|
|
11868
12002
|
className
|
|
11869
12003
|
}) {
|
|
11870
12004
|
const [lightboxIndex, setLightboxIndex] = React32__namespace.useState(null);
|
|
@@ -11880,7 +12014,8 @@ function PhotoGallery({
|
|
|
11880
12014
|
{
|
|
11881
12015
|
photos: normalised,
|
|
11882
12016
|
initialIndex: lightboxIndex,
|
|
11883
|
-
onClose: () => setLightboxIndex(null)
|
|
12017
|
+
onClose: () => setLightboxIndex(null),
|
|
12018
|
+
labels
|
|
11884
12019
|
}
|
|
11885
12020
|
);
|
|
11886
12021
|
if (variant === "carousel" || variant === "fullBleed") {
|
|
@@ -11908,7 +12043,8 @@ function PhotoGallery({
|
|
|
11908
12043
|
{
|
|
11909
12044
|
photos: normalised,
|
|
11910
12045
|
initialVisible,
|
|
11911
|
-
onOpen: handleOpen
|
|
12046
|
+
onOpen: handleOpen,
|
|
12047
|
+
labels
|
|
11912
12048
|
}
|
|
11913
12049
|
),
|
|
11914
12050
|
variant === "gridCompact" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -11916,7 +12052,8 @@ function PhotoGallery({
|
|
|
11916
12052
|
{
|
|
11917
12053
|
photos: normalised,
|
|
11918
12054
|
initialVisible,
|
|
11919
|
-
onOpen: handleOpen
|
|
12055
|
+
onOpen: handleOpen,
|
|
12056
|
+
labels
|
|
11920
12057
|
}
|
|
11921
12058
|
),
|
|
11922
12059
|
variant === "masonry" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -11924,11 +12061,12 @@ function PhotoGallery({
|
|
|
11924
12061
|
{
|
|
11925
12062
|
photos: normalised,
|
|
11926
12063
|
initialVisible,
|
|
11927
|
-
onOpen: handleOpen
|
|
12064
|
+
onOpen: handleOpen,
|
|
12065
|
+
labels
|
|
11928
12066
|
}
|
|
11929
12067
|
),
|
|
11930
12068
|
variant === "filmstrip" && /* @__PURE__ */ jsxRuntime.jsx(FilmstripGallery, { photos: normalised, onOpen: handleOpen }),
|
|
11931
|
-
variant === "featured" && /* @__PURE__ */ jsxRuntime.jsx(FeaturedGallery, { photos: normalised, onOpen: handleOpen }),
|
|
12069
|
+
variant === "featured" && /* @__PURE__ */ jsxRuntime.jsx(FeaturedGallery, { photos: normalised, onOpen: handleOpen, labels }),
|
|
11932
12070
|
variant === "collage" && /* @__PURE__ */ jsxRuntime.jsx(CollageGallery, { photos: normalised, onOpen: handleOpen }),
|
|
11933
12071
|
variant === "collageTight" && /* @__PURE__ */ jsxRuntime.jsx(CollageGallery, { photos: normalised, onOpen: handleOpen, seamless: true }),
|
|
11934
12072
|
lightbox
|
|
@@ -12198,6 +12336,8 @@ function PricingTrip({
|
|
|
12198
12336
|
departureTimes,
|
|
12199
12337
|
onBook,
|
|
12200
12338
|
bookLabel = "Check availability",
|
|
12339
|
+
fromLabel = "From",
|
|
12340
|
+
perPersonLabel = "per person",
|
|
12201
12341
|
variant = "card",
|
|
12202
12342
|
sharp = false,
|
|
12203
12343
|
belowPrice,
|
|
@@ -12224,13 +12364,16 @@ function PricingTrip({
|
|
|
12224
12364
|
),
|
|
12225
12365
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center gap-3", children: [
|
|
12226
12366
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
12227
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children:
|
|
12367
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children: fromLabel }),
|
|
12228
12368
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-1.5 flex-wrap", children: [
|
|
12229
12369
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-lg font-bold text-foreground font-heading leading-none", children: [
|
|
12230
12370
|
currency,
|
|
12231
12371
|
" ",
|
|
12232
12372
|
priceFrom,
|
|
12233
|
-
/* @__PURE__ */ jsxRuntime.
|
|
12373
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] font-normal text-muted-foreground font-ui ml-1", children: [
|
|
12374
|
+
"/ ",
|
|
12375
|
+
perPersonLabel
|
|
12376
|
+
] })
|
|
12234
12377
|
] }),
|
|
12235
12378
|
(priceInfo || currencyEstimates && currencyEstimates.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12236
12379
|
"button",
|
|
@@ -12342,7 +12485,7 @@ function PricingTrip({
|
|
|
12342
12485
|
] }),
|
|
12343
12486
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
12344
12487
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0 text-right", children: [
|
|
12345
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children:
|
|
12488
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children: fromLabel }),
|
|
12346
12489
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xl font-bold text-foreground font-heading leading-none", children: [
|
|
12347
12490
|
currency,
|
|
12348
12491
|
" ",
|
|
@@ -12371,13 +12514,16 @@ function PricingTrip({
|
|
|
12371
12514
|
}
|
|
12372
12515
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
|
|
12373
12516
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
12374
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui uppercase tracking-wide", children:
|
|
12517
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui uppercase tracking-wide", children: fromLabel }),
|
|
12375
12518
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold text-foreground font-heading flex items-center gap-2 flex-wrap", children: [
|
|
12376
12519
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
12377
12520
|
currency,
|
|
12378
12521
|
" ",
|
|
12379
12522
|
priceFrom,
|
|
12380
|
-
/* @__PURE__ */ jsxRuntime.
|
|
12523
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-normal text-muted-foreground font-ui", children: [
|
|
12524
|
+
" / ",
|
|
12525
|
+
perPersonLabel
|
|
12526
|
+
] })
|
|
12381
12527
|
] }),
|
|
12382
12528
|
priceInfo && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12383
12529
|
"button",
|
|
@@ -12644,8 +12790,10 @@ function SiteHeader({
|
|
|
12644
12790
|
onSearch,
|
|
12645
12791
|
onAccount,
|
|
12646
12792
|
position = variant === "transparent" ? "overlay" : "fixed",
|
|
12793
|
+
labels,
|
|
12647
12794
|
className
|
|
12648
12795
|
}) {
|
|
12796
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
12649
12797
|
const t = VARIANT[variant];
|
|
12650
12798
|
const resolvedLogo = logoSrc != null ? logoSrc : variant === "white" ? logoSrcDark : logoSrcLight;
|
|
12651
12799
|
const [openMenu, setOpenMenu] = React32__namespace.useState(null);
|
|
@@ -12703,7 +12851,7 @@ function SiteHeader({
|
|
|
12703
12851
|
{
|
|
12704
12852
|
type: "button",
|
|
12705
12853
|
onClick: () => setMobileOpen(true),
|
|
12706
|
-
"aria-label": "Open menu",
|
|
12854
|
+
"aria-label": (_a = labels == null ? void 0 : labels.openMenu) != null ? _a : "Open menu",
|
|
12707
12855
|
className: cn(
|
|
12708
12856
|
"flex lg:hidden h-9 w-9 items-center justify-center rounded-full transition-colors -ml-1.5",
|
|
12709
12857
|
t.mobileTrigger
|
|
@@ -12732,8 +12880,8 @@ function SiteHeader({
|
|
|
12732
12880
|
}
|
|
12733
12881
|
),
|
|
12734
12882
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "hidden lg:flex items-center gap-0.5 mx-auto", children: links.map((link) => {
|
|
12735
|
-
var
|
|
12736
|
-
const hasDropdown = !!((
|
|
12883
|
+
var _a2, _b2;
|
|
12884
|
+
const hasDropdown = !!((_a2 = link.items) == null ? void 0 : _a2.length);
|
|
12737
12885
|
const isOpen = openMenu === link.label;
|
|
12738
12886
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12739
12887
|
"div",
|
|
@@ -12745,7 +12893,7 @@ function SiteHeader({
|
|
|
12745
12893
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
12746
12894
|
"a",
|
|
12747
12895
|
{
|
|
12748
|
-
href: (
|
|
12896
|
+
href: (_b2 = link.href) != null ? _b2 : "#",
|
|
12749
12897
|
onClick: hasDropdown ? (e) => e.preventDefault() : void 0,
|
|
12750
12898
|
className: cn(
|
|
12751
12899
|
"flex items-center gap-1 px-3.5 py-1.5 rounded-full",
|
|
@@ -12794,7 +12942,7 @@ function SiteHeader({
|
|
|
12794
12942
|
"button",
|
|
12795
12943
|
{
|
|
12796
12944
|
type: "button",
|
|
12797
|
-
"aria-label": "Language",
|
|
12945
|
+
"aria-label": (_b = labels == null ? void 0 : labels.language) != null ? _b : "Language",
|
|
12798
12946
|
className: cn(
|
|
12799
12947
|
"flex items-center gap-0.5 px-2.5 py-1.5 rounded-full",
|
|
12800
12948
|
"text-sm font-ui transition-colors",
|
|
@@ -12834,7 +12982,7 @@ function SiteHeader({
|
|
|
12834
12982
|
{
|
|
12835
12983
|
type: "button",
|
|
12836
12984
|
onClick: onSearch,
|
|
12837
|
-
"aria-label": "Search",
|
|
12985
|
+
"aria-label": (_c = labels == null ? void 0 : labels.search) != null ? _c : "Search",
|
|
12838
12986
|
className: cn(
|
|
12839
12987
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12840
12988
|
t.icon
|
|
@@ -12847,7 +12995,7 @@ function SiteHeader({
|
|
|
12847
12995
|
{
|
|
12848
12996
|
type: "button",
|
|
12849
12997
|
onClick: onAccount,
|
|
12850
|
-
"aria-label": "Account",
|
|
12998
|
+
"aria-label": (_d = labels == null ? void 0 : labels.account) != null ? _d : "Account",
|
|
12851
12999
|
className: cn(
|
|
12852
13000
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12853
13001
|
t.icon
|
|
@@ -12880,7 +13028,7 @@ function SiteHeader({
|
|
|
12880
13028
|
{
|
|
12881
13029
|
type: "button",
|
|
12882
13030
|
onClick: () => setMobileOpen(false),
|
|
12883
|
-
"aria-label": "Close menu",
|
|
13031
|
+
"aria-label": (_e = labels == null ? void 0 : labels.closeMenu) != null ? _e : "Close menu",
|
|
12884
13032
|
className: cn(
|
|
12885
13033
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12886
13034
|
t.mobileTrigger
|
|
@@ -12890,8 +13038,8 @@ function SiteHeader({
|
|
|
12890
13038
|
)
|
|
12891
13039
|
] }),
|
|
12892
13040
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex-1 overflow-y-auto px-6 py-6 flex flex-col gap-1", children: links.map((link) => {
|
|
12893
|
-
var
|
|
12894
|
-
const hasDropdown = !!((
|
|
13041
|
+
var _a2, _b2;
|
|
13042
|
+
const hasDropdown = !!((_a2 = link.items) == null ? void 0 : _a2.length);
|
|
12895
13043
|
const isExpanded = openMobileSection === link.label;
|
|
12896
13044
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
12897
13045
|
hasDropdown ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -12919,7 +13067,7 @@ function SiteHeader({
|
|
|
12919
13067
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
12920
13068
|
"a",
|
|
12921
13069
|
{
|
|
12922
|
-
href: (
|
|
13070
|
+
href: (_b2 = link.href) != null ? _b2 : "#",
|
|
12923
13071
|
onClick: () => setMobileOpen(false),
|
|
12924
13072
|
className: cn(
|
|
12925
13073
|
"flex items-center py-4 text-xl font-ui font-black transition-colors border-b border-white/8",
|
|
@@ -12929,11 +13077,11 @@ function SiteHeader({
|
|
|
12929
13077
|
}
|
|
12930
13078
|
),
|
|
12931
13079
|
hasDropdown && isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-0 pl-4 pb-2", children: link.items.map((item) => {
|
|
12932
|
-
var
|
|
13080
|
+
var _a3;
|
|
12933
13081
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12934
13082
|
"a",
|
|
12935
13083
|
{
|
|
12936
|
-
href: (
|
|
13084
|
+
href: (_a3 = item.href) != null ? _a3 : "#",
|
|
12937
13085
|
onClick: () => setMobileOpen(false),
|
|
12938
13086
|
className: cn(
|
|
12939
13087
|
"py-3 text-base font-ui font-bold transition-colors border-b",
|
|
@@ -12986,7 +13134,7 @@ function SiteHeader({
|
|
|
12986
13134
|
onSearch == null ? void 0 : onSearch();
|
|
12987
13135
|
setMobileOpen(false);
|
|
12988
13136
|
},
|
|
12989
|
-
"aria-label": "Search",
|
|
13137
|
+
"aria-label": (_f = labels == null ? void 0 : labels.search) != null ? _f : "Search",
|
|
12990
13138
|
className: cn("flex h-9 w-9 items-center justify-center rounded-full transition-colors", t.icon),
|
|
12991
13139
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "h-[18px] w-[18px]" })
|
|
12992
13140
|
}
|
|
@@ -12999,7 +13147,7 @@ function SiteHeader({
|
|
|
12999
13147
|
onAccount == null ? void 0 : onAccount();
|
|
13000
13148
|
setMobileOpen(false);
|
|
13001
13149
|
},
|
|
13002
|
-
"aria-label": "Account",
|
|
13150
|
+
"aria-label": (_g = labels == null ? void 0 : labels.account) != null ? _g : "Account",
|
|
13003
13151
|
className: cn("flex h-9 w-9 items-center justify-center rounded-full transition-colors", t.icon),
|
|
13004
13152
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserIcon, { className: "h-[18px] w-[18px]" })
|
|
13005
13153
|
}
|
|
@@ -13149,9 +13297,11 @@ function HeartIcon({ filled = false }) {
|
|
|
13149
13297
|
);
|
|
13150
13298
|
}
|
|
13151
13299
|
function TripCardEditorial(props) {
|
|
13300
|
+
var _a, _b, _c, _d;
|
|
13152
13301
|
const {
|
|
13153
13302
|
image,
|
|
13154
13303
|
imageAlt = "",
|
|
13304
|
+
labels,
|
|
13155
13305
|
title,
|
|
13156
13306
|
description,
|
|
13157
13307
|
nights,
|
|
@@ -13209,7 +13359,7 @@ function TripCardEditorial(props) {
|
|
|
13209
13359
|
"button",
|
|
13210
13360
|
{
|
|
13211
13361
|
type: "button",
|
|
13212
|
-
"aria-label": favorited ? "Remove from favorites" : "Add to favorites",
|
|
13362
|
+
"aria-label": favorited ? (_a = labels == null ? void 0 : labels.removeFromFavorites) != null ? _a : "Remove from favorites" : (_b = labels == null ? void 0 : labels.addToFavorites) != null ? _b : "Add to favorites",
|
|
13213
13363
|
"aria-pressed": favorited,
|
|
13214
13364
|
onClick: handleFav,
|
|
13215
13365
|
className: cn(
|
|
@@ -13253,7 +13403,7 @@ function TripCardEditorial(props) {
|
|
|
13253
13403
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13254
13404
|
nights,
|
|
13255
13405
|
" ",
|
|
13256
|
-
nights === 1 ? "night" : "nights"
|
|
13406
|
+
nights === 1 ? (_c = labels == null ? void 0 : labels.night) != null ? _c : "night" : (_d = labels == null ? void 0 : labels.nights) != null ? _d : "nights"
|
|
13257
13407
|
] })
|
|
13258
13408
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
|
|
13259
13409
|
price && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-bold text-foreground font-ui", children: price })
|
|
@@ -13278,12 +13428,14 @@ function TripCardEditorial(props) {
|
|
|
13278
13428
|
] });
|
|
13279
13429
|
}
|
|
13280
13430
|
function TripCard(props) {
|
|
13431
|
+
var _a, _b;
|
|
13281
13432
|
if (props.variant === "editorial") {
|
|
13282
13433
|
return /* @__PURE__ */ jsxRuntime.jsx(TripCardEditorial, __spreadValues({}, props));
|
|
13283
13434
|
}
|
|
13284
13435
|
const {
|
|
13285
13436
|
image,
|
|
13286
13437
|
imageAlt = "",
|
|
13438
|
+
labels,
|
|
13287
13439
|
status,
|
|
13288
13440
|
nights,
|
|
13289
13441
|
period,
|
|
@@ -13296,6 +13448,7 @@ function TripCard(props) {
|
|
|
13296
13448
|
} = props;
|
|
13297
13449
|
const s = sizeConfig[size];
|
|
13298
13450
|
const statusInfo = status ? statusConfig[status] : null;
|
|
13451
|
+
const statusLabel = statusInfo ? status === "sold-out" ? (_a = labels == null ? void 0 : labels.soldOut) != null ? _a : statusInfo.label : status === "trending" ? (_b = labels == null ? void 0 : labels.trending) != null ? _b : statusInfo.label : statusInfo.label : null;
|
|
13299
13452
|
const meta = [
|
|
13300
13453
|
nights ? `${nights} nights` : null,
|
|
13301
13454
|
period != null ? period : null
|
|
@@ -13321,7 +13474,7 @@ function TripCard(props) {
|
|
|
13321
13474
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent" }),
|
|
13322
13475
|
statusInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 p-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1.5 rounded-xl bg-card/90 px-3 py-1.5 backdrop-blur-sm shadow-sm", children: [
|
|
13323
13476
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: statusInfo.icon }),
|
|
13324
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-foreground font-ui", children:
|
|
13477
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-foreground font-ui", children: statusLabel })
|
|
13325
13478
|
] }) }),
|
|
13326
13479
|
!statusInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10" }),
|
|
13327
13480
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex flex-col gap-1.5 p-5", children: [
|
|
@@ -13415,6 +13568,7 @@ function BlogCard({
|
|
|
13415
13568
|
{
|
|
13416
13569
|
src: image,
|
|
13417
13570
|
alt: imageAlt,
|
|
13571
|
+
title: imageAlt || void 0,
|
|
13418
13572
|
loading: "lazy",
|
|
13419
13573
|
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
|
|
13420
13574
|
}
|
|
@@ -13768,6 +13922,8 @@ function TripHeader({
|
|
|
13768
13922
|
breadcrumb,
|
|
13769
13923
|
destination,
|
|
13770
13924
|
duration,
|
|
13925
|
+
groupSize,
|
|
13926
|
+
labels,
|
|
13771
13927
|
tagline,
|
|
13772
13928
|
chips,
|
|
13773
13929
|
belowMeta,
|
|
@@ -13775,7 +13931,7 @@ function TripHeader({
|
|
|
13775
13931
|
uiVariant = "v1",
|
|
13776
13932
|
className
|
|
13777
13933
|
}) {
|
|
13778
|
-
var _a;
|
|
13934
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
13779
13935
|
const [heroIndex, setHeroIndex] = React32__namespace.useState(0);
|
|
13780
13936
|
const [videoReady, setVideoReady] = React32__namespace.useState(false);
|
|
13781
13937
|
const videoRef = React32__namespace.useRef(null);
|
|
@@ -13793,7 +13949,7 @@ function TripHeader({
|
|
|
13793
13949
|
const currentSrc = heroSrc(safeIndex);
|
|
13794
13950
|
const showCarousel = !videoUrl && validImages.length > 1;
|
|
13795
13951
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
13796
|
-
const hasMeta = !!(destination || duration);
|
|
13952
|
+
const hasMeta = !!(destination || duration || groupSize);
|
|
13797
13953
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
13798
13954
|
React32__namespace.useEffect(() => {
|
|
13799
13955
|
if (!videoUrl) return;
|
|
@@ -13900,7 +14056,7 @@ function TripHeader({
|
|
|
13900
14056
|
(i) => (i - 1 + validImages.length) % validImages.length
|
|
13901
14057
|
),
|
|
13902
14058
|
className: "absolute left-4 top-1/2 -translate-y-1/2 flex h-10 w-10 items-center justify-center rounded-full bg-black/30 text-white backdrop-blur-sm hover:bg-black/50 transition-colors",
|
|
13903
|
-
"aria-label": "
|
|
14059
|
+
"aria-label": (_b = labels == null ? void 0 : labels.previousImage) != null ? _b : "Previous image",
|
|
13904
14060
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
13905
14061
|
}
|
|
13906
14062
|
),
|
|
@@ -13910,7 +14066,7 @@ function TripHeader({
|
|
|
13910
14066
|
type: "button",
|
|
13911
14067
|
onClick: () => setHeroIndex((i) => (i + 1) % validImages.length),
|
|
13912
14068
|
className: "absolute right-4 top-1/2 -translate-y-1/2 flex h-10 w-10 items-center justify-center rounded-full bg-black/30 text-white backdrop-blur-sm hover:bg-black/50 transition-colors",
|
|
13913
|
-
"aria-label": "
|
|
14069
|
+
"aria-label": (_c = labels == null ? void 0 : labels.nextImage) != null ? _c : "Next image",
|
|
13914
14070
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
13915
14071
|
}
|
|
13916
14072
|
),
|
|
@@ -13953,15 +14109,19 @@ function TripHeader({
|
|
|
13953
14109
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13954
14110
|
nights,
|
|
13955
14111
|
" ",
|
|
13956
|
-
nights === 1 ? "
|
|
14112
|
+
nights === 1 ? (_d = labels == null ? void 0 : labels.night) != null ? _d : "night" : (_e = labels == null ? void 0 : labels.nights) != null ? _e : "nights"
|
|
13957
14113
|
] }),
|
|
13958
14114
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white/40", children: "\xB7" }),
|
|
13959
14115
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.SunIcon, { className: "h-4 w-4 shrink-0 text-primary-400" }),
|
|
13960
14116
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13961
14117
|
duration.days,
|
|
13962
14118
|
" ",
|
|
13963
|
-
duration.days === 1 ? "
|
|
14119
|
+
duration.days === 1 ? (_f = labels == null ? void 0 : labels.day) != null ? _f : "day" : (_g = labels == null ? void 0 : labels.days) != null ? _g : "days"
|
|
13964
14120
|
] })
|
|
14121
|
+
] }),
|
|
14122
|
+
groupSize && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-white/85", children: [
|
|
14123
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.UsersIcon, { className: "h-4 w-4 shrink-0 text-primary-400" }),
|
|
14124
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-ui font-semibold", children: groupSize })
|
|
13965
14125
|
] })
|
|
13966
14126
|
] }) : tagline ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm sm:text-base text-white/80 font-ui", children: tagline }) : null,
|
|
13967
14127
|
chips && chips.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex flex-wrap items-center gap-1.5", children: chips.map((chip, i) => /* @__PURE__ */ jsxRuntime.jsx(Chip, { href: chip.href, children: chip.label }, i)) }),
|
|
@@ -14406,7 +14566,10 @@ function Stars({ count = 5 }) {
|
|
|
14406
14566
|
i
|
|
14407
14567
|
)) });
|
|
14408
14568
|
}
|
|
14409
|
-
function ItineraryTimeline({
|
|
14569
|
+
function ItineraryTimeline({
|
|
14570
|
+
steps,
|
|
14571
|
+
transferLabel
|
|
14572
|
+
}) {
|
|
14410
14573
|
return /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "relative flex flex-col gap-0", children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "relative flex gap-4 pb-8 last:pb-0", children: [
|
|
14411
14574
|
i < steps.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-3.5 top-7 bottom-0 w-px bg-border" }),
|
|
14412
14575
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 mt-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-full border-2 border-primary bg-background", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-bold text-primary font-ui", children: i + 1 }) }),
|
|
@@ -14417,7 +14580,7 @@ function ItineraryTimeline({ steps }) {
|
|
|
14417
14580
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ClockIcon, { className: "h-3 w-3 mr-1" }),
|
|
14418
14581
|
step.duration
|
|
14419
14582
|
] }),
|
|
14420
|
-
step.isTransfer && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "text-xs font-ui h-5 px-2", children: "Transfer" })
|
|
14583
|
+
step.isTransfer && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "text-xs font-ui h-5 px-2", children: transferLabel != null ? transferLabel : "Transfer" })
|
|
14421
14584
|
] }),
|
|
14422
14585
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-base text-muted-foreground leading-relaxed [&_p:not(:last-child)]:mb-2 [&_strong]:text-foreground [&_strong]:font-semibold", children: step.description })
|
|
14423
14586
|
] })
|
|
@@ -14434,6 +14597,7 @@ function TripPage({
|
|
|
14434
14597
|
tagline,
|
|
14435
14598
|
destination,
|
|
14436
14599
|
duration,
|
|
14600
|
+
groupSize,
|
|
14437
14601
|
images,
|
|
14438
14602
|
videoUrl,
|
|
14439
14603
|
breadcrumb,
|
|
@@ -14457,6 +14621,7 @@ function TripPage({
|
|
|
14457
14621
|
whenItOperates,
|
|
14458
14622
|
food,
|
|
14459
14623
|
foodGallery,
|
|
14624
|
+
foodGalleryVariant = "gridCompact",
|
|
14460
14625
|
termsAndConditions,
|
|
14461
14626
|
meetingPoints,
|
|
14462
14627
|
meetingPoint,
|
|
@@ -14476,7 +14641,13 @@ function TripPage({
|
|
|
14476
14641
|
currencyEstimates,
|
|
14477
14642
|
priceInfo,
|
|
14478
14643
|
onBook,
|
|
14644
|
+
onBookingSubmit,
|
|
14645
|
+
bookingLoading,
|
|
14646
|
+
bookingDefaults,
|
|
14647
|
+
bookingLabels,
|
|
14479
14648
|
bookLabel,
|
|
14649
|
+
fromLabel,
|
|
14650
|
+
perPersonLabel,
|
|
14480
14651
|
siteHeader,
|
|
14481
14652
|
uiVariant = "v1",
|
|
14482
14653
|
features,
|
|
@@ -14653,6 +14824,15 @@ function TripPage({
|
|
|
14653
14824
|
breadcrumb,
|
|
14654
14825
|
destination,
|
|
14655
14826
|
duration,
|
|
14827
|
+
groupSize,
|
|
14828
|
+
labels: {
|
|
14829
|
+
night: labels == null ? void 0 : labels.night,
|
|
14830
|
+
nights: labels == null ? void 0 : labels.nights,
|
|
14831
|
+
day: labels == null ? void 0 : labels.day,
|
|
14832
|
+
days: labels == null ? void 0 : labels.days,
|
|
14833
|
+
previousImage: labels == null ? void 0 : labels.previousImage,
|
|
14834
|
+
nextImage: labels == null ? void 0 : labels.nextImage
|
|
14835
|
+
},
|
|
14656
14836
|
tagline,
|
|
14657
14837
|
chips,
|
|
14658
14838
|
siteHeader,
|
|
@@ -14713,7 +14893,7 @@ function TripPage({
|
|
|
14713
14893
|
)) })
|
|
14714
14894
|
] }) : itinerary && itinerary.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-itinerary", className: "scroll-mt-20", children: [
|
|
14715
14895
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-bold text-foreground font-heading mb-6", children: (_c = labels == null ? void 0 : labels.itinerary) != null ? _c : "Itinerary" }),
|
|
14716
|
-
/* @__PURE__ */ jsxRuntime.jsx(ItineraryTimeline, { steps: itinerary })
|
|
14896
|
+
/* @__PURE__ */ jsxRuntime.jsx(ItineraryTimeline, { steps: itinerary, transferLabel: labels == null ? void 0 : labels.transfer })
|
|
14717
14897
|
] }),
|
|
14718
14898
|
included && included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-included", className: "scroll-mt-20", children: [
|
|
14719
14899
|
/* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "text-xl font-bold text-foreground font-heading mb-4 flex items-center gap-2", children: [
|
|
@@ -14750,7 +14930,7 @@ function TripPage({
|
|
|
14750
14930
|
id: "trip-section-when-it-operates",
|
|
14751
14931
|
className: "scroll-mt-20 border-b border-border",
|
|
14752
14932
|
children: [
|
|
14753
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14933
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14754
14934
|
(sectionIcons == null ? void 0 : sectionIcons.whenItOperates) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.whenItOperates }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "h-5 w-5 text-primary" }),
|
|
14755
14935
|
(_f = labels == null ? void 0 : labels.whenItOperates) != null ? _f : "When this tour operates"
|
|
14756
14936
|
] }) }),
|
|
@@ -14765,7 +14945,7 @@ function TripPage({
|
|
|
14765
14945
|
id: "trip-section-accommodation",
|
|
14766
14946
|
className: "scroll-mt-20 border-b border-border",
|
|
14767
14947
|
children: [
|
|
14768
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14948
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14769
14949
|
(sectionIcons == null ? void 0 : sectionIcons.accommodation) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.accommodation }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BedDoubleIcon, { className: "h-5 w-5 text-primary" }),
|
|
14770
14950
|
(_g = labels == null ? void 0 : labels.accommodation) != null ? _g : "Accommodation"
|
|
14771
14951
|
] }) }),
|
|
@@ -14774,6 +14954,13 @@ function TripPage({
|
|
|
14774
14954
|
accommodationGallery && accommodationGallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(accommodation && "mt-6"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14775
14955
|
PhotoGallery,
|
|
14776
14956
|
{
|
|
14957
|
+
labels: {
|
|
14958
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
14959
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
14960
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
14961
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
14962
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
14963
|
+
},
|
|
14777
14964
|
photos: accommodationGallery,
|
|
14778
14965
|
variant: accommodationGalleryVariant,
|
|
14779
14966
|
initialVisible: 6
|
|
@@ -14790,7 +14977,7 @@ function TripPage({
|
|
|
14790
14977
|
id: "trip-section-food",
|
|
14791
14978
|
className: "scroll-mt-20 border-b border-border",
|
|
14792
14979
|
children: [
|
|
14793
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14980
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14794
14981
|
(sectionIcons == null ? void 0 : sectionIcons.food) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.food }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UtensilsIcon, { className: "h-5 w-5 text-primary" }),
|
|
14795
14982
|
(_h = labels == null ? void 0 : labels.food) != null ? _h : "Food"
|
|
14796
14983
|
] }) }),
|
|
@@ -14799,8 +14986,15 @@ function TripPage({
|
|
|
14799
14986
|
foodGallery && foodGallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(food && "mt-6"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14800
14987
|
PhotoGallery,
|
|
14801
14988
|
{
|
|
14989
|
+
labels: {
|
|
14990
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
14991
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
14992
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
14993
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
14994
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
14995
|
+
},
|
|
14802
14996
|
photos: foodGallery,
|
|
14803
|
-
variant:
|
|
14997
|
+
variant: foodGalleryVariant,
|
|
14804
14998
|
initialVisible: 6
|
|
14805
14999
|
}
|
|
14806
15000
|
) })
|
|
@@ -14815,18 +15009,21 @@ function TripPage({
|
|
|
14815
15009
|
id: "trip-section-meeting",
|
|
14816
15010
|
className: "scroll-mt-20 border-b border-border",
|
|
14817
15011
|
children: [
|
|
14818
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15012
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14819
15013
|
(sectionIcons == null ? void 0 : sectionIcons.meetingPoint) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.meetingPoint }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPinIcon, { className: "h-5 w-5 text-primary" }),
|
|
14820
15014
|
(_i = labels == null ? void 0 : labels.meetingPoint) != null ? _i : "Meeting point"
|
|
14821
15015
|
] }) }),
|
|
14822
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: "pb-6", children: meetingPoint ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-base text-foreground leading-relaxed space-y-3 [&_strong]:font-semibold [&_a]:text-primary [&_a]:underline", children: meetingPoint }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: meetingPoints.map((mp, i) =>
|
|
14823
|
-
|
|
14824
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
14825
|
-
|
|
14826
|
-
/* @__PURE__ */ jsxRuntime.
|
|
14827
|
-
|
|
14828
|
-
|
|
14829
|
-
|
|
15016
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionContent, { className: "pb-6", children: meetingPoint ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-base text-foreground leading-relaxed space-y-3 [&_strong]:font-semibold [&_a]:text-primary [&_a]:underline", children: meetingPoint }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: meetingPoints.map((mp, i) => {
|
|
15017
|
+
var _a2, _b2, _c2;
|
|
15018
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3 rounded-xl border border-border p-4", children: [
|
|
15019
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPinIcon, { className: "h-4 w-4 text-primary" }) }),
|
|
15020
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
15021
|
+
mp.type && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui uppercase tracking-wide mb-0.5", children: mp.type === "activity" ? (_a2 = labels == null ? void 0 : labels.meetingPointActivity) != null ? _a2 : "Activity location" : mp.type === "alternative" ? (_b2 = labels == null ? void 0 : labels.meetingPointAlternative) != null ? _b2 : "Alternative meeting point" : (_c2 = labels == null ? void 0 : labels.meetingPoint) != null ? _c2 : "Meeting point" }),
|
|
15022
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-bold text-foreground font-heading", children: mp.name }),
|
|
15023
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui mt-0.5", children: mp.address })
|
|
15024
|
+
] })
|
|
15025
|
+
] }, i);
|
|
15026
|
+
}) }) })
|
|
14830
15027
|
]
|
|
14831
15028
|
}
|
|
14832
15029
|
),
|
|
@@ -14837,7 +15034,7 @@ function TripPage({
|
|
|
14837
15034
|
id: "trip-section-how-to-get-there",
|
|
14838
15035
|
className: "scroll-mt-20 border-b border-border",
|
|
14839
15036
|
children: [
|
|
14840
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15037
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14841
15038
|
(sectionIcons == null ? void 0 : sectionIcons.howToGetThere) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.howToGetThere }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CompassIcon, { className: "h-5 w-5 text-primary" }),
|
|
14842
15039
|
(_j = labels == null ? void 0 : labels.howToGetThere) != null ? _j : "How to get there"
|
|
14843
15040
|
] }) }),
|
|
@@ -14852,7 +15049,7 @@ function TripPage({
|
|
|
14852
15049
|
id: "trip-section-weather",
|
|
14853
15050
|
className: "scroll-mt-20 border-b border-border",
|
|
14854
15051
|
children: [
|
|
14855
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15052
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14856
15053
|
(sectionIcons == null ? void 0 : sectionIcons.weather) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.weather }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SunIcon, { className: "h-5 w-5 text-primary" }),
|
|
14857
15054
|
(_k = labels == null ? void 0 : labels.weather) != null ? _k : "Weather"
|
|
14858
15055
|
] }) }),
|
|
@@ -14867,7 +15064,7 @@ function TripPage({
|
|
|
14867
15064
|
id: "trip-section-what-to-bring",
|
|
14868
15065
|
className: "scroll-mt-20 border-b border-border",
|
|
14869
15066
|
children: [
|
|
14870
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15067
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14871
15068
|
(sectionIcons == null ? void 0 : sectionIcons.whatToBring) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.whatToBring }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BackpackIcon, { className: "h-5 w-5 text-primary" }),
|
|
14872
15069
|
(_l = labels == null ? void 0 : labels.whatToBring) != null ? _l : "What to bring"
|
|
14873
15070
|
] }) }),
|
|
@@ -14882,7 +15079,7 @@ function TripPage({
|
|
|
14882
15079
|
id: "trip-section-optional-extras",
|
|
14883
15080
|
className: "scroll-mt-20 border-b border-border",
|
|
14884
15081
|
children: [
|
|
14885
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15082
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14886
15083
|
(sectionIcons == null ? void 0 : sectionIcons.optionalExtras) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.optionalExtras }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CherryIcon, { className: "h-5 w-5 text-primary" }),
|
|
14887
15084
|
(_m = labels == null ? void 0 : labels.optionalExtras) != null ? _m : "Optional extras"
|
|
14888
15085
|
] }) }),
|
|
@@ -14897,7 +15094,7 @@ function TripPage({
|
|
|
14897
15094
|
id: "trip-section-terms",
|
|
14898
15095
|
className: "scroll-mt-20 border-b border-border",
|
|
14899
15096
|
children: [
|
|
14900
|
-
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
15097
|
+
/* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { headingLevel: 2, className: "py-5 text-xl font-bold text-foreground font-heading hover:no-underline", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
|
|
14901
15098
|
(sectionIcons == null ? void 0 : sectionIcons.terms) ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary [&>svg]:h-5 [&>svg]:w-5", children: sectionIcons.terms }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ReceiptIcon, { className: "h-5 w-5 text-primary" }),
|
|
14902
15099
|
(_n = labels == null ? void 0 : labels.terms) != null ? _n : "Terms & conditions"
|
|
14903
15100
|
] }) }),
|
|
@@ -14909,7 +15106,7 @@ function TripPage({
|
|
|
14909
15106
|
}
|
|
14910
15107
|
),
|
|
14911
15108
|
faqs && faqs.length > 0 && (() => {
|
|
14912
|
-
var _a2;
|
|
15109
|
+
var _a2, _b2, _c2;
|
|
14913
15110
|
const visibleFaqs = faqsExpanded ? faqs : faqs.slice(0, faqInitialCount);
|
|
14914
15111
|
const hiddenCount = faqs.length - visibleFaqs.length;
|
|
14915
15112
|
return /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-faq", className: "scroll-mt-20", children: [
|
|
@@ -14931,10 +15128,11 @@ function TripPage({
|
|
|
14931
15128
|
),
|
|
14932
15129
|
children: faqsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
14933
15130
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
14934
|
-
"Show less"
|
|
15131
|
+
(_b2 = labels == null ? void 0 : labels.showLess) != null ? _b2 : "Show less"
|
|
14935
15132
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
14936
15133
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
14937
|
-
"See more
|
|
15134
|
+
(_c2 = labels == null ? void 0 : labels.seeMore) != null ? _c2 : "See more",
|
|
15135
|
+
" (",
|
|
14938
15136
|
hiddenCount,
|
|
14939
15137
|
")"
|
|
14940
15138
|
] })
|
|
@@ -14975,6 +15173,8 @@ function TripPage({
|
|
|
14975
15173
|
departureTimes,
|
|
14976
15174
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
14977
15175
|
bookLabel: bookLabel != null ? bookLabel : "Check availability",
|
|
15176
|
+
fromLabel,
|
|
15177
|
+
perPersonLabel,
|
|
14978
15178
|
variant: "card",
|
|
14979
15179
|
belowPrice: trustpilotMini ? /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) : void 0,
|
|
14980
15180
|
benefits,
|
|
@@ -15017,6 +15217,8 @@ function TripPage({
|
|
|
15017
15217
|
departureTimes,
|
|
15018
15218
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
15019
15219
|
bookLabel: bookLabel != null ? bookLabel : "Check availability",
|
|
15220
|
+
fromLabel,
|
|
15221
|
+
perPersonLabel,
|
|
15020
15222
|
variant: "card",
|
|
15021
15223
|
belowPrice: trustpilotMini ? /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) : void 0,
|
|
15022
15224
|
benefits,
|
|
@@ -15029,12 +15231,27 @@ function TripPage({
|
|
|
15029
15231
|
gallery && gallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("section", { ref: galleryRef, id: "trip-section-gallery", className: "scroll-mt-20", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15030
15232
|
PhotoGallery,
|
|
15031
15233
|
{
|
|
15234
|
+
labels: {
|
|
15235
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
15236
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
15237
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
15238
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
15239
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
15240
|
+
},
|
|
15032
15241
|
photos: gallery,
|
|
15033
15242
|
variant: "gridCompact",
|
|
15034
15243
|
initialVisible: 8
|
|
15035
15244
|
}
|
|
15036
15245
|
) }),
|
|
15037
|
-
gallery && gallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: pricingBarRef, className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { id: "trip-booking-form", className: "rounded-2xl border border-border bg-card p-8 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15246
|
+
gallery && gallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: pricingBarRef, className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { id: "trip-booking-form", className: "rounded-2xl border border-border bg-card p-8 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15247
|
+
BookingForm,
|
|
15248
|
+
{
|
|
15249
|
+
labels: bookingLabels,
|
|
15250
|
+
defaultValues: bookingDefaults,
|
|
15251
|
+
onSubmit: onBookingSubmit,
|
|
15252
|
+
loading: bookingLoading
|
|
15253
|
+
}
|
|
15254
|
+
) }) }),
|
|
15038
15255
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed bottom-0 inset-x-0 z-30 lg:hidden border-t border-border bg-background/95 backdrop-blur-sm px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15039
15256
|
PricingTrip,
|
|
15040
15257
|
{
|
|
@@ -15042,6 +15259,8 @@ function TripPage({
|
|
|
15042
15259
|
currency,
|
|
15043
15260
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
15044
15261
|
bookLabel: bookLabel != null ? bookLabel : "Book now",
|
|
15262
|
+
fromLabel,
|
|
15263
|
+
perPersonLabel,
|
|
15045
15264
|
variant: "compact",
|
|
15046
15265
|
sharp: true,
|
|
15047
15266
|
priceInfo,
|
|
@@ -15075,6 +15294,7 @@ function CategoryPage2({
|
|
|
15075
15294
|
trustpilotMini,
|
|
15076
15295
|
breadcrumb,
|
|
15077
15296
|
siteHeader,
|
|
15297
|
+
heroRightSlot,
|
|
15078
15298
|
popularTours,
|
|
15079
15299
|
popularToursTitle = "More adventures calling your name",
|
|
15080
15300
|
popularToursEyebrow = "Popular tours",
|
|
@@ -15085,6 +15305,7 @@ function CategoryPage2({
|
|
|
15085
15305
|
sortOptions,
|
|
15086
15306
|
defaultSort,
|
|
15087
15307
|
tripsInitialCount = 15,
|
|
15308
|
+
tripListingSlot,
|
|
15088
15309
|
trustpilot,
|
|
15089
15310
|
reviewsTitle = "Don't just take our word for it",
|
|
15090
15311
|
reviewsSubtitle,
|
|
@@ -15101,6 +15322,12 @@ function CategoryPage2({
|
|
|
15101
15322
|
faqInitialCount = 5,
|
|
15102
15323
|
gallery,
|
|
15103
15324
|
galleryTitle,
|
|
15325
|
+
loadMoreLabel,
|
|
15326
|
+
showLessLabel,
|
|
15327
|
+
seeMoreLabel,
|
|
15328
|
+
viewAllPostsLabel,
|
|
15329
|
+
cardLabels,
|
|
15330
|
+
filterLabels,
|
|
15104
15331
|
className
|
|
15105
15332
|
}) {
|
|
15106
15333
|
var _a;
|
|
@@ -15257,7 +15484,8 @@ function CategoryPage2({
|
|
|
15257
15484
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl sm:text-5xl font-bold text-white font-heading leading-tight max-w-3xl", children: title }),
|
|
15258
15485
|
intro && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-base sm:text-lg text-white/90 leading-relaxed max-w-2xl [&_strong]:font-semibold [&_a]:underline", children: intro }),
|
|
15259
15486
|
trustpilotMini && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 max-w-sm", children: /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) })
|
|
15260
|
-
] })
|
|
15487
|
+
] }),
|
|
15488
|
+
heroRightSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-x-0 bottom-5 z-20 sm:bottom-6", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex max-w-6xl justify-end px-6 sm:px-8", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-auto", children: heroRightSlot }) }) })
|
|
15261
15489
|
]
|
|
15262
15490
|
}
|
|
15263
15491
|
),
|
|
@@ -15275,6 +15503,7 @@ function CategoryPage2({
|
|
|
15275
15503
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15276
15504
|
TripCard,
|
|
15277
15505
|
__spreadProps(__spreadValues({}, cardProps), {
|
|
15506
|
+
labels: cardLabels,
|
|
15278
15507
|
variant: "overlay",
|
|
15279
15508
|
size: (_b = cardProps.size) != null ? _b : "md"
|
|
15280
15509
|
}),
|
|
@@ -15284,63 +15513,68 @@ function CategoryPage2({
|
|
|
15284
15513
|
] }),
|
|
15285
15514
|
/* @__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: [
|
|
15286
15515
|
(tripsTitle || tripsEyebrow) && /* @__PURE__ */ jsxRuntime.jsx(SectionHeading2, { eyebrow: tripsEyebrow, title: tripsTitle != null ? tripsTitle : "" }),
|
|
15287
|
-
|
|
15288
|
-
|
|
15289
|
-
|
|
15290
|
-
|
|
15291
|
-
|
|
15292
|
-
|
|
15293
|
-
|
|
15294
|
-
|
|
15295
|
-
|
|
15296
|
-
|
|
15297
|
-
|
|
15298
|
-
|
|
15299
|
-
|
|
15300
|
-
|
|
15301
|
-
|
|
15302
|
-
" ",
|
|
15303
|
-
|
|
15304
|
-
|
|
15305
|
-
|
|
15306
|
-
|
|
15307
|
-
|
|
15308
|
-
|
|
15309
|
-
|
|
15310
|
-
|
|
15311
|
-
|
|
15312
|
-
|
|
15313
|
-
|
|
15314
|
-
|
|
15315
|
-
|
|
15316
|
-
|
|
15317
|
-
|
|
15318
|
-
|
|
15319
|
-
|
|
15320
|
-
|
|
15321
|
-
|
|
15322
|
-
|
|
15323
|
-
|
|
15324
|
-
|
|
15325
|
-
|
|
15326
|
-
|
|
15327
|
-
|
|
15328
|
-
|
|
15329
|
-
|
|
15330
|
-
|
|
15331
|
-
|
|
15332
|
-
|
|
15333
|
-
|
|
15334
|
-
|
|
15335
|
-
|
|
15336
|
-
|
|
15337
|
-
|
|
15338
|
-
|
|
15339
|
-
|
|
15340
|
-
|
|
15341
|
-
|
|
15342
|
-
|
|
15343
|
-
|
|
15516
|
+
tripListingSlot != null ? tripListingSlot : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15517
|
+
filterGroups && filterGroups.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15518
|
+
FilterPanel,
|
|
15519
|
+
{
|
|
15520
|
+
variant: "horizontal",
|
|
15521
|
+
labels: filterLabels,
|
|
15522
|
+
groups: filterGroups,
|
|
15523
|
+
value: filterValue,
|
|
15524
|
+
onChange: setFilterValue,
|
|
15525
|
+
onClearAll: () => setFilterValue({}),
|
|
15526
|
+
sortOptions,
|
|
15527
|
+
sort,
|
|
15528
|
+
onSortChange: setSort
|
|
15529
|
+
}
|
|
15530
|
+
) }),
|
|
15531
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground font-ui mb-5", children: [
|
|
15532
|
+
sortedTrips.length,
|
|
15533
|
+
" ",
|
|
15534
|
+
sortedTrips.length === 1 ? "trip" : "trips",
|
|
15535
|
+
" found"
|
|
15536
|
+
] }),
|
|
15537
|
+
(() => {
|
|
15538
|
+
const visibleTrips = tripsExpanded ? sortedTrips : sortedTrips.slice(0, tripsInitialCount);
|
|
15539
|
+
const hiddenCount = sortedTrips.length - visibleTrips.length;
|
|
15540
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15541
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-x-6 gap-y-8 lg:gap-x-[35px] lg:gap-y-[38px]", children: visibleTrips.map((trip, i) => {
|
|
15542
|
+
const _a2 = trip, { featured: _featured, filterTags: _filterTags, priceValue: _priceValue } = _a2, cardProps = __objRest(_a2, ["featured", "filterTags", "priceValue"]);
|
|
15543
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15544
|
+
TripCard,
|
|
15545
|
+
__spreadProps(__spreadValues({}, cardProps), {
|
|
15546
|
+
labels: cardLabels,
|
|
15547
|
+
className: cn("w-full h-auto", cardProps.className)
|
|
15548
|
+
}),
|
|
15549
|
+
i
|
|
15550
|
+
);
|
|
15551
|
+
}) }),
|
|
15552
|
+
sortedTrips.length > tripsInitialCount && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15553
|
+
"button",
|
|
15554
|
+
{
|
|
15555
|
+
type: "button",
|
|
15556
|
+
onClick: () => setTripsExpanded((v) => !v),
|
|
15557
|
+
className: cn(
|
|
15558
|
+
"inline-flex items-center gap-2 rounded-full border border-border bg-background px-5 py-2.5",
|
|
15559
|
+
"text-sm font-semibold text-foreground shadow-sm",
|
|
15560
|
+
"hover:bg-muted transition-colors duration-150",
|
|
15561
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
15562
|
+
),
|
|
15563
|
+
children: tripsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15564
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15565
|
+
showLessLabel != null ? showLessLabel : "Show less"
|
|
15566
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15567
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15568
|
+
loadMoreLabel != null ? loadMoreLabel : "Load more",
|
|
15569
|
+
" (",
|
|
15570
|
+
hiddenCount,
|
|
15571
|
+
")"
|
|
15572
|
+
] })
|
|
15573
|
+
}
|
|
15574
|
+
) })
|
|
15575
|
+
] });
|
|
15576
|
+
})()
|
|
15577
|
+
] })
|
|
15344
15578
|
] }),
|
|
15345
15579
|
trustpilot && /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-12 border-t border-border", children: [
|
|
15346
15580
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl sm:text-3xl font-bold text-foreground font-heading mb-2", children: reviewsTitle }),
|
|
@@ -15377,7 +15611,7 @@ function CategoryPage2({
|
|
|
15377
15611
|
href: travelGuideHref != null ? travelGuideHref : blogPostsViewAllHref,
|
|
15378
15612
|
className: "inline-flex items-center gap-1.5 text-sm font-semibold text-primary hover:underline",
|
|
15379
15613
|
children: [
|
|
15380
|
-
travelGuideHref ? travelGuideLabel : "View all posts",
|
|
15614
|
+
travelGuideHref ? travelGuideLabel : viewAllPostsLabel != null ? viewAllPostsLabel : "View all posts",
|
|
15381
15615
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4" })
|
|
15382
15616
|
]
|
|
15383
15617
|
}
|
|
@@ -15406,10 +15640,11 @@ function CategoryPage2({
|
|
|
15406
15640
|
),
|
|
15407
15641
|
children: faqsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15408
15642
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15409
|
-
"Show less"
|
|
15643
|
+
showLessLabel != null ? showLessLabel : "Show less"
|
|
15410
15644
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15411
15645
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15412
|
-
"See more
|
|
15646
|
+
seeMoreLabel != null ? seeMoreLabel : "See more",
|
|
15647
|
+
" (",
|
|
15413
15648
|
hiddenCount,
|
|
15414
15649
|
")"
|
|
15415
15650
|
] })
|
|
@@ -15477,6 +15712,7 @@ function ActivityCard({
|
|
|
15477
15712
|
{
|
|
15478
15713
|
src: image,
|
|
15479
15714
|
alt: imageAlt,
|
|
15715
|
+
title: imageAlt || void 0,
|
|
15480
15716
|
className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
15481
15717
|
}
|
|
15482
15718
|
),
|
|
@@ -17178,13 +17414,1410 @@ function StickyBookingCard({
|
|
|
17178
17414
|
}
|
|
17179
17415
|
);
|
|
17180
17416
|
}
|
|
17417
|
+
var DEFAULT_TRUSTPILOT = {
|
|
17418
|
+
businessUnitId: "6171e6a56fc555750dd81ae7",
|
|
17419
|
+
templateId: "5419b732fbfb950b10de65e5",
|
|
17420
|
+
locale: "en-US",
|
|
17421
|
+
styleHeight: "24px",
|
|
17422
|
+
styleWidth: "100%",
|
|
17423
|
+
token: "d3580e48-fedc-4b14-b705-172180cf241d",
|
|
17424
|
+
theme: "dark",
|
|
17425
|
+
fallbackHref: "https://www.trustpilot.com/review/planetaexo.com",
|
|
17426
|
+
fallbackLabel: "Excellent"
|
|
17427
|
+
};
|
|
17428
|
+
function RatingStars({ stars = 5 }) {
|
|
17429
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", "aria-hidden": true, children: Array.from({ length: 5 }).map((_, i) => {
|
|
17430
|
+
const filled = i + 1 <= Math.round(stars);
|
|
17431
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17432
|
+
"span",
|
|
17433
|
+
{
|
|
17434
|
+
className: cn(
|
|
17435
|
+
"flex h-5 w-5 items-center justify-center rounded-[3px]",
|
|
17436
|
+
filled ? "bg-primary" : "bg-white/30"
|
|
17437
|
+
),
|
|
17438
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.StarIcon, { className: "h-3 w-3 fill-white text-white" })
|
|
17439
|
+
},
|
|
17440
|
+
i
|
|
17441
|
+
);
|
|
17442
|
+
}) });
|
|
17443
|
+
}
|
|
17444
|
+
function Rating({ label, stars = 5, provider, href }) {
|
|
17445
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17446
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-ui font-bold text-white", children: label }),
|
|
17447
|
+
/* @__PURE__ */ jsxRuntime.jsx(RatingStars, { stars }),
|
|
17448
|
+
provider && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-sm font-ui font-bold text-white", children: [
|
|
17449
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.StarIcon, { className: "h-4 w-4 fill-primary text-primary" }),
|
|
17450
|
+
provider
|
|
17451
|
+
] })
|
|
17452
|
+
] });
|
|
17453
|
+
if (href) {
|
|
17454
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17455
|
+
"a",
|
|
17456
|
+
{
|
|
17457
|
+
href,
|
|
17458
|
+
target: "_blank",
|
|
17459
|
+
rel: "noreferrer noopener",
|
|
17460
|
+
"aria-label": `${label != null ? label : ""} ${stars} out of 5 \u2014 ${provider != null ? provider : "reviews"}`.trim(),
|
|
17461
|
+
className: "inline-flex items-center gap-2.5 transition-opacity hover:opacity-90",
|
|
17462
|
+
children: content
|
|
17463
|
+
}
|
|
17464
|
+
);
|
|
17465
|
+
}
|
|
17466
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex items-center gap-2.5", children: content });
|
|
17467
|
+
}
|
|
17468
|
+
function HomeHeader({
|
|
17469
|
+
images,
|
|
17470
|
+
videoUrl,
|
|
17471
|
+
eyebrow,
|
|
17472
|
+
title,
|
|
17473
|
+
subtitle,
|
|
17474
|
+
cta,
|
|
17475
|
+
trustpilot,
|
|
17476
|
+
rating,
|
|
17477
|
+
pressLogos,
|
|
17478
|
+
pressLabel = "In the press",
|
|
17479
|
+
pressLabelHref,
|
|
17480
|
+
siteHeader,
|
|
17481
|
+
align = "center",
|
|
17482
|
+
className
|
|
17483
|
+
}) {
|
|
17484
|
+
var _a;
|
|
17485
|
+
const [heroIndex, setHeroIndex] = React32__namespace.useState(0);
|
|
17486
|
+
const [videoReady, setVideoReady] = React32__namespace.useState(false);
|
|
17487
|
+
const videoRef = React32__namespace.useRef(null);
|
|
17488
|
+
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
17489
|
+
const validImages = React32__namespace.useMemo(
|
|
17490
|
+
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
17491
|
+
[images]
|
|
17492
|
+
);
|
|
17493
|
+
const hasHeroImage = validImages.length > 0;
|
|
17494
|
+
const heroSrc = (i) => {
|
|
17495
|
+
var _a2;
|
|
17496
|
+
return (_a2 = validImages[i]) != null ? _a2 : "";
|
|
17497
|
+
};
|
|
17498
|
+
const safeIndex = Math.min(heroIndex, Math.max(0, validImages.length - 1));
|
|
17499
|
+
const currentSrc = heroSrc(safeIndex);
|
|
17500
|
+
const showCarousel = !videoUrl && validImages.length > 1;
|
|
17501
|
+
const tpConfig = trustpilot ? typeof trustpilot === "object" ? __spreadValues(__spreadValues({}, DEFAULT_TRUSTPILOT), trustpilot) : DEFAULT_TRUSTPILOT : null;
|
|
17502
|
+
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
17503
|
+
React32__namespace.useEffect(() => {
|
|
17504
|
+
if (!videoUrl) return;
|
|
17505
|
+
const el = videoRef.current;
|
|
17506
|
+
if (!el) return;
|
|
17507
|
+
const observer = new IntersectionObserver(
|
|
17508
|
+
([entry]) => {
|
|
17509
|
+
if (entry.isIntersecting) {
|
|
17510
|
+
el.play().catch(() => {
|
|
17511
|
+
});
|
|
17512
|
+
} else {
|
|
17513
|
+
el.pause();
|
|
17514
|
+
}
|
|
17515
|
+
},
|
|
17516
|
+
{ threshold: 0.1 }
|
|
17517
|
+
);
|
|
17518
|
+
observer.observe(el);
|
|
17519
|
+
return () => observer.disconnect();
|
|
17520
|
+
}, [videoUrl]);
|
|
17521
|
+
const isCenter = align === "center";
|
|
17522
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17523
|
+
"section",
|
|
17524
|
+
{
|
|
17525
|
+
className: cn(
|
|
17526
|
+
"relative w-full overflow-hidden",
|
|
17527
|
+
"h-screen min-h-[640px]",
|
|
17528
|
+
hasHeroImage ? "bg-muted" : "bg-zinc-900",
|
|
17529
|
+
className
|
|
17530
|
+
),
|
|
17531
|
+
"data-home-header-align": align,
|
|
17532
|
+
children: [
|
|
17533
|
+
!videoUrl && !hasHeroImage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17534
|
+
"div",
|
|
17535
|
+
{
|
|
17536
|
+
className: "absolute inset-0 bg-gradient-to-br from-zinc-900 via-zinc-800 to-zinc-950",
|
|
17537
|
+
"aria-hidden": true
|
|
17538
|
+
}
|
|
17539
|
+
),
|
|
17540
|
+
videoUrl ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17541
|
+
hasHeroImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17542
|
+
Picture,
|
|
17543
|
+
{
|
|
17544
|
+
src: validImages[0],
|
|
17545
|
+
alt: "",
|
|
17546
|
+
"aria-hidden": true,
|
|
17547
|
+
fetchPriority: "high",
|
|
17548
|
+
eager: true,
|
|
17549
|
+
className: cn(
|
|
17550
|
+
"absolute inset-0 h-full w-full object-cover transition-opacity duration-700",
|
|
17551
|
+
videoReady ? "opacity-0 pointer-events-none" : "opacity-100"
|
|
17552
|
+
)
|
|
17553
|
+
}
|
|
17554
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17555
|
+
"div",
|
|
17556
|
+
{
|
|
17557
|
+
className: "absolute inset-0 bg-gradient-to-br from-zinc-900 via-zinc-800 to-zinc-950 transition-opacity duration-700",
|
|
17558
|
+
"aria-hidden": true
|
|
17559
|
+
}
|
|
17560
|
+
),
|
|
17561
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17562
|
+
"video",
|
|
17563
|
+
{
|
|
17564
|
+
ref: videoRef,
|
|
17565
|
+
src: isHls ? void 0 : videoUrl,
|
|
17566
|
+
autoPlay: true,
|
|
17567
|
+
muted: true,
|
|
17568
|
+
loop: true,
|
|
17569
|
+
playsInline: true,
|
|
17570
|
+
preload: "auto",
|
|
17571
|
+
poster: hasHeroImage ? validImages[0] : void 0,
|
|
17572
|
+
onCanPlay: () => setVideoReady(true),
|
|
17573
|
+
className: cn(
|
|
17574
|
+
"absolute inset-0 h-full w-full object-cover transition-opacity duration-700",
|
|
17575
|
+
videoReady ? "opacity-100" : "opacity-0"
|
|
17576
|
+
)
|
|
17577
|
+
}
|
|
17578
|
+
)
|
|
17579
|
+
] }) : hasHeroImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17580
|
+
Picture,
|
|
17581
|
+
{
|
|
17582
|
+
src: currentSrc,
|
|
17583
|
+
alt: title,
|
|
17584
|
+
fetchPriority: safeIndex === 0 ? "high" : "auto",
|
|
17585
|
+
eager: safeIndex === 0,
|
|
17586
|
+
className: "absolute inset-0 h-full w-full object-cover transition-opacity duration-700"
|
|
17587
|
+
}
|
|
17588
|
+
) : null,
|
|
17589
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/30", "aria-hidden": true }),
|
|
17590
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17591
|
+
"div",
|
|
17592
|
+
{
|
|
17593
|
+
className: "absolute inset-0 bg-gradient-to-t from-black/70 via-black/10 to-black/30",
|
|
17594
|
+
"aria-hidden": true
|
|
17595
|
+
}
|
|
17596
|
+
),
|
|
17597
|
+
siteHeader && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17598
|
+
SiteHeader,
|
|
17599
|
+
__spreadProps(__spreadValues({}, Array.isArray(siteHeader) ? { links: siteHeader } : typeof siteHeader === "object" ? siteHeader : {}), {
|
|
17600
|
+
position: "overlay"
|
|
17601
|
+
})
|
|
17602
|
+
),
|
|
17603
|
+
showCarousel && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17604
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17605
|
+
"button",
|
|
17606
|
+
{
|
|
17607
|
+
type: "button",
|
|
17608
|
+
onClick: () => setHeroIndex(
|
|
17609
|
+
(i) => (i - 1 + validImages.length) % validImages.length
|
|
17610
|
+
),
|
|
17611
|
+
className: "absolute left-4 top-1/2 z-20 -translate-y-1/2 flex h-10 w-10 items-center justify-center rounded-full bg-black/30 text-white backdrop-blur-sm hover:bg-black/50 transition-colors",
|
|
17612
|
+
"aria-label": "Previous image",
|
|
17613
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
17614
|
+
}
|
|
17615
|
+
),
|
|
17616
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17617
|
+
"button",
|
|
17618
|
+
{
|
|
17619
|
+
type: "button",
|
|
17620
|
+
onClick: () => setHeroIndex((i) => (i + 1) % validImages.length),
|
|
17621
|
+
className: "absolute right-4 top-1/2 z-20 -translate-y-1/2 flex h-10 w-10 items-center justify-center rounded-full bg-black/30 text-white backdrop-blur-sm hover:bg-black/50 transition-colors",
|
|
17622
|
+
"aria-label": "Next image",
|
|
17623
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
17624
|
+
}
|
|
17625
|
+
)
|
|
17626
|
+
] }),
|
|
17627
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
17628
|
+
"div",
|
|
17629
|
+
{
|
|
17630
|
+
className: cn(
|
|
17631
|
+
"absolute inset-0 z-10 flex flex-col justify-center",
|
|
17632
|
+
"mx-auto w-full max-w-6xl px-6 sm:px-8",
|
|
17633
|
+
"pt-[72px]",
|
|
17634
|
+
// clear the overlay header
|
|
17635
|
+
pressLogos && pressLogos.length > 0 ? "pb-28" : "pb-16",
|
|
17636
|
+
isCenter ? "items-center text-center" : "items-start text-left"
|
|
17637
|
+
),
|
|
17638
|
+
children: [
|
|
17639
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs sm:text-sm font-ui font-bold uppercase tracking-[0.2em] text-primary-400", children: eyebrow }),
|
|
17640
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17641
|
+
"h1",
|
|
17642
|
+
{
|
|
17643
|
+
className: cn(
|
|
17644
|
+
"font-heading font-black uppercase text-white leading-[0.95]",
|
|
17645
|
+
"text-5xl sm:text-6xl lg:text-7xl",
|
|
17646
|
+
isCenter ? "max-w-4xl" : "max-w-3xl"
|
|
17647
|
+
),
|
|
17648
|
+
children: title
|
|
17649
|
+
}
|
|
17650
|
+
),
|
|
17651
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17652
|
+
"p",
|
|
17653
|
+
{
|
|
17654
|
+
className: cn(
|
|
17655
|
+
"mt-5 text-lg sm:text-xl font-sans text-white/90",
|
|
17656
|
+
isCenter ? "max-w-2xl" : "max-w-xl"
|
|
17657
|
+
),
|
|
17658
|
+
children: subtitle
|
|
17659
|
+
}
|
|
17660
|
+
),
|
|
17661
|
+
cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8", children: cta.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17662
|
+
"a",
|
|
17663
|
+
{
|
|
17664
|
+
href: cta.href,
|
|
17665
|
+
onClick: cta.onClick,
|
|
17666
|
+
className: buttonVariants({ size: "lg" }),
|
|
17667
|
+
children: cta.label
|
|
17668
|
+
}
|
|
17669
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "lg", onClick: cta.onClick, children: cta.label }) }),
|
|
17670
|
+
tpConfig ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17671
|
+
"div",
|
|
17672
|
+
{
|
|
17673
|
+
className: cn(
|
|
17674
|
+
"home-trustpilot relative mt-8",
|
|
17675
|
+
// Wide enough for the Micro Star to show the full "Excellent
|
|
17676
|
+
// ★★★★★ Trustpilot" lockup — at 260px the Trustpilot wordmark
|
|
17677
|
+
// was clipped.
|
|
17678
|
+
isCenter && "w-full max-w-[340px]"
|
|
17679
|
+
),
|
|
17680
|
+
children: [
|
|
17681
|
+
/* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: tpConfig }),
|
|
17682
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17683
|
+
"a",
|
|
17684
|
+
{
|
|
17685
|
+
href: (_a = tpConfig.fallbackHref) != null ? _a : "https://www.trustpilot.com/review/planetaexo.com",
|
|
17686
|
+
target: "_blank",
|
|
17687
|
+
rel: "noopener noreferrer",
|
|
17688
|
+
"aria-label": "Read our reviews on Trustpilot",
|
|
17689
|
+
className: "absolute inset-0 z-10"
|
|
17690
|
+
}
|
|
17691
|
+
)
|
|
17692
|
+
]
|
|
17693
|
+
}
|
|
17694
|
+
) : rating ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8", children: /* @__PURE__ */ jsxRuntime.jsx(Rating, __spreadValues({}, rating)) }) : null
|
|
17695
|
+
]
|
|
17696
|
+
}
|
|
17697
|
+
),
|
|
17698
|
+
pressLogos && pressLogos.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-x-0 bottom-0 z-10 pb-7", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex w-full max-w-6xl flex-wrap items-center justify-center gap-x-7 gap-y-3 px-6 sm:px-8", children: [
|
|
17699
|
+
pressLabelHref ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17700
|
+
"a",
|
|
17701
|
+
{
|
|
17702
|
+
href: pressLabelHref,
|
|
17703
|
+
target: "_blank",
|
|
17704
|
+
rel: "noopener noreferrer",
|
|
17705
|
+
className: "text-[10px] font-ui font-bold uppercase tracking-[0.25em] leading-tight text-white/70 transition-colors hover:text-white",
|
|
17706
|
+
children: pressLabel
|
|
17707
|
+
}
|
|
17708
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-ui font-bold uppercase tracking-[0.25em] leading-tight text-white/70", children: pressLabel }),
|
|
17709
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-nowrap items-center justify-center gap-x-7", children: [
|
|
17710
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden h-5 w-px bg-white/25 sm:block", "aria-hidden": true }),
|
|
17711
|
+
pressLogos.map((logo, i) => {
|
|
17712
|
+
var _a2, _b, _c, _d;
|
|
17713
|
+
const content = logo.src ? (
|
|
17714
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
17715
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17716
|
+
"img",
|
|
17717
|
+
{
|
|
17718
|
+
src: logo.src,
|
|
17719
|
+
alt: (_b = (_a2 = logo.alt) != null ? _a2 : logo.label) != null ? _b : "Press logo",
|
|
17720
|
+
className: "h-12 w-12 shrink-0 select-none object-contain",
|
|
17721
|
+
draggable: false
|
|
17722
|
+
}
|
|
17723
|
+
)
|
|
17724
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-base font-bold uppercase tracking-wide", children: logo.label });
|
|
17725
|
+
return logo.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17726
|
+
"a",
|
|
17727
|
+
{
|
|
17728
|
+
href: logo.href,
|
|
17729
|
+
target: "_blank",
|
|
17730
|
+
rel: "noopener noreferrer",
|
|
17731
|
+
"aria-label": (_d = (_c = logo.alt) != null ? _c : logo.label) != null ? _d : "Press article",
|
|
17732
|
+
className: "shrink-0 text-white/80 opacity-100 transition-opacity hover:opacity-100 hover:text-white focus-visible:opacity-100 [&>img]:opacity-80 [&>img]:hover:opacity-100 [&>img]:transition-opacity",
|
|
17733
|
+
children: content
|
|
17734
|
+
},
|
|
17735
|
+
i
|
|
17736
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17737
|
+
"span",
|
|
17738
|
+
{
|
|
17739
|
+
className: "shrink-0 text-white/80 [&>img]:opacity-80",
|
|
17740
|
+
children: content
|
|
17741
|
+
},
|
|
17742
|
+
i
|
|
17743
|
+
);
|
|
17744
|
+
})
|
|
17745
|
+
] })
|
|
17746
|
+
] }) })
|
|
17747
|
+
]
|
|
17748
|
+
}
|
|
17749
|
+
);
|
|
17750
|
+
}
|
|
17751
|
+
var ACCENT_PILL = "bg-primary text-primary-foreground";
|
|
17752
|
+
var ACCENT_BUTTON = "bg-primary text-primary-foreground hover:bg-primary/90";
|
|
17753
|
+
var THEME = {
|
|
17754
|
+
dark: {
|
|
17755
|
+
section: "bg-neutral-950",
|
|
17756
|
+
heading: "text-white",
|
|
17757
|
+
body: "text-white/60",
|
|
17758
|
+
tabTrack: "bg-white/5 border-white/10",
|
|
17759
|
+
tabActive: ACCENT_PILL,
|
|
17760
|
+
tabIdle: "text-white/60 hover:text-white",
|
|
17761
|
+
cardRing: "focus-visible:ring-white/70 focus-visible:ring-offset-neutral-950",
|
|
17762
|
+
divider: "border-white/15"
|
|
17763
|
+
},
|
|
17764
|
+
light: {
|
|
17765
|
+
/* Explicit light colours (not mode-aware tokens) so this variant stays a
|
|
17766
|
+
light surface even when the app is in dark mode. */
|
|
17767
|
+
section: "bg-white",
|
|
17768
|
+
heading: "text-neutral-900",
|
|
17769
|
+
body: "text-neutral-500",
|
|
17770
|
+
tabTrack: "bg-neutral-100 border-black/10",
|
|
17771
|
+
tabActive: ACCENT_PILL,
|
|
17772
|
+
tabIdle: "text-neutral-500 hover:text-neutral-900",
|
|
17773
|
+
cardRing: "focus-visible:ring-neutral-900/40 focus-visible:ring-offset-white",
|
|
17774
|
+
divider: "border-black/10"
|
|
17775
|
+
}
|
|
17776
|
+
};
|
|
17777
|
+
var BENTO_SPAN = {
|
|
17778
|
+
featured: "col-span-2 row-span-2",
|
|
17779
|
+
tall: "col-span-2 sm:col-span-1 row-span-2",
|
|
17780
|
+
wide: "col-span-2",
|
|
17781
|
+
normal: "col-span-2 sm:col-span-1"
|
|
17782
|
+
};
|
|
17783
|
+
function BentoTile({
|
|
17784
|
+
card,
|
|
17785
|
+
ring
|
|
17786
|
+
}) {
|
|
17787
|
+
var _a, _b, _c;
|
|
17788
|
+
const isFeatured = card.size === "featured";
|
|
17789
|
+
const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17790
|
+
card.image ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17791
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17792
|
+
Picture,
|
|
17793
|
+
{
|
|
17794
|
+
src: card.image,
|
|
17795
|
+
alt: (_a = card.imageAlt) != null ? _a : card.label,
|
|
17796
|
+
loading: "lazy",
|
|
17797
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-700 group-hover:scale-105"
|
|
17798
|
+
}
|
|
17799
|
+
),
|
|
17800
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/85 via-black/15 to-transparent" })
|
|
17801
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17802
|
+
"div",
|
|
17803
|
+
{
|
|
17804
|
+
className: cn(
|
|
17805
|
+
"absolute inset-0 bg-gradient-to-br",
|
|
17806
|
+
(_b = card.gradient) != null ? _b : "from-primary-800 to-primary-900"
|
|
17807
|
+
)
|
|
17808
|
+
}
|
|
17809
|
+
),
|
|
17810
|
+
card.tripCount && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-3 top-3 z-10 rounded-full bg-white/90 px-2.5 py-1 text-[11px] font-ui font-bold uppercase tracking-wide text-neutral-900", children: card.tripCount }),
|
|
17811
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-x-0 bottom-0 z-10 p-5", children: [
|
|
17812
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17813
|
+
"h3",
|
|
17814
|
+
{
|
|
17815
|
+
className: cn(
|
|
17816
|
+
"font-heading font-bold uppercase leading-tight tracking-wide text-white",
|
|
17817
|
+
isFeatured ? "text-2xl sm:text-3xl" : "text-lg sm:text-xl"
|
|
17818
|
+
),
|
|
17819
|
+
children: card.label
|
|
17820
|
+
}
|
|
17821
|
+
),
|
|
17822
|
+
card.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-h-0 overflow-hidden text-sm leading-snug text-white/85 opacity-0 transition-all duration-300 group-hover:mt-2 group-hover:max-h-32 group-hover:opacity-100", children: card.description }),
|
|
17823
|
+
card.ctaLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-2 inline-flex items-center gap-1 text-sm font-ui font-bold text-primary-400", children: [
|
|
17824
|
+
card.ctaLabel,
|
|
17825
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
17826
|
+
] })
|
|
17827
|
+
] })
|
|
17828
|
+
] });
|
|
17829
|
+
const tileClass = cn(
|
|
17830
|
+
"group relative overflow-hidden rounded-2xl bg-muted shadow-sm",
|
|
17831
|
+
BENTO_SPAN[(_c = card.size) != null ? _c : "normal"]
|
|
17832
|
+
);
|
|
17833
|
+
return card.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17834
|
+
"a",
|
|
17835
|
+
{
|
|
17836
|
+
href: card.href,
|
|
17837
|
+
className: cn(
|
|
17838
|
+
tileClass,
|
|
17839
|
+
"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
17840
|
+
ring
|
|
17841
|
+
),
|
|
17842
|
+
children: inner
|
|
17843
|
+
}
|
|
17844
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: tileClass, children: inner });
|
|
17845
|
+
}
|
|
17846
|
+
function AdventureExplorer({
|
|
17847
|
+
tabs,
|
|
17848
|
+
eyebrow,
|
|
17849
|
+
heading,
|
|
17850
|
+
subheading,
|
|
17851
|
+
defaultTabId,
|
|
17852
|
+
viewAllLabel = "View All Adventures",
|
|
17853
|
+
viewAllHref,
|
|
17854
|
+
theme = "dark",
|
|
17855
|
+
layout = "carousel",
|
|
17856
|
+
bentoLimit,
|
|
17857
|
+
moreLabel = "More wild places",
|
|
17858
|
+
className
|
|
17859
|
+
}) {
|
|
17860
|
+
var _a, _b, _c, _d, _e;
|
|
17861
|
+
const [activeId, setActiveId] = React32__namespace.useState(
|
|
17862
|
+
defaultTabId != null ? defaultTabId : (_a = tabs[0]) == null ? void 0 : _a.id
|
|
17863
|
+
);
|
|
17864
|
+
const active = (_b = tabs.find((t2) => t2.id === activeId)) != null ? _b : tabs[0];
|
|
17865
|
+
const t = THEME[theme];
|
|
17866
|
+
const ctaHref = (_d = (_c = active == null ? void 0 : active.viewAllHref) != null ? _c : viewAllHref) != null ? _d : "#";
|
|
17867
|
+
const showCta = viewAllLabel.length > 0;
|
|
17868
|
+
const hasHeading = !!(eyebrow || heading || subheading);
|
|
17869
|
+
const cards = (_e = active == null ? void 0 : active.cards) != null ? _e : [];
|
|
17870
|
+
const limited = layout === "bento" && bentoLimit != null && cards.length > bentoLimit;
|
|
17871
|
+
const gridCards = limited ? cards.slice(0, bentoLimit) : cards;
|
|
17872
|
+
const moreCards = limited ? cards.slice(bentoLimit) : [];
|
|
17873
|
+
const showHeadCta = showCta && !limited;
|
|
17874
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn("w-full py-10 sm:py-16", t.section, className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
17875
|
+
hasHeading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8 flex flex-wrap items-end justify-between gap-6", children: [
|
|
17876
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
17877
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
17878
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17879
|
+
"h2",
|
|
17880
|
+
{
|
|
17881
|
+
className: cn(
|
|
17882
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
17883
|
+
t.heading
|
|
17884
|
+
),
|
|
17885
|
+
children: heading
|
|
17886
|
+
}
|
|
17887
|
+
),
|
|
17888
|
+
subheading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 text-base", t.body), children: subheading })
|
|
17889
|
+
] }),
|
|
17890
|
+
showHeadCta && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17891
|
+
"a",
|
|
17892
|
+
{
|
|
17893
|
+
href: ctaHref,
|
|
17894
|
+
className: "group inline-flex shrink-0 items-center gap-1.5 font-ui text-sm font-bold text-primary transition-colors hover:text-primary-800",
|
|
17895
|
+
children: [
|
|
17896
|
+
viewAllLabel,
|
|
17897
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
17898
|
+
]
|
|
17899
|
+
}
|
|
17900
|
+
)
|
|
17901
|
+
] }),
|
|
17902
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
|
|
17903
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17904
|
+
"div",
|
|
17905
|
+
{
|
|
17906
|
+
role: "tablist",
|
|
17907
|
+
"aria-label": "Explore categories",
|
|
17908
|
+
className: cn(
|
|
17909
|
+
"inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full border p-1.5 scrollbar-none",
|
|
17910
|
+
t.tabTrack
|
|
17911
|
+
),
|
|
17912
|
+
children: tabs.map((tab) => {
|
|
17913
|
+
const isActive = tab.id === (active == null ? void 0 : active.id);
|
|
17914
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17915
|
+
"button",
|
|
17916
|
+
{
|
|
17917
|
+
type: "button",
|
|
17918
|
+
role: "tab",
|
|
17919
|
+
"aria-selected": isActive,
|
|
17920
|
+
onClick: () => setActiveId(tab.id),
|
|
17921
|
+
className: cn(
|
|
17922
|
+
"shrink-0 rounded-full px-5 py-2 text-sm font-ui font-bold transition-colors",
|
|
17923
|
+
isActive ? t.tabActive : t.tabIdle
|
|
17924
|
+
),
|
|
17925
|
+
children: tab.label
|
|
17926
|
+
},
|
|
17927
|
+
tab.id
|
|
17928
|
+
);
|
|
17929
|
+
})
|
|
17930
|
+
}
|
|
17931
|
+
),
|
|
17932
|
+
showCta && !hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17933
|
+
"a",
|
|
17934
|
+
{
|
|
17935
|
+
href: ctaHref,
|
|
17936
|
+
className: cn(
|
|
17937
|
+
"hidden shrink-0 items-center rounded-full px-6 py-2.5 text-sm font-heading font-bold transition-colors sm:inline-flex",
|
|
17938
|
+
ACCENT_BUTTON
|
|
17939
|
+
),
|
|
17940
|
+
children: viewAllLabel
|
|
17941
|
+
}
|
|
17942
|
+
)
|
|
17943
|
+
] }),
|
|
17944
|
+
layout === "bento" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 grid auto-rows-[170px] grid-cols-2 gap-4 sm:mt-8 sm:auto-rows-[200px] lg:grid-cols-4", children: gridCards.map((card, i) => /* @__PURE__ */ jsxRuntime.jsx(BentoTile, { card, ring: t.cardRing }, i)) }),
|
|
17945
|
+
limited && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17946
|
+
"div",
|
|
17947
|
+
{
|
|
17948
|
+
className: cn(
|
|
17949
|
+
"mt-7 flex flex-wrap items-center justify-between gap-x-8 gap-y-3 border-t pt-6",
|
|
17950
|
+
t.divider
|
|
17951
|
+
),
|
|
17952
|
+
children: [
|
|
17953
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2", children: [
|
|
17954
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-ui font-bold uppercase tracking-[0.18em] text-primary", children: moreLabel }),
|
|
17955
|
+
moreCards.map((card, i) => {
|
|
17956
|
+
var _a2;
|
|
17957
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17958
|
+
"a",
|
|
17959
|
+
{
|
|
17960
|
+
href: (_a2 = card.href) != null ? _a2 : "#",
|
|
17961
|
+
className: "group inline-flex items-baseline gap-2",
|
|
17962
|
+
children: [
|
|
17963
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17964
|
+
"span",
|
|
17965
|
+
{
|
|
17966
|
+
className: cn(
|
|
17967
|
+
"font-heading text-base font-bold transition-colors group-hover:text-primary",
|
|
17968
|
+
t.heading
|
|
17969
|
+
),
|
|
17970
|
+
children: card.label
|
|
17971
|
+
}
|
|
17972
|
+
),
|
|
17973
|
+
card.tripCount && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-sm", t.body), children: card.tripCount })
|
|
17974
|
+
]
|
|
17975
|
+
},
|
|
17976
|
+
i
|
|
17977
|
+
);
|
|
17978
|
+
})
|
|
17979
|
+
] }),
|
|
17980
|
+
showCta && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17981
|
+
"a",
|
|
17982
|
+
{
|
|
17983
|
+
href: ctaHref,
|
|
17984
|
+
className: "group inline-flex shrink-0 items-center gap-1.5 font-ui text-sm font-bold text-primary transition-colors hover:text-primary-800",
|
|
17985
|
+
children: [
|
|
17986
|
+
viewAllLabel,
|
|
17987
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
17988
|
+
]
|
|
17989
|
+
}
|
|
17990
|
+
)
|
|
17991
|
+
]
|
|
17992
|
+
}
|
|
17993
|
+
),
|
|
17994
|
+
layout !== "bento" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "-mx-6 mt-6 flex gap-3 overflow-x-auto px-6 pb-2 snap-x snap-mandatory scroll-px-6 scroll-smooth scrollbar-none sm:mx-0 sm:mt-8 sm:gap-4 sm:px-0 sm:scroll-px-0", children: active == null ? void 0 : active.cards.map((card, i) => {
|
|
17995
|
+
var _a2, _b2;
|
|
17996
|
+
const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17997
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17998
|
+
Picture,
|
|
17999
|
+
{
|
|
18000
|
+
src: (_a2 = card.image) != null ? _a2 : "",
|
|
18001
|
+
alt: (_b2 = card.imageAlt) != null ? _b2 : card.label,
|
|
18002
|
+
loading: "lazy",
|
|
18003
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
|
|
18004
|
+
}
|
|
18005
|
+
),
|
|
18006
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/15 to-transparent" }),
|
|
18007
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-x-0 bottom-0 p-4 font-heading text-sm font-bold uppercase leading-tight tracking-wide text-white", children: card.label })
|
|
18008
|
+
] });
|
|
18009
|
+
const cardClass = "group relative aspect-[9/16] w-40 shrink-0 snap-start overflow-hidden rounded-2xl bg-muted sm:w-44 lg:w-48";
|
|
18010
|
+
return card.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18011
|
+
"a",
|
|
18012
|
+
{
|
|
18013
|
+
href: card.href,
|
|
18014
|
+
className: cn(
|
|
18015
|
+
cardClass,
|
|
18016
|
+
"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
18017
|
+
t.cardRing
|
|
18018
|
+
),
|
|
18019
|
+
children: inner
|
|
18020
|
+
},
|
|
18021
|
+
i
|
|
18022
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cardClass, children: inner }, i);
|
|
18023
|
+
}) }),
|
|
18024
|
+
showCta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 sm:hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
18025
|
+
"a",
|
|
18026
|
+
{
|
|
18027
|
+
href: ctaHref,
|
|
18028
|
+
className: cn(
|
|
18029
|
+
"inline-flex w-full items-center justify-center rounded-full px-6 py-3 text-sm font-heading font-bold transition-colors",
|
|
18030
|
+
ACCENT_BUTTON
|
|
18031
|
+
),
|
|
18032
|
+
children: viewAllLabel
|
|
18033
|
+
}
|
|
18034
|
+
) })
|
|
18035
|
+
] }) });
|
|
18036
|
+
}
|
|
18037
|
+
var THEME2 = {
|
|
18038
|
+
light: {
|
|
18039
|
+
section: "bg-neutral-100",
|
|
18040
|
+
heading: "text-neutral-900",
|
|
18041
|
+
title: "text-neutral-800",
|
|
18042
|
+
body: "text-neutral-500",
|
|
18043
|
+
icon: "text-primary",
|
|
18044
|
+
card: "bg-white border-black/10 shadow-sm",
|
|
18045
|
+
chip: "bg-primary/10 text-primary",
|
|
18046
|
+
number: "text-primary"
|
|
18047
|
+
},
|
|
18048
|
+
dark: {
|
|
18049
|
+
section: "bg-neutral-950",
|
|
18050
|
+
heading: "text-white",
|
|
18051
|
+
title: "text-white",
|
|
18052
|
+
body: "text-white/60",
|
|
18053
|
+
icon: "text-primary-400",
|
|
18054
|
+
card: "bg-white/5 border-white/10",
|
|
18055
|
+
chip: "bg-primary-400/15 text-primary-400",
|
|
18056
|
+
number: "text-primary-400"
|
|
18057
|
+
}
|
|
18058
|
+
};
|
|
18059
|
+
var COLS = {
|
|
18060
|
+
2: "sm:grid-cols-2",
|
|
18061
|
+
3: "sm:grid-cols-2 lg:grid-cols-3",
|
|
18062
|
+
4: "sm:grid-cols-2 lg:grid-cols-4"
|
|
18063
|
+
};
|
|
18064
|
+
function USP({
|
|
18065
|
+
items,
|
|
18066
|
+
heading,
|
|
18067
|
+
subheading,
|
|
18068
|
+
columns,
|
|
18069
|
+
variant = "minimal",
|
|
18070
|
+
theme = "light",
|
|
18071
|
+
className
|
|
18072
|
+
}) {
|
|
18073
|
+
const t = THEME2[theme];
|
|
18074
|
+
const cols = columns != null ? columns : Math.min(Math.max(items.length, 2), 4);
|
|
18075
|
+
const isInline = variant === "inline";
|
|
18076
|
+
const isCard = variant === "card";
|
|
18077
|
+
const isNumbered = variant === "numbered";
|
|
18078
|
+
const stacked = !isInline;
|
|
18079
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn("w-full py-14 sm:py-20", t.section, className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
18080
|
+
(heading || subheading) && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18081
|
+
"div",
|
|
18082
|
+
{
|
|
18083
|
+
className: cn(
|
|
18084
|
+
"mb-12 max-w-2xl",
|
|
18085
|
+
isNumbered ? "text-left" : "mx-auto text-center"
|
|
18086
|
+
),
|
|
18087
|
+
children: [
|
|
18088
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18089
|
+
"h2",
|
|
18090
|
+
{
|
|
18091
|
+
className: cn(
|
|
18092
|
+
"font-heading font-bold uppercase tracking-wide",
|
|
18093
|
+
isNumbered ? "text-3xl sm:text-4xl lg:text-5xl" : "text-2xl sm:text-3xl",
|
|
18094
|
+
t.heading
|
|
18095
|
+
),
|
|
18096
|
+
children: heading
|
|
18097
|
+
}
|
|
18098
|
+
),
|
|
18099
|
+
subheading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 font-sans text-base", t.body), children: subheading })
|
|
18100
|
+
]
|
|
18101
|
+
}
|
|
18102
|
+
),
|
|
18103
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18104
|
+
"div",
|
|
18105
|
+
{
|
|
18106
|
+
className: cn(
|
|
18107
|
+
"grid grid-cols-1 gap-x-8 gap-y-10",
|
|
18108
|
+
COLS[cols]
|
|
18109
|
+
),
|
|
18110
|
+
children: [
|
|
18111
|
+
isNumbered && items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18112
|
+
"div",
|
|
18113
|
+
{
|
|
18114
|
+
className: cn(
|
|
18115
|
+
"flex flex-col rounded-2xl border p-6 text-left sm:p-7",
|
|
18116
|
+
t.card
|
|
18117
|
+
),
|
|
18118
|
+
children: [
|
|
18119
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18120
|
+
"span",
|
|
18121
|
+
{
|
|
18122
|
+
className: cn(
|
|
18123
|
+
"mb-4 font-sans text-xl font-semibold italic",
|
|
18124
|
+
t.number
|
|
18125
|
+
),
|
|
18126
|
+
children: String(i + 1).padStart(2, "0")
|
|
18127
|
+
}
|
|
18128
|
+
),
|
|
18129
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18130
|
+
"h3",
|
|
18131
|
+
{
|
|
18132
|
+
className: cn(
|
|
18133
|
+
"font-heading text-lg font-bold leading-snug",
|
|
18134
|
+
t.heading
|
|
18135
|
+
),
|
|
18136
|
+
children: item.title
|
|
18137
|
+
}
|
|
18138
|
+
),
|
|
18139
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2 font-sans text-base leading-relaxed", t.body), children: item.description })
|
|
18140
|
+
]
|
|
18141
|
+
},
|
|
18142
|
+
i
|
|
18143
|
+
)),
|
|
18144
|
+
!isNumbered && items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18145
|
+
"div",
|
|
18146
|
+
{
|
|
18147
|
+
className: cn(
|
|
18148
|
+
isCard && cn("rounded-2xl border p-6 sm:p-7", t.card),
|
|
18149
|
+
stacked ? "flex flex-col items-center text-center" : "flex items-start gap-4 text-left"
|
|
18150
|
+
),
|
|
18151
|
+
children: [
|
|
18152
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18153
|
+
"span",
|
|
18154
|
+
{
|
|
18155
|
+
className: cn(
|
|
18156
|
+
"flex shrink-0 items-center justify-center",
|
|
18157
|
+
isCard ? cn("h-14 w-14 rounded-full [&>svg]:size-7", t.chip) : cn("[&>svg]:size-8", t.icon),
|
|
18158
|
+
stacked && "mb-4"
|
|
18159
|
+
),
|
|
18160
|
+
children: item.icon
|
|
18161
|
+
}
|
|
18162
|
+
),
|
|
18163
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: isInline ? "flex-1" : "contents", children: [
|
|
18164
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18165
|
+
"h3",
|
|
18166
|
+
{
|
|
18167
|
+
className: cn(
|
|
18168
|
+
"font-heading text-sm font-bold uppercase leading-snug tracking-wide",
|
|
18169
|
+
t.title,
|
|
18170
|
+
stacked && "mb-3"
|
|
18171
|
+
),
|
|
18172
|
+
children: item.title
|
|
18173
|
+
}
|
|
18174
|
+
),
|
|
18175
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18176
|
+
"p",
|
|
18177
|
+
{
|
|
18178
|
+
className: cn(
|
|
18179
|
+
"font-sans text-base leading-relaxed",
|
|
18180
|
+
t.body,
|
|
18181
|
+
isInline && "mt-1.5"
|
|
18182
|
+
),
|
|
18183
|
+
children: item.description
|
|
18184
|
+
}
|
|
18185
|
+
)
|
|
18186
|
+
] })
|
|
18187
|
+
]
|
|
18188
|
+
},
|
|
18189
|
+
i
|
|
18190
|
+
))
|
|
18191
|
+
]
|
|
18192
|
+
}
|
|
18193
|
+
)
|
|
18194
|
+
] }) });
|
|
18195
|
+
}
|
|
18196
|
+
function RotatingSubtitle({
|
|
18197
|
+
phrases,
|
|
18198
|
+
interval,
|
|
18199
|
+
className
|
|
18200
|
+
}) {
|
|
18201
|
+
const [index, setIndex] = React32__namespace.useState(0);
|
|
18202
|
+
React32__namespace.useEffect(() => {
|
|
18203
|
+
var _a;
|
|
18204
|
+
if (phrases.length < 2) return;
|
|
18205
|
+
const reduce = typeof window !== "undefined" && ((_a = window.matchMedia) == null ? void 0 : _a.call(window, "(prefers-reduced-motion: reduce)").matches);
|
|
18206
|
+
if (reduce) return;
|
|
18207
|
+
const id = setInterval(
|
|
18208
|
+
() => setIndex((i) => (i + 1) % phrases.length),
|
|
18209
|
+
interval
|
|
18210
|
+
);
|
|
18211
|
+
return () => clearInterval(id);
|
|
18212
|
+
}, [phrases.length, interval]);
|
|
18213
|
+
return (
|
|
18214
|
+
/* Grid-stacks all phrases so the box keeps the height of the tallest line
|
|
18215
|
+
and the crossfade has no layout shift. */
|
|
18216
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("grid", className), children: phrases.map((phrase, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18217
|
+
"span",
|
|
18218
|
+
{
|
|
18219
|
+
"aria-hidden": i !== index,
|
|
18220
|
+
className: cn(
|
|
18221
|
+
"col-start-1 row-start-1 transition-opacity duration-700",
|
|
18222
|
+
i === index ? "opacity-100" : "opacity-0"
|
|
18223
|
+
),
|
|
18224
|
+
children: phrase
|
|
18225
|
+
},
|
|
18226
|
+
phrase + i
|
|
18227
|
+
)) })
|
|
18228
|
+
);
|
|
18229
|
+
}
|
|
18230
|
+
function CtaBanner({
|
|
18231
|
+
image,
|
|
18232
|
+
imageAlt = "",
|
|
18233
|
+
title,
|
|
18234
|
+
subtitle,
|
|
18235
|
+
cta,
|
|
18236
|
+
rotateInterval = 3e3,
|
|
18237
|
+
parallax = true,
|
|
18238
|
+
overlayOpacity = 35,
|
|
18239
|
+
className
|
|
18240
|
+
}) {
|
|
18241
|
+
const phrases = React32__namespace.useMemo(
|
|
18242
|
+
() => (Array.isArray(subtitle) ? subtitle : subtitle ? [subtitle] : []).map((s) => s.trim()).filter(Boolean),
|
|
18243
|
+
[subtitle]
|
|
18244
|
+
);
|
|
18245
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18246
|
+
"section",
|
|
18247
|
+
{
|
|
18248
|
+
className: cn(
|
|
18249
|
+
"relative w-full overflow-hidden",
|
|
18250
|
+
"flex items-center justify-center",
|
|
18251
|
+
"min-h-[360px] py-24 sm:py-28 lg:py-32",
|
|
18252
|
+
"bg-muted",
|
|
18253
|
+
className
|
|
18254
|
+
),
|
|
18255
|
+
children: [
|
|
18256
|
+
parallax ? (
|
|
18257
|
+
/* Parallax: fixed-attachment CSS background (sm+). Uses a plain div so
|
|
18258
|
+
`bg-fixed` works; on mobile it falls back to a normal cover image. */
|
|
18259
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18260
|
+
"div",
|
|
18261
|
+
{
|
|
18262
|
+
"aria-hidden": true,
|
|
18263
|
+
role: imageAlt ? "img" : void 0,
|
|
18264
|
+
"aria-label": imageAlt || void 0,
|
|
18265
|
+
className: "absolute inset-0 bg-cover bg-center sm:bg-fixed",
|
|
18266
|
+
style: { backgroundImage: `url("${image}")` }
|
|
18267
|
+
}
|
|
18268
|
+
)
|
|
18269
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
18270
|
+
Picture,
|
|
18271
|
+
{
|
|
18272
|
+
src: image,
|
|
18273
|
+
alt: imageAlt,
|
|
18274
|
+
eager: true,
|
|
18275
|
+
className: "absolute inset-0 h-full w-full object-cover"
|
|
18276
|
+
}
|
|
18277
|
+
),
|
|
18278
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18279
|
+
"div",
|
|
18280
|
+
{
|
|
18281
|
+
className: "absolute inset-0 bg-black",
|
|
18282
|
+
style: { opacity: overlayOpacity / 100 },
|
|
18283
|
+
"aria-hidden": true
|
|
18284
|
+
}
|
|
18285
|
+
),
|
|
18286
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 mx-auto flex w-full max-w-4xl flex-col items-center px-6 text-center", children: [
|
|
18287
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-heading text-4xl font-black uppercase leading-none tracking-tight text-white sm:text-5xl lg:text-[3.25rem]", children: title }),
|
|
18288
|
+
phrases.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 font-sans text-xl font-semibold text-white sm:text-2xl lg:text-[1.7rem]", children: phrases.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx(RotatingSubtitle, { phrases, interval: rotateInterval }) : phrases[0] }),
|
|
18289
|
+
cta && (cta.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18290
|
+
"a",
|
|
18291
|
+
{
|
|
18292
|
+
href: cta.href,
|
|
18293
|
+
onClick: cta.onClick,
|
|
18294
|
+
className: "mt-8 inline-block border-b border-white/70 pb-1.5 font-ui text-xs font-light uppercase tracking-[0.2em] text-white transition-colors hover:border-white hover:text-white/80",
|
|
18295
|
+
children: cta.label
|
|
18296
|
+
}
|
|
18297
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
18298
|
+
"button",
|
|
18299
|
+
{
|
|
18300
|
+
type: "button",
|
|
18301
|
+
onClick: cta.onClick,
|
|
18302
|
+
className: "mt-8 inline-block border-b border-white/70 pb-1.5 font-ui text-xs font-light uppercase tracking-[0.2em] text-white transition-colors hover:border-white hover:text-white/80",
|
|
18303
|
+
children: cta.label
|
|
18304
|
+
}
|
|
18305
|
+
))
|
|
18306
|
+
] })
|
|
18307
|
+
]
|
|
18308
|
+
}
|
|
18309
|
+
);
|
|
18310
|
+
}
|
|
18311
|
+
var THEME3 = {
|
|
18312
|
+
light: {
|
|
18313
|
+
section: "bg-background",
|
|
18314
|
+
heading: "text-foreground",
|
|
18315
|
+
sub: "text-muted-foreground",
|
|
18316
|
+
rowTitle: "text-foreground",
|
|
18317
|
+
rowBorder: "border-border",
|
|
18318
|
+
rowArrow: "text-primary"
|
|
18319
|
+
},
|
|
18320
|
+
dark: {
|
|
18321
|
+
section: "bg-neutral-950",
|
|
18322
|
+
heading: "text-white",
|
|
18323
|
+
sub: "text-white/60",
|
|
18324
|
+
rowTitle: "text-white",
|
|
18325
|
+
rowBorder: "border-white/10",
|
|
18326
|
+
rowArrow: "text-primary-400"
|
|
18327
|
+
}
|
|
18328
|
+
};
|
|
18329
|
+
function BlogJournal({
|
|
18330
|
+
eyebrow,
|
|
18331
|
+
title,
|
|
18332
|
+
subtitle,
|
|
18333
|
+
link,
|
|
18334
|
+
feature,
|
|
18335
|
+
posts,
|
|
18336
|
+
theme = "light",
|
|
18337
|
+
className
|
|
18338
|
+
}) {
|
|
18339
|
+
var _a, _b, _c, _d;
|
|
18340
|
+
const t = THEME3[theme];
|
|
18341
|
+
const featRel = feature.external ? "noopener noreferrer" : void 0;
|
|
18342
|
+
const featTarget = feature.external ? "_blank" : void 0;
|
|
18343
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn("w-full py-20 sm:py-28", t.section, className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
18344
|
+
(title || eyebrow || link) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-10 flex flex-wrap items-end justify-between gap-6", children: [
|
|
18345
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
18346
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18347
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18348
|
+
"h2",
|
|
18349
|
+
{
|
|
18350
|
+
className: cn(
|
|
18351
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
18352
|
+
t.heading
|
|
18353
|
+
),
|
|
18354
|
+
children: title
|
|
18355
|
+
}
|
|
18356
|
+
),
|
|
18357
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 text-base", t.sub), children: subtitle })
|
|
18358
|
+
] }),
|
|
18359
|
+
link && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18360
|
+
"a",
|
|
18361
|
+
{
|
|
18362
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18363
|
+
className: "group inline-flex shrink-0 items-center gap-1.5 font-ui text-sm font-bold text-primary transition-colors hover:text-primary-800",
|
|
18364
|
+
children: [
|
|
18365
|
+
link.label,
|
|
18366
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18367
|
+
]
|
|
18368
|
+
}
|
|
18369
|
+
)
|
|
18370
|
+
] }),
|
|
18371
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-stretch gap-7 lg:grid-cols-[1.12fr_0.88fr]", children: [
|
|
18372
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18373
|
+
"a",
|
|
18374
|
+
{
|
|
18375
|
+
href: (_b = feature.href) != null ? _b : "#",
|
|
18376
|
+
target: featTarget,
|
|
18377
|
+
rel: featRel,
|
|
18378
|
+
className: "group relative flex min-h-[420px] items-end overflow-hidden rounded-2xl text-white shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 lg:min-h-[480px]",
|
|
18379
|
+
children: [
|
|
18380
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18381
|
+
Picture,
|
|
18382
|
+
{
|
|
18383
|
+
src: feature.image,
|
|
18384
|
+
alt: (_c = feature.imageAlt) != null ? _c : feature.title,
|
|
18385
|
+
loading: "lazy",
|
|
18386
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-700 group-hover:scale-105"
|
|
18387
|
+
}
|
|
18388
|
+
),
|
|
18389
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/90 via-black/25 to-transparent" }),
|
|
18390
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative p-8 sm:p-9", children: [
|
|
18391
|
+
feature.tag && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-3.5 inline-block rounded-full bg-primary px-3 py-1 text-[11px] font-ui font-bold uppercase tracking-[0.12em] text-primary-foreground", children: feature.tag }),
|
|
18392
|
+
feature.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs font-ui font-bold uppercase tracking-[0.1em] text-primary-400", children: feature.date }),
|
|
18393
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-2.5 max-w-[20ch] font-heading text-2xl font-bold leading-[1.08] sm:text-3xl lg:text-4xl", children: feature.title }),
|
|
18394
|
+
feature.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 max-w-[46ch] text-sm leading-relaxed text-white/85", children: feature.excerpt }),
|
|
18395
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-5 inline-flex items-center gap-1.5 font-ui text-sm font-bold", children: [
|
|
18396
|
+
(_d = feature.ctaLabel) != null ? _d : "Read the guide",
|
|
18397
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18398
|
+
] })
|
|
18399
|
+
] })
|
|
18400
|
+
]
|
|
18401
|
+
}
|
|
18402
|
+
),
|
|
18403
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col justify-center", children: posts.map((post, i) => {
|
|
18404
|
+
var _a2, _b2;
|
|
18405
|
+
return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18406
|
+
"a",
|
|
18407
|
+
{
|
|
18408
|
+
href: (_a2 = post.href) != null ? _a2 : "#",
|
|
18409
|
+
target: post.external ? "_blank" : void 0,
|
|
18410
|
+
rel: post.external ? "noopener noreferrer" : void 0,
|
|
18411
|
+
className: cn(
|
|
18412
|
+
"group grid grid-cols-[64px_1fr_auto] items-center gap-4 border-t py-5 transition-[padding] duration-300 hover:pl-3 sm:grid-cols-[78px_1fr_auto]",
|
|
18413
|
+
t.rowBorder,
|
|
18414
|
+
i === 0 && "border-t-0 pt-0"
|
|
18415
|
+
),
|
|
18416
|
+
children: [
|
|
18417
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18418
|
+
Picture,
|
|
18419
|
+
{
|
|
18420
|
+
src: post.image,
|
|
18421
|
+
alt: (_b2 = post.imageAlt) != null ? _b2 : post.title,
|
|
18422
|
+
loading: "lazy",
|
|
18423
|
+
className: "h-16 w-16 rounded-xl object-cover sm:h-[78px] sm:w-[78px]"
|
|
18424
|
+
}
|
|
18425
|
+
),
|
|
18426
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
18427
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] font-ui font-bold uppercase tracking-[0.1em] text-primary", children: [
|
|
18428
|
+
post.category,
|
|
18429
|
+
post.category && post.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("ml-2 font-semibold", t.sub), children: post.date }),
|
|
18430
|
+
!post.category && post.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold", t.sub), children: post.date })
|
|
18431
|
+
] }),
|
|
18432
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18433
|
+
"h4",
|
|
18434
|
+
{
|
|
18435
|
+
className: cn(
|
|
18436
|
+
"mt-1.5 font-heading text-base font-bold leading-snug sm:text-lg",
|
|
18437
|
+
t.rowTitle
|
|
18438
|
+
),
|
|
18439
|
+
children: post.title
|
|
18440
|
+
}
|
|
18441
|
+
)
|
|
18442
|
+
] }),
|
|
18443
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18444
|
+
lucideReact.ArrowRightIcon,
|
|
18445
|
+
{
|
|
18446
|
+
className: cn(
|
|
18447
|
+
"h-5 w-5 shrink-0 transition-transform group-hover:translate-x-1",
|
|
18448
|
+
t.rowArrow
|
|
18449
|
+
)
|
|
18450
|
+
}
|
|
18451
|
+
)
|
|
18452
|
+
]
|
|
18453
|
+
}
|
|
18454
|
+
) }, i);
|
|
18455
|
+
}) })
|
|
18456
|
+
] })
|
|
18457
|
+
] }) });
|
|
18458
|
+
}
|
|
18459
|
+
var SURFACE_WHITE = "bg-white";
|
|
18460
|
+
var SURFACE_SAND = "bg-[oklch(0.94_0.016_86)]";
|
|
18461
|
+
var SURFACE_PRIMARY_700 = "bg-[oklch(0.52_0.082_179)]";
|
|
18462
|
+
var SURFACE_PRIMARY_800 = "bg-[oklch(0.39_0.062_179)]";
|
|
18463
|
+
var SURFACE_PRIMARY_900 = "bg-[oklch(0.27_0.040_179)]";
|
|
18464
|
+
function SectionHead({
|
|
18465
|
+
eyebrow,
|
|
18466
|
+
title,
|
|
18467
|
+
subtitle,
|
|
18468
|
+
link,
|
|
18469
|
+
align = "between",
|
|
18470
|
+
theme = "light"
|
|
18471
|
+
}) {
|
|
18472
|
+
var _a;
|
|
18473
|
+
const isCenter = align === "center";
|
|
18474
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18475
|
+
"div",
|
|
18476
|
+
{
|
|
18477
|
+
className: cn(
|
|
18478
|
+
"mb-10 flex flex-wrap items-end gap-6",
|
|
18479
|
+
isCenter ? "flex-col items-center text-center" : "justify-between"
|
|
18480
|
+
),
|
|
18481
|
+
children: [
|
|
18482
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-2xl", isCenter && "mx-auto"), children: [
|
|
18483
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18484
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18485
|
+
"h2",
|
|
18486
|
+
{
|
|
18487
|
+
className: cn(
|
|
18488
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
18489
|
+
theme === "dark" ? "text-white" : "text-foreground"
|
|
18490
|
+
),
|
|
18491
|
+
children: title
|
|
18492
|
+
}
|
|
18493
|
+
),
|
|
18494
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18495
|
+
"p",
|
|
18496
|
+
{
|
|
18497
|
+
className: cn(
|
|
18498
|
+
"mt-3 text-base",
|
|
18499
|
+
theme === "dark" ? "text-white/70" : "text-muted-foreground"
|
|
18500
|
+
),
|
|
18501
|
+
children: subtitle
|
|
18502
|
+
}
|
|
18503
|
+
)
|
|
18504
|
+
] }),
|
|
18505
|
+
link && !isCenter && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18506
|
+
"a",
|
|
18507
|
+
{
|
|
18508
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18509
|
+
className: "group inline-flex shrink-0 items-center gap-1.5 font-ui text-sm font-bold text-primary transition-colors hover:text-primary-800",
|
|
18510
|
+
children: [
|
|
18511
|
+
link.label,
|
|
18512
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18513
|
+
]
|
|
18514
|
+
}
|
|
18515
|
+
)
|
|
18516
|
+
]
|
|
18517
|
+
}
|
|
18518
|
+
);
|
|
18519
|
+
}
|
|
18520
|
+
function ExpeditionsRail({ eyebrow, title, subtitle, link, trips }) {
|
|
18521
|
+
var _a;
|
|
18522
|
+
const railRef = React32__namespace.useRef(null);
|
|
18523
|
+
const scrollByCard = (dir) => {
|
|
18524
|
+
const rail = railRef.current;
|
|
18525
|
+
if (!rail) return;
|
|
18526
|
+
const card = rail.querySelector("[data-rail-card]");
|
|
18527
|
+
const amount = card ? card.offsetWidth + 22 : rail.clientWidth * 0.8;
|
|
18528
|
+
rail.scrollBy({ left: dir * amount, behavior: "smooth" });
|
|
18529
|
+
};
|
|
18530
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn(SURFACE_SAND, "py-20 sm:py-28"), children: [
|
|
18531
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-10 flex flex-wrap items-end justify-between gap-6", children: [
|
|
18532
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
18533
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18534
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-heading text-3xl font-black uppercase leading-[1.05] text-foreground sm:text-4xl lg:text-5xl", children: title }),
|
|
18535
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-muted-foreground", children: subtitle })
|
|
18536
|
+
] }),
|
|
18537
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
18538
|
+
link && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18539
|
+
"a",
|
|
18540
|
+
{
|
|
18541
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18542
|
+
className: "group mr-2 hidden items-center gap-1.5 font-ui text-sm font-bold text-primary transition-colors hover:text-primary-800 sm:inline-flex",
|
|
18543
|
+
children: [
|
|
18544
|
+
link.label,
|
|
18545
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18546
|
+
]
|
|
18547
|
+
}
|
|
18548
|
+
),
|
|
18549
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18550
|
+
"button",
|
|
18551
|
+
{
|
|
18552
|
+
type: "button",
|
|
18553
|
+
onClick: () => scrollByCard(-1),
|
|
18554
|
+
"aria-label": "Previous expeditions",
|
|
18555
|
+
className: "flex h-11 w-11 items-center justify-center rounded-full border border-border bg-background text-foreground transition-colors hover:border-primary hover:bg-primary hover:text-primary-foreground",
|
|
18556
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
18557
|
+
}
|
|
18558
|
+
),
|
|
18559
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18560
|
+
"button",
|
|
18561
|
+
{
|
|
18562
|
+
type: "button",
|
|
18563
|
+
onClick: () => scrollByCard(1),
|
|
18564
|
+
"aria-label": "Next expeditions",
|
|
18565
|
+
className: "flex h-11 w-11 items-center justify-center rounded-full border border-border bg-background text-foreground transition-colors hover:border-primary hover:bg-primary hover:text-primary-foreground",
|
|
18566
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
18567
|
+
}
|
|
18568
|
+
)
|
|
18569
|
+
] })
|
|
18570
|
+
] }) }),
|
|
18571
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
18572
|
+
"div",
|
|
18573
|
+
{
|
|
18574
|
+
ref: railRef,
|
|
18575
|
+
className: "flex snap-x snap-mandatory gap-[22px] overflow-x-auto scroll-pl-6 px-6 pb-4 [scrollbar-width:none] sm:scroll-pl-8 sm:px-8 [&::-webkit-scrollbar]:hidden",
|
|
18576
|
+
children: trips.map((trip, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18577
|
+
"div",
|
|
18578
|
+
{
|
|
18579
|
+
"data-rail-card": true,
|
|
18580
|
+
className: "w-[320px] shrink-0 snap-start sm:w-[340px]",
|
|
18581
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(TripCard, __spreadValues({ variant: "editorial" }, trip))
|
|
18582
|
+
},
|
|
18583
|
+
i
|
|
18584
|
+
))
|
|
18585
|
+
}
|
|
18586
|
+
) })
|
|
18587
|
+
] });
|
|
18588
|
+
}
|
|
18589
|
+
function PopularCloud({ eyebrow, title, subtitle, chips }) {
|
|
18590
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn(SURFACE_WHITE, "py-20 sm:py-28"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
18591
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18592
|
+
SectionHead,
|
|
18593
|
+
{
|
|
18594
|
+
eyebrow,
|
|
18595
|
+
title,
|
|
18596
|
+
subtitle,
|
|
18597
|
+
align: "center"
|
|
18598
|
+
}
|
|
18599
|
+
),
|
|
18600
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex max-w-3xl flex-wrap items-center justify-center gap-3", children: chips.map((chip, i) => {
|
|
18601
|
+
var _a;
|
|
18602
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18603
|
+
Chip,
|
|
18604
|
+
{
|
|
18605
|
+
href: chip.href,
|
|
18606
|
+
variant: chip.featured ? "solid" : "outline",
|
|
18607
|
+
size: (_a = chip.size) != null ? _a : "md",
|
|
18608
|
+
className: "transition-transform hover:-translate-y-0.5",
|
|
18609
|
+
children: chip.label
|
|
18610
|
+
},
|
|
18611
|
+
i
|
|
18612
|
+
);
|
|
18613
|
+
}) })
|
|
18614
|
+
] }) });
|
|
18615
|
+
}
|
|
18616
|
+
function StatsBand({ items }) {
|
|
18617
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn(SURFACE_PRIMARY_700, "py-16 text-white sm:py-20"), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-x-6 gap-y-10 text-center lg:grid-cols-4", children: items.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
18618
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-heading text-4xl font-black leading-none text-[oklch(0.94_0.05_179)] sm:text-5xl lg:text-6xl", children: stat.value }),
|
|
18619
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 text-sm font-medium text-white/90", children: stat.label })
|
|
18620
|
+
] }, i)) }) }) });
|
|
18621
|
+
}
|
|
18622
|
+
function ReviewStars({ stars = 5 }) {
|
|
18623
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 flex items-center gap-0.5", "aria-label": `${stars} out of 5 stars`, children: Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18624
|
+
lucideReact.StarIcon,
|
|
18625
|
+
{
|
|
18626
|
+
className: cn(
|
|
18627
|
+
"h-4 w-4",
|
|
18628
|
+
i + 1 <= Math.round(stars) ? "fill-amber-400 text-amber-400" : "fill-white/15 text-white/15"
|
|
18629
|
+
)
|
|
18630
|
+
},
|
|
18631
|
+
i
|
|
18632
|
+
)) });
|
|
18633
|
+
}
|
|
18634
|
+
function ReviewsBand({ eyebrow, title, subtitle, link, items, note }) {
|
|
18635
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn(SURFACE_PRIMARY_900, "py-20 text-white sm:py-28"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8", children: [
|
|
18636
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18637
|
+
SectionHead,
|
|
18638
|
+
{
|
|
18639
|
+
eyebrow,
|
|
18640
|
+
title,
|
|
18641
|
+
subtitle,
|
|
18642
|
+
link,
|
|
18643
|
+
theme: "dark"
|
|
18644
|
+
}
|
|
18645
|
+
),
|
|
18646
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-5 sm:grid-cols-2 lg:grid-cols-3", children: items.map((review, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18647
|
+
"figure",
|
|
18648
|
+
{
|
|
18649
|
+
className: "rounded-2xl border border-white/10 bg-white/5 p-7 transition-colors hover:bg-white/10",
|
|
18650
|
+
children: [
|
|
18651
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReviewStars, { stars: review.stars }),
|
|
18652
|
+
/* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "font-sans text-lg italic leading-relaxed text-white/90", children: [
|
|
18653
|
+
"\u201C",
|
|
18654
|
+
review.quote,
|
|
18655
|
+
"\u201D"
|
|
18656
|
+
] }),
|
|
18657
|
+
/* @__PURE__ */ jsxRuntime.jsxs("figcaption", { className: "mt-5 text-sm font-medium text-white/60", children: [
|
|
18658
|
+
"\u2014 ",
|
|
18659
|
+
review.author
|
|
18660
|
+
] })
|
|
18661
|
+
]
|
|
18662
|
+
},
|
|
18663
|
+
i
|
|
18664
|
+
)) }),
|
|
18665
|
+
note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-8 text-center text-xs text-white/40", children: note })
|
|
18666
|
+
] }) });
|
|
18667
|
+
}
|
|
18668
|
+
function NewHome({
|
|
18669
|
+
hero,
|
|
18670
|
+
explorer,
|
|
18671
|
+
expeditions,
|
|
18672
|
+
popular,
|
|
18673
|
+
stats,
|
|
18674
|
+
usp,
|
|
18675
|
+
reviews,
|
|
18676
|
+
journal,
|
|
18677
|
+
cta,
|
|
18678
|
+
footer,
|
|
18679
|
+
className
|
|
18680
|
+
}) {
|
|
18681
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full bg-background", className), children: [
|
|
18682
|
+
/* @__PURE__ */ jsxRuntime.jsx(HomeHeader, __spreadValues({}, hero)),
|
|
18683
|
+
explorer && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18684
|
+
AdventureExplorer,
|
|
18685
|
+
__spreadProps(__spreadValues({}, explorer), {
|
|
18686
|
+
className: cn(SURFACE_WHITE, explorer.className)
|
|
18687
|
+
})
|
|
18688
|
+
),
|
|
18689
|
+
expeditions && /* @__PURE__ */ jsxRuntime.jsx(ExpeditionsRail, __spreadValues({}, expeditions)),
|
|
18690
|
+
popular && /* @__PURE__ */ jsxRuntime.jsx(PopularCloud, __spreadValues({}, popular)),
|
|
18691
|
+
stats && /* @__PURE__ */ jsxRuntime.jsx(StatsBand, __spreadValues({}, stats)),
|
|
18692
|
+
usp && /* @__PURE__ */ jsxRuntime.jsx(USP, __spreadProps(__spreadValues({}, usp), { className: cn(SURFACE_PRIMARY_800, usp.className) })),
|
|
18693
|
+
reviews && /* @__PURE__ */ jsxRuntime.jsx(ReviewsBand, __spreadValues({}, reviews)),
|
|
18694
|
+
journal && /* @__PURE__ */ jsxRuntime.jsx(BlogJournal, __spreadProps(__spreadValues({}, journal), { className: cn(SURFACE_WHITE, journal.className) })),
|
|
18695
|
+
cta && /* @__PURE__ */ jsxRuntime.jsx(CtaBanner, __spreadValues({}, cta)),
|
|
18696
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx(SiteFooter, __spreadValues({}, footer))
|
|
18697
|
+
] });
|
|
18698
|
+
}
|
|
18699
|
+
var ACTIVE_PILL = "bg-primary text-white shadow-sm";
|
|
18700
|
+
var VARIANT3 = {
|
|
18701
|
+
black: {
|
|
18702
|
+
track: "bg-white/5 border-white/10",
|
|
18703
|
+
idle: "text-white/55 hover:text-white",
|
|
18704
|
+
ring: "focus-visible:ring-white/70"
|
|
18705
|
+
},
|
|
18706
|
+
white: {
|
|
18707
|
+
track: "bg-neutral-100 border-black/10",
|
|
18708
|
+
idle: "text-neutral-500 hover:text-neutral-900",
|
|
18709
|
+
ring: "focus-visible:ring-neutral-900/40"
|
|
18710
|
+
}
|
|
18711
|
+
};
|
|
18712
|
+
var SIZE = {
|
|
18713
|
+
sm: "px-4 py-1.5 text-[13px]",
|
|
18714
|
+
md: "px-5 py-2 text-sm"
|
|
18715
|
+
};
|
|
18716
|
+
function SegmentedControl({
|
|
18717
|
+
items,
|
|
18718
|
+
value,
|
|
18719
|
+
defaultValue,
|
|
18720
|
+
onValueChange,
|
|
18721
|
+
variant = "black",
|
|
18722
|
+
size = "md",
|
|
18723
|
+
fullWidth = false,
|
|
18724
|
+
collapse = false,
|
|
18725
|
+
"aria-label": ariaLabel = "Options",
|
|
18726
|
+
className
|
|
18727
|
+
}) {
|
|
18728
|
+
var _a;
|
|
18729
|
+
const isControlled = value != null;
|
|
18730
|
+
const [internal, setInternal] = React32__namespace.useState(
|
|
18731
|
+
defaultValue != null ? defaultValue : (_a = items[0]) == null ? void 0 : _a.id
|
|
18732
|
+
);
|
|
18733
|
+
const active = isControlled ? value : internal;
|
|
18734
|
+
const select = (id) => {
|
|
18735
|
+
if (!isControlled) setInternal(id);
|
|
18736
|
+
onValueChange == null ? void 0 : onValueChange(id);
|
|
18737
|
+
};
|
|
18738
|
+
const onKeyDown = (e) => {
|
|
18739
|
+
if (e.key !== "ArrowLeft" && e.key !== "ArrowRight") return;
|
|
18740
|
+
e.preventDefault();
|
|
18741
|
+
const enabled = items.filter((i) => !i.disabled);
|
|
18742
|
+
const idx = enabled.findIndex((i) => i.id === active);
|
|
18743
|
+
if (idx === -1) return;
|
|
18744
|
+
const next = e.key === "ArrowRight" ? enabled[(idx + 1) % enabled.length] : enabled[(idx - 1 + enabled.length) % enabled.length];
|
|
18745
|
+
select(next.id);
|
|
18746
|
+
};
|
|
18747
|
+
const v = VARIANT3[variant];
|
|
18748
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18749
|
+
"div",
|
|
18750
|
+
{
|
|
18751
|
+
role: "radiogroup",
|
|
18752
|
+
"aria-label": ariaLabel,
|
|
18753
|
+
onKeyDown,
|
|
18754
|
+
className: cn(
|
|
18755
|
+
"inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full border p-1.5 scrollbar-none",
|
|
18756
|
+
fullWidth && "flex w-full",
|
|
18757
|
+
v.track,
|
|
18758
|
+
className
|
|
18759
|
+
),
|
|
18760
|
+
children: items.map((item) => {
|
|
18761
|
+
const isActive = item.id === active;
|
|
18762
|
+
const Icon = item.icon;
|
|
18763
|
+
const showLabel = collapse === "all" ? false : collapse ? isActive : true;
|
|
18764
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18765
|
+
"button",
|
|
18766
|
+
{
|
|
18767
|
+
type: "button",
|
|
18768
|
+
role: "radio",
|
|
18769
|
+
"aria-checked": isActive,
|
|
18770
|
+
"aria-label": collapse && !showLabel ? item.label : void 0,
|
|
18771
|
+
title: collapse && !showLabel ? item.label : void 0,
|
|
18772
|
+
disabled: item.disabled,
|
|
18773
|
+
tabIndex: isActive ? 0 : -1,
|
|
18774
|
+
onClick: () => select(item.id),
|
|
18775
|
+
className: cn(
|
|
18776
|
+
"inline-flex shrink-0 items-center justify-center rounded-full font-ui font-bold transition-all duration-300 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-40",
|
|
18777
|
+
showLabel && Icon ? "gap-2" : "gap-0",
|
|
18778
|
+
variant === "black" ? "focus-visible:ring-offset-neutral-950" : "focus-visible:ring-offset-white",
|
|
18779
|
+
fullWidth && "flex-1",
|
|
18780
|
+
SIZE[size],
|
|
18781
|
+
/* Icon-only segments are square-ish — drop the side padding so
|
|
18782
|
+
the icon centres in a circular pill. */
|
|
18783
|
+
collapse && !showLabel && (size === "sm" ? "!px-1.5" : "!px-2"),
|
|
18784
|
+
isActive ? ACTIVE_PILL : v.idle,
|
|
18785
|
+
v.ring
|
|
18786
|
+
),
|
|
18787
|
+
children: [
|
|
18788
|
+
Icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18789
|
+
Icon,
|
|
18790
|
+
{
|
|
18791
|
+
className: cn("shrink-0", size === "sm" ? "size-4" : "size-[18px]")
|
|
18792
|
+
}
|
|
18793
|
+
),
|
|
18794
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18795
|
+
"span",
|
|
18796
|
+
{
|
|
18797
|
+
className: cn(
|
|
18798
|
+
"overflow-hidden whitespace-nowrap transition-all duration-300 ease-out",
|
|
18799
|
+
showLabel ? "max-w-[12ch] opacity-100" : "max-w-0 opacity-0"
|
|
18800
|
+
),
|
|
18801
|
+
children: item.label
|
|
18802
|
+
}
|
|
18803
|
+
)
|
|
18804
|
+
]
|
|
18805
|
+
},
|
|
18806
|
+
item.id
|
|
18807
|
+
);
|
|
18808
|
+
})
|
|
18809
|
+
}
|
|
18810
|
+
);
|
|
18811
|
+
}
|
|
17181
18812
|
|
|
17182
18813
|
exports.ActivityCard = ActivityCard;
|
|
18814
|
+
exports.AdventureExplorer = AdventureExplorer;
|
|
17183
18815
|
exports.AgentContactCard = AgentContactCard;
|
|
17184
18816
|
exports.Alert = Alert;
|
|
17185
18817
|
exports.AskExo = AskExo;
|
|
17186
18818
|
exports.BirthDateField = BirthDateField;
|
|
17187
18819
|
exports.BlogCard = BlogCard;
|
|
18820
|
+
exports.BlogJournal = BlogJournal;
|
|
17188
18821
|
exports.BlogPost = BlogPost;
|
|
17189
18822
|
exports.BookingAdventureCard = BookingAdventureCard;
|
|
17190
18823
|
exports.BookingCancellationEmail = BookingCancellationEmail;
|
|
@@ -17200,8 +18833,17 @@ exports.Button = Button;
|
|
|
17200
18833
|
exports.COUNTRIES = COUNTRIES;
|
|
17201
18834
|
exports.CancellationForm = CancellationForm;
|
|
17202
18835
|
exports.CategoryPage2 = CategoryPage2;
|
|
18836
|
+
exports.Chip = Chip;
|
|
17203
18837
|
exports.CounterField = CounterField;
|
|
17204
18838
|
exports.CountrySearchField = CountrySearchField;
|
|
18839
|
+
exports.CtaBanner = CtaBanner;
|
|
18840
|
+
exports.DEFAULT_FOOTER_BADGES = DEFAULT_FOOTER_BADGES;
|
|
18841
|
+
exports.DEFAULT_FOOTER_DESTINATIONS = DEFAULT_FOOTER_DESTINATIONS;
|
|
18842
|
+
exports.DEFAULT_FOOTER_LANGUAGES = DEFAULT_FOOTER_LANGUAGES;
|
|
18843
|
+
exports.DEFAULT_FOOTER_LEGAL = DEFAULT_FOOTER_LEGAL;
|
|
18844
|
+
exports.DEFAULT_FOOTER_PAGES = DEFAULT_FOOTER_PAGES;
|
|
18845
|
+
exports.DEFAULT_FOOTER_SOCIALS = DEFAULT_FOOTER_SOCIALS;
|
|
18846
|
+
exports.DEFAULT_FOOTER_THEMES = DEFAULT_FOOTER_THEMES;
|
|
17205
18847
|
exports.DEFAULT_HEADER_LINKS = DEFAULT_HEADER_LINKS;
|
|
17206
18848
|
exports.DEFAULT_LANGUAGES = DEFAULT_LANGUAGES;
|
|
17207
18849
|
exports.DEPARTURE_STATUS_MAP = STATUS_MAP;
|
|
@@ -17219,11 +18861,13 @@ exports.FloatingInput = FloatingInput;
|
|
|
17219
18861
|
exports.FloatingSelect = FloatingSelect;
|
|
17220
18862
|
exports.GroupProgressBar = GroupProgressBar;
|
|
17221
18863
|
exports.GroupStatusBanner = GroupStatusBanner;
|
|
18864
|
+
exports.HomeHeader = HomeHeader;
|
|
17222
18865
|
exports.Itinerary = Itinerary;
|
|
17223
18866
|
exports.ItineraryDay = ItineraryDay;
|
|
17224
18867
|
exports.LOGO_PLANETAEXO_DATA_URI = LOGO_PLANETAEXO_DATA_URI;
|
|
17225
18868
|
exports.LeadCapturePopup = LeadCapturePopup;
|
|
17226
18869
|
exports.MenuTrip = MenuTrip;
|
|
18870
|
+
exports.NewHome = NewHome;
|
|
17227
18871
|
exports.NotificationEmail = NotificationEmail;
|
|
17228
18872
|
exports.OTPCodeInput = OTPCodeInput;
|
|
17229
18873
|
exports.Offer = Offer;
|
|
@@ -17249,7 +18893,9 @@ exports.RegistrationProgressBar = RegistrationProgressBar;
|
|
|
17249
18893
|
exports.RegistrationReminderEmail = RegistrationReminderEmail;
|
|
17250
18894
|
exports.RegistrationReminderIndividualEmail = RegistrationReminderIndividualEmail;
|
|
17251
18895
|
exports.RegistrationSuccessCard = RegistrationSuccessCard;
|
|
18896
|
+
exports.SegmentedControl = SegmentedControl;
|
|
17252
18897
|
exports.ShareWidget = ShareWidget;
|
|
18898
|
+
exports.SiteFooter = SiteFooter;
|
|
17253
18899
|
exports.SiteHeader = SiteHeader;
|
|
17254
18900
|
exports.StatusBadge = StatusBadge2;
|
|
17255
18901
|
exports.StickyBookingCard = StickyBookingCard;
|
|
@@ -17263,7 +18909,9 @@ exports.TripCard = TripCard;
|
|
|
17263
18909
|
exports.TripHeader = TripHeader;
|
|
17264
18910
|
exports.TripPage = TripPage;
|
|
17265
18911
|
exports.TrustpilotEmbed = TrustpilotEmbed;
|
|
18912
|
+
exports.USP = USP;
|
|
17266
18913
|
exports.buttonVariants = buttonVariants;
|
|
18914
|
+
exports.chipVariants = chipVariants;
|
|
17267
18915
|
exports.cn = cn;
|
|
17268
18916
|
exports.emailTokens = emailTokens;
|
|
17269
18917
|
exports.formatCpf = formatCpf;
|