@planetaexo/design-system 0.75.0 → 0.77.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 +84 -75
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -3
- package/dist/index.d.ts +31 -3
- package/dist/index.js +84 -75
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -3626,6 +3626,17 @@ interface TripHeaderChip {
|
|
|
3626
3626
|
interface TripHeaderProps {
|
|
3627
3627
|
/** Hero image array — shows a carousel when more than one image */
|
|
3628
3628
|
images: string[];
|
|
3629
|
+
/**
|
|
3630
|
+
* Responsive `srcSet`/`sizes` for the FIRST hero image (the LCP element),
|
|
3631
|
+
* letting phones fetch a smaller width than the full-bleed desktop cover.
|
|
3632
|
+
* Applied to the video poster and to carousel slide 0 only; the off-screen
|
|
3633
|
+
* slides keep their single `images[i]` src. Omit for the legacy single-src
|
|
3634
|
+
* behaviour. (The host app builds these — e.g. one `/_next/image` URL per
|
|
3635
|
+
* width — since the DS doesn't know the optimizer's allowed widths.)
|
|
3636
|
+
*/
|
|
3637
|
+
heroImageSrcSet?: string;
|
|
3638
|
+
/** `sizes` paired with {@link heroImageSrcSet} (e.g. `"100vw"`). */
|
|
3639
|
+
heroImageSizes?: string;
|
|
3629
3640
|
/** Optional video URL — plays as background instead of the image carousel */
|
|
3630
3641
|
videoUrl?: string;
|
|
3631
3642
|
/** Main trip title */
|
|
@@ -3665,7 +3676,7 @@ interface TripHeaderProps {
|
|
|
3665
3676
|
uiVariant?: "v1" | "v2";
|
|
3666
3677
|
className?: string;
|
|
3667
3678
|
}
|
|
3668
|
-
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
3679
|
+
declare function TripHeader({ images, heroImageSrcSet, heroImageSizes, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
3669
3680
|
|
|
3670
3681
|
interface SiteFooterChip {
|
|
3671
3682
|
label: string;
|
|
@@ -3907,6 +3918,14 @@ interface TripPageProps {
|
|
|
3907
3918
|
/** Group size shown with a people icon in the hero meta row */
|
|
3908
3919
|
groupSize?: string;
|
|
3909
3920
|
images: string[];
|
|
3921
|
+
/**
|
|
3922
|
+
* Responsive `srcSet`/`sizes` for the first hero image (LCP) — forwarded to
|
|
3923
|
+
* {@link TripHeader} so phones fetch a smaller width than the desktop cover.
|
|
3924
|
+
* Omit for legacy single-src behaviour.
|
|
3925
|
+
*/
|
|
3926
|
+
heroImageSrcSet?: string;
|
|
3927
|
+
/** `sizes` paired with {@link heroImageSrcSet} (e.g. `"100vw"`). */
|
|
3928
|
+
heroImageSizes?: string;
|
|
3910
3929
|
/** Optional video URL — plays as background instead of the image carousel */
|
|
3911
3930
|
videoUrl?: string;
|
|
3912
3931
|
/** Breadcrumb trail displayed above the title */
|
|
@@ -4066,7 +4085,7 @@ interface TripPageProps {
|
|
|
4066
4085
|
features?: Record<string, boolean>;
|
|
4067
4086
|
className?: string;
|
|
4068
4087
|
}
|
|
4069
|
-
declare function TripPage({ title, tagline, destination, duration, groupSize, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, galleryLightbox, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, foodGalleryVariant, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, onBookingSubmit, bookingLoading, bookingDefaults, bookingLabels, bookLabel, fromLabel, perPersonLabel, siteHeader, footerBadges, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
4088
|
+
declare function TripPage({ title, tagline, destination, duration, groupSize, images, heroImageSrcSet, heroImageSizes, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, galleryLightbox, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, foodGalleryVariant, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, onBookingSubmit, bookingLoading, bookingDefaults, bookingLabels, bookLabel, fromLabel, perPersonLabel, siteHeader, footerBadges, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
4070
4089
|
|
|
4071
4090
|
interface Category2Trip extends TripCardProps {
|
|
4072
4091
|
/** Marca a trip como featured — sobe para o topo do grid principal. */
|
|
@@ -4180,6 +4199,15 @@ interface CategoryPage2Props {
|
|
|
4180
4199
|
faqInitialCount?: number;
|
|
4181
4200
|
gallery?: (string | PhotoGalleryPhoto)[];
|
|
4182
4201
|
galleryTitle?: string;
|
|
4202
|
+
/**
|
|
4203
|
+
* Lightbox mode for the photo gallery when a photo is tapped.
|
|
4204
|
+
* - `"classic"` — paged single-photo view with prev/next arrows (default).
|
|
4205
|
+
* - `"feed"` — Airbnb "photo tour": one vertical scrollable column of every
|
|
4206
|
+
* photo, opened scrolled to the tapped one (white captions overlaid, focused
|
|
4207
|
+
* photo full-opacity, neighbours dimmed). Pass `"feed"` on mobile.
|
|
4208
|
+
* @default "classic"
|
|
4209
|
+
*/
|
|
4210
|
+
galleryLightbox?: "classic" | "feed";
|
|
4183
4211
|
/** Trips-list expand button: "Load more" (count appended). */
|
|
4184
4212
|
loadMoreLabel?: string;
|
|
4185
4213
|
/** Expand/collapse collapse button: "Show less". */
|
|
@@ -4194,7 +4222,7 @@ interface CategoryPage2Props {
|
|
|
4194
4222
|
filterLabels?: FilterPanelLabels;
|
|
4195
4223
|
className?: string;
|
|
4196
4224
|
}
|
|
4197
|
-
declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, heroRightSlot, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, tripListingSlot, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, loadMoreLabel, showLessLabel, seeMoreLabel, viewAllPostsLabel, cardLabels, filterLabels, footerBadges, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
|
|
4225
|
+
declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, heroRightSlot, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, tripListingSlot, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, galleryLightbox, loadMoreLabel, showLessLabel, seeMoreLabel, viewAllPostsLabel, cardLabels, filterLabels, footerBadges, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
|
|
4198
4226
|
|
|
4199
4227
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
4200
4228
|
interface ActivityCardProps {
|
package/dist/index.d.ts
CHANGED
|
@@ -3626,6 +3626,17 @@ interface TripHeaderChip {
|
|
|
3626
3626
|
interface TripHeaderProps {
|
|
3627
3627
|
/** Hero image array — shows a carousel when more than one image */
|
|
3628
3628
|
images: string[];
|
|
3629
|
+
/**
|
|
3630
|
+
* Responsive `srcSet`/`sizes` for the FIRST hero image (the LCP element),
|
|
3631
|
+
* letting phones fetch a smaller width than the full-bleed desktop cover.
|
|
3632
|
+
* Applied to the video poster and to carousel slide 0 only; the off-screen
|
|
3633
|
+
* slides keep their single `images[i]` src. Omit for the legacy single-src
|
|
3634
|
+
* behaviour. (The host app builds these — e.g. one `/_next/image` URL per
|
|
3635
|
+
* width — since the DS doesn't know the optimizer's allowed widths.)
|
|
3636
|
+
*/
|
|
3637
|
+
heroImageSrcSet?: string;
|
|
3638
|
+
/** `sizes` paired with {@link heroImageSrcSet} (e.g. `"100vw"`). */
|
|
3639
|
+
heroImageSizes?: string;
|
|
3629
3640
|
/** Optional video URL — plays as background instead of the image carousel */
|
|
3630
3641
|
videoUrl?: string;
|
|
3631
3642
|
/** Main trip title */
|
|
@@ -3665,7 +3676,7 @@ interface TripHeaderProps {
|
|
|
3665
3676
|
uiVariant?: "v1" | "v2";
|
|
3666
3677
|
className?: string;
|
|
3667
3678
|
}
|
|
3668
|
-
declare function TripHeader({ images, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
3679
|
+
declare function TripHeader({ images, heroImageSrcSet, heroImageSizes, videoUrl, title, breadcrumb, destination, duration, groupSize, labels, tagline, chips, belowMeta, siteHeader, uiVariant, className, }: TripHeaderProps): react_jsx_runtime.JSX.Element;
|
|
3669
3680
|
|
|
3670
3681
|
interface SiteFooterChip {
|
|
3671
3682
|
label: string;
|
|
@@ -3907,6 +3918,14 @@ interface TripPageProps {
|
|
|
3907
3918
|
/** Group size shown with a people icon in the hero meta row */
|
|
3908
3919
|
groupSize?: string;
|
|
3909
3920
|
images: string[];
|
|
3921
|
+
/**
|
|
3922
|
+
* Responsive `srcSet`/`sizes` for the first hero image (LCP) — forwarded to
|
|
3923
|
+
* {@link TripHeader} so phones fetch a smaller width than the desktop cover.
|
|
3924
|
+
* Omit for legacy single-src behaviour.
|
|
3925
|
+
*/
|
|
3926
|
+
heroImageSrcSet?: string;
|
|
3927
|
+
/** `sizes` paired with {@link heroImageSrcSet} (e.g. `"100vw"`). */
|
|
3928
|
+
heroImageSizes?: string;
|
|
3910
3929
|
/** Optional video URL — plays as background instead of the image carousel */
|
|
3911
3930
|
videoUrl?: string;
|
|
3912
3931
|
/** Breadcrumb trail displayed above the title */
|
|
@@ -4066,7 +4085,7 @@ interface TripPageProps {
|
|
|
4066
4085
|
features?: Record<string, boolean>;
|
|
4067
4086
|
className?: string;
|
|
4068
4087
|
}
|
|
4069
|
-
declare function TripPage({ title, tagline, destination, duration, groupSize, images, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, galleryLightbox, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, foodGalleryVariant, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, onBookingSubmit, bookingLoading, bookingDefaults, bookingLabels, bookLabel, fromLabel, perPersonLabel, siteHeader, footerBadges, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
4088
|
+
declare function TripPage({ title, tagline, destination, duration, groupSize, images, heroImageSrcSet, heroImageSizes, videoUrl, breadcrumb, chips, highlights, howToGetThere, recommendedFor, overview, overviewHighlights, itinerary, itineraryDays, gallery, galleryLightbox, included, notIncluded, whatToBring, weather, optionalExtras, accommodation, accommodationGallery, accommodationGalleryVariant, whenItOperates, food, foodGallery, foodGalleryVariant, termsAndConditions, meetingPoints, meetingPoint, faqs, faqInitialCount, sectionIcons, labels, reviews, trustpilot, trustpilotMini, trustpilotHero, priceFrom, currency, season, departureTimes, benefits, currencyEstimates, priceInfo, onBook, onBookingSubmit, bookingLoading, bookingDefaults, bookingLabels, bookLabel, fromLabel, perPersonLabel, siteHeader, footerBadges, uiVariant, features, className, }: TripPageProps): react_jsx_runtime.JSX.Element;
|
|
4070
4089
|
|
|
4071
4090
|
interface Category2Trip extends TripCardProps {
|
|
4072
4091
|
/** Marca a trip como featured — sobe para o topo do grid principal. */
|
|
@@ -4180,6 +4199,15 @@ interface CategoryPage2Props {
|
|
|
4180
4199
|
faqInitialCount?: number;
|
|
4181
4200
|
gallery?: (string | PhotoGalleryPhoto)[];
|
|
4182
4201
|
galleryTitle?: string;
|
|
4202
|
+
/**
|
|
4203
|
+
* Lightbox mode for the photo gallery when a photo is tapped.
|
|
4204
|
+
* - `"classic"` — paged single-photo view with prev/next arrows (default).
|
|
4205
|
+
* - `"feed"` — Airbnb "photo tour": one vertical scrollable column of every
|
|
4206
|
+
* photo, opened scrolled to the tapped one (white captions overlaid, focused
|
|
4207
|
+
* photo full-opacity, neighbours dimmed). Pass `"feed"` on mobile.
|
|
4208
|
+
* @default "classic"
|
|
4209
|
+
*/
|
|
4210
|
+
galleryLightbox?: "classic" | "feed";
|
|
4183
4211
|
/** Trips-list expand button: "Load more" (count appended). */
|
|
4184
4212
|
loadMoreLabel?: string;
|
|
4185
4213
|
/** Expand/collapse collapse button: "Show less". */
|
|
@@ -4194,7 +4222,7 @@ interface CategoryPage2Props {
|
|
|
4194
4222
|
filterLabels?: FilterPanelLabels;
|
|
4195
4223
|
className?: string;
|
|
4196
4224
|
}
|
|
4197
|
-
declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, heroRightSlot, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, tripListingSlot, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, loadMoreLabel, showLessLabel, seeMoreLabel, viewAllPostsLabel, cardLabels, filterLabels, footerBadges, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
|
|
4225
|
+
declare function CategoryPage2({ title, intro, heroImage, videoUrl, trustpilotMini, breadcrumb, siteHeader, heroRightSlot, popularTours, popularToursTitle, popularToursEyebrow, trips, tripsTitle, tripsEyebrow, filterGroups, sortOptions, defaultSort, tripsInitialCount, tripListingSlot, trustpilot, reviewsTitle, reviewsSubtitle, blogPosts, aboutTitle, aboutContent, blogIntro, travelGuideHref, travelGuideLabel, blogPostsTitle, blogPostsViewAllHref, faqs, faqsTitle, faqInitialCount, gallery, galleryTitle, galleryLightbox, loadMoreLabel, showLessLabel, seeMoreLabel, viewAllPostsLabel, cardLabels, filterLabels, footerBadges, className, }: CategoryPage2Props): react_jsx_runtime.JSX.Element;
|
|
4198
4226
|
|
|
4199
4227
|
type ActivityCardSize = "sm" | "md" | "lg";
|
|
4200
4228
|
interface ActivityCardProps {
|
package/dist/index.js
CHANGED
|
@@ -12015,7 +12015,7 @@ function Lightbox({
|
|
|
12015
12015
|
return /* @__PURE__ */ jsxs(
|
|
12016
12016
|
"div",
|
|
12017
12017
|
{
|
|
12018
|
-
className: "fixed inset-0 z-
|
|
12018
|
+
className: "fixed inset-0 z-[1000] bg-black/92 flex flex-col items-center justify-center",
|
|
12019
12019
|
onClick: onClose,
|
|
12020
12020
|
children: [
|
|
12021
12021
|
/* @__PURE__ */ jsx(
|
|
@@ -12203,24 +12203,81 @@ function FeedLightbox({
|
|
|
12203
12203
|
if (frame) cancelAnimationFrame(frame);
|
|
12204
12204
|
};
|
|
12205
12205
|
}, []);
|
|
12206
|
-
return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-
|
|
12207
|
-
/* @__PURE__ */
|
|
12206
|
+
return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-[1000] bg-zinc-950 text-white", children: [
|
|
12207
|
+
/* @__PURE__ */ jsx(
|
|
12208
|
+
"div",
|
|
12209
|
+
{
|
|
12210
|
+
ref: scrollRef,
|
|
12211
|
+
className: "absolute inset-0 overflow-y-auto overscroll-contain",
|
|
12212
|
+
children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex w-full max-w-3xl flex-col", children: items.map(({ photo, index, sectionLabel, isSectionStart }) => {
|
|
12213
|
+
var _a2;
|
|
12214
|
+
const isFocused = index === active;
|
|
12215
|
+
return /* @__PURE__ */ jsxs(
|
|
12216
|
+
"figure",
|
|
12217
|
+
{
|
|
12218
|
+
"data-index": index,
|
|
12219
|
+
ref: (el) => {
|
|
12220
|
+
itemRefs.current[index] = el;
|
|
12221
|
+
},
|
|
12222
|
+
className: cn(
|
|
12223
|
+
"group relative transition-opacity duration-500",
|
|
12224
|
+
// The focused (centred / hovered) photo is at full opacity;
|
|
12225
|
+
// every other photo is dimmed a touch so the eye lands on it.
|
|
12226
|
+
isFocused ? "opacity-100" : "opacity-[0.65] hover:opacity-100"
|
|
12227
|
+
),
|
|
12228
|
+
children: [
|
|
12229
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-hidden bg-white/5", children: /* @__PURE__ */ jsx(
|
|
12230
|
+
Picture,
|
|
12231
|
+
{
|
|
12232
|
+
src: photo.src,
|
|
12233
|
+
alt: (_a2 = photo.alt) != null ? _a2 : `Photo ${index + 1}`,
|
|
12234
|
+
title: photo.caption,
|
|
12235
|
+
className: "block h-auto w-full",
|
|
12236
|
+
eager: index < 2,
|
|
12237
|
+
rootMargin: "800px"
|
|
12238
|
+
}
|
|
12239
|
+
) }),
|
|
12240
|
+
sectionLabel && isSectionStart && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-x-0 top-0 bg-gradient-to-b from-black/60 via-black/20 to-transparent px-3 pb-12 pt-3 sm:px-4", children: /* @__PURE__ */ jsx("h2", { className: "font-heading text-lg font-bold uppercase tracking-wide text-white drop-shadow-md", children: sectionLabel }) }),
|
|
12241
|
+
(photo.caption || photo.credit) && /* @__PURE__ */ jsxs(
|
|
12242
|
+
"figcaption",
|
|
12243
|
+
{
|
|
12244
|
+
className: cn(
|
|
12245
|
+
"pointer-events-none absolute inset-x-0 bottom-0 flex flex-col items-end gap-0.5 bg-gradient-to-t from-black/60 via-black/20 to-transparent px-3 pb-3 pt-12 text-right transition-opacity duration-500 sm:px-4",
|
|
12246
|
+
isFocused ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
12247
|
+
),
|
|
12248
|
+
children: [
|
|
12249
|
+
photo.caption && /* @__PURE__ */ jsx("p", { className: "font-ui text-sm font-medium leading-snug text-white drop-shadow-md", children: photo.caption }),
|
|
12250
|
+
photo.credit && /* @__PURE__ */ jsxs("p", { className: "font-ui text-xs text-white/80 drop-shadow-md", children: [
|
|
12251
|
+
"\xA9 ",
|
|
12252
|
+
photo.credit
|
|
12253
|
+
] })
|
|
12254
|
+
]
|
|
12255
|
+
}
|
|
12256
|
+
)
|
|
12257
|
+
]
|
|
12258
|
+
},
|
|
12259
|
+
index
|
|
12260
|
+
);
|
|
12261
|
+
}) })
|
|
12262
|
+
}
|
|
12263
|
+
),
|
|
12264
|
+
/* @__PURE__ */ jsxs("div", { className: "pointer-events-none absolute inset-x-0 top-0 z-10 flex items-center gap-3 bg-gradient-to-b from-black/70 via-black/30 to-transparent px-3 pb-10 pt-2.5", children: [
|
|
12208
12265
|
/* @__PURE__ */ jsx(
|
|
12209
12266
|
"button",
|
|
12210
12267
|
{
|
|
12211
12268
|
type: "button",
|
|
12212
12269
|
onClick: onClose,
|
|
12213
|
-
className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-white transition-colors hover:bg-white/
|
|
12270
|
+
className: "pointer-events-auto flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-black/25 text-white backdrop-blur-sm transition-colors hover:bg-white/15 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60",
|
|
12214
12271
|
"aria-label": (_a = labels == null ? void 0 : labels.close) != null ? _a : "Close lightbox",
|
|
12215
12272
|
children: /* @__PURE__ */ jsx(XIcon, { className: "h-5 w-5" })
|
|
12216
12273
|
}
|
|
12217
12274
|
),
|
|
12218
|
-
activeLabel && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-center font-heading text-sm font-bold uppercase tracking-wide text-white", children: activeLabel }),
|
|
12275
|
+
activeLabel && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-center font-heading text-sm font-bold uppercase tracking-wide text-white drop-shadow-md", children: activeLabel }),
|
|
12219
12276
|
total > 1 && /* @__PURE__ */ jsxs(
|
|
12220
12277
|
"span",
|
|
12221
12278
|
{
|
|
12222
12279
|
className: cn(
|
|
12223
|
-
"shrink-0 font-ui text-sm font-medium tabular-nums text-white/
|
|
12280
|
+
"shrink-0 font-ui text-sm font-medium tabular-nums text-white/80 drop-shadow-md",
|
|
12224
12281
|
!activeLabel && "ml-auto"
|
|
12225
12282
|
),
|
|
12226
12283
|
children: [
|
|
@@ -12230,74 +12287,7 @@ function FeedLightbox({
|
|
|
12230
12287
|
]
|
|
12231
12288
|
}
|
|
12232
12289
|
)
|
|
12233
|
-
] })
|
|
12234
|
-
/* @__PURE__ */ jsx(
|
|
12235
|
-
"div",
|
|
12236
|
-
{
|
|
12237
|
-
ref: scrollRef,
|
|
12238
|
-
className: "flex-1 overflow-y-auto overscroll-contain",
|
|
12239
|
-
children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex w-full max-w-3xl flex-col", children: items.map(({ photo, index, sectionLabel, isSectionStart }) => {
|
|
12240
|
-
var _a2;
|
|
12241
|
-
const isFocused = index === active;
|
|
12242
|
-
return /* @__PURE__ */ jsxs(React20.Fragment, { children: [
|
|
12243
|
-
sectionLabel && isSectionStart && /* @__PURE__ */ jsx(
|
|
12244
|
-
"h2",
|
|
12245
|
-
{
|
|
12246
|
-
className: cn(
|
|
12247
|
-
"px-3 pb-3 font-heading text-lg font-bold uppercase tracking-wide text-white sm:px-4",
|
|
12248
|
-
index > 0 ? "pt-8" : "pt-2"
|
|
12249
|
-
),
|
|
12250
|
-
children: sectionLabel
|
|
12251
|
-
}
|
|
12252
|
-
),
|
|
12253
|
-
/* @__PURE__ */ jsxs(
|
|
12254
|
-
"figure",
|
|
12255
|
-
{
|
|
12256
|
-
"data-index": index,
|
|
12257
|
-
ref: (el) => {
|
|
12258
|
-
itemRefs.current[index] = el;
|
|
12259
|
-
},
|
|
12260
|
-
className: cn(
|
|
12261
|
-
"group relative transition-opacity duration-500",
|
|
12262
|
-
// The focused (centred / hovered) photo is at full opacity;
|
|
12263
|
-
// every other photo is dimmed a touch so the eye lands on it.
|
|
12264
|
-
isFocused ? "opacity-100" : "opacity-[0.65] hover:opacity-100"
|
|
12265
|
-
),
|
|
12266
|
-
children: [
|
|
12267
|
-
/* @__PURE__ */ jsx("div", { className: "overflow-hidden bg-white/5", children: /* @__PURE__ */ jsx(
|
|
12268
|
-
Picture,
|
|
12269
|
-
{
|
|
12270
|
-
src: photo.src,
|
|
12271
|
-
alt: (_a2 = photo.alt) != null ? _a2 : `Photo ${index + 1}`,
|
|
12272
|
-
title: photo.caption,
|
|
12273
|
-
className: "block h-auto w-full",
|
|
12274
|
-
eager: index < 2,
|
|
12275
|
-
rootMargin: "800px"
|
|
12276
|
-
}
|
|
12277
|
-
) }),
|
|
12278
|
-
(photo.caption || photo.credit) && /* @__PURE__ */ jsxs(
|
|
12279
|
-
"figcaption",
|
|
12280
|
-
{
|
|
12281
|
-
className: cn(
|
|
12282
|
-
"pointer-events-none absolute inset-x-0 bottom-0 flex flex-col items-end gap-0.5 bg-gradient-to-t from-black/60 via-black/20 to-transparent px-3 pb-3 pt-12 text-right transition-opacity duration-500 sm:px-4",
|
|
12283
|
-
isFocused ? "opacity-100" : "opacity-0 group-hover:opacity-100"
|
|
12284
|
-
),
|
|
12285
|
-
children: [
|
|
12286
|
-
photo.caption && /* @__PURE__ */ jsx("p", { className: "font-ui text-sm font-medium leading-snug text-white drop-shadow-md", children: photo.caption }),
|
|
12287
|
-
photo.credit && /* @__PURE__ */ jsxs("p", { className: "font-ui text-xs text-white/80 drop-shadow-md", children: [
|
|
12288
|
-
"\xA9 ",
|
|
12289
|
-
photo.credit
|
|
12290
|
-
] })
|
|
12291
|
-
]
|
|
12292
|
-
}
|
|
12293
|
-
)
|
|
12294
|
-
]
|
|
12295
|
-
}
|
|
12296
|
-
)
|
|
12297
|
-
] }, index);
|
|
12298
|
-
}) })
|
|
12299
|
-
}
|
|
12300
|
-
)
|
|
12290
|
+
] })
|
|
12301
12291
|
] });
|
|
12302
12292
|
}
|
|
12303
12293
|
var PhotoTourContext = React20.createContext(null);
|
|
@@ -14861,6 +14851,8 @@ function useHlsVideo(videoRef, src) {
|
|
|
14861
14851
|
}
|
|
14862
14852
|
function TripHeader({
|
|
14863
14853
|
images,
|
|
14854
|
+
heroImageSrcSet,
|
|
14855
|
+
heroImageSizes,
|
|
14864
14856
|
videoUrl,
|
|
14865
14857
|
title,
|
|
14866
14858
|
breadcrumb,
|
|
@@ -14940,6 +14932,8 @@ function TripHeader({
|
|
|
14940
14932
|
Picture,
|
|
14941
14933
|
{
|
|
14942
14934
|
src: validImages[0],
|
|
14935
|
+
srcSet: heroImageSrcSet,
|
|
14936
|
+
sizes: heroImageSizes,
|
|
14943
14937
|
alt: "",
|
|
14944
14938
|
"aria-hidden": true,
|
|
14945
14939
|
fetchPriority: "high",
|
|
@@ -14978,6 +14972,8 @@ function TripHeader({
|
|
|
14978
14972
|
Picture,
|
|
14979
14973
|
{
|
|
14980
14974
|
src: currentSrc,
|
|
14975
|
+
srcSet: safeIndex === 0 ? heroImageSrcSet : void 0,
|
|
14976
|
+
sizes: safeIndex === 0 ? heroImageSizes : void 0,
|
|
14981
14977
|
alt: title,
|
|
14982
14978
|
fetchPriority: safeIndex === 0 ? "high" : "auto",
|
|
14983
14979
|
eager: safeIndex === 0,
|
|
@@ -15550,6 +15546,8 @@ function TripPage({
|
|
|
15550
15546
|
duration,
|
|
15551
15547
|
groupSize,
|
|
15552
15548
|
images,
|
|
15549
|
+
heroImageSrcSet,
|
|
15550
|
+
heroImageSizes,
|
|
15553
15551
|
videoUrl,
|
|
15554
15552
|
breadcrumb,
|
|
15555
15553
|
chips,
|
|
@@ -15781,6 +15779,8 @@ function TripPage({
|
|
|
15781
15779
|
TripHeader,
|
|
15782
15780
|
{
|
|
15783
15781
|
images,
|
|
15782
|
+
heroImageSrcSet,
|
|
15783
|
+
heroImageSizes,
|
|
15784
15784
|
videoUrl,
|
|
15785
15785
|
title,
|
|
15786
15786
|
breadcrumb,
|
|
@@ -16290,6 +16290,7 @@ function CategoryPage2({
|
|
|
16290
16290
|
faqInitialCount = 5,
|
|
16291
16291
|
gallery,
|
|
16292
16292
|
galleryTitle,
|
|
16293
|
+
galleryLightbox = "classic",
|
|
16293
16294
|
loadMoreLabel,
|
|
16294
16295
|
showLessLabel,
|
|
16295
16296
|
seeMoreLabel,
|
|
@@ -16552,7 +16553,15 @@ function CategoryPage2({
|
|
|
16552
16553
|
] }),
|
|
16553
16554
|
gallery && gallery.length > 0 && /* @__PURE__ */ jsxs("section", { className: "pt-4", children: [
|
|
16554
16555
|
galleryTitle && /* @__PURE__ */ jsx("h2", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 mb-6 text-2xl sm:text-3xl font-bold text-foreground font-heading", children: galleryTitle }),
|
|
16555
|
-
/* @__PURE__ */ jsx(
|
|
16556
|
+
/* @__PURE__ */ jsx(
|
|
16557
|
+
PhotoGallery,
|
|
16558
|
+
{
|
|
16559
|
+
photos: gallery,
|
|
16560
|
+
variant: "gridCompact",
|
|
16561
|
+
initialVisible: 8,
|
|
16562
|
+
lightbox: galleryLightbox
|
|
16563
|
+
}
|
|
16564
|
+
)
|
|
16556
16565
|
] }),
|
|
16557
16566
|
(aboutTitle || aboutContent || blogPostsTitle || blogPosts && blogPosts.length > 0) && /* @__PURE__ */ jsx("section", { className: "w-full bg-gray-100", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-6xl px-6 sm:px-8 py-14", children: [
|
|
16558
16567
|
(aboutTitle || blogPostsTitle) && /* @__PURE__ */ jsx("h2", { className: "text-2xl sm:text-3xl font-bold text-foreground font-heading mb-5", children: aboutTitle != null ? aboutTitle : blogPostsTitle }),
|