@planetaexo/design-system 0.76.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.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-50 bg-black/92 flex flex-col items-center justify-center",
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,7 +12203,7 @@ function FeedLightbox({
12203
12203
  if (frame) cancelAnimationFrame(frame);
12204
12204
  };
12205
12205
  }, []);
12206
- return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 bg-zinc-950 text-white", children: [
12206
+ return /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-[1000] bg-zinc-950 text-white", children: [
12207
12207
  /* @__PURE__ */ jsx(
12208
12208
  "div",
12209
12209
  {
@@ -14851,6 +14851,8 @@ function useHlsVideo(videoRef, src) {
14851
14851
  }
14852
14852
  function TripHeader({
14853
14853
  images,
14854
+ heroImageSrcSet,
14855
+ heroImageSizes,
14854
14856
  videoUrl,
14855
14857
  title,
14856
14858
  breadcrumb,
@@ -14930,6 +14932,8 @@ function TripHeader({
14930
14932
  Picture,
14931
14933
  {
14932
14934
  src: validImages[0],
14935
+ srcSet: heroImageSrcSet,
14936
+ sizes: heroImageSizes,
14933
14937
  alt: "",
14934
14938
  "aria-hidden": true,
14935
14939
  fetchPriority: "high",
@@ -14968,6 +14972,8 @@ function TripHeader({
14968
14972
  Picture,
14969
14973
  {
14970
14974
  src: currentSrc,
14975
+ srcSet: safeIndex === 0 ? heroImageSrcSet : void 0,
14976
+ sizes: safeIndex === 0 ? heroImageSizes : void 0,
14971
14977
  alt: title,
14972
14978
  fetchPriority: safeIndex === 0 ? "high" : "auto",
14973
14979
  eager: safeIndex === 0,
@@ -15540,6 +15546,8 @@ function TripPage({
15540
15546
  duration,
15541
15547
  groupSize,
15542
15548
  images,
15549
+ heroImageSrcSet,
15550
+ heroImageSizes,
15543
15551
  videoUrl,
15544
15552
  breadcrumb,
15545
15553
  chips,
@@ -15771,6 +15779,8 @@ function TripPage({
15771
15779
  TripHeader,
15772
15780
  {
15773
15781
  images,
15782
+ heroImageSrcSet,
15783
+ heroImageSizes,
15774
15784
  videoUrl,
15775
15785
  title,
15776
15786
  breadcrumb,
@@ -16280,6 +16290,7 @@ function CategoryPage2({
16280
16290
  faqInitialCount = 5,
16281
16291
  gallery,
16282
16292
  galleryTitle,
16293
+ galleryLightbox = "classic",
16283
16294
  loadMoreLabel,
16284
16295
  showLessLabel,
16285
16296
  seeMoreLabel,
@@ -16542,7 +16553,15 @@ function CategoryPage2({
16542
16553
  ] }),
16543
16554
  gallery && gallery.length > 0 && /* @__PURE__ */ jsxs("section", { className: "pt-4", children: [
16544
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 }),
16545
- /* @__PURE__ */ jsx(PhotoGallery, { photos: gallery, variant: "gridCompact", initialVisible: 8 })
16556
+ /* @__PURE__ */ jsx(
16557
+ PhotoGallery,
16558
+ {
16559
+ photos: gallery,
16560
+ variant: "gridCompact",
16561
+ initialVisible: 8,
16562
+ lightbox: galleryLightbox
16563
+ }
16564
+ )
16546
16565
  ] }),
16547
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: [
16548
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 }),