@planetaexo/design-system 0.64.0 → 0.66.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 +2175 -406
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +774 -13
- package/dist/index.d.ts +774 -13
- package/dist/index.js +2160 -408
- 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
|
{
|
|
@@ -1326,7 +1327,7 @@ function AdventureCard({
|
|
|
1326
1327
|
labels,
|
|
1327
1328
|
interactionsDisabled
|
|
1328
1329
|
}) {
|
|
1329
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r
|
|
1330
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
1330
1331
|
const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
|
|
1331
1332
|
const [checkedInternal, setCheckedInternal] = React32__namespace.useState(
|
|
1332
1333
|
new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
|
|
@@ -1500,6 +1501,29 @@ function AdventureCard({
|
|
|
1500
1501
|
}
|
|
1501
1502
|
)
|
|
1502
1503
|
] }),
|
|
1504
|
+
adventure.rooms && adventure.rooms.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-5 mt-1", children: adventure.rooms.map((room, i) => {
|
|
1505
|
+
var _a2, _b2;
|
|
1506
|
+
const bedLabel = (_b2 = (_a2 = adventure.bedArrangementLabels) == null ? void 0 : _a2[room.bedArrangement]) != null ? _b2 : room.bedArrangement === "DOUBLE" ? "Double" : room.bedArrangement === "TWIN" ? "Twin" : room.bedArrangement === "SINGLE" ? "Single" : "Triple";
|
|
1507
|
+
const heading = adventure.accommodationRoomHeading ? adventure.accommodationRoomHeading(room.roomName) : `Accommodation: ${room.roomName}`;
|
|
1508
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
1509
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-lg font-semibold text-foreground font-heading", children: heading }),
|
|
1510
|
+
room.imageUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
1511
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1512
|
+
"img",
|
|
1513
|
+
{
|
|
1514
|
+
src: room.imageUrl,
|
|
1515
|
+
alt: room.roomName,
|
|
1516
|
+
className: "w-full h-auto max-w-full rounded"
|
|
1517
|
+
}
|
|
1518
|
+
),
|
|
1519
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-base font-semibold text-foreground", children: `${room.qty}\xD7 ${room.roomName}` }),
|
|
1520
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-foreground/70 flex items-center gap-2 flex-wrap", children: [
|
|
1521
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: room.accommodationName }),
|
|
1522
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-2 py-0.5 text-xs font-semibold bg-primary/10 text-primary rounded uppercase tracking-wide", children: bedLabel })
|
|
1523
|
+
] }),
|
|
1524
|
+
room.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/70 leading-snug", children: room.description })
|
|
1525
|
+
] }, i);
|
|
1526
|
+
}) }),
|
|
1503
1527
|
(adventure.description || adventure.detailsSlot) && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1504
1528
|
/* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-1" }),
|
|
1505
1529
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -1528,48 +1552,22 @@ function AdventureCard({
|
|
|
1528
1552
|
), children: adventure.detailsSlot })
|
|
1529
1553
|
] })
|
|
1530
1554
|
] }),
|
|
1531
|
-
adventure.rooms && adventure.rooms.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
|
|
1532
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_p = adventure.accommodationsLabel) != null ? _p : "Accommodations" }),
|
|
1533
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-3", children: adventure.rooms.map((room, i) => {
|
|
1534
|
-
var _a2, _b2;
|
|
1535
|
-
const bedLabel = (_b2 = (_a2 = adventure.bedArrangementLabels) == null ? void 0 : _a2[room.bedArrangement]) != null ? _b2 : room.bedArrangement === "DOUBLE" ? "Double" : room.bedArrangement === "TWIN" ? "Twin" : room.bedArrangement === "SINGLE" ? "Single" : "Triple";
|
|
1536
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-3", children: [
|
|
1537
|
-
room.imageUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
1538
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1539
|
-
"img",
|
|
1540
|
-
{
|
|
1541
|
-
src: room.imageUrl,
|
|
1542
|
-
alt: room.roomName,
|
|
1543
|
-
className: "w-20 h-16 object-cover rounded shrink-0"
|
|
1544
|
-
}
|
|
1545
|
-
),
|
|
1546
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
|
|
1547
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-base font-semibold text-foreground", children: `${room.qty}\xD7 ${room.roomName}` }),
|
|
1548
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-foreground/70 flex items-center gap-2 flex-wrap", children: [
|
|
1549
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: room.accommodationName }),
|
|
1550
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-2 py-0.5 text-xs font-semibold bg-primary/10 text-primary rounded uppercase tracking-wide", children: bedLabel })
|
|
1551
|
-
] }),
|
|
1552
|
-
room.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/70 mt-1 leading-snug", children: room.description })
|
|
1553
|
-
] })
|
|
1554
|
-
] }, i);
|
|
1555
|
-
}) })
|
|
1556
|
-
] }),
|
|
1557
1555
|
adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
|
|
1558
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (
|
|
1556
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_p = adventure.includedLabel) != null ? _p : "What's included" }),
|
|
1559
1557
|
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
|
|
1560
1558
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-1" }),
|
|
1561
1559
|
item
|
|
1562
1560
|
] }, i)) })
|
|
1563
1561
|
] }),
|
|
1564
1562
|
adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
|
|
1565
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (
|
|
1563
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_q = adventure.notIncludedLabel) != null ? _q : "What's not included" }),
|
|
1566
1564
|
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
|
|
1567
1565
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-1" }),
|
|
1568
1566
|
item
|
|
1569
1567
|
] }, i)) })
|
|
1570
1568
|
] }),
|
|
1571
1569
|
adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
|
|
1572
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (
|
|
1570
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_r = adventure.cancellationPolicyLabel) != null ? _r : "Cancellation policy" }),
|
|
1573
1571
|
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2 text-base text-muted-foreground font-sans", children: [
|
|
1574
1572
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
|
|
1575
1573
|
item
|
|
@@ -4146,6 +4144,7 @@ var DEFAULT_LABELS = {
|
|
|
4146
4144
|
adultsUnit: "adult(s)",
|
|
4147
4145
|
childrenUnit: "child(ren)",
|
|
4148
4146
|
accommodationsHeading: "ACCOMMODATIONS",
|
|
4147
|
+
accommodationRoomHeading: (name) => `Accommodation: ${name}`,
|
|
4149
4148
|
bedArrangementLabels: {
|
|
4150
4149
|
DOUBLE: "Double",
|
|
4151
4150
|
TWIN: "Twin",
|
|
@@ -4173,10 +4172,11 @@ function BookingAdventureCard({
|
|
|
4173
4172
|
lineItems,
|
|
4174
4173
|
subtotal,
|
|
4175
4174
|
rooms,
|
|
4175
|
+
roomLayout = "compact",
|
|
4176
4176
|
labels,
|
|
4177
4177
|
className
|
|
4178
4178
|
}) {
|
|
4179
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
4179
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
4180
4180
|
const l = {
|
|
4181
4181
|
travellersHeading: (_a = labels == null ? void 0 : labels.travellersHeading) != null ? _a : DEFAULT_LABELS.travellersHeading,
|
|
4182
4182
|
detailsHeading: (_b = labels == null ? void 0 : labels.detailsHeading) != null ? _b : DEFAULT_LABELS.detailsHeading,
|
|
@@ -4191,11 +4191,12 @@ function BookingAdventureCard({
|
|
|
4191
4191
|
adultsUnit: (_k = labels == null ? void 0 : labels.adultsUnit) != null ? _k : DEFAULT_LABELS.adultsUnit,
|
|
4192
4192
|
childrenUnit: (_l = labels == null ? void 0 : labels.childrenUnit) != null ? _l : DEFAULT_LABELS.childrenUnit,
|
|
4193
4193
|
accommodationsHeading: (_m = labels == null ? void 0 : labels.accommodationsHeading) != null ? _m : DEFAULT_LABELS.accommodationsHeading,
|
|
4194
|
+
accommodationRoomHeading: (_n = labels == null ? void 0 : labels.accommodationRoomHeading) != null ? _n : DEFAULT_LABELS.accommodationRoomHeading,
|
|
4194
4195
|
bedArrangementLabels: {
|
|
4195
|
-
DOUBLE: (
|
|
4196
|
-
TWIN: (
|
|
4197
|
-
SINGLE: (
|
|
4198
|
-
TRIPLE: (
|
|
4196
|
+
DOUBLE: (_p = (_o = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _o.DOUBLE) != null ? _p : DEFAULT_LABELS.bedArrangementLabels.DOUBLE,
|
|
4197
|
+
TWIN: (_r = (_q = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _q.TWIN) != null ? _r : DEFAULT_LABELS.bedArrangementLabels.TWIN,
|
|
4198
|
+
SINGLE: (_t = (_s = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _s.SINGLE) != null ? _t : DEFAULT_LABELS.bedArrangementLabels.SINGLE,
|
|
4199
|
+
TRIPLE: (_v = (_u = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _u.TRIPLE) != null ? _v : DEFAULT_LABELS.bedArrangementLabels.TRIPLE
|
|
4199
4200
|
}
|
|
4200
4201
|
};
|
|
4201
4202
|
const hasTravellers = !!travellers && travellers.length > 0;
|
|
@@ -4534,7 +4535,116 @@ function BookingAdventureCard({
|
|
|
4534
4535
|
);
|
|
4535
4536
|
})
|
|
4536
4537
|
] }),
|
|
4537
|
-
hasRooms && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: "4px" }, children: [
|
|
4538
|
+
hasRooms && roomLayout === "feature" && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: "4px" }, children: [
|
|
4539
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4540
|
+
"hr",
|
|
4541
|
+
{
|
|
4542
|
+
style: {
|
|
4543
|
+
border: "none",
|
|
4544
|
+
borderTop: `1px solid ${emailTokens.border}`,
|
|
4545
|
+
marginBottom: "10px"
|
|
4546
|
+
}
|
|
4547
|
+
}
|
|
4548
|
+
),
|
|
4549
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4550
|
+
"p",
|
|
4551
|
+
{
|
|
4552
|
+
style: {
|
|
4553
|
+
fontSize: "10px",
|
|
4554
|
+
fontWeight: 700,
|
|
4555
|
+
color: emailTokens.mutedForeground,
|
|
4556
|
+
textTransform: "uppercase",
|
|
4557
|
+
letterSpacing: "0.1em",
|
|
4558
|
+
margin: "0 0 10px 0"
|
|
4559
|
+
},
|
|
4560
|
+
children: l.accommodationsHeading
|
|
4561
|
+
}
|
|
4562
|
+
),
|
|
4563
|
+
rooms.map((room, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4564
|
+
"div",
|
|
4565
|
+
{
|
|
4566
|
+
style: {
|
|
4567
|
+
marginBottom: i < rooms.length - 1 ? "16px" : "0"
|
|
4568
|
+
},
|
|
4569
|
+
children: [
|
|
4570
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4571
|
+
"p",
|
|
4572
|
+
{
|
|
4573
|
+
style: {
|
|
4574
|
+
fontSize: "16px",
|
|
4575
|
+
fontWeight: 700,
|
|
4576
|
+
color: emailTokens.foreground,
|
|
4577
|
+
lineHeight: "1.3",
|
|
4578
|
+
margin: "0 0 8px 0"
|
|
4579
|
+
},
|
|
4580
|
+
children: l.accommodationRoomHeading(room.roomName)
|
|
4581
|
+
}
|
|
4582
|
+
),
|
|
4583
|
+
room.imageUrl && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginBottom: "8px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4584
|
+
"img",
|
|
4585
|
+
{
|
|
4586
|
+
src: room.imageUrl,
|
|
4587
|
+
alt: room.roomName,
|
|
4588
|
+
style: {
|
|
4589
|
+
width: "100%",
|
|
4590
|
+
height: "auto",
|
|
4591
|
+
maxWidth: "100%",
|
|
4592
|
+
display: "block",
|
|
4593
|
+
borderRadius: "8px"
|
|
4594
|
+
}
|
|
4595
|
+
}
|
|
4596
|
+
) }),
|
|
4597
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4598
|
+
"div",
|
|
4599
|
+
{
|
|
4600
|
+
style: {
|
|
4601
|
+
fontSize: "14px",
|
|
4602
|
+
fontWeight: 600,
|
|
4603
|
+
color: emailTokens.foreground,
|
|
4604
|
+
marginBottom: "2px"
|
|
4605
|
+
},
|
|
4606
|
+
children: `${room.qty}\xD7 ${room.roomName}`
|
|
4607
|
+
}
|
|
4608
|
+
),
|
|
4609
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: "12px", color: emailTokens.mutedForeground }, children: [
|
|
4610
|
+
room.accommodationName,
|
|
4611
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4612
|
+
"span",
|
|
4613
|
+
{
|
|
4614
|
+
style: {
|
|
4615
|
+
display: "inline-block",
|
|
4616
|
+
marginLeft: "8px",
|
|
4617
|
+
padding: "1px 6px",
|
|
4618
|
+
fontSize: "10px",
|
|
4619
|
+
fontWeight: 600,
|
|
4620
|
+
color: emailTokens.primary,
|
|
4621
|
+
backgroundColor: emailTokens.primaryLight,
|
|
4622
|
+
borderRadius: "4px",
|
|
4623
|
+
textTransform: "uppercase",
|
|
4624
|
+
letterSpacing: "0.05em"
|
|
4625
|
+
},
|
|
4626
|
+
children: l.bedArrangementLabels[room.bedArrangement]
|
|
4627
|
+
}
|
|
4628
|
+
)
|
|
4629
|
+
] }),
|
|
4630
|
+
room.description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4631
|
+
"div",
|
|
4632
|
+
{
|
|
4633
|
+
style: {
|
|
4634
|
+
fontSize: "12px",
|
|
4635
|
+
color: emailTokens.bodyText,
|
|
4636
|
+
marginTop: "4px",
|
|
4637
|
+
lineHeight: "1.4"
|
|
4638
|
+
},
|
|
4639
|
+
children: room.description
|
|
4640
|
+
}
|
|
4641
|
+
)
|
|
4642
|
+
]
|
|
4643
|
+
},
|
|
4644
|
+
i
|
|
4645
|
+
))
|
|
4646
|
+
] }),
|
|
4647
|
+
hasRooms && roomLayout === "compact" && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: "4px" }, children: [
|
|
4538
4648
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4539
4649
|
"hr",
|
|
4540
4650
|
{
|
|
@@ -5173,6 +5283,14 @@ var DEFAULT_LABELS3 = {
|
|
|
5173
5283
|
pricingLabel: "Pricing",
|
|
5174
5284
|
subtotalLabel: "Subtotal",
|
|
5175
5285
|
totalLabel: "Total",
|
|
5286
|
+
accommodationsLabel: "ACCOMMODATIONS",
|
|
5287
|
+
accommodationRoomHeading: (name) => `Accommodation: ${name}`,
|
|
5288
|
+
bedArrangementLabels: {
|
|
5289
|
+
DOUBLE: "Double",
|
|
5290
|
+
TWIN: "Twin",
|
|
5291
|
+
SINGLE: "Single",
|
|
5292
|
+
TRIPLE: "Triple"
|
|
5293
|
+
},
|
|
5176
5294
|
paymentSummaryHeading: "\u{1F4B0} Payment Summary",
|
|
5177
5295
|
paymentDetailsHeading: "Payment Details",
|
|
5178
5296
|
depositLabel: (percent) => `Deposit (${percent}%)`,
|
|
@@ -5341,6 +5459,7 @@ function BookingPaymentConfirmationEmail({
|
|
|
5341
5459
|
lineItems: lineItemsToPass,
|
|
5342
5460
|
subtotal: adventure.subtotal,
|
|
5343
5461
|
rooms: adventure.rooms,
|
|
5462
|
+
roomLayout: "feature",
|
|
5344
5463
|
labels: {
|
|
5345
5464
|
travellersHeading: l.travellersLabel,
|
|
5346
5465
|
detailsHeading: l.itineraryLabel,
|
|
@@ -5350,7 +5469,10 @@ function BookingPaymentConfirmationEmail({
|
|
|
5350
5469
|
notIncludedHeading: l.notIncludedLabel,
|
|
5351
5470
|
childBadge: l.childBadge,
|
|
5352
5471
|
adultsUnit: l.adultsUnit,
|
|
5353
|
-
childrenUnit: l.childrenUnit
|
|
5472
|
+
childrenUnit: l.childrenUnit,
|
|
5473
|
+
accommodationsHeading: l.accommodationsLabel,
|
|
5474
|
+
accommodationRoomHeading: l.accommodationRoomHeading,
|
|
5475
|
+
bedArrangementLabels: l.bedArrangementLabels
|
|
5354
5476
|
}
|
|
5355
5477
|
}
|
|
5356
5478
|
)
|
|
@@ -7930,7 +8052,8 @@ function DatePickerField({
|
|
|
7930
8052
|
placeholder = "Select a date",
|
|
7931
8053
|
disabled,
|
|
7932
8054
|
fromDate,
|
|
7933
|
-
className
|
|
8055
|
+
className,
|
|
8056
|
+
error
|
|
7934
8057
|
}) {
|
|
7935
8058
|
const [open, setOpen] = React32__namespace.useState(false);
|
|
7936
8059
|
const containerRef = React32__namespace.useRef(null);
|
|
@@ -7944,78 +8067,91 @@ function DatePickerField({
|
|
|
7944
8067
|
observer.observe(containerRef.current);
|
|
7945
8068
|
return () => observer.disconnect();
|
|
7946
8069
|
}, []);
|
|
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
|
-
}
|
|
8070
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: cn("w-full", className), children: [
|
|
8071
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
8072
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8073
|
+
PopoverTrigger,
|
|
8074
|
+
{
|
|
8075
|
+
disabled,
|
|
8076
|
+
className: cn(
|
|
8077
|
+
"relative flex w-full items-center rounded-lg border border-border bg-background",
|
|
8078
|
+
"px-3 text-left text-base font-ui transition-colors h-14",
|
|
8079
|
+
"focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
8080
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
8081
|
+
open && "border-primary ring-1 ring-primary",
|
|
8082
|
+
error && "border-destructive focus:border-destructive focus:ring-destructive"
|
|
7972
8083
|
),
|
|
7973
|
-
|
|
7974
|
-
|
|
8084
|
+
children: [
|
|
8085
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8086
|
+
"span",
|
|
8087
|
+
{
|
|
8088
|
+
className: cn(
|
|
8089
|
+
"pointer-events-none absolute left-3 transition-all duration-150 font-ui",
|
|
8090
|
+
hasValue || open ? "top-2 text-xs text-primary" : "top-1/2 -translate-y-1/2 text-base text-muted-foreground"
|
|
8091
|
+
),
|
|
8092
|
+
children: [
|
|
8093
|
+
label,
|
|
8094
|
+
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary ml-0.5", children: "*" })
|
|
8095
|
+
]
|
|
8096
|
+
}
|
|
8097
|
+
),
|
|
8098
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8099
|
+
"span",
|
|
8100
|
+
{
|
|
8101
|
+
className: cn(
|
|
8102
|
+
"flex-1 truncate mt-3",
|
|
8103
|
+
hasValue ? "text-foreground" : "invisible"
|
|
8104
|
+
),
|
|
8105
|
+
children: hasValue ? dateFns.format(value, "dd MMM yyyy") : placeholder
|
|
8106
|
+
}
|
|
8107
|
+
),
|
|
8108
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "ml-2 h-4 w-4 shrink-0 text-muted-foreground" })
|
|
8109
|
+
]
|
|
8110
|
+
}
|
|
8111
|
+
),
|
|
8112
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8113
|
+
PopoverContent,
|
|
8114
|
+
{
|
|
8115
|
+
className: "p-0",
|
|
8116
|
+
align: "start",
|
|
8117
|
+
style: calendarWidth ? { width: calendarWidth } : void 0,
|
|
8118
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8119
|
+
Calendar,
|
|
7975
8120
|
{
|
|
7976
|
-
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
|
|
7980
|
-
|
|
8121
|
+
mode: "single",
|
|
8122
|
+
selected: value,
|
|
8123
|
+
onSelect: (date) => {
|
|
8124
|
+
onChange == null ? void 0 : onChange(date);
|
|
8125
|
+
setOpen(false);
|
|
8126
|
+
},
|
|
8127
|
+
fromDate: fromDate != null ? fromDate : /* @__PURE__ */ new Date(),
|
|
8128
|
+
className: "font-ui w-full",
|
|
8129
|
+
autoFocus: true
|
|
7981
8130
|
}
|
|
7982
|
-
)
|
|
7983
|
-
|
|
7984
|
-
|
|
7985
|
-
|
|
7986
|
-
)
|
|
7987
|
-
|
|
7988
|
-
PopoverContent,
|
|
7989
|
-
{
|
|
7990
|
-
className: "p-0",
|
|
7991
|
-
align: "start",
|
|
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
|
-
] }) });
|
|
8131
|
+
)
|
|
8132
|
+
}
|
|
8133
|
+
)
|
|
8134
|
+
] }),
|
|
8135
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children: error })
|
|
8136
|
+
] });
|
|
8010
8137
|
}
|
|
8138
|
+
function dialFor(iso) {
|
|
8139
|
+
var _a, _b;
|
|
8140
|
+
return (_b = (_a = PHONE_COUNTRIES.find((c) => c.code === iso)) == null ? void 0 : _a.dial) != null ? _b : "";
|
|
8141
|
+
}
|
|
8142
|
+
var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
8011
8143
|
function FormSection({
|
|
8012
8144
|
title,
|
|
8145
|
+
required,
|
|
8013
8146
|
children,
|
|
8014
8147
|
className
|
|
8015
8148
|
}) {
|
|
8016
8149
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-5", className), children: [
|
|
8017
8150
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
|
|
8018
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8151
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-base font-bold text-foreground whitespace-nowrap font-heading", children: [
|
|
8152
|
+
title,
|
|
8153
|
+
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary ml-0.5", children: "*" })
|
|
8154
|
+
] }),
|
|
8019
8155
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-border" })
|
|
8020
8156
|
] }),
|
|
8021
8157
|
children
|
|
@@ -8031,24 +8167,67 @@ var defaultInitial = {
|
|
|
8031
8167
|
phoneCountry: "BR",
|
|
8032
8168
|
lastName: "",
|
|
8033
8169
|
firstName: "",
|
|
8034
|
-
country: "
|
|
8170
|
+
country: "",
|
|
8035
8171
|
phone: "",
|
|
8036
|
-
email: ""
|
|
8172
|
+
email: "",
|
|
8173
|
+
contactVia: "Email"
|
|
8037
8174
|
};
|
|
8038
8175
|
function BookingForm({
|
|
8039
8176
|
defaultValues,
|
|
8040
8177
|
onSubmit,
|
|
8041
|
-
submitLabel
|
|
8178
|
+
submitLabel,
|
|
8042
8179
|
loading = false,
|
|
8043
8180
|
showHeader = true,
|
|
8044
|
-
title
|
|
8045
|
-
subtitle
|
|
8181
|
+
title,
|
|
8182
|
+
subtitle,
|
|
8183
|
+
labels,
|
|
8046
8184
|
className
|
|
8047
8185
|
}) {
|
|
8186
|
+
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;
|
|
8187
|
+
const L = labels != null ? labels : {};
|
|
8188
|
+
const titleText = (_a = title != null ? title : L.title) != null ? _a : "Check availability for your trip";
|
|
8189
|
+
const subtitleText = (_b = subtitle != null ? subtitle : L.subtitle) != null ? _b : "Free enquiry \u2013 no commitment";
|
|
8190
|
+
const submitText = (_c = submitLabel != null ? submitLabel : L.submit) != null ? _c : "Send my request";
|
|
8048
8191
|
const [values, setValues] = React32__namespace.useState(__spreadValues(__spreadValues({}, defaultInitial), defaultValues));
|
|
8049
|
-
const
|
|
8192
|
+
const [errors, setErrors] = React32__namespace.useState({});
|
|
8193
|
+
const set = (key, value) => {
|
|
8194
|
+
setValues((prev) => __spreadProps(__spreadValues({}, prev), { [key]: value }));
|
|
8195
|
+
setErrors(
|
|
8196
|
+
(prev) => prev[key] ? __spreadProps(__spreadValues({}, prev), { [key]: void 0 }) : prev
|
|
8197
|
+
);
|
|
8198
|
+
};
|
|
8199
|
+
React32__namespace.useEffect(() => {
|
|
8200
|
+
if (!defaultValues) return;
|
|
8201
|
+
setValues((prev) => {
|
|
8202
|
+
let changed = false;
|
|
8203
|
+
const next = __spreadValues({}, prev);
|
|
8204
|
+
Object.keys(defaultValues).forEach(
|
|
8205
|
+
(k) => {
|
|
8206
|
+
const incoming = defaultValues[k];
|
|
8207
|
+
if (incoming === void 0 || incoming === "") return;
|
|
8208
|
+
if (prev[k] === defaultInitial[k]) {
|
|
8209
|
+
next[k] = incoming;
|
|
8210
|
+
changed = true;
|
|
8211
|
+
}
|
|
8212
|
+
}
|
|
8213
|
+
);
|
|
8214
|
+
return changed ? next : prev;
|
|
8215
|
+
});
|
|
8216
|
+
}, [defaultValues]);
|
|
8217
|
+
const reqMsg = (_d = L.errorRequired) != null ? _d : "This field is required";
|
|
8218
|
+
const emailMsg = (_e = L.errorEmail) != null ? _e : "Enter a valid email address";
|
|
8050
8219
|
const handleSubmit = (e) => {
|
|
8051
8220
|
e.preventDefault();
|
|
8221
|
+
const next = {};
|
|
8222
|
+
if (!values.firstName.trim()) next.firstName = reqMsg;
|
|
8223
|
+
if (!values.lastName.trim()) next.lastName = reqMsg;
|
|
8224
|
+
if (!values.email.trim()) next.email = reqMsg;
|
|
8225
|
+
else if (!EMAIL_RE.test(values.email.trim())) next.email = emailMsg;
|
|
8226
|
+
if (!values.travelDate) next.travelDate = reqMsg;
|
|
8227
|
+
if (!values.phone.trim()) next.phone = reqMsg;
|
|
8228
|
+
if (!values.contactVia) next.contactVia = reqMsg;
|
|
8229
|
+
setErrors(next);
|
|
8230
|
+
if (Object.keys(next).length > 0) return;
|
|
8052
8231
|
onSubmit == null ? void 0 : onSubmit(values);
|
|
8053
8232
|
};
|
|
8054
8233
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -8059,15 +8238,14 @@ function BookingForm({
|
|
|
8059
8238
|
noValidate: true,
|
|
8060
8239
|
children: [
|
|
8061
8240
|
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:
|
|
8241
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-black uppercase tracking-wide text-foreground font-heading leading-tight", children: titleText }),
|
|
8242
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-sm text-muted-foreground font-ui", children: subtitleText })
|
|
8064
8243
|
] }),
|
|
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: [
|
|
8244
|
+
/* @__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
8245
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8067
8246
|
CounterField,
|
|
8068
8247
|
{
|
|
8069
|
-
label: "Adults",
|
|
8070
|
-
required: true,
|
|
8248
|
+
label: (_g = L.adults) != null ? _g : "Adults",
|
|
8071
8249
|
value: values.adults,
|
|
8072
8250
|
min: 1,
|
|
8073
8251
|
onChange: (v) => set("adults", v)
|
|
@@ -8076,30 +8254,30 @@ function BookingForm({
|
|
|
8076
8254
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8077
8255
|
CounterField,
|
|
8078
8256
|
{
|
|
8079
|
-
label: "Children",
|
|
8080
|
-
sublabel: "(under 12)",
|
|
8257
|
+
label: (_h = L.children) != null ? _h : "Children",
|
|
8258
|
+
sublabel: (_i = L.childrenSublabel) != null ? _i : "(under 12)",
|
|
8081
8259
|
value: values.children,
|
|
8082
8260
|
min: 0,
|
|
8083
8261
|
onChange: (v) => set("children", v)
|
|
8084
8262
|
}
|
|
8085
8263
|
)
|
|
8086
8264
|
] }) }),
|
|
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: [
|
|
8265
|
+
/* @__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
8266
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8089
8267
|
DatePickerField,
|
|
8090
8268
|
{
|
|
8091
|
-
label: "Travel date",
|
|
8269
|
+
label: (_k = L.travelDate) != null ? _k : "Travel date",
|
|
8092
8270
|
required: true,
|
|
8093
8271
|
value: values.travelDate,
|
|
8094
8272
|
onChange: (d) => set("travelDate", d),
|
|
8095
|
-
placeholder: "Pick a date"
|
|
8273
|
+
placeholder: (_l = L.pickDate) != null ? _l : "Pick a date",
|
|
8274
|
+
error: errors.travelDate
|
|
8096
8275
|
}
|
|
8097
8276
|
),
|
|
8098
8277
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8099
8278
|
FloatingInput,
|
|
8100
8279
|
{
|
|
8101
|
-
label: "Budget (per person)",
|
|
8102
|
-
required: true,
|
|
8280
|
+
label: (_m = L.budget) != null ? _m : "Budget (per person)",
|
|
8103
8281
|
type: "number",
|
|
8104
8282
|
min: 0,
|
|
8105
8283
|
value: values.budget,
|
|
@@ -8107,7 +8285,7 @@ function BookingForm({
|
|
|
8107
8285
|
}
|
|
8108
8286
|
)
|
|
8109
8287
|
] }) }),
|
|
8110
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: "Tell us about your trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
8288
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormSection, { title: (_n = L.projectSection) != null ? _n : "Tell us about your trip", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
8111
8289
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8112
8290
|
"textarea",
|
|
8113
8291
|
{
|
|
@@ -8135,140 +8313,184 @@ function BookingForm({
|
|
|
8135
8313
|
"peer-not-placeholder-shown:top-2 peer-not-placeholder-shown:text-xs peer-not-placeholder-shown:text-muted-foreground"
|
|
8136
8314
|
),
|
|
8137
8315
|
children: [
|
|
8138
|
-
"Your trip in a few words",
|
|
8316
|
+
(_o = L.projectLabel) != null ? _o : "Your trip in a few words",
|
|
8139
8317
|
" ",
|
|
8140
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-normal", children: "(optional)" })
|
|
8318
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-normal", children: (_p = L.optional) != null ? _p : "(optional)" })
|
|
8141
8319
|
]
|
|
8142
8320
|
}
|
|
8143
8321
|
)
|
|
8144
8322
|
] }) }),
|
|
8145
|
-
/* @__PURE__ */ jsxRuntime.jsxs(FormSection, { title: "Contact details", children: [
|
|
8323
|
+
/* @__PURE__ */ jsxRuntime.jsxs(FormSection, { title: (_q = L.contactSection) != null ? _q : "Contact details", children: [
|
|
8146
8324
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8147
8325
|
"div",
|
|
8148
8326
|
{
|
|
8149
8327
|
role: "radiogroup",
|
|
8150
|
-
"aria-label": "Title",
|
|
8328
|
+
"aria-label": (_r = L.titleAria) != null ? _r : "Title",
|
|
8151
8329
|
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
|
-
|
|
8330
|
+
children: ["ms", "mr"].map((c) => {
|
|
8331
|
+
var _a2, _b2;
|
|
8332
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8333
|
+
"label",
|
|
8334
|
+
{
|
|
8335
|
+
className: "flex min-h-9 cursor-pointer items-center gap-2.5 font-ui text-sm text-foreground",
|
|
8336
|
+
children: [
|
|
8337
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8338
|
+
"input",
|
|
8339
|
+
{
|
|
8340
|
+
type: "radio",
|
|
8341
|
+
name: "civility",
|
|
8342
|
+
value: c,
|
|
8343
|
+
checked: values.civility === c,
|
|
8344
|
+
onChange: () => set("civility", c),
|
|
8345
|
+
className: "h-4 w-4 shrink-0 accent-primary cursor-pointer"
|
|
8346
|
+
}
|
|
8347
|
+
),
|
|
8348
|
+
c === "ms" ? (_a2 = L.ms) != null ? _a2 : "Ms." : (_b2 = L.mr) != null ? _b2 : "Mr."
|
|
8349
|
+
]
|
|
8350
|
+
},
|
|
8351
|
+
c
|
|
8352
|
+
);
|
|
8353
|
+
})
|
|
8173
8354
|
}
|
|
8174
8355
|
),
|
|
8175
8356
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 min-w-0", children: [
|
|
8176
8357
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8177
8358
|
FloatingInput,
|
|
8178
8359
|
{
|
|
8179
|
-
label: "Last name",
|
|
8360
|
+
label: (_s = L.lastName) != null ? _s : "Last name",
|
|
8180
8361
|
required: true,
|
|
8181
8362
|
value: values.lastName,
|
|
8182
|
-
onChange: (e) => set("lastName", e.target.value)
|
|
8363
|
+
onChange: (e) => set("lastName", e.target.value),
|
|
8364
|
+
error: errors.lastName
|
|
8183
8365
|
}
|
|
8184
8366
|
) }),
|
|
8185
8367
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8186
8368
|
FloatingInput,
|
|
8187
8369
|
{
|
|
8188
|
-
label: "First name",
|
|
8370
|
+
label: (_t = L.firstName) != null ? _t : "First name",
|
|
8189
8371
|
required: true,
|
|
8190
8372
|
value: values.firstName,
|
|
8191
|
-
onChange: (e) => set("firstName", e.target.value)
|
|
8373
|
+
onChange: (e) => set("firstName", e.target.value),
|
|
8374
|
+
error: errors.firstName
|
|
8192
8375
|
}
|
|
8193
8376
|
) }),
|
|
8194
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 sm:col-span-2 lg:col-span-1", children: /* @__PURE__ */ jsxRuntime.
|
|
8195
|
-
|
|
8377
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 sm:col-span-2 lg:col-span-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8378
|
+
CountrySearchField,
|
|
8196
8379
|
{
|
|
8197
|
-
label: "Country of residence",
|
|
8198
|
-
required: true,
|
|
8380
|
+
label: (_u = L.country) != null ? _u : "Country of residence",
|
|
8199
8381
|
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
|
-
]
|
|
8382
|
+
onChange: (code) => set("country", code),
|
|
8383
|
+
countries: COUNTRIES
|
|
8212
8384
|
}
|
|
8213
8385
|
) })
|
|
8214
8386
|
] }),
|
|
8215
8387
|
/* @__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: [
|
|
8388
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
8389
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full min-w-0", children: [
|
|
8226
8390
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8227
|
-
|
|
8391
|
+
PhoneCountrySelect,
|
|
8228
8392
|
{
|
|
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
|
-
)
|
|
8393
|
+
value: values.phoneCountry,
|
|
8394
|
+
onChange: (code) => set("phoneCountry", code),
|
|
8395
|
+
className: "shrink-0",
|
|
8396
|
+
showDial: false
|
|
8240
8397
|
}
|
|
8241
8398
|
),
|
|
8242
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8243
|
-
|
|
8244
|
-
|
|
8245
|
-
|
|
8246
|
-
|
|
8247
|
-
|
|
8248
|
-
"
|
|
8249
|
-
|
|
8250
|
-
|
|
8251
|
-
|
|
8252
|
-
|
|
8253
|
-
|
|
8254
|
-
|
|
8255
|
-
|
|
8256
|
-
|
|
8257
|
-
|
|
8258
|
-
|
|
8259
|
-
|
|
8260
|
-
|
|
8261
|
-
|
|
8262
|
-
|
|
8263
|
-
|
|
8264
|
-
|
|
8399
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-w-0 flex-1", children: [
|
|
8400
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8401
|
+
"input",
|
|
8402
|
+
{
|
|
8403
|
+
id: "phone",
|
|
8404
|
+
type: "tel",
|
|
8405
|
+
placeholder: " ",
|
|
8406
|
+
value: `${dialFor(values.phoneCountry)} ${values.phone}`,
|
|
8407
|
+
onChange: (e) => {
|
|
8408
|
+
const dial = dialFor(values.phoneCountry);
|
|
8409
|
+
let national = e.target.value;
|
|
8410
|
+
if (national.startsWith(dial)) national = national.slice(dial.length);
|
|
8411
|
+
national = national.replace(/^\s+/, "");
|
|
8412
|
+
set("phone", national);
|
|
8413
|
+
},
|
|
8414
|
+
className: cn(
|
|
8415
|
+
"peer block h-14 w-full rounded-r-lg border border-border bg-background",
|
|
8416
|
+
"px-3 pt-5 pb-2 text-base text-foreground font-ui",
|
|
8417
|
+
"transition-colors placeholder-transparent",
|
|
8418
|
+
"focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary",
|
|
8419
|
+
errors.phone && "border-destructive focus:border-destructive focus:ring-destructive"
|
|
8420
|
+
)
|
|
8421
|
+
}
|
|
8422
|
+
),
|
|
8423
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8424
|
+
"label",
|
|
8425
|
+
{
|
|
8426
|
+
htmlFor: "phone",
|
|
8427
|
+
className: cn(
|
|
8428
|
+
"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2",
|
|
8429
|
+
"text-base text-muted-foreground font-ui transition-all duration-150",
|
|
8430
|
+
"peer-focus:top-3 peer-focus:translate-y-0 peer-focus:text-xs peer-focus:text-primary",
|
|
8431
|
+
"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"
|
|
8432
|
+
),
|
|
8433
|
+
children: [
|
|
8434
|
+
(_v = L.phone) != null ? _v : "Phone",
|
|
8435
|
+
" ",
|
|
8436
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: "*" })
|
|
8437
|
+
]
|
|
8438
|
+
}
|
|
8439
|
+
)
|
|
8440
|
+
] })
|
|
8441
|
+
] }),
|
|
8442
|
+
errors.phone && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive font-ui", children: errors.phone })
|
|
8443
|
+
] }),
|
|
8444
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8445
|
+
FloatingInput,
|
|
8446
|
+
{
|
|
8447
|
+
label: (_w = L.email) != null ? _w : "Email",
|
|
8448
|
+
required: true,
|
|
8265
8449
|
type: "email",
|
|
8266
8450
|
value: values.email,
|
|
8267
|
-
onChange: (e) => set("email", e.target.value)
|
|
8451
|
+
onChange: (e) => set("email", e.target.value),
|
|
8452
|
+
error: errors.email
|
|
8268
8453
|
}
|
|
8269
8454
|
) })
|
|
8270
8455
|
] })
|
|
8271
8456
|
] }),
|
|
8457
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8458
|
+
FormSection,
|
|
8459
|
+
{
|
|
8460
|
+
title: (_x = L.contactViaSection) != null ? _x : "How should we contact you?",
|
|
8461
|
+
required: true,
|
|
8462
|
+
children: [
|
|
8463
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8464
|
+
"div",
|
|
8465
|
+
{
|
|
8466
|
+
role: "radiogroup",
|
|
8467
|
+
"aria-label": (_y = L.contactViaSection) != null ? _y : "How should we contact you?",
|
|
8468
|
+
className: "inline-flex flex-wrap rounded-full border border-border bg-background p-1",
|
|
8469
|
+
children: [
|
|
8470
|
+
["WhatsApp", (_z = L.contactViaWhatsApp) != null ? _z : "WhatsApp"],
|
|
8471
|
+
["Email", (_A = L.contactViaEmail) != null ? _A : "Email"],
|
|
8472
|
+
["Phone", (_B = L.contactViaPhone) != null ? _B : "Phone"]
|
|
8473
|
+
].map(([value, label]) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
8474
|
+
"button",
|
|
8475
|
+
{
|
|
8476
|
+
type: "button",
|
|
8477
|
+
role: "radio",
|
|
8478
|
+
"aria-checked": values.contactVia === value,
|
|
8479
|
+
onClick: () => set("contactVia", value),
|
|
8480
|
+
className: cn(
|
|
8481
|
+
"whitespace-nowrap rounded-full px-5 py-2 font-heading text-[13px] font-semibold transition-colors",
|
|
8482
|
+
values.contactVia === value ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:text-foreground"
|
|
8483
|
+
),
|
|
8484
|
+
children: label
|
|
8485
|
+
},
|
|
8486
|
+
value
|
|
8487
|
+
))
|
|
8488
|
+
}
|
|
8489
|
+
),
|
|
8490
|
+
errors.contactVia && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive font-ui", children: errors.contactVia })
|
|
8491
|
+
]
|
|
8492
|
+
}
|
|
8493
|
+
),
|
|
8272
8494
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center pt-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8273
8495
|
"button",
|
|
8274
8496
|
{
|
|
@@ -8303,8 +8525,8 @@ function BookingForm({
|
|
|
8303
8525
|
}
|
|
8304
8526
|
)
|
|
8305
8527
|
] }),
|
|
8306
|
-
"Sending\u2026"
|
|
8307
|
-
] }) :
|
|
8528
|
+
(_C = L.sending) != null ? _C : "Sending\u2026"
|
|
8529
|
+
] }) : submitText
|
|
8308
8530
|
}
|
|
8309
8531
|
) })
|
|
8310
8532
|
]
|
|
@@ -10053,56 +10275,66 @@ function AccordionItem(_a) {
|
|
|
10053
10275
|
function AccordionTrigger(_a) {
|
|
10054
10276
|
var _b = _a, {
|
|
10055
10277
|
className,
|
|
10056
|
-
children
|
|
10278
|
+
children,
|
|
10279
|
+
headingLevel
|
|
10057
10280
|
} = _b, props = __objRest(_b, [
|
|
10058
10281
|
"className",
|
|
10059
|
-
"children"
|
|
10282
|
+
"children",
|
|
10283
|
+
"headingLevel"
|
|
10060
10284
|
]);
|
|
10061
10285
|
const variant = React32__namespace.useContext(AccordionVariantContext);
|
|
10062
|
-
|
|
10063
|
-
|
|
10286
|
+
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;
|
|
10287
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10288
|
+
accordion.Accordion.Header,
|
|
10064
10289
|
__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
|
-
}
|
|
10290
|
+
className: "flex"
|
|
10291
|
+
}, headingRender ? { render: headingRender } : {}), {
|
|
10292
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10293
|
+
accordion.Accordion.Trigger,
|
|
10294
|
+
__spreadProps(__spreadValues({
|
|
10295
|
+
"data-slot": "accordion-trigger",
|
|
10296
|
+
className: cn(
|
|
10297
|
+
"group/accordion-trigger relative flex flex-1 items-center justify-between text-left transition-all outline-none",
|
|
10298
|
+
"focus-visible:ring-3 focus-visible:ring-ring/50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
|
|
10299
|
+
variant === "default" && [
|
|
10300
|
+
"rounded-lg border border-transparent py-2.5 text-sm font-medium",
|
|
10301
|
+
"hover:underline focus-visible:border-ring",
|
|
10302
|
+
"**:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground"
|
|
10303
|
+
],
|
|
10304
|
+
variant === "faq" && [
|
|
10305
|
+
"px-5 py-4 text-base font-bold",
|
|
10306
|
+
"hover:bg-muted/30 rounded-lg"
|
|
10307
|
+
],
|
|
10308
|
+
className
|
|
10097
10309
|
)
|
|
10098
|
-
|
|
10099
|
-
|
|
10100
|
-
|
|
10101
|
-
|
|
10102
|
-
|
|
10103
|
-
|
|
10310
|
+
}, props), {
|
|
10311
|
+
children: [
|
|
10312
|
+
children,
|
|
10313
|
+
variant === "default" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10314
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10315
|
+
lucideReact.ChevronDownIcon,
|
|
10316
|
+
{
|
|
10317
|
+
"data-slot": "accordion-trigger-icon",
|
|
10318
|
+
className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
|
|
10319
|
+
}
|
|
10320
|
+
),
|
|
10321
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10322
|
+
lucideReact.ChevronUpIcon,
|
|
10323
|
+
{
|
|
10324
|
+
"data-slot": "accordion-trigger-icon",
|
|
10325
|
+
className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
|
|
10326
|
+
}
|
|
10327
|
+
)
|
|
10328
|
+
] }),
|
|
10329
|
+
variant === "faq" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
10330
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { className: "pointer-events-none shrink-0 size-5 text-foreground group-aria-expanded/accordion-trigger:hidden" }),
|
|
10331
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MinusIcon, { className: "pointer-events-none hidden shrink-0 size-5 text-foreground group-aria-expanded/accordion-trigger:inline" })
|
|
10332
|
+
] })
|
|
10333
|
+
]
|
|
10334
|
+
})
|
|
10335
|
+
)
|
|
10104
10336
|
})
|
|
10105
|
-
)
|
|
10337
|
+
);
|
|
10106
10338
|
}
|
|
10107
10339
|
function AccordionContent(_a) {
|
|
10108
10340
|
var _b = _a, {
|
|
@@ -10327,9 +10559,10 @@ function FilterPanel({
|
|
|
10327
10559
|
variant = "sidebar",
|
|
10328
10560
|
sortOptions,
|
|
10329
10561
|
sort,
|
|
10330
|
-
onSortChange
|
|
10562
|
+
onSortChange,
|
|
10563
|
+
labels
|
|
10331
10564
|
}) {
|
|
10332
|
-
var _a, _b;
|
|
10565
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
10333
10566
|
const resolvedGroups = React32__namespace.useMemo(() => resolveGroups(groups), [groups]);
|
|
10334
10567
|
const [internalValue, setInternalValue] = React32__namespace.useState(
|
|
10335
10568
|
() => Object.fromEntries(groups.map((g) => [g.id, []]))
|
|
@@ -10467,7 +10700,7 @@ function FilterPanel({
|
|
|
10467
10700
|
type: "button",
|
|
10468
10701
|
onClick: handleClearAll,
|
|
10469
10702
|
className: "text-sm font-ui font-semibold text-muted-foreground underline underline-offset-2 hover:text-foreground",
|
|
10470
|
-
children: "Clear all"
|
|
10703
|
+
children: (_b = labels == null ? void 0 : labels.clearAll) != null ? _b : "Clear all"
|
|
10471
10704
|
}
|
|
10472
10705
|
),
|
|
10473
10706
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -10481,9 +10714,8 @@ function FilterPanel({
|
|
|
10481
10714
|
}
|
|
10482
10715
|
),
|
|
10483
10716
|
children: [
|
|
10484
|
-
"Show ",
|
|
10485
|
-
totalSelected > 0 ? `(${totalSelected})` : ""
|
|
10486
|
-
" results"
|
|
10717
|
+
(_c = labels == null ? void 0 : labels.showResults) != null ? _c : "Show results",
|
|
10718
|
+
totalSelected > 0 ? ` (${totalSelected})` : ""
|
|
10487
10719
|
]
|
|
10488
10720
|
}
|
|
10489
10721
|
)
|
|
@@ -10508,7 +10740,7 @@ function FilterPanel({
|
|
|
10508
10740
|
}
|
|
10509
10741
|
),
|
|
10510
10742
|
children: [
|
|
10511
|
-
"Sort",
|
|
10743
|
+
(_d = labels == null ? void 0 : labels.sortLabel) != null ? _d : "Sort",
|
|
10512
10744
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" })
|
|
10513
10745
|
]
|
|
10514
10746
|
}
|
|
@@ -10618,14 +10850,15 @@ function FilterPanel({
|
|
|
10618
10850
|
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
10851
|
children: [
|
|
10620
10852
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "h-3 w-3" }),
|
|
10621
|
-
"Clear all
|
|
10853
|
+
(_e = labels == null ? void 0 : labels.clearAll) != null ? _e : "Clear all",
|
|
10854
|
+
" (",
|
|
10622
10855
|
totalSelected,
|
|
10623
10856
|
")"
|
|
10624
10857
|
]
|
|
10625
10858
|
}
|
|
10626
10859
|
),
|
|
10627
10860
|
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" }),
|
|
10861
|
+
/* @__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
10862
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
|
|
10630
10863
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
10631
10864
|
PopoverTrigger,
|
|
@@ -10642,7 +10875,7 @@ function FilterPanel({
|
|
|
10642
10875
|
}
|
|
10643
10876
|
),
|
|
10644
10877
|
children: [
|
|
10645
|
-
(
|
|
10878
|
+
(_g = activeSort == null ? void 0 : activeSort.label) != null ? _g : "Default",
|
|
10646
10879
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-3.5 w-3.5 text-muted-foreground" })
|
|
10647
10880
|
]
|
|
10648
10881
|
}
|
|
@@ -10714,7 +10947,7 @@ function FilterPanel({
|
|
|
10714
10947
|
{
|
|
10715
10948
|
onClick: handleClearAll,
|
|
10716
10949
|
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"
|
|
10950
|
+
children: (_h = labels == null ? void 0 : labels.removeAllFilters) != null ? _h : "Remove all filters"
|
|
10718
10951
|
}
|
|
10719
10952
|
)
|
|
10720
10953
|
] });
|
|
@@ -10983,7 +11216,7 @@ function Picture(_a) {
|
|
|
10983
11216
|
"onLoad",
|
|
10984
11217
|
"onError"
|
|
10985
11218
|
]);
|
|
10986
|
-
var _a2;
|
|
11219
|
+
var _a2, _b2;
|
|
10987
11220
|
const ref = React32__namespace.useRef(null);
|
|
10988
11221
|
const [visible, setVisible] = React32__namespace.useState(eager);
|
|
10989
11222
|
const [loaded, setLoaded] = React32__namespace.useState(false);
|
|
@@ -11011,8 +11244,9 @@ function Picture(_a) {
|
|
|
11011
11244
|
}, [src]);
|
|
11012
11245
|
const webp = webpVariantUrl(src);
|
|
11013
11246
|
const realSrc = visible ? src : PLACEHOLDER_SRC;
|
|
11247
|
+
const resolvedTitle = (_a2 = imgProps.title) != null ? _a2 : typeof imgProps.alt === "string" && imgProps.alt.trim() ? imgProps.alt : void 0;
|
|
11014
11248
|
const decodingResolved = decoding != null ? decoding : eager ? void 0 : "async";
|
|
11015
|
-
const fetchPriorityResolved = (
|
|
11249
|
+
const fetchPriorityResolved = (_b2 = imgProps.fetchPriority) != null ? _b2 : eager ? void 0 : "low";
|
|
11016
11250
|
const handleLoad = (e) => {
|
|
11017
11251
|
if (visible) setLoaded(true);
|
|
11018
11252
|
onLoad == null ? void 0 : onLoad(e);
|
|
@@ -11038,6 +11272,7 @@ function Picture(_a) {
|
|
|
11038
11272
|
onLoad: handleLoad,
|
|
11039
11273
|
onError: handleError
|
|
11040
11274
|
}, imgProps), {
|
|
11275
|
+
title: resolvedTitle,
|
|
11041
11276
|
fetchPriority: fetchPriorityResolved,
|
|
11042
11277
|
style: mergedStyle
|
|
11043
11278
|
})
|
|
@@ -11061,6 +11296,7 @@ function Picture(_a) {
|
|
|
11061
11296
|
onLoad: handleLoad,
|
|
11062
11297
|
onError: handleError
|
|
11063
11298
|
}, imgProps), {
|
|
11299
|
+
title: resolvedTitle,
|
|
11064
11300
|
fetchPriority: fetchPriorityResolved,
|
|
11065
11301
|
style: mergedStyle
|
|
11066
11302
|
})
|
|
@@ -11355,9 +11591,10 @@ function gridCols(total) {
|
|
|
11355
11591
|
function Lightbox({
|
|
11356
11592
|
photos,
|
|
11357
11593
|
initialIndex,
|
|
11358
|
-
onClose
|
|
11594
|
+
onClose,
|
|
11595
|
+
labels
|
|
11359
11596
|
}) {
|
|
11360
|
-
var _a;
|
|
11597
|
+
var _a, _b, _c, _d;
|
|
11361
11598
|
const [index, setIndex] = React32__namespace.useState(initialIndex);
|
|
11362
11599
|
const total = photos.length;
|
|
11363
11600
|
const photo = photos[index];
|
|
@@ -11390,7 +11627,7 @@ function Lightbox({
|
|
|
11390
11627
|
type: "button",
|
|
11391
11628
|
onClick: onClose,
|
|
11392
11629
|
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",
|
|
11630
|
+
"aria-label": (_a = labels == null ? void 0 : labels.close) != null ? _a : "Close lightbox",
|
|
11394
11631
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "h-5 w-5" })
|
|
11395
11632
|
}
|
|
11396
11633
|
),
|
|
@@ -11403,7 +11640,7 @@ function Lightbox({
|
|
|
11403
11640
|
prev();
|
|
11404
11641
|
},
|
|
11405
11642
|
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",
|
|
11643
|
+
"aria-label": (_b = labels == null ? void 0 : labels.previous) != null ? _b : "Previous photo",
|
|
11407
11644
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
11408
11645
|
}
|
|
11409
11646
|
),
|
|
@@ -11416,7 +11653,7 @@ function Lightbox({
|
|
|
11416
11653
|
next();
|
|
11417
11654
|
},
|
|
11418
11655
|
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",
|
|
11656
|
+
"aria-label": (_c = labels == null ? void 0 : labels.next) != null ? _c : "Next photo",
|
|
11420
11657
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
11421
11658
|
}
|
|
11422
11659
|
),
|
|
@@ -11424,7 +11661,8 @@ function Lightbox({
|
|
|
11424
11661
|
Picture,
|
|
11425
11662
|
{
|
|
11426
11663
|
src: photo.src,
|
|
11427
|
-
alt: (
|
|
11664
|
+
alt: (_d = photo.alt) != null ? _d : `Photo ${index + 1}`,
|
|
11665
|
+
title: photo.caption,
|
|
11428
11666
|
className: "max-w-[calc(100%-6rem)] max-h-[calc(100vh-11rem)] object-contain rounded-lg shadow-2xl",
|
|
11429
11667
|
onClick: (e) => e.stopPropagation()
|
|
11430
11668
|
}
|
|
@@ -11494,6 +11732,7 @@ function PhotoTile({
|
|
|
11494
11732
|
{
|
|
11495
11733
|
src: photo.src,
|
|
11496
11734
|
alt: (_b = photo.alt) != null ? _b : `Photo ${index + 1}`,
|
|
11735
|
+
title: photo.caption,
|
|
11497
11736
|
className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11498
11737
|
loading: "lazy"
|
|
11499
11738
|
}
|
|
@@ -11507,8 +11746,10 @@ function PhotoTile({
|
|
|
11507
11746
|
function ShowMoreButton({
|
|
11508
11747
|
count,
|
|
11509
11748
|
expanded,
|
|
11510
|
-
onClick
|
|
11749
|
+
onClick,
|
|
11750
|
+
labels
|
|
11511
11751
|
}) {
|
|
11752
|
+
var _a, _b;
|
|
11512
11753
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center py-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11513
11754
|
"button",
|
|
11514
11755
|
{
|
|
@@ -11522,10 +11763,11 @@ function ShowMoreButton({
|
|
|
11522
11763
|
),
|
|
11523
11764
|
children: expanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11524
11765
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
11525
|
-
"Show less"
|
|
11766
|
+
(_a = labels == null ? void 0 : labels.showLess) != null ? _a : "Show less"
|
|
11526
11767
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11527
11768
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutGridIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
11528
|
-
"See more
|
|
11769
|
+
(_b = labels == null ? void 0 : labels.seeMore) != null ? _b : "See more",
|
|
11770
|
+
" (",
|
|
11529
11771
|
count,
|
|
11530
11772
|
")"
|
|
11531
11773
|
] })
|
|
@@ -11535,7 +11777,8 @@ function ShowMoreButton({
|
|
|
11535
11777
|
function GridGallery({
|
|
11536
11778
|
photos,
|
|
11537
11779
|
initialVisible,
|
|
11538
|
-
onOpen
|
|
11780
|
+
onOpen,
|
|
11781
|
+
labels
|
|
11539
11782
|
}) {
|
|
11540
11783
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11541
11784
|
const cols = gridCols(photos.length);
|
|
@@ -11557,7 +11800,8 @@ function GridGallery({
|
|
|
11557
11800
|
{
|
|
11558
11801
|
count: photos.length - initialVisible,
|
|
11559
11802
|
expanded,
|
|
11560
|
-
onClick: () => setExpanded((v) => !v)
|
|
11803
|
+
onClick: () => setExpanded((v) => !v),
|
|
11804
|
+
labels
|
|
11561
11805
|
}
|
|
11562
11806
|
)
|
|
11563
11807
|
] });
|
|
@@ -11565,7 +11809,8 @@ function GridGallery({
|
|
|
11565
11809
|
function CompactGridGallery({
|
|
11566
11810
|
photos,
|
|
11567
11811
|
initialVisible,
|
|
11568
|
-
onOpen
|
|
11812
|
+
onOpen,
|
|
11813
|
+
labels
|
|
11569
11814
|
}) {
|
|
11570
11815
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11571
11816
|
const hasMore = photos.length > initialVisible;
|
|
@@ -11586,7 +11831,8 @@ function CompactGridGallery({
|
|
|
11586
11831
|
{
|
|
11587
11832
|
count: photos.length - initialVisible,
|
|
11588
11833
|
expanded,
|
|
11589
|
-
onClick: () => setExpanded((v) => !v)
|
|
11834
|
+
onClick: () => setExpanded((v) => !v),
|
|
11835
|
+
labels
|
|
11590
11836
|
}
|
|
11591
11837
|
)
|
|
11592
11838
|
] });
|
|
@@ -11594,7 +11840,8 @@ function CompactGridGallery({
|
|
|
11594
11840
|
function MasonryGallery({
|
|
11595
11841
|
photos,
|
|
11596
11842
|
initialVisible,
|
|
11597
|
-
onOpen
|
|
11843
|
+
onOpen,
|
|
11844
|
+
labels
|
|
11598
11845
|
}) {
|
|
11599
11846
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11600
11847
|
const hasMore = photos.length > initialVisible;
|
|
@@ -11615,6 +11862,7 @@ function MasonryGallery({
|
|
|
11615
11862
|
{
|
|
11616
11863
|
src: p.src,
|
|
11617
11864
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 1}`,
|
|
11865
|
+
title: p.caption,
|
|
11618
11866
|
className: "w-full h-auto object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11619
11867
|
loading: "lazy"
|
|
11620
11868
|
}
|
|
@@ -11630,7 +11878,8 @@ function MasonryGallery({
|
|
|
11630
11878
|
{
|
|
11631
11879
|
count: photos.length - initialVisible,
|
|
11632
11880
|
expanded,
|
|
11633
|
-
onClick: () => setExpanded((v) => !v)
|
|
11881
|
+
onClick: () => setExpanded((v) => !v),
|
|
11882
|
+
labels
|
|
11634
11883
|
}
|
|
11635
11884
|
)
|
|
11636
11885
|
] });
|
|
@@ -11654,6 +11903,7 @@ function FilmstripGallery({
|
|
|
11654
11903
|
{
|
|
11655
11904
|
src: p.src,
|
|
11656
11905
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 1}`,
|
|
11906
|
+
title: p.caption,
|
|
11657
11907
|
className: "h-full w-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11658
11908
|
loading: "lazy"
|
|
11659
11909
|
}
|
|
@@ -11667,7 +11917,8 @@ function FilmstripGallery({
|
|
|
11667
11917
|
}
|
|
11668
11918
|
function FeaturedGallery({
|
|
11669
11919
|
photos,
|
|
11670
|
-
onOpen
|
|
11920
|
+
onOpen,
|
|
11921
|
+
labels
|
|
11671
11922
|
}) {
|
|
11672
11923
|
const [expanded, setExpanded] = React32__namespace.useState(false);
|
|
11673
11924
|
const featured = photos.slice(0, 3);
|
|
@@ -11719,6 +11970,7 @@ function FeaturedGallery({
|
|
|
11719
11970
|
{
|
|
11720
11971
|
src: p.src,
|
|
11721
11972
|
alt: (_b = p.alt) != null ? _b : `Photo ${i + 4}`,
|
|
11973
|
+
title: p.caption,
|
|
11722
11974
|
className: "h-full w-full object-cover transition-transform duration-700 group-hover:scale-105",
|
|
11723
11975
|
loading: "lazy"
|
|
11724
11976
|
}
|
|
@@ -11734,7 +11986,8 @@ function FeaturedGallery({
|
|
|
11734
11986
|
{
|
|
11735
11987
|
count: extra.length,
|
|
11736
11988
|
expanded,
|
|
11737
|
-
onClick: () => setExpanded((v) => !v)
|
|
11989
|
+
onClick: () => setExpanded((v) => !v),
|
|
11990
|
+
labels
|
|
11738
11991
|
}
|
|
11739
11992
|
)
|
|
11740
11993
|
] });
|
|
@@ -11802,6 +12055,7 @@ function CarouselGallery({
|
|
|
11802
12055
|
{
|
|
11803
12056
|
src: photo.src,
|
|
11804
12057
|
alt: (_a = photo.alt) != null ? _a : `Photo ${index + 1}`,
|
|
12058
|
+
title: photo.caption,
|
|
11805
12059
|
className: "h-full w-full object-cover transition-transform duration-500 group-hover/photo:scale-[1.02]",
|
|
11806
12060
|
loading: "lazy"
|
|
11807
12061
|
},
|
|
@@ -11865,6 +12119,7 @@ function PhotoGallery({
|
|
|
11865
12119
|
variant = "grid",
|
|
11866
12120
|
initialVisible = 6,
|
|
11867
12121
|
onPhotoClick,
|
|
12122
|
+
labels,
|
|
11868
12123
|
className
|
|
11869
12124
|
}) {
|
|
11870
12125
|
const [lightboxIndex, setLightboxIndex] = React32__namespace.useState(null);
|
|
@@ -11880,7 +12135,8 @@ function PhotoGallery({
|
|
|
11880
12135
|
{
|
|
11881
12136
|
photos: normalised,
|
|
11882
12137
|
initialIndex: lightboxIndex,
|
|
11883
|
-
onClose: () => setLightboxIndex(null)
|
|
12138
|
+
onClose: () => setLightboxIndex(null),
|
|
12139
|
+
labels
|
|
11884
12140
|
}
|
|
11885
12141
|
);
|
|
11886
12142
|
if (variant === "carousel" || variant === "fullBleed") {
|
|
@@ -11908,7 +12164,8 @@ function PhotoGallery({
|
|
|
11908
12164
|
{
|
|
11909
12165
|
photos: normalised,
|
|
11910
12166
|
initialVisible,
|
|
11911
|
-
onOpen: handleOpen
|
|
12167
|
+
onOpen: handleOpen,
|
|
12168
|
+
labels
|
|
11912
12169
|
}
|
|
11913
12170
|
),
|
|
11914
12171
|
variant === "gridCompact" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -11916,7 +12173,8 @@ function PhotoGallery({
|
|
|
11916
12173
|
{
|
|
11917
12174
|
photos: normalised,
|
|
11918
12175
|
initialVisible,
|
|
11919
|
-
onOpen: handleOpen
|
|
12176
|
+
onOpen: handleOpen,
|
|
12177
|
+
labels
|
|
11920
12178
|
}
|
|
11921
12179
|
),
|
|
11922
12180
|
variant === "masonry" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -11924,11 +12182,12 @@ function PhotoGallery({
|
|
|
11924
12182
|
{
|
|
11925
12183
|
photos: normalised,
|
|
11926
12184
|
initialVisible,
|
|
11927
|
-
onOpen: handleOpen
|
|
12185
|
+
onOpen: handleOpen,
|
|
12186
|
+
labels
|
|
11928
12187
|
}
|
|
11929
12188
|
),
|
|
11930
12189
|
variant === "filmstrip" && /* @__PURE__ */ jsxRuntime.jsx(FilmstripGallery, { photos: normalised, onOpen: handleOpen }),
|
|
11931
|
-
variant === "featured" && /* @__PURE__ */ jsxRuntime.jsx(FeaturedGallery, { photos: normalised, onOpen: handleOpen }),
|
|
12190
|
+
variant === "featured" && /* @__PURE__ */ jsxRuntime.jsx(FeaturedGallery, { photos: normalised, onOpen: handleOpen, labels }),
|
|
11932
12191
|
variant === "collage" && /* @__PURE__ */ jsxRuntime.jsx(CollageGallery, { photos: normalised, onOpen: handleOpen }),
|
|
11933
12192
|
variant === "collageTight" && /* @__PURE__ */ jsxRuntime.jsx(CollageGallery, { photos: normalised, onOpen: handleOpen, seamless: true }),
|
|
11934
12193
|
lightbox
|
|
@@ -12198,6 +12457,8 @@ function PricingTrip({
|
|
|
12198
12457
|
departureTimes,
|
|
12199
12458
|
onBook,
|
|
12200
12459
|
bookLabel = "Check availability",
|
|
12460
|
+
fromLabel = "From",
|
|
12461
|
+
perPersonLabel = "per person",
|
|
12201
12462
|
variant = "card",
|
|
12202
12463
|
sharp = false,
|
|
12203
12464
|
belowPrice,
|
|
@@ -12224,13 +12485,16 @@ function PricingTrip({
|
|
|
12224
12485
|
),
|
|
12225
12486
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center gap-3", children: [
|
|
12226
12487
|
/* @__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:
|
|
12488
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children: fromLabel }),
|
|
12228
12489
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-1.5 flex-wrap", children: [
|
|
12229
12490
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-lg font-bold text-foreground font-heading leading-none", children: [
|
|
12230
12491
|
currency,
|
|
12231
12492
|
" ",
|
|
12232
12493
|
priceFrom,
|
|
12233
|
-
/* @__PURE__ */ jsxRuntime.
|
|
12494
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] font-normal text-muted-foreground font-ui ml-1", children: [
|
|
12495
|
+
"/ ",
|
|
12496
|
+
perPersonLabel
|
|
12497
|
+
] })
|
|
12234
12498
|
] }),
|
|
12235
12499
|
(priceInfo || currencyEstimates && currencyEstimates.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12236
12500
|
"button",
|
|
@@ -12342,7 +12606,7 @@ function PricingTrip({
|
|
|
12342
12606
|
] }),
|
|
12343
12607
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
|
|
12344
12608
|
/* @__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:
|
|
12609
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[10px] uppercase tracking-wide text-muted-foreground font-ui leading-none mb-0.5", children: fromLabel }),
|
|
12346
12610
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xl font-bold text-foreground font-heading leading-none", children: [
|
|
12347
12611
|
currency,
|
|
12348
12612
|
" ",
|
|
@@ -12371,13 +12635,16 @@ function PricingTrip({
|
|
|
12371
12635
|
}
|
|
12372
12636
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
|
|
12373
12637
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
12374
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui uppercase tracking-wide", children:
|
|
12638
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui uppercase tracking-wide", children: fromLabel }),
|
|
12375
12639
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold text-foreground font-heading flex items-center gap-2 flex-wrap", children: [
|
|
12376
12640
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
12377
12641
|
currency,
|
|
12378
12642
|
" ",
|
|
12379
12643
|
priceFrom,
|
|
12380
|
-
/* @__PURE__ */ jsxRuntime.
|
|
12644
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-normal text-muted-foreground font-ui", children: [
|
|
12645
|
+
" / ",
|
|
12646
|
+
perPersonLabel
|
|
12647
|
+
] })
|
|
12381
12648
|
] }),
|
|
12382
12649
|
priceInfo && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12383
12650
|
"button",
|
|
@@ -12644,8 +12911,10 @@ function SiteHeader({
|
|
|
12644
12911
|
onSearch,
|
|
12645
12912
|
onAccount,
|
|
12646
12913
|
position = variant === "transparent" ? "overlay" : "fixed",
|
|
12914
|
+
labels,
|
|
12647
12915
|
className
|
|
12648
12916
|
}) {
|
|
12917
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
12649
12918
|
const t = VARIANT[variant];
|
|
12650
12919
|
const resolvedLogo = logoSrc != null ? logoSrc : variant === "white" ? logoSrcDark : logoSrcLight;
|
|
12651
12920
|
const [openMenu, setOpenMenu] = React32__namespace.useState(null);
|
|
@@ -12703,7 +12972,7 @@ function SiteHeader({
|
|
|
12703
12972
|
{
|
|
12704
12973
|
type: "button",
|
|
12705
12974
|
onClick: () => setMobileOpen(true),
|
|
12706
|
-
"aria-label": "Open menu",
|
|
12975
|
+
"aria-label": (_a = labels == null ? void 0 : labels.openMenu) != null ? _a : "Open menu",
|
|
12707
12976
|
className: cn(
|
|
12708
12977
|
"flex lg:hidden h-9 w-9 items-center justify-center rounded-full transition-colors -ml-1.5",
|
|
12709
12978
|
t.mobileTrigger
|
|
@@ -12732,8 +13001,8 @@ function SiteHeader({
|
|
|
12732
13001
|
}
|
|
12733
13002
|
),
|
|
12734
13003
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "hidden lg:flex items-center gap-0.5 mx-auto", children: links.map((link) => {
|
|
12735
|
-
var
|
|
12736
|
-
const hasDropdown = !!((
|
|
13004
|
+
var _a2, _b2;
|
|
13005
|
+
const hasDropdown = !!((_a2 = link.items) == null ? void 0 : _a2.length);
|
|
12737
13006
|
const isOpen = openMenu === link.label;
|
|
12738
13007
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12739
13008
|
"div",
|
|
@@ -12745,7 +13014,7 @@ function SiteHeader({
|
|
|
12745
13014
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
12746
13015
|
"a",
|
|
12747
13016
|
{
|
|
12748
|
-
href: (
|
|
13017
|
+
href: (_b2 = link.href) != null ? _b2 : "#",
|
|
12749
13018
|
onClick: hasDropdown ? (e) => e.preventDefault() : void 0,
|
|
12750
13019
|
className: cn(
|
|
12751
13020
|
"flex items-center gap-1 px-3.5 py-1.5 rounded-full",
|
|
@@ -12794,7 +13063,7 @@ function SiteHeader({
|
|
|
12794
13063
|
"button",
|
|
12795
13064
|
{
|
|
12796
13065
|
type: "button",
|
|
12797
|
-
"aria-label": "Language",
|
|
13066
|
+
"aria-label": (_b = labels == null ? void 0 : labels.language) != null ? _b : "Language",
|
|
12798
13067
|
className: cn(
|
|
12799
13068
|
"flex items-center gap-0.5 px-2.5 py-1.5 rounded-full",
|
|
12800
13069
|
"text-sm font-ui transition-colors",
|
|
@@ -12834,7 +13103,7 @@ function SiteHeader({
|
|
|
12834
13103
|
{
|
|
12835
13104
|
type: "button",
|
|
12836
13105
|
onClick: onSearch,
|
|
12837
|
-
"aria-label": "Search",
|
|
13106
|
+
"aria-label": (_c = labels == null ? void 0 : labels.search) != null ? _c : "Search",
|
|
12838
13107
|
className: cn(
|
|
12839
13108
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12840
13109
|
t.icon
|
|
@@ -12847,7 +13116,7 @@ function SiteHeader({
|
|
|
12847
13116
|
{
|
|
12848
13117
|
type: "button",
|
|
12849
13118
|
onClick: onAccount,
|
|
12850
|
-
"aria-label": "Account",
|
|
13119
|
+
"aria-label": (_d = labels == null ? void 0 : labels.account) != null ? _d : "Account",
|
|
12851
13120
|
className: cn(
|
|
12852
13121
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12853
13122
|
t.icon
|
|
@@ -12880,7 +13149,7 @@ function SiteHeader({
|
|
|
12880
13149
|
{
|
|
12881
13150
|
type: "button",
|
|
12882
13151
|
onClick: () => setMobileOpen(false),
|
|
12883
|
-
"aria-label": "Close menu",
|
|
13152
|
+
"aria-label": (_e = labels == null ? void 0 : labels.closeMenu) != null ? _e : "Close menu",
|
|
12884
13153
|
className: cn(
|
|
12885
13154
|
"flex h-9 w-9 items-center justify-center rounded-full transition-colors",
|
|
12886
13155
|
t.mobileTrigger
|
|
@@ -12890,8 +13159,8 @@ function SiteHeader({
|
|
|
12890
13159
|
)
|
|
12891
13160
|
] }),
|
|
12892
13161
|
/* @__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 = !!((
|
|
13162
|
+
var _a2, _b2;
|
|
13163
|
+
const hasDropdown = !!((_a2 = link.items) == null ? void 0 : _a2.length);
|
|
12895
13164
|
const isExpanded = openMobileSection === link.label;
|
|
12896
13165
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
12897
13166
|
hasDropdown ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -12919,7 +13188,7 @@ function SiteHeader({
|
|
|
12919
13188
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
12920
13189
|
"a",
|
|
12921
13190
|
{
|
|
12922
|
-
href: (
|
|
13191
|
+
href: (_b2 = link.href) != null ? _b2 : "#",
|
|
12923
13192
|
onClick: () => setMobileOpen(false),
|
|
12924
13193
|
className: cn(
|
|
12925
13194
|
"flex items-center py-4 text-xl font-ui font-black transition-colors border-b border-white/8",
|
|
@@ -12929,11 +13198,11 @@ function SiteHeader({
|
|
|
12929
13198
|
}
|
|
12930
13199
|
),
|
|
12931
13200
|
hasDropdown && isExpanded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-0 pl-4 pb-2", children: link.items.map((item) => {
|
|
12932
|
-
var
|
|
13201
|
+
var _a3;
|
|
12933
13202
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12934
13203
|
"a",
|
|
12935
13204
|
{
|
|
12936
|
-
href: (
|
|
13205
|
+
href: (_a3 = item.href) != null ? _a3 : "#",
|
|
12937
13206
|
onClick: () => setMobileOpen(false),
|
|
12938
13207
|
className: cn(
|
|
12939
13208
|
"py-3 text-base font-ui font-bold transition-colors border-b",
|
|
@@ -12986,7 +13255,7 @@ function SiteHeader({
|
|
|
12986
13255
|
onSearch == null ? void 0 : onSearch();
|
|
12987
13256
|
setMobileOpen(false);
|
|
12988
13257
|
},
|
|
12989
|
-
"aria-label": "Search",
|
|
13258
|
+
"aria-label": (_f = labels == null ? void 0 : labels.search) != null ? _f : "Search",
|
|
12990
13259
|
className: cn("flex h-9 w-9 items-center justify-center rounded-full transition-colors", t.icon),
|
|
12991
13260
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "h-[18px] w-[18px]" })
|
|
12992
13261
|
}
|
|
@@ -12999,7 +13268,7 @@ function SiteHeader({
|
|
|
12999
13268
|
onAccount == null ? void 0 : onAccount();
|
|
13000
13269
|
setMobileOpen(false);
|
|
13001
13270
|
},
|
|
13002
|
-
"aria-label": "Account",
|
|
13271
|
+
"aria-label": (_g = labels == null ? void 0 : labels.account) != null ? _g : "Account",
|
|
13003
13272
|
className: cn("flex h-9 w-9 items-center justify-center rounded-full transition-colors", t.icon),
|
|
13004
13273
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserIcon, { className: "h-[18px] w-[18px]" })
|
|
13005
13274
|
}
|
|
@@ -13149,9 +13418,11 @@ function HeartIcon({ filled = false }) {
|
|
|
13149
13418
|
);
|
|
13150
13419
|
}
|
|
13151
13420
|
function TripCardEditorial(props) {
|
|
13421
|
+
var _a, _b, _c, _d;
|
|
13152
13422
|
const {
|
|
13153
13423
|
image,
|
|
13154
13424
|
imageAlt = "",
|
|
13425
|
+
labels,
|
|
13155
13426
|
title,
|
|
13156
13427
|
description,
|
|
13157
13428
|
nights,
|
|
@@ -13209,7 +13480,7 @@ function TripCardEditorial(props) {
|
|
|
13209
13480
|
"button",
|
|
13210
13481
|
{
|
|
13211
13482
|
type: "button",
|
|
13212
|
-
"aria-label": favorited ? "Remove from favorites" : "Add to favorites",
|
|
13483
|
+
"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
13484
|
"aria-pressed": favorited,
|
|
13214
13485
|
onClick: handleFav,
|
|
13215
13486
|
className: cn(
|
|
@@ -13253,7 +13524,7 @@ function TripCardEditorial(props) {
|
|
|
13253
13524
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13254
13525
|
nights,
|
|
13255
13526
|
" ",
|
|
13256
|
-
nights === 1 ? "night" : "nights"
|
|
13527
|
+
nights === 1 ? (_c = labels == null ? void 0 : labels.night) != null ? _c : "night" : (_d = labels == null ? void 0 : labels.nights) != null ? _d : "nights"
|
|
13257
13528
|
] })
|
|
13258
13529
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
|
|
13259
13530
|
price && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-bold text-foreground font-ui", children: price })
|
|
@@ -13278,12 +13549,14 @@ function TripCardEditorial(props) {
|
|
|
13278
13549
|
] });
|
|
13279
13550
|
}
|
|
13280
13551
|
function TripCard(props) {
|
|
13552
|
+
var _a, _b;
|
|
13281
13553
|
if (props.variant === "editorial") {
|
|
13282
13554
|
return /* @__PURE__ */ jsxRuntime.jsx(TripCardEditorial, __spreadValues({}, props));
|
|
13283
13555
|
}
|
|
13284
13556
|
const {
|
|
13285
13557
|
image,
|
|
13286
13558
|
imageAlt = "",
|
|
13559
|
+
labels,
|
|
13287
13560
|
status,
|
|
13288
13561
|
nights,
|
|
13289
13562
|
period,
|
|
@@ -13296,6 +13569,7 @@ function TripCard(props) {
|
|
|
13296
13569
|
} = props;
|
|
13297
13570
|
const s = sizeConfig[size];
|
|
13298
13571
|
const statusInfo = status ? statusConfig[status] : null;
|
|
13572
|
+
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
13573
|
const meta = [
|
|
13300
13574
|
nights ? `${nights} nights` : null,
|
|
13301
13575
|
period != null ? period : null
|
|
@@ -13321,7 +13595,7 @@ function TripCard(props) {
|
|
|
13321
13595
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent" }),
|
|
13322
13596
|
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
13597
|
/* @__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:
|
|
13598
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold text-foreground font-ui", children: statusLabel })
|
|
13325
13599
|
] }) }),
|
|
13326
13600
|
!statusInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10" }),
|
|
13327
13601
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex flex-col gap-1.5 p-5", children: [
|
|
@@ -13415,6 +13689,7 @@ function BlogCard({
|
|
|
13415
13689
|
{
|
|
13416
13690
|
src: image,
|
|
13417
13691
|
alt: imageAlt,
|
|
13692
|
+
title: imageAlt || void 0,
|
|
13418
13693
|
loading: "lazy",
|
|
13419
13694
|
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
|
|
13420
13695
|
}
|
|
@@ -13768,6 +14043,8 @@ function TripHeader({
|
|
|
13768
14043
|
breadcrumb,
|
|
13769
14044
|
destination,
|
|
13770
14045
|
duration,
|
|
14046
|
+
groupSize,
|
|
14047
|
+
labels,
|
|
13771
14048
|
tagline,
|
|
13772
14049
|
chips,
|
|
13773
14050
|
belowMeta,
|
|
@@ -13775,7 +14052,7 @@ function TripHeader({
|
|
|
13775
14052
|
uiVariant = "v1",
|
|
13776
14053
|
className
|
|
13777
14054
|
}) {
|
|
13778
|
-
var _a;
|
|
14055
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
13779
14056
|
const [heroIndex, setHeroIndex] = React32__namespace.useState(0);
|
|
13780
14057
|
const [videoReady, setVideoReady] = React32__namespace.useState(false);
|
|
13781
14058
|
const videoRef = React32__namespace.useRef(null);
|
|
@@ -13793,7 +14070,7 @@ function TripHeader({
|
|
|
13793
14070
|
const currentSrc = heroSrc(safeIndex);
|
|
13794
14071
|
const showCarousel = !videoUrl && validImages.length > 1;
|
|
13795
14072
|
const nights = duration ? (_a = duration.nights) != null ? _a : Math.max(duration.days - 1, 1) : null;
|
|
13796
|
-
const hasMeta = !!(destination || duration);
|
|
14073
|
+
const hasMeta = !!(destination || duration || groupSize);
|
|
13797
14074
|
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
13798
14075
|
React32__namespace.useEffect(() => {
|
|
13799
14076
|
if (!videoUrl) return;
|
|
@@ -13900,7 +14177,7 @@ function TripHeader({
|
|
|
13900
14177
|
(i) => (i - 1 + validImages.length) % validImages.length
|
|
13901
14178
|
),
|
|
13902
14179
|
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": "
|
|
14180
|
+
"aria-label": (_b = labels == null ? void 0 : labels.previousImage) != null ? _b : "Previous image",
|
|
13904
14181
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
13905
14182
|
}
|
|
13906
14183
|
),
|
|
@@ -13910,7 +14187,7 @@ function TripHeader({
|
|
|
13910
14187
|
type: "button",
|
|
13911
14188
|
onClick: () => setHeroIndex((i) => (i + 1) % validImages.length),
|
|
13912
14189
|
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": "
|
|
14190
|
+
"aria-label": (_c = labels == null ? void 0 : labels.nextImage) != null ? _c : "Next image",
|
|
13914
14191
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
13915
14192
|
}
|
|
13916
14193
|
),
|
|
@@ -13953,15 +14230,19 @@ function TripHeader({
|
|
|
13953
14230
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13954
14231
|
nights,
|
|
13955
14232
|
" ",
|
|
13956
|
-
nights === 1 ? "
|
|
14233
|
+
nights === 1 ? (_d = labels == null ? void 0 : labels.night) != null ? _d : "night" : (_e = labels == null ? void 0 : labels.nights) != null ? _e : "nights"
|
|
13957
14234
|
] }),
|
|
13958
14235
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white/40", children: "\xB7" }),
|
|
13959
14236
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.SunIcon, { className: "h-4 w-4 shrink-0 text-primary-400" }),
|
|
13960
14237
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-ui font-semibold", children: [
|
|
13961
14238
|
duration.days,
|
|
13962
14239
|
" ",
|
|
13963
|
-
duration.days === 1 ? "
|
|
14240
|
+
duration.days === 1 ? (_f = labels == null ? void 0 : labels.day) != null ? _f : "day" : (_g = labels == null ? void 0 : labels.days) != null ? _g : "days"
|
|
13964
14241
|
] })
|
|
14242
|
+
] }),
|
|
14243
|
+
groupSize && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-white/85", children: [
|
|
14244
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.UsersIcon, { className: "h-4 w-4 shrink-0 text-primary-400" }),
|
|
14245
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-ui font-semibold", children: groupSize })
|
|
13965
14246
|
] })
|
|
13966
14247
|
] }) : tagline ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm sm:text-base text-white/80 font-ui", children: tagline }) : null,
|
|
13967
14248
|
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 +14687,10 @@ function Stars({ count = 5 }) {
|
|
|
14406
14687
|
i
|
|
14407
14688
|
)) });
|
|
14408
14689
|
}
|
|
14409
|
-
function ItineraryTimeline({
|
|
14690
|
+
function ItineraryTimeline({
|
|
14691
|
+
steps,
|
|
14692
|
+
transferLabel
|
|
14693
|
+
}) {
|
|
14410
14694
|
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
14695
|
i < steps.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-3.5 top-7 bottom-0 w-px bg-border" }),
|
|
14412
14696
|
/* @__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 +14701,7 @@ function ItineraryTimeline({ steps }) {
|
|
|
14417
14701
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ClockIcon, { className: "h-3 w-3 mr-1" }),
|
|
14418
14702
|
step.duration
|
|
14419
14703
|
] }),
|
|
14420
|
-
step.isTransfer && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "text-xs font-ui h-5 px-2", children: "Transfer" })
|
|
14704
|
+
step.isTransfer && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "text-xs font-ui h-5 px-2", children: transferLabel != null ? transferLabel : "Transfer" })
|
|
14421
14705
|
] }),
|
|
14422
14706
|
/* @__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
14707
|
] })
|
|
@@ -14434,6 +14718,7 @@ function TripPage({
|
|
|
14434
14718
|
tagline,
|
|
14435
14719
|
destination,
|
|
14436
14720
|
duration,
|
|
14721
|
+
groupSize,
|
|
14437
14722
|
images,
|
|
14438
14723
|
videoUrl,
|
|
14439
14724
|
breadcrumb,
|
|
@@ -14457,6 +14742,7 @@ function TripPage({
|
|
|
14457
14742
|
whenItOperates,
|
|
14458
14743
|
food,
|
|
14459
14744
|
foodGallery,
|
|
14745
|
+
foodGalleryVariant = "gridCompact",
|
|
14460
14746
|
termsAndConditions,
|
|
14461
14747
|
meetingPoints,
|
|
14462
14748
|
meetingPoint,
|
|
@@ -14476,7 +14762,13 @@ function TripPage({
|
|
|
14476
14762
|
currencyEstimates,
|
|
14477
14763
|
priceInfo,
|
|
14478
14764
|
onBook,
|
|
14765
|
+
onBookingSubmit,
|
|
14766
|
+
bookingLoading,
|
|
14767
|
+
bookingDefaults,
|
|
14768
|
+
bookingLabels,
|
|
14479
14769
|
bookLabel,
|
|
14770
|
+
fromLabel,
|
|
14771
|
+
perPersonLabel,
|
|
14480
14772
|
siteHeader,
|
|
14481
14773
|
uiVariant = "v1",
|
|
14482
14774
|
features,
|
|
@@ -14653,6 +14945,15 @@ function TripPage({
|
|
|
14653
14945
|
breadcrumb,
|
|
14654
14946
|
destination,
|
|
14655
14947
|
duration,
|
|
14948
|
+
groupSize,
|
|
14949
|
+
labels: {
|
|
14950
|
+
night: labels == null ? void 0 : labels.night,
|
|
14951
|
+
nights: labels == null ? void 0 : labels.nights,
|
|
14952
|
+
day: labels == null ? void 0 : labels.day,
|
|
14953
|
+
days: labels == null ? void 0 : labels.days,
|
|
14954
|
+
previousImage: labels == null ? void 0 : labels.previousImage,
|
|
14955
|
+
nextImage: labels == null ? void 0 : labels.nextImage
|
|
14956
|
+
},
|
|
14656
14957
|
tagline,
|
|
14657
14958
|
chips,
|
|
14658
14959
|
siteHeader,
|
|
@@ -14713,7 +15014,7 @@ function TripPage({
|
|
|
14713
15014
|
)) })
|
|
14714
15015
|
] }) : itinerary && itinerary.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-itinerary", className: "scroll-mt-20", children: [
|
|
14715
15016
|
/* @__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 })
|
|
15017
|
+
/* @__PURE__ */ jsxRuntime.jsx(ItineraryTimeline, { steps: itinerary, transferLabel: labels == null ? void 0 : labels.transfer })
|
|
14717
15018
|
] }),
|
|
14718
15019
|
included && included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-included", className: "scroll-mt-20", children: [
|
|
14719
15020
|
/* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "text-xl font-bold text-foreground font-heading mb-4 flex items-center gap-2", children: [
|
|
@@ -14750,7 +15051,7 @@ function TripPage({
|
|
|
14750
15051
|
id: "trip-section-when-it-operates",
|
|
14751
15052
|
className: "scroll-mt-20 border-b border-border",
|
|
14752
15053
|
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: [
|
|
15054
|
+
/* @__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
15055
|
(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
15056
|
(_f = labels == null ? void 0 : labels.whenItOperates) != null ? _f : "When this tour operates"
|
|
14756
15057
|
] }) }),
|
|
@@ -14765,7 +15066,7 @@ function TripPage({
|
|
|
14765
15066
|
id: "trip-section-accommodation",
|
|
14766
15067
|
className: "scroll-mt-20 border-b border-border",
|
|
14767
15068
|
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: [
|
|
15069
|
+
/* @__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
15070
|
(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
15071
|
(_g = labels == null ? void 0 : labels.accommodation) != null ? _g : "Accommodation"
|
|
14771
15072
|
] }) }),
|
|
@@ -14774,6 +15075,13 @@ function TripPage({
|
|
|
14774
15075
|
accommodationGallery && accommodationGallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(accommodation && "mt-6"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14775
15076
|
PhotoGallery,
|
|
14776
15077
|
{
|
|
15078
|
+
labels: {
|
|
15079
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
15080
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
15081
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
15082
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
15083
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
15084
|
+
},
|
|
14777
15085
|
photos: accommodationGallery,
|
|
14778
15086
|
variant: accommodationGalleryVariant,
|
|
14779
15087
|
initialVisible: 6
|
|
@@ -14790,7 +15098,7 @@ function TripPage({
|
|
|
14790
15098
|
id: "trip-section-food",
|
|
14791
15099
|
className: "scroll-mt-20 border-b border-border",
|
|
14792
15100
|
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: [
|
|
15101
|
+
/* @__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
15102
|
(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
15103
|
(_h = labels == null ? void 0 : labels.food) != null ? _h : "Food"
|
|
14796
15104
|
] }) }),
|
|
@@ -14799,8 +15107,15 @@ function TripPage({
|
|
|
14799
15107
|
foodGallery && foodGallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(food && "mt-6"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
14800
15108
|
PhotoGallery,
|
|
14801
15109
|
{
|
|
15110
|
+
labels: {
|
|
15111
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
15112
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
15113
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
15114
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
15115
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
15116
|
+
},
|
|
14802
15117
|
photos: foodGallery,
|
|
14803
|
-
variant:
|
|
15118
|
+
variant: foodGalleryVariant,
|
|
14804
15119
|
initialVisible: 6
|
|
14805
15120
|
}
|
|
14806
15121
|
) })
|
|
@@ -14815,18 +15130,21 @@ function TripPage({
|
|
|
14815
15130
|
id: "trip-section-meeting",
|
|
14816
15131
|
className: "scroll-mt-20 border-b border-border",
|
|
14817
15132
|
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: [
|
|
15133
|
+
/* @__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
15134
|
(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
15135
|
(_i = labels == null ? void 0 : labels.meetingPoint) != null ? _i : "Meeting point"
|
|
14821
15136
|
] }) }),
|
|
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
|
-
|
|
15137
|
+
/* @__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) => {
|
|
15138
|
+
var _a2, _b2, _c2;
|
|
15139
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3 rounded-xl border border-border p-4", children: [
|
|
15140
|
+
/* @__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" }) }),
|
|
15141
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
15142
|
+
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" }),
|
|
15143
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-bold text-foreground font-heading", children: mp.name }),
|
|
15144
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui mt-0.5", children: mp.address })
|
|
15145
|
+
] })
|
|
15146
|
+
] }, i);
|
|
15147
|
+
}) }) })
|
|
14830
15148
|
]
|
|
14831
15149
|
}
|
|
14832
15150
|
),
|
|
@@ -14837,7 +15155,7 @@ function TripPage({
|
|
|
14837
15155
|
id: "trip-section-how-to-get-there",
|
|
14838
15156
|
className: "scroll-mt-20 border-b border-border",
|
|
14839
15157
|
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: [
|
|
15158
|
+
/* @__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
15159
|
(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
15160
|
(_j = labels == null ? void 0 : labels.howToGetThere) != null ? _j : "How to get there"
|
|
14843
15161
|
] }) }),
|
|
@@ -14852,7 +15170,7 @@ function TripPage({
|
|
|
14852
15170
|
id: "trip-section-weather",
|
|
14853
15171
|
className: "scroll-mt-20 border-b border-border",
|
|
14854
15172
|
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: [
|
|
15173
|
+
/* @__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
15174
|
(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
15175
|
(_k = labels == null ? void 0 : labels.weather) != null ? _k : "Weather"
|
|
14858
15176
|
] }) }),
|
|
@@ -14867,7 +15185,7 @@ function TripPage({
|
|
|
14867
15185
|
id: "trip-section-what-to-bring",
|
|
14868
15186
|
className: "scroll-mt-20 border-b border-border",
|
|
14869
15187
|
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: [
|
|
15188
|
+
/* @__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
15189
|
(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
15190
|
(_l = labels == null ? void 0 : labels.whatToBring) != null ? _l : "What to bring"
|
|
14873
15191
|
] }) }),
|
|
@@ -14882,7 +15200,7 @@ function TripPage({
|
|
|
14882
15200
|
id: "trip-section-optional-extras",
|
|
14883
15201
|
className: "scroll-mt-20 border-b border-border",
|
|
14884
15202
|
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: [
|
|
15203
|
+
/* @__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
15204
|
(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
15205
|
(_m = labels == null ? void 0 : labels.optionalExtras) != null ? _m : "Optional extras"
|
|
14888
15206
|
] }) }),
|
|
@@ -14897,7 +15215,7 @@ function TripPage({
|
|
|
14897
15215
|
id: "trip-section-terms",
|
|
14898
15216
|
className: "scroll-mt-20 border-b border-border",
|
|
14899
15217
|
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: [
|
|
15218
|
+
/* @__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
15219
|
(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
15220
|
(_n = labels == null ? void 0 : labels.terms) != null ? _n : "Terms & conditions"
|
|
14903
15221
|
] }) }),
|
|
@@ -14909,7 +15227,7 @@ function TripPage({
|
|
|
14909
15227
|
}
|
|
14910
15228
|
),
|
|
14911
15229
|
faqs && faqs.length > 0 && (() => {
|
|
14912
|
-
var _a2;
|
|
15230
|
+
var _a2, _b2, _c2;
|
|
14913
15231
|
const visibleFaqs = faqsExpanded ? faqs : faqs.slice(0, faqInitialCount);
|
|
14914
15232
|
const hiddenCount = faqs.length - visibleFaqs.length;
|
|
14915
15233
|
return /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "trip-section-faq", className: "scroll-mt-20", children: [
|
|
@@ -14931,10 +15249,11 @@ function TripPage({
|
|
|
14931
15249
|
),
|
|
14932
15250
|
children: faqsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
14933
15251
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
14934
|
-
"Show less"
|
|
15252
|
+
(_b2 = labels == null ? void 0 : labels.showLess) != null ? _b2 : "Show less"
|
|
14935
15253
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
14936
15254
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
14937
|
-
"See more
|
|
15255
|
+
(_c2 = labels == null ? void 0 : labels.seeMore) != null ? _c2 : "See more",
|
|
15256
|
+
" (",
|
|
14938
15257
|
hiddenCount,
|
|
14939
15258
|
")"
|
|
14940
15259
|
] })
|
|
@@ -14975,6 +15294,8 @@ function TripPage({
|
|
|
14975
15294
|
departureTimes,
|
|
14976
15295
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
14977
15296
|
bookLabel: bookLabel != null ? bookLabel : "Check availability",
|
|
15297
|
+
fromLabel,
|
|
15298
|
+
perPersonLabel,
|
|
14978
15299
|
variant: "card",
|
|
14979
15300
|
belowPrice: trustpilotMini ? /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) : void 0,
|
|
14980
15301
|
benefits,
|
|
@@ -15017,6 +15338,8 @@ function TripPage({
|
|
|
15017
15338
|
departureTimes,
|
|
15018
15339
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
15019
15340
|
bookLabel: bookLabel != null ? bookLabel : "Check availability",
|
|
15341
|
+
fromLabel,
|
|
15342
|
+
perPersonLabel,
|
|
15020
15343
|
variant: "card",
|
|
15021
15344
|
belowPrice: trustpilotMini ? /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) : void 0,
|
|
15022
15345
|
benefits,
|
|
@@ -15029,12 +15352,27 @@ function TripPage({
|
|
|
15029
15352
|
gallery && gallery.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("section", { ref: galleryRef, id: "trip-section-gallery", className: "scroll-mt-20", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15030
15353
|
PhotoGallery,
|
|
15031
15354
|
{
|
|
15355
|
+
labels: {
|
|
15356
|
+
seeMore: labels == null ? void 0 : labels.seeMore,
|
|
15357
|
+
showLess: labels == null ? void 0 : labels.showLess,
|
|
15358
|
+
close: labels == null ? void 0 : labels.galleryClose,
|
|
15359
|
+
previous: labels == null ? void 0 : labels.galleryPrevious,
|
|
15360
|
+
next: labels == null ? void 0 : labels.galleryNext
|
|
15361
|
+
},
|
|
15032
15362
|
photos: gallery,
|
|
15033
15363
|
variant: "gridCompact",
|
|
15034
15364
|
initialVisible: 8
|
|
15035
15365
|
}
|
|
15036
15366
|
) }),
|
|
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(
|
|
15367
|
+
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(
|
|
15368
|
+
BookingForm,
|
|
15369
|
+
{
|
|
15370
|
+
labels: bookingLabels,
|
|
15371
|
+
defaultValues: bookingDefaults,
|
|
15372
|
+
onSubmit: onBookingSubmit,
|
|
15373
|
+
loading: bookingLoading
|
|
15374
|
+
}
|
|
15375
|
+
) }) }),
|
|
15038
15376
|
/* @__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
15377
|
PricingTrip,
|
|
15040
15378
|
{
|
|
@@ -15042,6 +15380,8 @@ function TripPage({
|
|
|
15042
15380
|
currency,
|
|
15043
15381
|
onBook: (gallery == null ? void 0 : gallery.length) ? scrollToBookingForm : onBook,
|
|
15044
15382
|
bookLabel: bookLabel != null ? bookLabel : "Book now",
|
|
15383
|
+
fromLabel,
|
|
15384
|
+
perPersonLabel,
|
|
15045
15385
|
variant: "compact",
|
|
15046
15386
|
sharp: true,
|
|
15047
15387
|
priceInfo,
|
|
@@ -15075,6 +15415,7 @@ function CategoryPage2({
|
|
|
15075
15415
|
trustpilotMini,
|
|
15076
15416
|
breadcrumb,
|
|
15077
15417
|
siteHeader,
|
|
15418
|
+
heroRightSlot,
|
|
15078
15419
|
popularTours,
|
|
15079
15420
|
popularToursTitle = "More adventures calling your name",
|
|
15080
15421
|
popularToursEyebrow = "Popular tours",
|
|
@@ -15085,6 +15426,7 @@ function CategoryPage2({
|
|
|
15085
15426
|
sortOptions,
|
|
15086
15427
|
defaultSort,
|
|
15087
15428
|
tripsInitialCount = 15,
|
|
15429
|
+
tripListingSlot,
|
|
15088
15430
|
trustpilot,
|
|
15089
15431
|
reviewsTitle = "Don't just take our word for it",
|
|
15090
15432
|
reviewsSubtitle,
|
|
@@ -15101,6 +15443,12 @@ function CategoryPage2({
|
|
|
15101
15443
|
faqInitialCount = 5,
|
|
15102
15444
|
gallery,
|
|
15103
15445
|
galleryTitle,
|
|
15446
|
+
loadMoreLabel,
|
|
15447
|
+
showLessLabel,
|
|
15448
|
+
seeMoreLabel,
|
|
15449
|
+
viewAllPostsLabel,
|
|
15450
|
+
cardLabels,
|
|
15451
|
+
filterLabels,
|
|
15104
15452
|
className
|
|
15105
15453
|
}) {
|
|
15106
15454
|
var _a;
|
|
@@ -15257,7 +15605,8 @@ function CategoryPage2({
|
|
|
15257
15605
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl sm:text-5xl font-bold text-white font-heading leading-tight max-w-3xl", children: title }),
|
|
15258
15606
|
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
15607
|
trustpilotMini && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 max-w-sm", children: /* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: trustpilotMini }) })
|
|
15260
|
-
] })
|
|
15608
|
+
] }),
|
|
15609
|
+
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
15610
|
]
|
|
15262
15611
|
}
|
|
15263
15612
|
),
|
|
@@ -15275,6 +15624,7 @@ function CategoryPage2({
|
|
|
15275
15624
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15276
15625
|
TripCard,
|
|
15277
15626
|
__spreadProps(__spreadValues({}, cardProps), {
|
|
15627
|
+
labels: cardLabels,
|
|
15278
15628
|
variant: "overlay",
|
|
15279
15629
|
size: (_b = cardProps.size) != null ? _b : "md"
|
|
15280
15630
|
}),
|
|
@@ -15284,63 +15634,68 @@ function CategoryPage2({
|
|
|
15284
15634
|
] }),
|
|
15285
15635
|
/* @__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
15636
|
(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
|
-
|
|
15637
|
+
tripListingSlot != null ? tripListingSlot : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15638
|
+
filterGroups && filterGroups.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15639
|
+
FilterPanel,
|
|
15640
|
+
{
|
|
15641
|
+
variant: "horizontal",
|
|
15642
|
+
labels: filterLabels,
|
|
15643
|
+
groups: filterGroups,
|
|
15644
|
+
value: filterValue,
|
|
15645
|
+
onChange: setFilterValue,
|
|
15646
|
+
onClearAll: () => setFilterValue({}),
|
|
15647
|
+
sortOptions,
|
|
15648
|
+
sort,
|
|
15649
|
+
onSortChange: setSort
|
|
15650
|
+
}
|
|
15651
|
+
) }),
|
|
15652
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground font-ui mb-5", children: [
|
|
15653
|
+
sortedTrips.length,
|
|
15654
|
+
" ",
|
|
15655
|
+
sortedTrips.length === 1 ? "trip" : "trips",
|
|
15656
|
+
" found"
|
|
15657
|
+
] }),
|
|
15658
|
+
(() => {
|
|
15659
|
+
const visibleTrips = tripsExpanded ? sortedTrips : sortedTrips.slice(0, tripsInitialCount);
|
|
15660
|
+
const hiddenCount = sortedTrips.length - visibleTrips.length;
|
|
15661
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15662
|
+
/* @__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) => {
|
|
15663
|
+
const _a2 = trip, { featured: _featured, filterTags: _filterTags, priceValue: _priceValue } = _a2, cardProps = __objRest(_a2, ["featured", "filterTags", "priceValue"]);
|
|
15664
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15665
|
+
TripCard,
|
|
15666
|
+
__spreadProps(__spreadValues({}, cardProps), {
|
|
15667
|
+
labels: cardLabels,
|
|
15668
|
+
className: cn("w-full h-auto", cardProps.className)
|
|
15669
|
+
}),
|
|
15670
|
+
i
|
|
15671
|
+
);
|
|
15672
|
+
}) }),
|
|
15673
|
+
sortedTrips.length > tripsInitialCount && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15674
|
+
"button",
|
|
15675
|
+
{
|
|
15676
|
+
type: "button",
|
|
15677
|
+
onClick: () => setTripsExpanded((v) => !v),
|
|
15678
|
+
className: cn(
|
|
15679
|
+
"inline-flex items-center gap-2 rounded-full border border-border bg-background px-5 py-2.5",
|
|
15680
|
+
"text-sm font-semibold text-foreground shadow-sm",
|
|
15681
|
+
"hover:bg-muted transition-colors duration-150",
|
|
15682
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
15683
|
+
),
|
|
15684
|
+
children: tripsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15685
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15686
|
+
showLessLabel != null ? showLessLabel : "Show less"
|
|
15687
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15688
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15689
|
+
loadMoreLabel != null ? loadMoreLabel : "Load more",
|
|
15690
|
+
" (",
|
|
15691
|
+
hiddenCount,
|
|
15692
|
+
")"
|
|
15693
|
+
] })
|
|
15694
|
+
}
|
|
15695
|
+
) })
|
|
15696
|
+
] });
|
|
15697
|
+
})()
|
|
15698
|
+
] })
|
|
15344
15699
|
] }),
|
|
15345
15700
|
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
15701
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl sm:text-3xl font-bold text-foreground font-heading mb-2", children: reviewsTitle }),
|
|
@@ -15377,7 +15732,7 @@ function CategoryPage2({
|
|
|
15377
15732
|
href: travelGuideHref != null ? travelGuideHref : blogPostsViewAllHref,
|
|
15378
15733
|
className: "inline-flex items-center gap-1.5 text-sm font-semibold text-primary hover:underline",
|
|
15379
15734
|
children: [
|
|
15380
|
-
travelGuideHref ? travelGuideLabel : "View all posts",
|
|
15735
|
+
travelGuideHref ? travelGuideLabel : viewAllPostsLabel != null ? viewAllPostsLabel : "View all posts",
|
|
15381
15736
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4" })
|
|
15382
15737
|
]
|
|
15383
15738
|
}
|
|
@@ -15406,10 +15761,11 @@ function CategoryPage2({
|
|
|
15406
15761
|
),
|
|
15407
15762
|
children: faqsExpanded ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15408
15763
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15409
|
-
"Show less"
|
|
15764
|
+
showLessLabel != null ? showLessLabel : "Show less"
|
|
15410
15765
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
15411
15766
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
15412
|
-
"See more
|
|
15767
|
+
seeMoreLabel != null ? seeMoreLabel : "See more",
|
|
15768
|
+
" (",
|
|
15413
15769
|
hiddenCount,
|
|
15414
15770
|
")"
|
|
15415
15771
|
] })
|
|
@@ -15477,6 +15833,7 @@ function ActivityCard({
|
|
|
15477
15833
|
{
|
|
15478
15834
|
src: image,
|
|
15479
15835
|
alt: imageAlt,
|
|
15836
|
+
title: imageAlt || void 0,
|
|
15480
15837
|
className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
15481
15838
|
}
|
|
15482
15839
|
),
|
|
@@ -17178,13 +17535,1410 @@ function StickyBookingCard({
|
|
|
17178
17535
|
}
|
|
17179
17536
|
);
|
|
17180
17537
|
}
|
|
17538
|
+
var DEFAULT_TRUSTPILOT = {
|
|
17539
|
+
businessUnitId: "6171e6a56fc555750dd81ae7",
|
|
17540
|
+
templateId: "5419b732fbfb950b10de65e5",
|
|
17541
|
+
locale: "en-US",
|
|
17542
|
+
styleHeight: "24px",
|
|
17543
|
+
styleWidth: "100%",
|
|
17544
|
+
token: "d3580e48-fedc-4b14-b705-172180cf241d",
|
|
17545
|
+
theme: "dark",
|
|
17546
|
+
fallbackHref: "https://www.trustpilot.com/review/planetaexo.com",
|
|
17547
|
+
fallbackLabel: "Excellent"
|
|
17548
|
+
};
|
|
17549
|
+
function RatingStars({ stars = 5 }) {
|
|
17550
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", "aria-hidden": true, children: Array.from({ length: 5 }).map((_, i) => {
|
|
17551
|
+
const filled = i + 1 <= Math.round(stars);
|
|
17552
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17553
|
+
"span",
|
|
17554
|
+
{
|
|
17555
|
+
className: cn(
|
|
17556
|
+
"flex h-5 w-5 items-center justify-center rounded-[3px]",
|
|
17557
|
+
filled ? "bg-primary" : "bg-white/30"
|
|
17558
|
+
),
|
|
17559
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.StarIcon, { className: "h-3 w-3 fill-white text-white" })
|
|
17560
|
+
},
|
|
17561
|
+
i
|
|
17562
|
+
);
|
|
17563
|
+
}) });
|
|
17564
|
+
}
|
|
17565
|
+
function Rating({ label, stars = 5, provider, href }) {
|
|
17566
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17567
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-ui font-bold text-white", children: label }),
|
|
17568
|
+
/* @__PURE__ */ jsxRuntime.jsx(RatingStars, { stars }),
|
|
17569
|
+
provider && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-sm font-ui font-bold text-white", children: [
|
|
17570
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.StarIcon, { className: "h-4 w-4 fill-primary text-primary" }),
|
|
17571
|
+
provider
|
|
17572
|
+
] })
|
|
17573
|
+
] });
|
|
17574
|
+
if (href) {
|
|
17575
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
17576
|
+
"a",
|
|
17577
|
+
{
|
|
17578
|
+
href,
|
|
17579
|
+
target: "_blank",
|
|
17580
|
+
rel: "noreferrer noopener",
|
|
17581
|
+
"aria-label": `${label != null ? label : ""} ${stars} out of 5 \u2014 ${provider != null ? provider : "reviews"}`.trim(),
|
|
17582
|
+
className: "inline-flex items-center gap-2.5 transition-opacity hover:opacity-90",
|
|
17583
|
+
children: content
|
|
17584
|
+
}
|
|
17585
|
+
);
|
|
17586
|
+
}
|
|
17587
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex items-center gap-2.5", children: content });
|
|
17588
|
+
}
|
|
17589
|
+
function HomeHeader({
|
|
17590
|
+
images,
|
|
17591
|
+
videoUrl,
|
|
17592
|
+
eyebrow,
|
|
17593
|
+
title,
|
|
17594
|
+
subtitle,
|
|
17595
|
+
cta,
|
|
17596
|
+
trustpilot,
|
|
17597
|
+
rating,
|
|
17598
|
+
pressLogos,
|
|
17599
|
+
pressLabel = "In the press",
|
|
17600
|
+
pressLabelHref,
|
|
17601
|
+
siteHeader,
|
|
17602
|
+
align = "center",
|
|
17603
|
+
className
|
|
17604
|
+
}) {
|
|
17605
|
+
var _a;
|
|
17606
|
+
const [heroIndex, setHeroIndex] = React32__namespace.useState(0);
|
|
17607
|
+
const [videoReady, setVideoReady] = React32__namespace.useState(false);
|
|
17608
|
+
const videoRef = React32__namespace.useRef(null);
|
|
17609
|
+
const isHls = !!(videoUrl == null ? void 0 : videoUrl.includes(".m3u8"));
|
|
17610
|
+
const validImages = React32__namespace.useMemo(
|
|
17611
|
+
() => images.map((u) => u == null ? void 0 : u.trim()).filter(Boolean),
|
|
17612
|
+
[images]
|
|
17613
|
+
);
|
|
17614
|
+
const hasHeroImage = validImages.length > 0;
|
|
17615
|
+
const heroSrc = (i) => {
|
|
17616
|
+
var _a2;
|
|
17617
|
+
return (_a2 = validImages[i]) != null ? _a2 : "";
|
|
17618
|
+
};
|
|
17619
|
+
const safeIndex = Math.min(heroIndex, Math.max(0, validImages.length - 1));
|
|
17620
|
+
const currentSrc = heroSrc(safeIndex);
|
|
17621
|
+
const showCarousel = !videoUrl && validImages.length > 1;
|
|
17622
|
+
const tpConfig = trustpilot ? typeof trustpilot === "object" ? __spreadValues(__spreadValues({}, DEFAULT_TRUSTPILOT), trustpilot) : DEFAULT_TRUSTPILOT : null;
|
|
17623
|
+
useHlsVideo(videoRef, isHls ? videoUrl : void 0);
|
|
17624
|
+
React32__namespace.useEffect(() => {
|
|
17625
|
+
if (!videoUrl) return;
|
|
17626
|
+
const el = videoRef.current;
|
|
17627
|
+
if (!el) return;
|
|
17628
|
+
const observer = new IntersectionObserver(
|
|
17629
|
+
([entry]) => {
|
|
17630
|
+
if (entry.isIntersecting) {
|
|
17631
|
+
el.play().catch(() => {
|
|
17632
|
+
});
|
|
17633
|
+
} else {
|
|
17634
|
+
el.pause();
|
|
17635
|
+
}
|
|
17636
|
+
},
|
|
17637
|
+
{ threshold: 0.1 }
|
|
17638
|
+
);
|
|
17639
|
+
observer.observe(el);
|
|
17640
|
+
return () => observer.disconnect();
|
|
17641
|
+
}, [videoUrl]);
|
|
17642
|
+
const isCenter = align === "center";
|
|
17643
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17644
|
+
"section",
|
|
17645
|
+
{
|
|
17646
|
+
className: cn(
|
|
17647
|
+
"relative w-full overflow-hidden",
|
|
17648
|
+
"h-screen min-h-[640px]",
|
|
17649
|
+
hasHeroImage ? "bg-muted" : "bg-zinc-900",
|
|
17650
|
+
className
|
|
17651
|
+
),
|
|
17652
|
+
"data-home-header-align": align,
|
|
17653
|
+
children: [
|
|
17654
|
+
!videoUrl && !hasHeroImage && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17655
|
+
"div",
|
|
17656
|
+
{
|
|
17657
|
+
className: "absolute inset-0 bg-gradient-to-br from-zinc-900 via-zinc-800 to-zinc-950",
|
|
17658
|
+
"aria-hidden": true
|
|
17659
|
+
}
|
|
17660
|
+
),
|
|
17661
|
+
videoUrl ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17662
|
+
hasHeroImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17663
|
+
Picture,
|
|
17664
|
+
{
|
|
17665
|
+
src: validImages[0],
|
|
17666
|
+
alt: "",
|
|
17667
|
+
"aria-hidden": true,
|
|
17668
|
+
fetchPriority: "high",
|
|
17669
|
+
eager: true,
|
|
17670
|
+
className: cn(
|
|
17671
|
+
"absolute inset-0 h-full w-full object-cover transition-opacity duration-700",
|
|
17672
|
+
videoReady ? "opacity-0 pointer-events-none" : "opacity-100"
|
|
17673
|
+
)
|
|
17674
|
+
}
|
|
17675
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17676
|
+
"div",
|
|
17677
|
+
{
|
|
17678
|
+
className: "absolute inset-0 bg-gradient-to-br from-zinc-900 via-zinc-800 to-zinc-950 transition-opacity duration-700",
|
|
17679
|
+
"aria-hidden": true
|
|
17680
|
+
}
|
|
17681
|
+
),
|
|
17682
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17683
|
+
"video",
|
|
17684
|
+
{
|
|
17685
|
+
ref: videoRef,
|
|
17686
|
+
src: isHls ? void 0 : videoUrl,
|
|
17687
|
+
autoPlay: true,
|
|
17688
|
+
muted: true,
|
|
17689
|
+
loop: true,
|
|
17690
|
+
playsInline: true,
|
|
17691
|
+
preload: "auto",
|
|
17692
|
+
poster: hasHeroImage ? validImages[0] : void 0,
|
|
17693
|
+
onCanPlay: () => setVideoReady(true),
|
|
17694
|
+
className: cn(
|
|
17695
|
+
"absolute inset-0 h-full w-full object-cover transition-opacity duration-700",
|
|
17696
|
+
videoReady ? "opacity-100" : "opacity-0"
|
|
17697
|
+
)
|
|
17698
|
+
}
|
|
17699
|
+
)
|
|
17700
|
+
] }) : hasHeroImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17701
|
+
Picture,
|
|
17702
|
+
{
|
|
17703
|
+
src: currentSrc,
|
|
17704
|
+
alt: title,
|
|
17705
|
+
fetchPriority: safeIndex === 0 ? "high" : "auto",
|
|
17706
|
+
eager: safeIndex === 0,
|
|
17707
|
+
className: "absolute inset-0 h-full w-full object-cover transition-opacity duration-700"
|
|
17708
|
+
}
|
|
17709
|
+
) : null,
|
|
17710
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/30", "aria-hidden": true }),
|
|
17711
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17712
|
+
"div",
|
|
17713
|
+
{
|
|
17714
|
+
className: "absolute inset-0 bg-gradient-to-t from-black/70 via-black/10 to-black/30",
|
|
17715
|
+
"aria-hidden": true
|
|
17716
|
+
}
|
|
17717
|
+
),
|
|
17718
|
+
siteHeader && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17719
|
+
SiteHeader,
|
|
17720
|
+
__spreadProps(__spreadValues({}, Array.isArray(siteHeader) ? { links: siteHeader } : typeof siteHeader === "object" ? siteHeader : {}), {
|
|
17721
|
+
position: "overlay"
|
|
17722
|
+
})
|
|
17723
|
+
),
|
|
17724
|
+
showCarousel && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17725
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17726
|
+
"button",
|
|
17727
|
+
{
|
|
17728
|
+
type: "button",
|
|
17729
|
+
onClick: () => setHeroIndex(
|
|
17730
|
+
(i) => (i - 1 + validImages.length) % validImages.length
|
|
17731
|
+
),
|
|
17732
|
+
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",
|
|
17733
|
+
"aria-label": "Previous image",
|
|
17734
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
17735
|
+
}
|
|
17736
|
+
),
|
|
17737
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17738
|
+
"button",
|
|
17739
|
+
{
|
|
17740
|
+
type: "button",
|
|
17741
|
+
onClick: () => setHeroIndex((i) => (i + 1) % validImages.length),
|
|
17742
|
+
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",
|
|
17743
|
+
"aria-label": "Next image",
|
|
17744
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
17745
|
+
}
|
|
17746
|
+
)
|
|
17747
|
+
] }),
|
|
17748
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
17749
|
+
"div",
|
|
17750
|
+
{
|
|
17751
|
+
className: cn(
|
|
17752
|
+
"absolute inset-0 z-10 flex flex-col justify-center",
|
|
17753
|
+
"mx-auto w-full max-w-6xl px-6 sm:px-8",
|
|
17754
|
+
"pt-[72px]",
|
|
17755
|
+
// clear the overlay header
|
|
17756
|
+
pressLogos && pressLogos.length > 0 ? "pb-28" : "pb-16",
|
|
17757
|
+
isCenter ? "items-center text-center" : "items-start text-left"
|
|
17758
|
+
),
|
|
17759
|
+
children: [
|
|
17760
|
+
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 }),
|
|
17761
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17762
|
+
"h1",
|
|
17763
|
+
{
|
|
17764
|
+
className: cn(
|
|
17765
|
+
"font-heading font-black uppercase text-white leading-[0.95]",
|
|
17766
|
+
"text-5xl sm:text-6xl lg:text-7xl",
|
|
17767
|
+
isCenter ? "max-w-4xl" : "max-w-3xl"
|
|
17768
|
+
),
|
|
17769
|
+
children: title
|
|
17770
|
+
}
|
|
17771
|
+
),
|
|
17772
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17773
|
+
"p",
|
|
17774
|
+
{
|
|
17775
|
+
className: cn(
|
|
17776
|
+
"mt-5 text-lg sm:text-xl font-sans text-white/90",
|
|
17777
|
+
isCenter ? "max-w-2xl" : "max-w-xl"
|
|
17778
|
+
),
|
|
17779
|
+
children: subtitle
|
|
17780
|
+
}
|
|
17781
|
+
),
|
|
17782
|
+
cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8", children: cta.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17783
|
+
"a",
|
|
17784
|
+
{
|
|
17785
|
+
href: cta.href,
|
|
17786
|
+
onClick: cta.onClick,
|
|
17787
|
+
className: buttonVariants({ size: "lg" }),
|
|
17788
|
+
children: cta.label
|
|
17789
|
+
}
|
|
17790
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "lg", onClick: cta.onClick, children: cta.label }) }),
|
|
17791
|
+
tpConfig ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17792
|
+
"div",
|
|
17793
|
+
{
|
|
17794
|
+
className: cn(
|
|
17795
|
+
"home-trustpilot relative mt-8",
|
|
17796
|
+
// Wide enough for the Micro Star to show the full "Excellent
|
|
17797
|
+
// ★★★★★ Trustpilot" lockup — at 260px the Trustpilot wordmark
|
|
17798
|
+
// was clipped.
|
|
17799
|
+
isCenter && "w-full max-w-[340px]"
|
|
17800
|
+
),
|
|
17801
|
+
children: [
|
|
17802
|
+
/* @__PURE__ */ jsxRuntime.jsx(TrustpilotEmbed, { config: tpConfig }),
|
|
17803
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17804
|
+
"a",
|
|
17805
|
+
{
|
|
17806
|
+
href: (_a = tpConfig.fallbackHref) != null ? _a : "https://www.trustpilot.com/review/planetaexo.com",
|
|
17807
|
+
target: "_blank",
|
|
17808
|
+
rel: "noopener noreferrer",
|
|
17809
|
+
"aria-label": "Read our reviews on Trustpilot",
|
|
17810
|
+
className: "absolute inset-0 z-10"
|
|
17811
|
+
}
|
|
17812
|
+
)
|
|
17813
|
+
]
|
|
17814
|
+
}
|
|
17815
|
+
) : rating ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8", children: /* @__PURE__ */ jsxRuntime.jsx(Rating, __spreadValues({}, rating)) }) : null
|
|
17816
|
+
]
|
|
17817
|
+
}
|
|
17818
|
+
),
|
|
17819
|
+
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: [
|
|
17820
|
+
pressLabelHref ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17821
|
+
"a",
|
|
17822
|
+
{
|
|
17823
|
+
href: pressLabelHref,
|
|
17824
|
+
target: "_blank",
|
|
17825
|
+
rel: "noopener noreferrer",
|
|
17826
|
+
className: "text-[10px] font-ui font-bold uppercase tracking-[0.25em] leading-tight text-white/70 transition-colors hover:text-white",
|
|
17827
|
+
children: pressLabel
|
|
17828
|
+
}
|
|
17829
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-ui font-bold uppercase tracking-[0.25em] leading-tight text-white/70", children: pressLabel }),
|
|
17830
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-nowrap items-center justify-center gap-x-7", children: [
|
|
17831
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden h-5 w-px bg-white/25 sm:block", "aria-hidden": true }),
|
|
17832
|
+
pressLogos.map((logo, i) => {
|
|
17833
|
+
var _a2, _b, _c, _d;
|
|
17834
|
+
const content = logo.src ? (
|
|
17835
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
17836
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17837
|
+
"img",
|
|
17838
|
+
{
|
|
17839
|
+
src: logo.src,
|
|
17840
|
+
alt: (_b = (_a2 = logo.alt) != null ? _a2 : logo.label) != null ? _b : "Press logo",
|
|
17841
|
+
className: "h-12 w-12 shrink-0 select-none object-contain",
|
|
17842
|
+
draggable: false
|
|
17843
|
+
}
|
|
17844
|
+
)
|
|
17845
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-base font-bold uppercase tracking-wide", children: logo.label });
|
|
17846
|
+
return logo.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17847
|
+
"a",
|
|
17848
|
+
{
|
|
17849
|
+
href: logo.href,
|
|
17850
|
+
target: "_blank",
|
|
17851
|
+
rel: "noopener noreferrer",
|
|
17852
|
+
"aria-label": (_d = (_c = logo.alt) != null ? _c : logo.label) != null ? _d : "Press article",
|
|
17853
|
+
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",
|
|
17854
|
+
children: content
|
|
17855
|
+
},
|
|
17856
|
+
i
|
|
17857
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17858
|
+
"span",
|
|
17859
|
+
{
|
|
17860
|
+
className: "shrink-0 text-white/80 [&>img]:opacity-80",
|
|
17861
|
+
children: content
|
|
17862
|
+
},
|
|
17863
|
+
i
|
|
17864
|
+
);
|
|
17865
|
+
})
|
|
17866
|
+
] })
|
|
17867
|
+
] }) })
|
|
17868
|
+
]
|
|
17869
|
+
}
|
|
17870
|
+
);
|
|
17871
|
+
}
|
|
17872
|
+
var ACCENT_PILL = "bg-primary text-primary-foreground";
|
|
17873
|
+
var ACCENT_BUTTON = "bg-primary text-primary-foreground hover:bg-primary/90";
|
|
17874
|
+
var THEME = {
|
|
17875
|
+
dark: {
|
|
17876
|
+
section: "bg-neutral-950",
|
|
17877
|
+
heading: "text-white",
|
|
17878
|
+
body: "text-white/60",
|
|
17879
|
+
tabTrack: "bg-white/5 border-white/10",
|
|
17880
|
+
tabActive: ACCENT_PILL,
|
|
17881
|
+
tabIdle: "text-white/60 hover:text-white",
|
|
17882
|
+
cardRing: "focus-visible:ring-white/70 focus-visible:ring-offset-neutral-950",
|
|
17883
|
+
divider: "border-white/15"
|
|
17884
|
+
},
|
|
17885
|
+
light: {
|
|
17886
|
+
/* Explicit light colours (not mode-aware tokens) so this variant stays a
|
|
17887
|
+
light surface even when the app is in dark mode. */
|
|
17888
|
+
section: "bg-white",
|
|
17889
|
+
heading: "text-neutral-900",
|
|
17890
|
+
body: "text-neutral-500",
|
|
17891
|
+
tabTrack: "bg-neutral-100 border-black/10",
|
|
17892
|
+
tabActive: ACCENT_PILL,
|
|
17893
|
+
tabIdle: "text-neutral-500 hover:text-neutral-900",
|
|
17894
|
+
cardRing: "focus-visible:ring-neutral-900/40 focus-visible:ring-offset-white",
|
|
17895
|
+
divider: "border-black/10"
|
|
17896
|
+
}
|
|
17897
|
+
};
|
|
17898
|
+
var BENTO_SPAN = {
|
|
17899
|
+
featured: "col-span-2 row-span-2",
|
|
17900
|
+
tall: "col-span-2 sm:col-span-1 row-span-2",
|
|
17901
|
+
wide: "col-span-2",
|
|
17902
|
+
normal: "col-span-2 sm:col-span-1"
|
|
17903
|
+
};
|
|
17904
|
+
function BentoTile({
|
|
17905
|
+
card,
|
|
17906
|
+
ring
|
|
17907
|
+
}) {
|
|
17908
|
+
var _a, _b, _c;
|
|
17909
|
+
const isFeatured = card.size === "featured";
|
|
17910
|
+
const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17911
|
+
card.image ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
17912
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17913
|
+
Picture,
|
|
17914
|
+
{
|
|
17915
|
+
src: card.image,
|
|
17916
|
+
alt: (_a = card.imageAlt) != null ? _a : card.label,
|
|
17917
|
+
loading: "lazy",
|
|
17918
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-700 group-hover:scale-105"
|
|
17919
|
+
}
|
|
17920
|
+
),
|
|
17921
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/85 via-black/15 to-transparent" })
|
|
17922
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
17923
|
+
"div",
|
|
17924
|
+
{
|
|
17925
|
+
className: cn(
|
|
17926
|
+
"absolute inset-0 bg-gradient-to-br",
|
|
17927
|
+
(_b = card.gradient) != null ? _b : "from-primary-800 to-primary-900"
|
|
17928
|
+
)
|
|
17929
|
+
}
|
|
17930
|
+
),
|
|
17931
|
+
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 }),
|
|
17932
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-x-0 bottom-0 z-10 p-5", children: [
|
|
17933
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17934
|
+
"h3",
|
|
17935
|
+
{
|
|
17936
|
+
className: cn(
|
|
17937
|
+
"font-heading font-bold uppercase leading-tight tracking-wide text-white",
|
|
17938
|
+
isFeatured ? "text-2xl sm:text-3xl" : "text-lg sm:text-xl"
|
|
17939
|
+
),
|
|
17940
|
+
children: card.label
|
|
17941
|
+
}
|
|
17942
|
+
),
|
|
17943
|
+
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 }),
|
|
17944
|
+
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: [
|
|
17945
|
+
card.ctaLabel,
|
|
17946
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
17947
|
+
] })
|
|
17948
|
+
] })
|
|
17949
|
+
] });
|
|
17950
|
+
const tileClass = cn(
|
|
17951
|
+
"group relative overflow-hidden rounded-2xl bg-muted shadow-sm",
|
|
17952
|
+
BENTO_SPAN[(_c = card.size) != null ? _c : "normal"]
|
|
17953
|
+
);
|
|
17954
|
+
return card.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
17955
|
+
"a",
|
|
17956
|
+
{
|
|
17957
|
+
href: card.href,
|
|
17958
|
+
className: cn(
|
|
17959
|
+
tileClass,
|
|
17960
|
+
"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
17961
|
+
ring
|
|
17962
|
+
),
|
|
17963
|
+
children: inner
|
|
17964
|
+
}
|
|
17965
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: tileClass, children: inner });
|
|
17966
|
+
}
|
|
17967
|
+
function AdventureExplorer({
|
|
17968
|
+
tabs,
|
|
17969
|
+
eyebrow,
|
|
17970
|
+
heading,
|
|
17971
|
+
subheading,
|
|
17972
|
+
defaultTabId,
|
|
17973
|
+
viewAllLabel = "View All Adventures",
|
|
17974
|
+
viewAllHref,
|
|
17975
|
+
theme = "dark",
|
|
17976
|
+
layout = "carousel",
|
|
17977
|
+
bentoLimit,
|
|
17978
|
+
moreLabel = "More wild places",
|
|
17979
|
+
className
|
|
17980
|
+
}) {
|
|
17981
|
+
var _a, _b, _c, _d, _e;
|
|
17982
|
+
const [activeId, setActiveId] = React32__namespace.useState(
|
|
17983
|
+
defaultTabId != null ? defaultTabId : (_a = tabs[0]) == null ? void 0 : _a.id
|
|
17984
|
+
);
|
|
17985
|
+
const active = (_b = tabs.find((t2) => t2.id === activeId)) != null ? _b : tabs[0];
|
|
17986
|
+
const t = THEME[theme];
|
|
17987
|
+
const ctaHref = (_d = (_c = active == null ? void 0 : active.viewAllHref) != null ? _c : viewAllHref) != null ? _d : "#";
|
|
17988
|
+
const showCta = viewAllLabel.length > 0;
|
|
17989
|
+
const hasHeading = !!(eyebrow || heading || subheading);
|
|
17990
|
+
const cards = (_e = active == null ? void 0 : active.cards) != null ? _e : [];
|
|
17991
|
+
const limited = layout === "bento" && bentoLimit != null && cards.length > bentoLimit;
|
|
17992
|
+
const gridCards = limited ? cards.slice(0, bentoLimit) : cards;
|
|
17993
|
+
const moreCards = limited ? cards.slice(bentoLimit) : [];
|
|
17994
|
+
const showHeadCta = showCta && !limited;
|
|
17995
|
+
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: [
|
|
17996
|
+
hasHeading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8 flex flex-wrap items-end justify-between gap-6", children: [
|
|
17997
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
17998
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
17999
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18000
|
+
"h2",
|
|
18001
|
+
{
|
|
18002
|
+
className: cn(
|
|
18003
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
18004
|
+
t.heading
|
|
18005
|
+
),
|
|
18006
|
+
children: heading
|
|
18007
|
+
}
|
|
18008
|
+
),
|
|
18009
|
+
subheading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 text-base", t.body), children: subheading })
|
|
18010
|
+
] }),
|
|
18011
|
+
showHeadCta && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18012
|
+
"a",
|
|
18013
|
+
{
|
|
18014
|
+
href: ctaHref,
|
|
18015
|
+
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",
|
|
18016
|
+
children: [
|
|
18017
|
+
viewAllLabel,
|
|
18018
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
18019
|
+
]
|
|
18020
|
+
}
|
|
18021
|
+
)
|
|
18022
|
+
] }),
|
|
18023
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
|
|
18024
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18025
|
+
"div",
|
|
18026
|
+
{
|
|
18027
|
+
role: "tablist",
|
|
18028
|
+
"aria-label": "Explore categories",
|
|
18029
|
+
className: cn(
|
|
18030
|
+
"inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full border p-1.5 scrollbar-none",
|
|
18031
|
+
t.tabTrack
|
|
18032
|
+
),
|
|
18033
|
+
children: tabs.map((tab) => {
|
|
18034
|
+
const isActive = tab.id === (active == null ? void 0 : active.id);
|
|
18035
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18036
|
+
"button",
|
|
18037
|
+
{
|
|
18038
|
+
type: "button",
|
|
18039
|
+
role: "tab",
|
|
18040
|
+
"aria-selected": isActive,
|
|
18041
|
+
onClick: () => setActiveId(tab.id),
|
|
18042
|
+
className: cn(
|
|
18043
|
+
"shrink-0 rounded-full px-5 py-2 text-sm font-ui font-bold transition-colors",
|
|
18044
|
+
isActive ? t.tabActive : t.tabIdle
|
|
18045
|
+
),
|
|
18046
|
+
children: tab.label
|
|
18047
|
+
},
|
|
18048
|
+
tab.id
|
|
18049
|
+
);
|
|
18050
|
+
})
|
|
18051
|
+
}
|
|
18052
|
+
),
|
|
18053
|
+
showCta && !hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18054
|
+
"a",
|
|
18055
|
+
{
|
|
18056
|
+
href: ctaHref,
|
|
18057
|
+
className: cn(
|
|
18058
|
+
"hidden shrink-0 items-center rounded-full px-6 py-2.5 text-sm font-heading font-bold transition-colors sm:inline-flex",
|
|
18059
|
+
ACCENT_BUTTON
|
|
18060
|
+
),
|
|
18061
|
+
children: viewAllLabel
|
|
18062
|
+
}
|
|
18063
|
+
)
|
|
18064
|
+
] }),
|
|
18065
|
+
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)) }),
|
|
18066
|
+
limited && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18067
|
+
"div",
|
|
18068
|
+
{
|
|
18069
|
+
className: cn(
|
|
18070
|
+
"mt-7 flex flex-wrap items-center justify-between gap-x-8 gap-y-3 border-t pt-6",
|
|
18071
|
+
t.divider
|
|
18072
|
+
),
|
|
18073
|
+
children: [
|
|
18074
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2", children: [
|
|
18075
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-ui font-bold uppercase tracking-[0.18em] text-primary", children: moreLabel }),
|
|
18076
|
+
moreCards.map((card, i) => {
|
|
18077
|
+
var _a2;
|
|
18078
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18079
|
+
"a",
|
|
18080
|
+
{
|
|
18081
|
+
href: (_a2 = card.href) != null ? _a2 : "#",
|
|
18082
|
+
className: "group inline-flex items-baseline gap-2",
|
|
18083
|
+
children: [
|
|
18084
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18085
|
+
"span",
|
|
18086
|
+
{
|
|
18087
|
+
className: cn(
|
|
18088
|
+
"font-heading text-base font-bold transition-colors group-hover:text-primary",
|
|
18089
|
+
t.heading
|
|
18090
|
+
),
|
|
18091
|
+
children: card.label
|
|
18092
|
+
}
|
|
18093
|
+
),
|
|
18094
|
+
card.tripCount && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-sm", t.body), children: card.tripCount })
|
|
18095
|
+
]
|
|
18096
|
+
},
|
|
18097
|
+
i
|
|
18098
|
+
);
|
|
18099
|
+
})
|
|
18100
|
+
] }),
|
|
18101
|
+
showCta && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18102
|
+
"a",
|
|
18103
|
+
{
|
|
18104
|
+
href: ctaHref,
|
|
18105
|
+
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",
|
|
18106
|
+
children: [
|
|
18107
|
+
viewAllLabel,
|
|
18108
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "transition-transform group-hover:translate-x-1", children: "\u2192" })
|
|
18109
|
+
]
|
|
18110
|
+
}
|
|
18111
|
+
)
|
|
18112
|
+
]
|
|
18113
|
+
}
|
|
18114
|
+
),
|
|
18115
|
+
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) => {
|
|
18116
|
+
var _a2, _b2;
|
|
18117
|
+
const inner = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
18118
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18119
|
+
Picture,
|
|
18120
|
+
{
|
|
18121
|
+
src: (_a2 = card.image) != null ? _a2 : "",
|
|
18122
|
+
alt: (_b2 = card.imageAlt) != null ? _b2 : card.label,
|
|
18123
|
+
loading: "lazy",
|
|
18124
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
|
|
18125
|
+
}
|
|
18126
|
+
),
|
|
18127
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/80 via-black/15 to-transparent" }),
|
|
18128
|
+
/* @__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 })
|
|
18129
|
+
] });
|
|
18130
|
+
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";
|
|
18131
|
+
return card.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18132
|
+
"a",
|
|
18133
|
+
{
|
|
18134
|
+
href: card.href,
|
|
18135
|
+
className: cn(
|
|
18136
|
+
cardClass,
|
|
18137
|
+
"block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
18138
|
+
t.cardRing
|
|
18139
|
+
),
|
|
18140
|
+
children: inner
|
|
18141
|
+
},
|
|
18142
|
+
i
|
|
18143
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cardClass, children: inner }, i);
|
|
18144
|
+
}) }),
|
|
18145
|
+
showCta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 sm:hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
18146
|
+
"a",
|
|
18147
|
+
{
|
|
18148
|
+
href: ctaHref,
|
|
18149
|
+
className: cn(
|
|
18150
|
+
"inline-flex w-full items-center justify-center rounded-full px-6 py-3 text-sm font-heading font-bold transition-colors",
|
|
18151
|
+
ACCENT_BUTTON
|
|
18152
|
+
),
|
|
18153
|
+
children: viewAllLabel
|
|
18154
|
+
}
|
|
18155
|
+
) })
|
|
18156
|
+
] }) });
|
|
18157
|
+
}
|
|
18158
|
+
var THEME2 = {
|
|
18159
|
+
light: {
|
|
18160
|
+
section: "bg-neutral-100",
|
|
18161
|
+
heading: "text-neutral-900",
|
|
18162
|
+
title: "text-neutral-800",
|
|
18163
|
+
body: "text-neutral-500",
|
|
18164
|
+
icon: "text-primary",
|
|
18165
|
+
card: "bg-white border-black/10 shadow-sm",
|
|
18166
|
+
chip: "bg-primary/10 text-primary",
|
|
18167
|
+
number: "text-primary"
|
|
18168
|
+
},
|
|
18169
|
+
dark: {
|
|
18170
|
+
section: "bg-neutral-950",
|
|
18171
|
+
heading: "text-white",
|
|
18172
|
+
title: "text-white",
|
|
18173
|
+
body: "text-white/60",
|
|
18174
|
+
icon: "text-primary-400",
|
|
18175
|
+
card: "bg-white/5 border-white/10",
|
|
18176
|
+
chip: "bg-primary-400/15 text-primary-400",
|
|
18177
|
+
number: "text-primary-400"
|
|
18178
|
+
}
|
|
18179
|
+
};
|
|
18180
|
+
var COLS = {
|
|
18181
|
+
2: "sm:grid-cols-2",
|
|
18182
|
+
3: "sm:grid-cols-2 lg:grid-cols-3",
|
|
18183
|
+
4: "sm:grid-cols-2 lg:grid-cols-4"
|
|
18184
|
+
};
|
|
18185
|
+
function USP({
|
|
18186
|
+
items,
|
|
18187
|
+
heading,
|
|
18188
|
+
subheading,
|
|
18189
|
+
columns,
|
|
18190
|
+
variant = "minimal",
|
|
18191
|
+
theme = "light",
|
|
18192
|
+
className
|
|
18193
|
+
}) {
|
|
18194
|
+
const t = THEME2[theme];
|
|
18195
|
+
const cols = columns != null ? columns : Math.min(Math.max(items.length, 2), 4);
|
|
18196
|
+
const isInline = variant === "inline";
|
|
18197
|
+
const isCard = variant === "card";
|
|
18198
|
+
const isNumbered = variant === "numbered";
|
|
18199
|
+
const stacked = !isInline;
|
|
18200
|
+
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: [
|
|
18201
|
+
(heading || subheading) && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18202
|
+
"div",
|
|
18203
|
+
{
|
|
18204
|
+
className: cn(
|
|
18205
|
+
"mb-12 max-w-2xl",
|
|
18206
|
+
isNumbered ? "text-left" : "mx-auto text-center"
|
|
18207
|
+
),
|
|
18208
|
+
children: [
|
|
18209
|
+
heading && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18210
|
+
"h2",
|
|
18211
|
+
{
|
|
18212
|
+
className: cn(
|
|
18213
|
+
"font-heading font-bold uppercase tracking-wide",
|
|
18214
|
+
isNumbered ? "text-3xl sm:text-4xl lg:text-5xl" : "text-2xl sm:text-3xl",
|
|
18215
|
+
t.heading
|
|
18216
|
+
),
|
|
18217
|
+
children: heading
|
|
18218
|
+
}
|
|
18219
|
+
),
|
|
18220
|
+
subheading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 font-sans text-base", t.body), children: subheading })
|
|
18221
|
+
]
|
|
18222
|
+
}
|
|
18223
|
+
),
|
|
18224
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18225
|
+
"div",
|
|
18226
|
+
{
|
|
18227
|
+
className: cn(
|
|
18228
|
+
"grid grid-cols-1 gap-x-8 gap-y-10",
|
|
18229
|
+
COLS[cols]
|
|
18230
|
+
),
|
|
18231
|
+
children: [
|
|
18232
|
+
isNumbered && items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18233
|
+
"div",
|
|
18234
|
+
{
|
|
18235
|
+
className: cn(
|
|
18236
|
+
"flex flex-col rounded-2xl border p-6 text-left sm:p-7",
|
|
18237
|
+
t.card
|
|
18238
|
+
),
|
|
18239
|
+
children: [
|
|
18240
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18241
|
+
"span",
|
|
18242
|
+
{
|
|
18243
|
+
className: cn(
|
|
18244
|
+
"mb-4 font-sans text-xl font-semibold italic",
|
|
18245
|
+
t.number
|
|
18246
|
+
),
|
|
18247
|
+
children: String(i + 1).padStart(2, "0")
|
|
18248
|
+
}
|
|
18249
|
+
),
|
|
18250
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18251
|
+
"h3",
|
|
18252
|
+
{
|
|
18253
|
+
className: cn(
|
|
18254
|
+
"font-heading text-lg font-bold leading-snug",
|
|
18255
|
+
t.heading
|
|
18256
|
+
),
|
|
18257
|
+
children: item.title
|
|
18258
|
+
}
|
|
18259
|
+
),
|
|
18260
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2 font-sans text-base leading-relaxed", t.body), children: item.description })
|
|
18261
|
+
]
|
|
18262
|
+
},
|
|
18263
|
+
i
|
|
18264
|
+
)),
|
|
18265
|
+
!isNumbered && items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18266
|
+
"div",
|
|
18267
|
+
{
|
|
18268
|
+
className: cn(
|
|
18269
|
+
isCard && cn("rounded-2xl border p-6 sm:p-7", t.card),
|
|
18270
|
+
stacked ? "flex flex-col items-center text-center" : "flex items-start gap-4 text-left"
|
|
18271
|
+
),
|
|
18272
|
+
children: [
|
|
18273
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18274
|
+
"span",
|
|
18275
|
+
{
|
|
18276
|
+
className: cn(
|
|
18277
|
+
"flex shrink-0 items-center justify-center",
|
|
18278
|
+
isCard ? cn("h-14 w-14 rounded-full [&>svg]:size-7", t.chip) : cn("[&>svg]:size-8", t.icon),
|
|
18279
|
+
stacked && "mb-4"
|
|
18280
|
+
),
|
|
18281
|
+
children: item.icon
|
|
18282
|
+
}
|
|
18283
|
+
),
|
|
18284
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: isInline ? "flex-1" : "contents", children: [
|
|
18285
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18286
|
+
"h3",
|
|
18287
|
+
{
|
|
18288
|
+
className: cn(
|
|
18289
|
+
"font-heading text-sm font-bold uppercase leading-snug tracking-wide",
|
|
18290
|
+
t.title,
|
|
18291
|
+
stacked && "mb-3"
|
|
18292
|
+
),
|
|
18293
|
+
children: item.title
|
|
18294
|
+
}
|
|
18295
|
+
),
|
|
18296
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18297
|
+
"p",
|
|
18298
|
+
{
|
|
18299
|
+
className: cn(
|
|
18300
|
+
"font-sans text-base leading-relaxed",
|
|
18301
|
+
t.body,
|
|
18302
|
+
isInline && "mt-1.5"
|
|
18303
|
+
),
|
|
18304
|
+
children: item.description
|
|
18305
|
+
}
|
|
18306
|
+
)
|
|
18307
|
+
] })
|
|
18308
|
+
]
|
|
18309
|
+
},
|
|
18310
|
+
i
|
|
18311
|
+
))
|
|
18312
|
+
]
|
|
18313
|
+
}
|
|
18314
|
+
)
|
|
18315
|
+
] }) });
|
|
18316
|
+
}
|
|
18317
|
+
function RotatingSubtitle({
|
|
18318
|
+
phrases,
|
|
18319
|
+
interval,
|
|
18320
|
+
className
|
|
18321
|
+
}) {
|
|
18322
|
+
const [index, setIndex] = React32__namespace.useState(0);
|
|
18323
|
+
React32__namespace.useEffect(() => {
|
|
18324
|
+
var _a;
|
|
18325
|
+
if (phrases.length < 2) return;
|
|
18326
|
+
const reduce = typeof window !== "undefined" && ((_a = window.matchMedia) == null ? void 0 : _a.call(window, "(prefers-reduced-motion: reduce)").matches);
|
|
18327
|
+
if (reduce) return;
|
|
18328
|
+
const id = setInterval(
|
|
18329
|
+
() => setIndex((i) => (i + 1) % phrases.length),
|
|
18330
|
+
interval
|
|
18331
|
+
);
|
|
18332
|
+
return () => clearInterval(id);
|
|
18333
|
+
}, [phrases.length, interval]);
|
|
18334
|
+
return (
|
|
18335
|
+
/* Grid-stacks all phrases so the box keeps the height of the tallest line
|
|
18336
|
+
and the crossfade has no layout shift. */
|
|
18337
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("grid", className), children: phrases.map((phrase, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18338
|
+
"span",
|
|
18339
|
+
{
|
|
18340
|
+
"aria-hidden": i !== index,
|
|
18341
|
+
className: cn(
|
|
18342
|
+
"col-start-1 row-start-1 transition-opacity duration-700",
|
|
18343
|
+
i === index ? "opacity-100" : "opacity-0"
|
|
18344
|
+
),
|
|
18345
|
+
children: phrase
|
|
18346
|
+
},
|
|
18347
|
+
phrase + i
|
|
18348
|
+
)) })
|
|
18349
|
+
);
|
|
18350
|
+
}
|
|
18351
|
+
function CtaBanner({
|
|
18352
|
+
image,
|
|
18353
|
+
imageAlt = "",
|
|
18354
|
+
title,
|
|
18355
|
+
subtitle,
|
|
18356
|
+
cta,
|
|
18357
|
+
rotateInterval = 3e3,
|
|
18358
|
+
parallax = true,
|
|
18359
|
+
overlayOpacity = 35,
|
|
18360
|
+
className
|
|
18361
|
+
}) {
|
|
18362
|
+
const phrases = React32__namespace.useMemo(
|
|
18363
|
+
() => (Array.isArray(subtitle) ? subtitle : subtitle ? [subtitle] : []).map((s) => s.trim()).filter(Boolean),
|
|
18364
|
+
[subtitle]
|
|
18365
|
+
);
|
|
18366
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18367
|
+
"section",
|
|
18368
|
+
{
|
|
18369
|
+
className: cn(
|
|
18370
|
+
"relative w-full overflow-hidden",
|
|
18371
|
+
"flex items-center justify-center",
|
|
18372
|
+
"min-h-[360px] py-24 sm:py-28 lg:py-32",
|
|
18373
|
+
"bg-muted",
|
|
18374
|
+
className
|
|
18375
|
+
),
|
|
18376
|
+
children: [
|
|
18377
|
+
parallax ? (
|
|
18378
|
+
/* Parallax: fixed-attachment CSS background (sm+). Uses a plain div so
|
|
18379
|
+
`bg-fixed` works; on mobile it falls back to a normal cover image. */
|
|
18380
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18381
|
+
"div",
|
|
18382
|
+
{
|
|
18383
|
+
"aria-hidden": true,
|
|
18384
|
+
role: imageAlt ? "img" : void 0,
|
|
18385
|
+
"aria-label": imageAlt || void 0,
|
|
18386
|
+
className: "absolute inset-0 bg-cover bg-center sm:bg-fixed",
|
|
18387
|
+
style: { backgroundImage: `url("${image}")` }
|
|
18388
|
+
}
|
|
18389
|
+
)
|
|
18390
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
18391
|
+
Picture,
|
|
18392
|
+
{
|
|
18393
|
+
src: image,
|
|
18394
|
+
alt: imageAlt,
|
|
18395
|
+
eager: true,
|
|
18396
|
+
className: "absolute inset-0 h-full w-full object-cover"
|
|
18397
|
+
}
|
|
18398
|
+
),
|
|
18399
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18400
|
+
"div",
|
|
18401
|
+
{
|
|
18402
|
+
className: "absolute inset-0 bg-black",
|
|
18403
|
+
style: { opacity: overlayOpacity / 100 },
|
|
18404
|
+
"aria-hidden": true
|
|
18405
|
+
}
|
|
18406
|
+
),
|
|
18407
|
+
/* @__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: [
|
|
18408
|
+
/* @__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 }),
|
|
18409
|
+
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] }),
|
|
18410
|
+
cta && (cta.href ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
18411
|
+
"a",
|
|
18412
|
+
{
|
|
18413
|
+
href: cta.href,
|
|
18414
|
+
onClick: cta.onClick,
|
|
18415
|
+
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",
|
|
18416
|
+
children: cta.label
|
|
18417
|
+
}
|
|
18418
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
18419
|
+
"button",
|
|
18420
|
+
{
|
|
18421
|
+
type: "button",
|
|
18422
|
+
onClick: cta.onClick,
|
|
18423
|
+
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",
|
|
18424
|
+
children: cta.label
|
|
18425
|
+
}
|
|
18426
|
+
))
|
|
18427
|
+
] })
|
|
18428
|
+
]
|
|
18429
|
+
}
|
|
18430
|
+
);
|
|
18431
|
+
}
|
|
18432
|
+
var THEME3 = {
|
|
18433
|
+
light: {
|
|
18434
|
+
section: "bg-background",
|
|
18435
|
+
heading: "text-foreground",
|
|
18436
|
+
sub: "text-muted-foreground",
|
|
18437
|
+
rowTitle: "text-foreground",
|
|
18438
|
+
rowBorder: "border-border",
|
|
18439
|
+
rowArrow: "text-primary"
|
|
18440
|
+
},
|
|
18441
|
+
dark: {
|
|
18442
|
+
section: "bg-neutral-950",
|
|
18443
|
+
heading: "text-white",
|
|
18444
|
+
sub: "text-white/60",
|
|
18445
|
+
rowTitle: "text-white",
|
|
18446
|
+
rowBorder: "border-white/10",
|
|
18447
|
+
rowArrow: "text-primary-400"
|
|
18448
|
+
}
|
|
18449
|
+
};
|
|
18450
|
+
function BlogJournal({
|
|
18451
|
+
eyebrow,
|
|
18452
|
+
title,
|
|
18453
|
+
subtitle,
|
|
18454
|
+
link,
|
|
18455
|
+
feature,
|
|
18456
|
+
posts,
|
|
18457
|
+
theme = "light",
|
|
18458
|
+
className
|
|
18459
|
+
}) {
|
|
18460
|
+
var _a, _b, _c, _d;
|
|
18461
|
+
const t = THEME3[theme];
|
|
18462
|
+
const featRel = feature.external ? "noopener noreferrer" : void 0;
|
|
18463
|
+
const featTarget = feature.external ? "_blank" : void 0;
|
|
18464
|
+
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: [
|
|
18465
|
+
(title || eyebrow || link) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-10 flex flex-wrap items-end justify-between gap-6", children: [
|
|
18466
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
18467
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18468
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18469
|
+
"h2",
|
|
18470
|
+
{
|
|
18471
|
+
className: cn(
|
|
18472
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
18473
|
+
t.heading
|
|
18474
|
+
),
|
|
18475
|
+
children: title
|
|
18476
|
+
}
|
|
18477
|
+
),
|
|
18478
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-3 text-base", t.sub), children: subtitle })
|
|
18479
|
+
] }),
|
|
18480
|
+
link && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18481
|
+
"a",
|
|
18482
|
+
{
|
|
18483
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18484
|
+
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",
|
|
18485
|
+
children: [
|
|
18486
|
+
link.label,
|
|
18487
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18488
|
+
]
|
|
18489
|
+
}
|
|
18490
|
+
)
|
|
18491
|
+
] }),
|
|
18492
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-stretch gap-7 lg:grid-cols-[1.12fr_0.88fr]", children: [
|
|
18493
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18494
|
+
"a",
|
|
18495
|
+
{
|
|
18496
|
+
href: (_b = feature.href) != null ? _b : "#",
|
|
18497
|
+
target: featTarget,
|
|
18498
|
+
rel: featRel,
|
|
18499
|
+
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]",
|
|
18500
|
+
children: [
|
|
18501
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18502
|
+
Picture,
|
|
18503
|
+
{
|
|
18504
|
+
src: feature.image,
|
|
18505
|
+
alt: (_c = feature.imageAlt) != null ? _c : feature.title,
|
|
18506
|
+
loading: "lazy",
|
|
18507
|
+
className: "absolute inset-0 h-full w-full object-cover transition-transform duration-700 group-hover:scale-105"
|
|
18508
|
+
}
|
|
18509
|
+
),
|
|
18510
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/90 via-black/25 to-transparent" }),
|
|
18511
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative p-8 sm:p-9", children: [
|
|
18512
|
+
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 }),
|
|
18513
|
+
feature.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs font-ui font-bold uppercase tracking-[0.1em] text-primary-400", children: feature.date }),
|
|
18514
|
+
/* @__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 }),
|
|
18515
|
+
feature.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 max-w-[46ch] text-sm leading-relaxed text-white/85", children: feature.excerpt }),
|
|
18516
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-5 inline-flex items-center gap-1.5 font-ui text-sm font-bold", children: [
|
|
18517
|
+
(_d = feature.ctaLabel) != null ? _d : "Read the guide",
|
|
18518
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18519
|
+
] })
|
|
18520
|
+
] })
|
|
18521
|
+
]
|
|
18522
|
+
}
|
|
18523
|
+
),
|
|
18524
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col justify-center", children: posts.map((post, i) => {
|
|
18525
|
+
var _a2, _b2;
|
|
18526
|
+
return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18527
|
+
"a",
|
|
18528
|
+
{
|
|
18529
|
+
href: (_a2 = post.href) != null ? _a2 : "#",
|
|
18530
|
+
target: post.external ? "_blank" : void 0,
|
|
18531
|
+
rel: post.external ? "noopener noreferrer" : void 0,
|
|
18532
|
+
className: cn(
|
|
18533
|
+
"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]",
|
|
18534
|
+
t.rowBorder,
|
|
18535
|
+
i === 0 && "border-t-0 pt-0"
|
|
18536
|
+
),
|
|
18537
|
+
children: [
|
|
18538
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18539
|
+
Picture,
|
|
18540
|
+
{
|
|
18541
|
+
src: post.image,
|
|
18542
|
+
alt: (_b2 = post.imageAlt) != null ? _b2 : post.title,
|
|
18543
|
+
loading: "lazy",
|
|
18544
|
+
className: "h-16 w-16 rounded-xl object-cover sm:h-[78px] sm:w-[78px]"
|
|
18545
|
+
}
|
|
18546
|
+
),
|
|
18547
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
18548
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[11px] font-ui font-bold uppercase tracking-[0.1em] text-primary", children: [
|
|
18549
|
+
post.category,
|
|
18550
|
+
post.category && post.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("ml-2 font-semibold", t.sub), children: post.date }),
|
|
18551
|
+
!post.category && post.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold", t.sub), children: post.date })
|
|
18552
|
+
] }),
|
|
18553
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18554
|
+
"h4",
|
|
18555
|
+
{
|
|
18556
|
+
className: cn(
|
|
18557
|
+
"mt-1.5 font-heading text-base font-bold leading-snug sm:text-lg",
|
|
18558
|
+
t.rowTitle
|
|
18559
|
+
),
|
|
18560
|
+
children: post.title
|
|
18561
|
+
}
|
|
18562
|
+
)
|
|
18563
|
+
] }),
|
|
18564
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18565
|
+
lucideReact.ArrowRightIcon,
|
|
18566
|
+
{
|
|
18567
|
+
className: cn(
|
|
18568
|
+
"h-5 w-5 shrink-0 transition-transform group-hover:translate-x-1",
|
|
18569
|
+
t.rowArrow
|
|
18570
|
+
)
|
|
18571
|
+
}
|
|
18572
|
+
)
|
|
18573
|
+
]
|
|
18574
|
+
}
|
|
18575
|
+
) }, i);
|
|
18576
|
+
}) })
|
|
18577
|
+
] })
|
|
18578
|
+
] }) });
|
|
18579
|
+
}
|
|
18580
|
+
var SURFACE_WHITE = "bg-white";
|
|
18581
|
+
var SURFACE_SAND = "bg-[oklch(0.94_0.016_86)]";
|
|
18582
|
+
var SURFACE_PRIMARY_700 = "bg-[oklch(0.52_0.082_179)]";
|
|
18583
|
+
var SURFACE_PRIMARY_800 = "bg-[oklch(0.39_0.062_179)]";
|
|
18584
|
+
var SURFACE_PRIMARY_900 = "bg-[oklch(0.27_0.040_179)]";
|
|
18585
|
+
function SectionHead({
|
|
18586
|
+
eyebrow,
|
|
18587
|
+
title,
|
|
18588
|
+
subtitle,
|
|
18589
|
+
link,
|
|
18590
|
+
align = "between",
|
|
18591
|
+
theme = "light"
|
|
18592
|
+
}) {
|
|
18593
|
+
var _a;
|
|
18594
|
+
const isCenter = align === "center";
|
|
18595
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18596
|
+
"div",
|
|
18597
|
+
{
|
|
18598
|
+
className: cn(
|
|
18599
|
+
"mb-10 flex flex-wrap items-end gap-6",
|
|
18600
|
+
isCenter ? "flex-col items-center text-center" : "justify-between"
|
|
18601
|
+
),
|
|
18602
|
+
children: [
|
|
18603
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-2xl", isCenter && "mx-auto"), children: [
|
|
18604
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18605
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18606
|
+
"h2",
|
|
18607
|
+
{
|
|
18608
|
+
className: cn(
|
|
18609
|
+
"font-heading text-3xl font-black uppercase leading-[1.05] sm:text-4xl lg:text-5xl",
|
|
18610
|
+
theme === "dark" ? "text-white" : "text-foreground"
|
|
18611
|
+
),
|
|
18612
|
+
children: title
|
|
18613
|
+
}
|
|
18614
|
+
),
|
|
18615
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18616
|
+
"p",
|
|
18617
|
+
{
|
|
18618
|
+
className: cn(
|
|
18619
|
+
"mt-3 text-base",
|
|
18620
|
+
theme === "dark" ? "text-white/70" : "text-muted-foreground"
|
|
18621
|
+
),
|
|
18622
|
+
children: subtitle
|
|
18623
|
+
}
|
|
18624
|
+
)
|
|
18625
|
+
] }),
|
|
18626
|
+
link && !isCenter && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18627
|
+
"a",
|
|
18628
|
+
{
|
|
18629
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18630
|
+
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",
|
|
18631
|
+
children: [
|
|
18632
|
+
link.label,
|
|
18633
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18634
|
+
]
|
|
18635
|
+
}
|
|
18636
|
+
)
|
|
18637
|
+
]
|
|
18638
|
+
}
|
|
18639
|
+
);
|
|
18640
|
+
}
|
|
18641
|
+
function ExpeditionsRail({ eyebrow, title, subtitle, link, trips }) {
|
|
18642
|
+
var _a;
|
|
18643
|
+
const railRef = React32__namespace.useRef(null);
|
|
18644
|
+
const scrollByCard = (dir) => {
|
|
18645
|
+
const rail = railRef.current;
|
|
18646
|
+
if (!rail) return;
|
|
18647
|
+
const card = rail.querySelector("[data-rail-card]");
|
|
18648
|
+
const amount = card ? card.offsetWidth + 22 : rail.clientWidth * 0.8;
|
|
18649
|
+
rail.scrollBy({ left: dir * amount, behavior: "smooth" });
|
|
18650
|
+
};
|
|
18651
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn(SURFACE_SAND, "py-20 sm:py-28"), children: [
|
|
18652
|
+
/* @__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: [
|
|
18653
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl", children: [
|
|
18654
|
+
eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs font-ui font-bold uppercase tracking-[0.22em] text-primary", children: eyebrow }),
|
|
18655
|
+
/* @__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 }),
|
|
18656
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-muted-foreground", children: subtitle })
|
|
18657
|
+
] }),
|
|
18658
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
18659
|
+
link && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18660
|
+
"a",
|
|
18661
|
+
{
|
|
18662
|
+
href: (_a = link.href) != null ? _a : "#",
|
|
18663
|
+
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",
|
|
18664
|
+
children: [
|
|
18665
|
+
link.label,
|
|
18666
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRightIcon, { className: "h-4 w-4 transition-transform group-hover:translate-x-1" })
|
|
18667
|
+
]
|
|
18668
|
+
}
|
|
18669
|
+
),
|
|
18670
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18671
|
+
"button",
|
|
18672
|
+
{
|
|
18673
|
+
type: "button",
|
|
18674
|
+
onClick: () => scrollByCard(-1),
|
|
18675
|
+
"aria-label": "Previous expeditions",
|
|
18676
|
+
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",
|
|
18677
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "h-5 w-5" })
|
|
18678
|
+
}
|
|
18679
|
+
),
|
|
18680
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18681
|
+
"button",
|
|
18682
|
+
{
|
|
18683
|
+
type: "button",
|
|
18684
|
+
onClick: () => scrollByCard(1),
|
|
18685
|
+
"aria-label": "Next expeditions",
|
|
18686
|
+
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",
|
|
18687
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: "h-5 w-5" })
|
|
18688
|
+
}
|
|
18689
|
+
)
|
|
18690
|
+
] })
|
|
18691
|
+
] }) }),
|
|
18692
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
18693
|
+
"div",
|
|
18694
|
+
{
|
|
18695
|
+
ref: railRef,
|
|
18696
|
+
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",
|
|
18697
|
+
children: trips.map((trip, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
18698
|
+
"div",
|
|
18699
|
+
{
|
|
18700
|
+
"data-rail-card": true,
|
|
18701
|
+
className: "w-[320px] shrink-0 snap-start sm:w-[340px]",
|
|
18702
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(TripCard, __spreadValues({ variant: "editorial" }, trip))
|
|
18703
|
+
},
|
|
18704
|
+
i
|
|
18705
|
+
))
|
|
18706
|
+
}
|
|
18707
|
+
) })
|
|
18708
|
+
] });
|
|
18709
|
+
}
|
|
18710
|
+
function PopularCloud({ eyebrow, title, subtitle, chips }) {
|
|
18711
|
+
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: [
|
|
18712
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18713
|
+
SectionHead,
|
|
18714
|
+
{
|
|
18715
|
+
eyebrow,
|
|
18716
|
+
title,
|
|
18717
|
+
subtitle,
|
|
18718
|
+
align: "center"
|
|
18719
|
+
}
|
|
18720
|
+
),
|
|
18721
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex max-w-3xl flex-wrap items-center justify-center gap-3", children: chips.map((chip, i) => {
|
|
18722
|
+
var _a;
|
|
18723
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18724
|
+
Chip,
|
|
18725
|
+
{
|
|
18726
|
+
href: chip.href,
|
|
18727
|
+
variant: chip.featured ? "solid" : "outline",
|
|
18728
|
+
size: (_a = chip.size) != null ? _a : "md",
|
|
18729
|
+
className: "transition-transform hover:-translate-y-0.5",
|
|
18730
|
+
children: chip.label
|
|
18731
|
+
},
|
|
18732
|
+
i
|
|
18733
|
+
);
|
|
18734
|
+
}) })
|
|
18735
|
+
] }) });
|
|
18736
|
+
}
|
|
18737
|
+
function StatsBand({ items }) {
|
|
18738
|
+
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: [
|
|
18739
|
+
/* @__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 }),
|
|
18740
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 text-sm font-medium text-white/90", children: stat.label })
|
|
18741
|
+
] }, i)) }) }) });
|
|
18742
|
+
}
|
|
18743
|
+
function ReviewStars({ stars = 5 }) {
|
|
18744
|
+
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(
|
|
18745
|
+
lucideReact.StarIcon,
|
|
18746
|
+
{
|
|
18747
|
+
className: cn(
|
|
18748
|
+
"h-4 w-4",
|
|
18749
|
+
i + 1 <= Math.round(stars) ? "fill-amber-400 text-amber-400" : "fill-white/15 text-white/15"
|
|
18750
|
+
)
|
|
18751
|
+
},
|
|
18752
|
+
i
|
|
18753
|
+
)) });
|
|
18754
|
+
}
|
|
18755
|
+
function ReviewsBand({ eyebrow, title, subtitle, link, items, note }) {
|
|
18756
|
+
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: [
|
|
18757
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18758
|
+
SectionHead,
|
|
18759
|
+
{
|
|
18760
|
+
eyebrow,
|
|
18761
|
+
title,
|
|
18762
|
+
subtitle,
|
|
18763
|
+
link,
|
|
18764
|
+
theme: "dark"
|
|
18765
|
+
}
|
|
18766
|
+
),
|
|
18767
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-5 sm:grid-cols-2 lg:grid-cols-3", children: items.map((review, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18768
|
+
"figure",
|
|
18769
|
+
{
|
|
18770
|
+
className: "rounded-2xl border border-white/10 bg-white/5 p-7 transition-colors hover:bg-white/10",
|
|
18771
|
+
children: [
|
|
18772
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReviewStars, { stars: review.stars }),
|
|
18773
|
+
/* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "font-sans text-lg italic leading-relaxed text-white/90", children: [
|
|
18774
|
+
"\u201C",
|
|
18775
|
+
review.quote,
|
|
18776
|
+
"\u201D"
|
|
18777
|
+
] }),
|
|
18778
|
+
/* @__PURE__ */ jsxRuntime.jsxs("figcaption", { className: "mt-5 text-sm font-medium text-white/60", children: [
|
|
18779
|
+
"\u2014 ",
|
|
18780
|
+
review.author
|
|
18781
|
+
] })
|
|
18782
|
+
]
|
|
18783
|
+
},
|
|
18784
|
+
i
|
|
18785
|
+
)) }),
|
|
18786
|
+
note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-8 text-center text-xs text-white/40", children: note })
|
|
18787
|
+
] }) });
|
|
18788
|
+
}
|
|
18789
|
+
function NewHome({
|
|
18790
|
+
hero,
|
|
18791
|
+
explorer,
|
|
18792
|
+
expeditions,
|
|
18793
|
+
popular,
|
|
18794
|
+
stats,
|
|
18795
|
+
usp,
|
|
18796
|
+
reviews,
|
|
18797
|
+
journal,
|
|
18798
|
+
cta,
|
|
18799
|
+
footer,
|
|
18800
|
+
className
|
|
18801
|
+
}) {
|
|
18802
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full bg-background", className), children: [
|
|
18803
|
+
/* @__PURE__ */ jsxRuntime.jsx(HomeHeader, __spreadValues({}, hero)),
|
|
18804
|
+
explorer && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18805
|
+
AdventureExplorer,
|
|
18806
|
+
__spreadProps(__spreadValues({}, explorer), {
|
|
18807
|
+
className: cn(SURFACE_WHITE, explorer.className)
|
|
18808
|
+
})
|
|
18809
|
+
),
|
|
18810
|
+
expeditions && /* @__PURE__ */ jsxRuntime.jsx(ExpeditionsRail, __spreadValues({}, expeditions)),
|
|
18811
|
+
popular && /* @__PURE__ */ jsxRuntime.jsx(PopularCloud, __spreadValues({}, popular)),
|
|
18812
|
+
stats && /* @__PURE__ */ jsxRuntime.jsx(StatsBand, __spreadValues({}, stats)),
|
|
18813
|
+
usp && /* @__PURE__ */ jsxRuntime.jsx(USP, __spreadProps(__spreadValues({}, usp), { className: cn(SURFACE_PRIMARY_800, usp.className) })),
|
|
18814
|
+
reviews && /* @__PURE__ */ jsxRuntime.jsx(ReviewsBand, __spreadValues({}, reviews)),
|
|
18815
|
+
journal && /* @__PURE__ */ jsxRuntime.jsx(BlogJournal, __spreadProps(__spreadValues({}, journal), { className: cn(SURFACE_WHITE, journal.className) })),
|
|
18816
|
+
cta && /* @__PURE__ */ jsxRuntime.jsx(CtaBanner, __spreadValues({}, cta)),
|
|
18817
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx(SiteFooter, __spreadValues({}, footer))
|
|
18818
|
+
] });
|
|
18819
|
+
}
|
|
18820
|
+
var ACTIVE_PILL = "bg-primary text-white shadow-sm";
|
|
18821
|
+
var VARIANT3 = {
|
|
18822
|
+
black: {
|
|
18823
|
+
track: "bg-white/5 border-white/10",
|
|
18824
|
+
idle: "text-white/55 hover:text-white",
|
|
18825
|
+
ring: "focus-visible:ring-white/70"
|
|
18826
|
+
},
|
|
18827
|
+
white: {
|
|
18828
|
+
track: "bg-neutral-100 border-black/10",
|
|
18829
|
+
idle: "text-neutral-500 hover:text-neutral-900",
|
|
18830
|
+
ring: "focus-visible:ring-neutral-900/40"
|
|
18831
|
+
}
|
|
18832
|
+
};
|
|
18833
|
+
var SIZE = {
|
|
18834
|
+
sm: "px-4 py-1.5 text-[13px]",
|
|
18835
|
+
md: "px-5 py-2 text-sm"
|
|
18836
|
+
};
|
|
18837
|
+
function SegmentedControl({
|
|
18838
|
+
items,
|
|
18839
|
+
value,
|
|
18840
|
+
defaultValue,
|
|
18841
|
+
onValueChange,
|
|
18842
|
+
variant = "black",
|
|
18843
|
+
size = "md",
|
|
18844
|
+
fullWidth = false,
|
|
18845
|
+
collapse = false,
|
|
18846
|
+
"aria-label": ariaLabel = "Options",
|
|
18847
|
+
className
|
|
18848
|
+
}) {
|
|
18849
|
+
var _a;
|
|
18850
|
+
const isControlled = value != null;
|
|
18851
|
+
const [internal, setInternal] = React32__namespace.useState(
|
|
18852
|
+
defaultValue != null ? defaultValue : (_a = items[0]) == null ? void 0 : _a.id
|
|
18853
|
+
);
|
|
18854
|
+
const active = isControlled ? value : internal;
|
|
18855
|
+
const select = (id) => {
|
|
18856
|
+
if (!isControlled) setInternal(id);
|
|
18857
|
+
onValueChange == null ? void 0 : onValueChange(id);
|
|
18858
|
+
};
|
|
18859
|
+
const onKeyDown = (e) => {
|
|
18860
|
+
if (e.key !== "ArrowLeft" && e.key !== "ArrowRight") return;
|
|
18861
|
+
e.preventDefault();
|
|
18862
|
+
const enabled = items.filter((i) => !i.disabled);
|
|
18863
|
+
const idx = enabled.findIndex((i) => i.id === active);
|
|
18864
|
+
if (idx === -1) return;
|
|
18865
|
+
const next = e.key === "ArrowRight" ? enabled[(idx + 1) % enabled.length] : enabled[(idx - 1 + enabled.length) % enabled.length];
|
|
18866
|
+
select(next.id);
|
|
18867
|
+
};
|
|
18868
|
+
const v = VARIANT3[variant];
|
|
18869
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
18870
|
+
"div",
|
|
18871
|
+
{
|
|
18872
|
+
role: "radiogroup",
|
|
18873
|
+
"aria-label": ariaLabel,
|
|
18874
|
+
onKeyDown,
|
|
18875
|
+
className: cn(
|
|
18876
|
+
"inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full border p-1.5 scrollbar-none",
|
|
18877
|
+
fullWidth && "flex w-full",
|
|
18878
|
+
v.track,
|
|
18879
|
+
className
|
|
18880
|
+
),
|
|
18881
|
+
children: items.map((item) => {
|
|
18882
|
+
const isActive = item.id === active;
|
|
18883
|
+
const Icon = item.icon;
|
|
18884
|
+
const showLabel = collapse === "all" ? false : collapse ? isActive : true;
|
|
18885
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18886
|
+
"button",
|
|
18887
|
+
{
|
|
18888
|
+
type: "button",
|
|
18889
|
+
role: "radio",
|
|
18890
|
+
"aria-checked": isActive,
|
|
18891
|
+
"aria-label": collapse && !showLabel ? item.label : void 0,
|
|
18892
|
+
title: collapse && !showLabel ? item.label : void 0,
|
|
18893
|
+
disabled: item.disabled,
|
|
18894
|
+
tabIndex: isActive ? 0 : -1,
|
|
18895
|
+
onClick: () => select(item.id),
|
|
18896
|
+
className: cn(
|
|
18897
|
+
"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",
|
|
18898
|
+
showLabel && Icon ? "gap-2" : "gap-0",
|
|
18899
|
+
variant === "black" ? "focus-visible:ring-offset-neutral-950" : "focus-visible:ring-offset-white",
|
|
18900
|
+
fullWidth && "flex-1",
|
|
18901
|
+
SIZE[size],
|
|
18902
|
+
/* Icon-only segments are square-ish — drop the side padding so
|
|
18903
|
+
the icon centres in a circular pill. */
|
|
18904
|
+
collapse && !showLabel && (size === "sm" ? "!px-1.5" : "!px-2"),
|
|
18905
|
+
isActive ? ACTIVE_PILL : v.idle,
|
|
18906
|
+
v.ring
|
|
18907
|
+
),
|
|
18908
|
+
children: [
|
|
18909
|
+
Icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18910
|
+
Icon,
|
|
18911
|
+
{
|
|
18912
|
+
className: cn("shrink-0", size === "sm" ? "size-4" : "size-[18px]")
|
|
18913
|
+
}
|
|
18914
|
+
),
|
|
18915
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
18916
|
+
"span",
|
|
18917
|
+
{
|
|
18918
|
+
className: cn(
|
|
18919
|
+
"overflow-hidden whitespace-nowrap transition-all duration-300 ease-out",
|
|
18920
|
+
showLabel ? "max-w-[12ch] opacity-100" : "max-w-0 opacity-0"
|
|
18921
|
+
),
|
|
18922
|
+
children: item.label
|
|
18923
|
+
}
|
|
18924
|
+
)
|
|
18925
|
+
]
|
|
18926
|
+
},
|
|
18927
|
+
item.id
|
|
18928
|
+
);
|
|
18929
|
+
})
|
|
18930
|
+
}
|
|
18931
|
+
);
|
|
18932
|
+
}
|
|
17181
18933
|
|
|
17182
18934
|
exports.ActivityCard = ActivityCard;
|
|
18935
|
+
exports.AdventureExplorer = AdventureExplorer;
|
|
17183
18936
|
exports.AgentContactCard = AgentContactCard;
|
|
17184
18937
|
exports.Alert = Alert;
|
|
17185
18938
|
exports.AskExo = AskExo;
|
|
17186
18939
|
exports.BirthDateField = BirthDateField;
|
|
17187
18940
|
exports.BlogCard = BlogCard;
|
|
18941
|
+
exports.BlogJournal = BlogJournal;
|
|
17188
18942
|
exports.BlogPost = BlogPost;
|
|
17189
18943
|
exports.BookingAdventureCard = BookingAdventureCard;
|
|
17190
18944
|
exports.BookingCancellationEmail = BookingCancellationEmail;
|
|
@@ -17200,8 +18954,17 @@ exports.Button = Button;
|
|
|
17200
18954
|
exports.COUNTRIES = COUNTRIES;
|
|
17201
18955
|
exports.CancellationForm = CancellationForm;
|
|
17202
18956
|
exports.CategoryPage2 = CategoryPage2;
|
|
18957
|
+
exports.Chip = Chip;
|
|
17203
18958
|
exports.CounterField = CounterField;
|
|
17204
18959
|
exports.CountrySearchField = CountrySearchField;
|
|
18960
|
+
exports.CtaBanner = CtaBanner;
|
|
18961
|
+
exports.DEFAULT_FOOTER_BADGES = DEFAULT_FOOTER_BADGES;
|
|
18962
|
+
exports.DEFAULT_FOOTER_DESTINATIONS = DEFAULT_FOOTER_DESTINATIONS;
|
|
18963
|
+
exports.DEFAULT_FOOTER_LANGUAGES = DEFAULT_FOOTER_LANGUAGES;
|
|
18964
|
+
exports.DEFAULT_FOOTER_LEGAL = DEFAULT_FOOTER_LEGAL;
|
|
18965
|
+
exports.DEFAULT_FOOTER_PAGES = DEFAULT_FOOTER_PAGES;
|
|
18966
|
+
exports.DEFAULT_FOOTER_SOCIALS = DEFAULT_FOOTER_SOCIALS;
|
|
18967
|
+
exports.DEFAULT_FOOTER_THEMES = DEFAULT_FOOTER_THEMES;
|
|
17205
18968
|
exports.DEFAULT_HEADER_LINKS = DEFAULT_HEADER_LINKS;
|
|
17206
18969
|
exports.DEFAULT_LANGUAGES = DEFAULT_LANGUAGES;
|
|
17207
18970
|
exports.DEPARTURE_STATUS_MAP = STATUS_MAP;
|
|
@@ -17219,11 +18982,13 @@ exports.FloatingInput = FloatingInput;
|
|
|
17219
18982
|
exports.FloatingSelect = FloatingSelect;
|
|
17220
18983
|
exports.GroupProgressBar = GroupProgressBar;
|
|
17221
18984
|
exports.GroupStatusBanner = GroupStatusBanner;
|
|
18985
|
+
exports.HomeHeader = HomeHeader;
|
|
17222
18986
|
exports.Itinerary = Itinerary;
|
|
17223
18987
|
exports.ItineraryDay = ItineraryDay;
|
|
17224
18988
|
exports.LOGO_PLANETAEXO_DATA_URI = LOGO_PLANETAEXO_DATA_URI;
|
|
17225
18989
|
exports.LeadCapturePopup = LeadCapturePopup;
|
|
17226
18990
|
exports.MenuTrip = MenuTrip;
|
|
18991
|
+
exports.NewHome = NewHome;
|
|
17227
18992
|
exports.NotificationEmail = NotificationEmail;
|
|
17228
18993
|
exports.OTPCodeInput = OTPCodeInput;
|
|
17229
18994
|
exports.Offer = Offer;
|
|
@@ -17249,7 +19014,9 @@ exports.RegistrationProgressBar = RegistrationProgressBar;
|
|
|
17249
19014
|
exports.RegistrationReminderEmail = RegistrationReminderEmail;
|
|
17250
19015
|
exports.RegistrationReminderIndividualEmail = RegistrationReminderIndividualEmail;
|
|
17251
19016
|
exports.RegistrationSuccessCard = RegistrationSuccessCard;
|
|
19017
|
+
exports.SegmentedControl = SegmentedControl;
|
|
17252
19018
|
exports.ShareWidget = ShareWidget;
|
|
19019
|
+
exports.SiteFooter = SiteFooter;
|
|
17253
19020
|
exports.SiteHeader = SiteHeader;
|
|
17254
19021
|
exports.StatusBadge = StatusBadge2;
|
|
17255
19022
|
exports.StickyBookingCard = StickyBookingCard;
|
|
@@ -17263,7 +19030,9 @@ exports.TripCard = TripCard;
|
|
|
17263
19030
|
exports.TripHeader = TripHeader;
|
|
17264
19031
|
exports.TripPage = TripPage;
|
|
17265
19032
|
exports.TrustpilotEmbed = TrustpilotEmbed;
|
|
19033
|
+
exports.USP = USP;
|
|
17266
19034
|
exports.buttonVariants = buttonVariants;
|
|
19035
|
+
exports.chipVariants = chipVariants;
|
|
17267
19036
|
exports.cn = cn;
|
|
17268
19037
|
exports.emailTokens = emailTokens;
|
|
17269
19038
|
exports.formatCpf = formatCpf;
|