@harshit-wander/component-lib 1.1.15 → 1.1.16
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/README.md +55 -50
- package/dist/index.cjs +790 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +203 -1
- package/dist/index.d.ts +203 -1
- package/dist/index.js +784 -26
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -606,6 +606,127 @@ var GalleryPhoto = react.forwardRef(
|
|
|
606
606
|
)
|
|
607
607
|
);
|
|
608
608
|
GalleryPhoto.displayName = "GalleryPhoto";
|
|
609
|
+
var useInViewOnce = (ref, { disabled = false, rootMargin = "200px" } = {}) => {
|
|
610
|
+
const [inView, setInView] = react.useState(disabled);
|
|
611
|
+
react.useEffect(() => {
|
|
612
|
+
if (disabled || inView) return;
|
|
613
|
+
const el = ref.current;
|
|
614
|
+
if (!el || typeof IntersectionObserver === "undefined") {
|
|
615
|
+
setInView(true);
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
const observer = new IntersectionObserver(
|
|
619
|
+
(entries) => {
|
|
620
|
+
for (const entry of entries) {
|
|
621
|
+
if (entry.isIntersecting) {
|
|
622
|
+
setInView(true);
|
|
623
|
+
observer.disconnect();
|
|
624
|
+
break;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
{ rootMargin }
|
|
629
|
+
);
|
|
630
|
+
observer.observe(el);
|
|
631
|
+
return () => observer.disconnect();
|
|
632
|
+
}, [ref, disabled, inView, rootMargin]);
|
|
633
|
+
return inView;
|
|
634
|
+
};
|
|
635
|
+
var DEFAULT_HEIGHTS = [200, 260, 264];
|
|
636
|
+
var DEFAULT_WIDTHS = [148, 220, 176];
|
|
637
|
+
var DEFAULT_EAGER_COUNT = 6;
|
|
638
|
+
var Slide = ({
|
|
639
|
+
item,
|
|
640
|
+
index,
|
|
641
|
+
size,
|
|
642
|
+
eagerCount
|
|
643
|
+
}) => {
|
|
644
|
+
const ref = react.useRef(null);
|
|
645
|
+
const lazy = index >= eagerCount;
|
|
646
|
+
const visible = useInViewOnce(ref, { disabled: !lazy });
|
|
647
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
648
|
+
"div",
|
|
649
|
+
{
|
|
650
|
+
ref,
|
|
651
|
+
className: "shrink-0 relative rounded-sm overflow-hidden bg-track",
|
|
652
|
+
style: { width: size.width, height: size.height },
|
|
653
|
+
children: visible ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
654
|
+
"img",
|
|
655
|
+
{
|
|
656
|
+
src: item.src,
|
|
657
|
+
alt: item.alt ?? "",
|
|
658
|
+
loading: "eager",
|
|
659
|
+
decoding: "async",
|
|
660
|
+
className: "w-full h-full object-cover object-center block pointer-events-none select-none"
|
|
661
|
+
}
|
|
662
|
+
) : null
|
|
663
|
+
}
|
|
664
|
+
);
|
|
665
|
+
};
|
|
666
|
+
var ImageMarquee = ({
|
|
667
|
+
images,
|
|
668
|
+
durationSec = 45,
|
|
669
|
+
gap = 16,
|
|
670
|
+
fixedWidth,
|
|
671
|
+
alternatingHeights,
|
|
672
|
+
eagerImageCount = DEFAULT_EAGER_COUNT,
|
|
673
|
+
className
|
|
674
|
+
}) => {
|
|
675
|
+
const sizes = react.useMemo(() => {
|
|
676
|
+
const useFixed = typeof fixedWidth === "number" && fixedWidth > 0 && Array.isArray(alternatingHeights) && alternatingHeights.length > 0;
|
|
677
|
+
return images.map((_, i) => {
|
|
678
|
+
if (useFixed) {
|
|
679
|
+
const heights = alternatingHeights;
|
|
680
|
+
return { width: fixedWidth, height: heights[i % heights.length] };
|
|
681
|
+
}
|
|
682
|
+
const v = i % 3;
|
|
683
|
+
return { width: DEFAULT_WIDTHS[v], height: DEFAULT_HEIGHTS[v] };
|
|
684
|
+
});
|
|
685
|
+
}, [images, fixedWidth, alternatingHeights]);
|
|
686
|
+
if (!images.length) return null;
|
|
687
|
+
const renderStrip = (keyPrefix, hidden = false) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
688
|
+
"div",
|
|
689
|
+
{
|
|
690
|
+
className: "flex flex-row items-center shrink-0",
|
|
691
|
+
style: { gap, paddingRight: gap },
|
|
692
|
+
"aria-hidden": hidden || void 0,
|
|
693
|
+
children: images.map((item, i) => {
|
|
694
|
+
const slideKey = `${keyPrefix}-${i}-${item.src}`;
|
|
695
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
696
|
+
Slide,
|
|
697
|
+
{
|
|
698
|
+
item,
|
|
699
|
+
index: i,
|
|
700
|
+
size: sizes[i],
|
|
701
|
+
eagerCount: eagerImageCount
|
|
702
|
+
},
|
|
703
|
+
slideKey
|
|
704
|
+
);
|
|
705
|
+
})
|
|
706
|
+
}
|
|
707
|
+
);
|
|
708
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
709
|
+
"div",
|
|
710
|
+
{
|
|
711
|
+
className: cn(
|
|
712
|
+
"w-full relative overflow-hidden max-md:overflow-x-auto max-md:[scrollbar-width:none]",
|
|
713
|
+
className
|
|
714
|
+
),
|
|
715
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
716
|
+
"div",
|
|
717
|
+
{
|
|
718
|
+
className: "flex flex-row items-center w-max will-change-transform animate-marquee",
|
|
719
|
+
style: { animationDuration: `${durationSec}s` },
|
|
720
|
+
children: [
|
|
721
|
+
renderStrip("a"),
|
|
722
|
+
renderStrip("b", true)
|
|
723
|
+
]
|
|
724
|
+
}
|
|
725
|
+
)
|
|
726
|
+
}
|
|
727
|
+
);
|
|
728
|
+
};
|
|
729
|
+
ImageMarquee.displayName = "ImageMarquee";
|
|
609
730
|
var LocationCard = react.forwardRef(
|
|
610
731
|
({ location, address, logo, className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
611
732
|
"article",
|
|
@@ -633,6 +754,55 @@ var LocationCard = react.forwardRef(
|
|
|
633
754
|
)
|
|
634
755
|
);
|
|
635
756
|
LocationCard.displayName = "LocationCard";
|
|
757
|
+
var ClockSvg = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
|
|
758
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
759
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6.5V12l4 2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
|
|
760
|
+
] });
|
|
761
|
+
var cardClass3 = "group relative flex flex-col justify-end shrink-0 w-[275px] h-[416px] overflow-hidden bg-lux-ink-card border-[3.5px] border-lux-gold-light no-underline text-inherit focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2";
|
|
762
|
+
var LuxuryTripCard = react.forwardRef(
|
|
763
|
+
({ image, alt, title, duration, href, className, ...rest }, ref) => {
|
|
764
|
+
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
765
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
766
|
+
"img",
|
|
767
|
+
{
|
|
768
|
+
src: image,
|
|
769
|
+
alt,
|
|
770
|
+
loading: "lazy",
|
|
771
|
+
decoding: "async",
|
|
772
|
+
className: "absolute inset-0 w-full h-full object-cover object-center pointer-events-none"
|
|
773
|
+
}
|
|
774
|
+
),
|
|
775
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
776
|
+
"span",
|
|
777
|
+
{
|
|
778
|
+
"aria-hidden": "true",
|
|
779
|
+
className: "absolute inset-0 pointer-events-none bg-[linear-gradient(to_top,rgba(0,0,0,0.85)_0%,rgba(0,0,0,0.45)_45%,transparent_72%)]"
|
|
780
|
+
}
|
|
781
|
+
),
|
|
782
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex flex-col gap-sm px-[14px] pt-md pb-[14px]", children: [
|
|
783
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "m-0 font-luxury text-md font-medium leading-[18.879px] text-lux-on-dark break-words", children: title }),
|
|
784
|
+
duration ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-xs text-[11px] font-medium text-lux-on-dark", children: [
|
|
785
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center text-lux-gold", children: /* @__PURE__ */ jsxRuntime.jsx(ClockSvg, {}) }),
|
|
786
|
+
duration
|
|
787
|
+
] }) : null
|
|
788
|
+
] })
|
|
789
|
+
] });
|
|
790
|
+
if (href) {
|
|
791
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
792
|
+
"a",
|
|
793
|
+
{
|
|
794
|
+
ref,
|
|
795
|
+
href,
|
|
796
|
+
className: cn(cardClass3, className),
|
|
797
|
+
...rest,
|
|
798
|
+
children: content
|
|
799
|
+
}
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardClass3, className), ...rest, children: content });
|
|
803
|
+
}
|
|
804
|
+
);
|
|
805
|
+
LuxuryTripCard.displayName = "LuxuryTripCard";
|
|
636
806
|
var tabBase = "shrink-0 inline-flex items-center h-[34px] py-[5px] px-[17px] rounded-full font-[inherit] text-xs font-normal leading-4 whitespace-nowrap cursor-pointer transition-colors duration-150 ease-in focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2";
|
|
637
807
|
var tabActive = "bg-tab-active-bg border border-text-emphasis text-text-emphasis";
|
|
638
808
|
var tabInactive = "bg-transparent border border-tab-inactive-border text-text-faded";
|
|
@@ -664,7 +834,7 @@ var MonthTabs = react.forwardRef(
|
|
|
664
834
|
] })
|
|
665
835
|
);
|
|
666
836
|
MonthTabs.displayName = "MonthTabs";
|
|
667
|
-
var
|
|
837
|
+
var ClockSvg2 = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: [
|
|
668
838
|
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "9", r: "6.5", stroke: "currentColor", strokeWidth: "1.4" }),
|
|
669
839
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
670
840
|
"path",
|
|
@@ -699,7 +869,7 @@ var CalendarSvg = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "16", he
|
|
|
699
869
|
}
|
|
700
870
|
)
|
|
701
871
|
] });
|
|
702
|
-
var
|
|
872
|
+
var cardClass4 = "relative flex flex-col justify-between shrink-0 w-[264px] h-[392px] py-[12px] px-md rounded-md overflow-hidden no-underline text-inherit snap-start focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 max-md:w-[320px]";
|
|
703
873
|
var infoItemClass = "flex items-center gap-xs min-w-0 text-xs font-medium leading-5 text-info-on-dark";
|
|
704
874
|
var infoIconClass = "inline-flex items-center justify-center w-[18px] h-[18px] shrink-0";
|
|
705
875
|
var PackageCard = react.forwardRef(
|
|
@@ -745,7 +915,7 @@ var PackageCard = react.forwardRef(
|
|
|
745
915
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-xs min-w-0", children: [
|
|
746
916
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-xl min-w-0", children: [
|
|
747
917
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(infoItemClass, "shrink-0"), children: [
|
|
748
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: infoIconClass, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
918
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: infoIconClass, children: /* @__PURE__ */ jsxRuntime.jsx(ClockSvg2, {}) }),
|
|
749
919
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: duration })
|
|
750
920
|
] }),
|
|
751
921
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(infoItemClass, "flex-1"), children: [
|
|
@@ -766,13 +936,13 @@ var PackageCard = react.forwardRef(
|
|
|
766
936
|
{
|
|
767
937
|
ref,
|
|
768
938
|
href,
|
|
769
|
-
className: cn(
|
|
939
|
+
className: cn(cardClass4, className),
|
|
770
940
|
...rest,
|
|
771
941
|
children: content
|
|
772
942
|
}
|
|
773
943
|
);
|
|
774
944
|
}
|
|
775
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(
|
|
945
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardClass4, className), ...rest, children: content });
|
|
776
946
|
}
|
|
777
947
|
);
|
|
778
948
|
PackageCard.displayName = "PackageCard";
|
|
@@ -901,7 +1071,7 @@ var TestimonialCard = react.forwardRef(
|
|
|
901
1071
|
}
|
|
902
1072
|
);
|
|
903
1073
|
TestimonialCard.displayName = "TestimonialCard";
|
|
904
|
-
var
|
|
1074
|
+
var cardClass5 = "relative flex flex-col justify-end shrink-0 w-[200px] h-[316px] p-[20px] border-2 border-surface rounded-lg overflow-hidden no-underline text-inherit snap-start focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2";
|
|
905
1075
|
var TripCategoryCard = react.forwardRef(
|
|
906
1076
|
({ image, mobileImage, alt, destination, startingPrice, href, className, ...rest }, ref) => {
|
|
907
1077
|
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -936,13 +1106,13 @@ var TripCategoryCard = react.forwardRef(
|
|
|
936
1106
|
{
|
|
937
1107
|
ref,
|
|
938
1108
|
href,
|
|
939
|
-
className: cn(
|
|
1109
|
+
className: cn(cardClass5, className),
|
|
940
1110
|
...rest,
|
|
941
1111
|
children: content
|
|
942
1112
|
}
|
|
943
1113
|
);
|
|
944
1114
|
}
|
|
945
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(
|
|
1115
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardClass5, className), ...rest, children: content });
|
|
946
1116
|
}
|
|
947
1117
|
);
|
|
948
1118
|
TripCategoryCard.displayName = "TripCategoryCard";
|
|
@@ -2410,6 +2580,579 @@ var HomeHero = react.forwardRef(
|
|
|
2410
2580
|
}
|
|
2411
2581
|
);
|
|
2412
2582
|
HomeHero.displayName = "HomeHero";
|
|
2583
|
+
var navClass = "sticky top-0 z-30 flex w-full flex-col border-b border-lux-gold bg-white/60 backdrop-blur-[2px]";
|
|
2584
|
+
var scrollClass = "flex flex-1 flex-row flex-nowrap items-end justify-start gap-0 overflow-x-auto overflow-y-hidden px-md pt-3 [-webkit-overflow-scrolling:touch] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden md:justify-center md:px-lg";
|
|
2585
|
+
var dotClass = "block size-1 shrink-0 self-center rounded-full bg-lux-gold-strong opacity-85";
|
|
2586
|
+
var itemClass = "shrink-0 cursor-pointer whitespace-nowrap border-b-2 px-2.5 pt-3 pb-3.5 text-center text-sm font-medium uppercase leading-button tracking-[0.12em] focus-visible:outline-2 focus-visible:outline-lux-gold md:px-3.5 md:pt-2.5 md:pb-3 md:text-xs";
|
|
2587
|
+
var activeItemClass = "border-lux-gold-strong text-lux-gold-strong";
|
|
2588
|
+
var inactiveItemClass = "border-transparent text-lux-text";
|
|
2589
|
+
var LuxuryCategoryNav = ({
|
|
2590
|
+
items,
|
|
2591
|
+
defaultActiveId,
|
|
2592
|
+
onActiveChange,
|
|
2593
|
+
className,
|
|
2594
|
+
...rest
|
|
2595
|
+
}) => {
|
|
2596
|
+
const [activeId, setActiveId] = react.useState(defaultActiveId);
|
|
2597
|
+
const select = react.useCallback(
|
|
2598
|
+
(id) => {
|
|
2599
|
+
setActiveId(id);
|
|
2600
|
+
onActiveChange?.(id);
|
|
2601
|
+
},
|
|
2602
|
+
[onActiveChange]
|
|
2603
|
+
);
|
|
2604
|
+
if (!items.length) {
|
|
2605
|
+
return null;
|
|
2606
|
+
}
|
|
2607
|
+
return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Luxury experience categories", className: cn(navClass, className), ...rest, children: /* @__PURE__ */ jsxRuntime.jsx("div", { role: "tablist", className: scrollClass, children: items.map((item, index) => {
|
|
2608
|
+
const isActive = activeId === item.id;
|
|
2609
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
|
|
2610
|
+
index > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: dotClass }) : null,
|
|
2611
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2612
|
+
"button",
|
|
2613
|
+
{
|
|
2614
|
+
type: "button",
|
|
2615
|
+
role: "tab",
|
|
2616
|
+
"aria-selected": isActive,
|
|
2617
|
+
onClick: () => select(item.id),
|
|
2618
|
+
className: cn(itemClass, isActive ? activeItemClass : inactiveItemClass),
|
|
2619
|
+
children: item.label
|
|
2620
|
+
}
|
|
2621
|
+
)
|
|
2622
|
+
] }, item.id);
|
|
2623
|
+
}) }) });
|
|
2624
|
+
};
|
|
2625
|
+
LuxuryCategoryNav.displayName = "LuxuryCategoryNav";
|
|
2626
|
+
var sectionClass = "relative flex w-full flex-col overflow-hidden bg-lux-ink md:mx-auto md:max-w-[1162px] md:bg-background md:px-[30px] md:pt-[64px] md:pb-[26px]";
|
|
2627
|
+
var innerClass = "relative z-[3] md:mx-auto md:w-full md:max-w-[1200px]";
|
|
2628
|
+
var badgeClass = "mb-[14px] inline-block self-start rounded-full border border-lux-gold-strong px-md py-[6px] text-2xs font-semibold uppercase leading-button tracking-[0.16em] text-lux-gold-strong md:mx-auto md:mb-[20px] md:self-center md:text-xs md:tracking-[0.14em]";
|
|
2629
|
+
var titleClass = "m-0 mb-sm font-luxury text-xl font-medium leading-[1.2] tracking-[0.03em] text-lux-on-dark md:mx-auto md:mb-[28px] md:text-center md:text-[40px] md:font-regular md:tracking-[0.02em] md:text-lux-heading";
|
|
2630
|
+
var descriptionWrapClass = "flex flex-col gap-md md:mb-[60px]";
|
|
2631
|
+
var paragraphClass = "m-0 text-md font-regular leading-body text-lux-on-dark md:text-justify md:text-lux-text";
|
|
2632
|
+
var scrollerClass = "flex flex-row flex-nowrap items-stretch gap-md overflow-x-auto overflow-y-hidden overscroll-x-contain px-[16px] pt-[12px] pb-[80px] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden md:gap-[18px] md:px-0 md:pt-[4px] md:pb-md";
|
|
2633
|
+
var LuxuryDestinationSection = react.forwardRef(
|
|
2634
|
+
({ badge, title, description, heroImage, heroVideo, trips, className, ...rest }, ref) => {
|
|
2635
|
+
const paragraphs = description ? description.split("\n").filter((p) => p.trim() !== "") : [];
|
|
2636
|
+
const showHeroFrame = Boolean(heroVideo?.src || heroImage?.src);
|
|
2637
|
+
const heroPoster = heroVideo?.poster ?? heroImage?.src;
|
|
2638
|
+
const wrapperRef = react.useRef(null);
|
|
2639
|
+
const mobileVideoRef = react.useRef(null);
|
|
2640
|
+
const desktopVideoRef = react.useRef(null);
|
|
2641
|
+
react.useEffect(() => {
|
|
2642
|
+
const src = heroVideo?.src;
|
|
2643
|
+
if (!src || typeof window === "undefined") return;
|
|
2644
|
+
const wrapper = wrapperRef.current;
|
|
2645
|
+
if (!wrapper) return;
|
|
2646
|
+
const assign = () => {
|
|
2647
|
+
const isDesktop = typeof window.matchMedia === "function" && window.matchMedia("(min-width: 768px)").matches;
|
|
2648
|
+
const target = isDesktop ? desktopVideoRef.current : mobileVideoRef.current;
|
|
2649
|
+
if (target && !target.src) target.src = src;
|
|
2650
|
+
};
|
|
2651
|
+
if (typeof IntersectionObserver === "undefined") {
|
|
2652
|
+
assign();
|
|
2653
|
+
return;
|
|
2654
|
+
}
|
|
2655
|
+
const io = new IntersectionObserver(
|
|
2656
|
+
(entries) => {
|
|
2657
|
+
if (entries[0]?.isIntersecting) {
|
|
2658
|
+
assign();
|
|
2659
|
+
io.disconnect();
|
|
2660
|
+
}
|
|
2661
|
+
},
|
|
2662
|
+
{ rootMargin: "200px" }
|
|
2663
|
+
);
|
|
2664
|
+
io.observe(wrapper);
|
|
2665
|
+
return () => io.disconnect();
|
|
2666
|
+
}, [heroVideo?.src]);
|
|
2667
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { ref, className: cn(sectionClass, className), ...rest, children: [
|
|
2668
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2669
|
+
"div",
|
|
2670
|
+
{
|
|
2671
|
+
ref: wrapperRef,
|
|
2672
|
+
className: "absolute inset-x-0 top-0 bottom-[40vh] z-0 overflow-hidden md:hidden",
|
|
2673
|
+
"aria-hidden": "true",
|
|
2674
|
+
children: [
|
|
2675
|
+
heroVideo?.src ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2676
|
+
"video",
|
|
2677
|
+
{
|
|
2678
|
+
ref: mobileVideoRef,
|
|
2679
|
+
autoPlay: true,
|
|
2680
|
+
muted: true,
|
|
2681
|
+
loop: true,
|
|
2682
|
+
playsInline: true,
|
|
2683
|
+
poster: heroVideo.poster ?? heroImage?.src,
|
|
2684
|
+
preload: "none",
|
|
2685
|
+
className: "absolute inset-0 h-full w-full object-cover object-center"
|
|
2686
|
+
}
|
|
2687
|
+
) : heroPoster ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2688
|
+
"img",
|
|
2689
|
+
{
|
|
2690
|
+
src: heroPoster,
|
|
2691
|
+
alt: "",
|
|
2692
|
+
loading: "lazy",
|
|
2693
|
+
decoding: "async",
|
|
2694
|
+
className: "absolute inset-0 h-full w-full object-cover object-center"
|
|
2695
|
+
}
|
|
2696
|
+
) : null,
|
|
2697
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-0 bg-[linear-gradient(to_bottom,rgba(0,0,0,0)_0%,rgba(0,0,0,0.2)_30%,rgba(0,0,0,0.4)_50%,rgba(0,0,0,0.7)_70%,rgba(0,0,0,1)_100%)]" })
|
|
2698
|
+
]
|
|
2699
|
+
}
|
|
2700
|
+
),
|
|
2701
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: innerClass, children: [
|
|
2702
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start px-[20px] pt-[20px] md:items-stretch md:px-0 md:pt-0", children: [
|
|
2703
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeClass, children: badge }),
|
|
2704
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: titleClass, children: title }),
|
|
2705
|
+
showHeroFrame ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mx-auto mb-[28px] hidden w-full max-w-[1162px] border border-lux-gold bg-background md:block", children: heroVideo?.src ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2706
|
+
"video",
|
|
2707
|
+
{
|
|
2708
|
+
ref: desktopVideoRef,
|
|
2709
|
+
autoPlay: true,
|
|
2710
|
+
muted: true,
|
|
2711
|
+
loop: true,
|
|
2712
|
+
playsInline: true,
|
|
2713
|
+
poster: heroVideo.poster ?? heroImage?.src,
|
|
2714
|
+
preload: "none",
|
|
2715
|
+
className: "block max-h-[626px] w-full object-cover object-center align-middle"
|
|
2716
|
+
}
|
|
2717
|
+
) : heroImage?.src ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2718
|
+
"img",
|
|
2719
|
+
{
|
|
2720
|
+
src: heroImage.src,
|
|
2721
|
+
alt: heroImage.alt ?? "",
|
|
2722
|
+
loading: "lazy",
|
|
2723
|
+
decoding: "async",
|
|
2724
|
+
className: "block h-[625px] w-full object-cover object-center"
|
|
2725
|
+
}
|
|
2726
|
+
) : null }) : null,
|
|
2727
|
+
paragraphs.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionWrapClass, children: paragraphs.map((paragraph) => /* @__PURE__ */ jsxRuntime.jsx("p", { className: paragraphClass, children: paragraph }, paragraph)) }) : null
|
|
2728
|
+
] }),
|
|
2729
|
+
trips.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn(scrollerClass, "m-0 list-none"), children: trips.map((trip, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(LuxuryTripCard, { ...trip }) }, trip.href ?? `${trip.title}-${index}`)) }) : null
|
|
2730
|
+
] })
|
|
2731
|
+
] });
|
|
2732
|
+
}
|
|
2733
|
+
);
|
|
2734
|
+
LuxuryDestinationSection.displayName = "LuxuryDestinationSection";
|
|
2735
|
+
var rootClass = "relative flex flex-col w-full min-h-[calc(100dvh-60px)] overflow-hidden bg-lux-ink";
|
|
2736
|
+
var ctaClass = "appearance-none cursor-pointer uppercase tracking-[0.14em] rounded-full px-[28px] py-md text-sm font-semibold leading-[22.154px] text-center text-[#2C2C2C] bg-lux-gold-gradient shadow-[0_0_18.461px_1.846px_rgba(153,91,18,0.3)_inset] transition-[opacity,transform] duration-200 ease-out hover:opacity-[0.92] active:scale-[0.98] focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2 md:bg-none md:bg-transparent md:shadow-none md:text-lux-gold md:border md:border-lux-gold md:text-[13px] md:py-[18px] md:px-[36px] md:hover:bg-[rgba(197,160,89,0.08)] md:hover:opacity-100";
|
|
2737
|
+
var LuxuryHero = react.forwardRef(
|
|
2738
|
+
({
|
|
2739
|
+
videoSrc,
|
|
2740
|
+
videoPoster,
|
|
2741
|
+
videoType: _videoType = "video/mp4",
|
|
2742
|
+
title = "WanderOn Experiences",
|
|
2743
|
+
subline1,
|
|
2744
|
+
subline2,
|
|
2745
|
+
ctaLabel = "Connect with Concierge",
|
|
2746
|
+
onCtaClick,
|
|
2747
|
+
homeHref = "/",
|
|
2748
|
+
logoSrc,
|
|
2749
|
+
showLogo = true,
|
|
2750
|
+
className,
|
|
2751
|
+
...rest
|
|
2752
|
+
}, ref) => {
|
|
2753
|
+
const videoRef = react.useRef(null);
|
|
2754
|
+
react.useEffect(() => {
|
|
2755
|
+
const video = videoRef.current;
|
|
2756
|
+
if (!video || !videoSrc) return;
|
|
2757
|
+
video.src = videoSrc;
|
|
2758
|
+
}, [videoSrc]);
|
|
2759
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { ref, className: cn(rootClass, className), ...rest, children: [
|
|
2760
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2761
|
+
"div",
|
|
2762
|
+
{
|
|
2763
|
+
className: "absolute inset-0 z-0 overflow-hidden pointer-events-none",
|
|
2764
|
+
"aria-hidden": "true",
|
|
2765
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2766
|
+
"video",
|
|
2767
|
+
{
|
|
2768
|
+
ref: videoRef,
|
|
2769
|
+
autoPlay: true,
|
|
2770
|
+
muted: true,
|
|
2771
|
+
loop: true,
|
|
2772
|
+
playsInline: true,
|
|
2773
|
+
poster: videoPoster,
|
|
2774
|
+
preload: "metadata",
|
|
2775
|
+
className: "absolute top-0 left-0 w-full h-full object-cover object-center"
|
|
2776
|
+
}
|
|
2777
|
+
)
|
|
2778
|
+
}
|
|
2779
|
+
),
|
|
2780
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2781
|
+
"div",
|
|
2782
|
+
{
|
|
2783
|
+
"aria-hidden": "true",
|
|
2784
|
+
className: "absolute inset-0 z-[1] bg-[linear-gradient(180deg,rgba(12,6,14,0.55)_0%,rgba(12,6,14,0.65)_45%,rgba(12,6,14,0.75)_100%)]"
|
|
2785
|
+
}
|
|
2786
|
+
),
|
|
2787
|
+
showLogo ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-[2] flex shrink-0 items-start justify-start px-[20px] pt-lg md:px-[48px] md:pt-xl", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2788
|
+
"a",
|
|
2789
|
+
{
|
|
2790
|
+
href: homeHref,
|
|
2791
|
+
"aria-label": "WanderOn home",
|
|
2792
|
+
className: "flex flex-col items-center no-underline cursor-pointer focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2",
|
|
2793
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative block w-[44px] h-[44px] md:w-[52px] md:h-[52px]", children: logoSrc ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2794
|
+
"img",
|
|
2795
|
+
{
|
|
2796
|
+
src: logoSrc,
|
|
2797
|
+
alt: "",
|
|
2798
|
+
loading: "lazy",
|
|
2799
|
+
decoding: "async",
|
|
2800
|
+
className: "w-full h-full object-contain"
|
|
2801
|
+
}
|
|
2802
|
+
) : null })
|
|
2803
|
+
}
|
|
2804
|
+
) }) : null,
|
|
2805
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-[2] flex flex-1 flex-col items-center justify-center text-center min-h-0 px-[20px] pt-lg pb-xl md:px-[48px] md:pt-[40px] md:pb-[48px]", children: [
|
|
2806
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "m-0 font-luxury text-2xl font-medium leading-[38px] tracking-[0.02em] text-center text-[#F1F5F9] [text-shadow:2px_4px_15px_rgba(0,0,0,0.4)]", children: title }),
|
|
2807
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "lux-gold-rule w-[160px] mx-auto mt-[20px] md:w-[96px] md:mt-lg" }),
|
|
2808
|
+
subline1 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "m-0 mt-md text-center text-sm font-regular leading-6 text-lux-on-dark md:mt-[20px]", children: subline1 }) : null,
|
|
2809
|
+
subline2 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "m-0 mt-sm text-center text-sm font-regular leading-6 text-lux-on-dark", children: subline2 }) : null
|
|
2810
|
+
] }),
|
|
2811
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-[2] flex shrink-0 justify-center px-[20px] pb-[40px] md:px-[48px] md:pb-[48px]", children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => onCtaClick?.(), className: ctaClass, children: ctaLabel }) })
|
|
2812
|
+
] });
|
|
2813
|
+
}
|
|
2814
|
+
);
|
|
2815
|
+
LuxuryHero.displayName = "LuxuryHero";
|
|
2816
|
+
var DEFAULT_DIAL = "+91";
|
|
2817
|
+
var DEFAULT_DIAL_CODES = [
|
|
2818
|
+
{ code: "+91", label: "India (+91)" },
|
|
2819
|
+
{ code: "+1", label: "USA (+1)" },
|
|
2820
|
+
{ code: "+44", label: "UK (+44)" },
|
|
2821
|
+
{ code: "+971", label: "UAE (+971)" }
|
|
2822
|
+
];
|
|
2823
|
+
var sectionClass2 = "relative w-full min-w-0 bg-transparent";
|
|
2824
|
+
var cardClass6 = "mx-auto max-w-[1040px] rounded-sm bg-lux-on-dark px-[clamp(20px,4vw,56px)] py-[clamp(28px,5vw,52px)] text-lux-text shadow-[0_1px_0_rgba(0,0,0,0.04),0_12px_40px_rgba(0,0,0,0.12)]";
|
|
2825
|
+
var layoutClass = "flex min-w-0 flex-col gap-[28px] md:flex-row md:items-center md:justify-between md:gap-[clamp(32px,5vw,56px)]";
|
|
2826
|
+
var mainClass = "flex min-w-0 flex-1 flex-col items-stretch md:max-w-[680px]";
|
|
2827
|
+
var headingClass = "mb-[10px] mt-0 text-left font-luxury text-[clamp(24px,4.5vw,34px)] font-semibold leading-heading text-lux-ink";
|
|
2828
|
+
var subheadingClass = "mb-[28px] mt-0 text-left text-[clamp(14px,2.8vw,17px)] font-medium leading-body text-lux-heading md:mb-lg";
|
|
2829
|
+
var lineInputClass = "w-full rounded-none border-0 border-b border-b-[#999999] bg-lux-on-dark px-0 pb-[10px] pt-[12px] text-md font-regular text-lux-text outline-none transition-colors placeholder:text-[#A9A9A9] focus:border-b-lux-gold disabled:cursor-not-allowed disabled:opacity-60";
|
|
2830
|
+
var dialSelectClass = "block w-full min-w-[90px] max-w-[96px] cursor-pointer appearance-none rounded-none border-0 border-b border-b-[#999999] bg-lux-on-dark bg-[right_2px_center] bg-no-repeat py-[10px] pl-0 pr-[24px] text-[15px] font-medium text-lux-text outline-none transition-colors focus:border-b-lux-gold disabled:cursor-not-allowed disabled:opacity-60";
|
|
2831
|
+
var errorClass = "mt-[6px] block text-xs text-danger";
|
|
2832
|
+
var actionClass = "relative z-[1] inline-flex min-h-[52px] w-full items-center justify-center gap-[10px] whitespace-nowrap rounded-full border-0 bg-lux-gold-gradient px-[28px] py-md text-xs font-bold tracking-[0.06em] text-lux-text shadow-[0_2px_12px_rgba(184,134,11,0.25)] transition-[opacity,transform] hover:not-disabled:-translate-y-px focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-75 md:w-auto md:min-w-[240px] md:px-xl";
|
|
2833
|
+
var spinnerClass = "h-[22px] w-[22px] animate-spin rounded-full border-2 border-lux-text/25 border-t-lux-text";
|
|
2834
|
+
var toastBaseClass = "fixed bottom-[18vh] left-1/2 z-20 -translate-x-1/2 rounded-md border border-lux-gold/50 bg-[linear-gradient(180deg,#F3E5AB_0%,#D4AF37_100%)] px-lg py-md text-[15px] font-medium leading-body text-lux-text shadow-[0_4px_20px_rgba(0,0,0,0.15)] transition-opacity duration-300 max-[600px]:bottom-lg max-[600px]:left-md max-[600px]:right-md max-[600px]:translate-x-0";
|
|
2835
|
+
var SelectChevron = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2836
|
+
"svg",
|
|
2837
|
+
{
|
|
2838
|
+
className: "pointer-events-none absolute right-[2px] top-1/2 -translate-y-1/2",
|
|
2839
|
+
width: "12",
|
|
2840
|
+
height: "12",
|
|
2841
|
+
viewBox: "0 0 12 12",
|
|
2842
|
+
fill: "none",
|
|
2843
|
+
"aria-hidden": "true",
|
|
2844
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 8L1 3h10z", fill: "#666666" })
|
|
2845
|
+
}
|
|
2846
|
+
);
|
|
2847
|
+
var ConciergeIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2848
|
+
"path",
|
|
2849
|
+
{
|
|
2850
|
+
d: "M12 12a4 4 0 100-8 4 4 0 000 8zM4 20a8 8 0 0116 0",
|
|
2851
|
+
stroke: "currentColor",
|
|
2852
|
+
strokeWidth: "1.5",
|
|
2853
|
+
strokeLinecap: "round"
|
|
2854
|
+
}
|
|
2855
|
+
) });
|
|
2856
|
+
var LuxuryInquiryForm = ({
|
|
2857
|
+
onSubmit,
|
|
2858
|
+
title = "Bespoke Inquiries",
|
|
2859
|
+
subheading = "Your dedicated concierge awaits to craft your unforgettable journey!",
|
|
2860
|
+
namePlaceholder = "enter your name",
|
|
2861
|
+
phonePlaceholder = "enter your mobile Number",
|
|
2862
|
+
dialCodes = DEFAULT_DIAL_CODES,
|
|
2863
|
+
className,
|
|
2864
|
+
...rest
|
|
2865
|
+
}) => {
|
|
2866
|
+
const [name, setName] = react.useState("");
|
|
2867
|
+
const [dialCode, setDialCode] = react.useState(dialCodes[0]?.code ?? DEFAULT_DIAL);
|
|
2868
|
+
const [phoneLocal, setPhoneLocal] = react.useState("");
|
|
2869
|
+
const [errors, setErrors] = react.useState({});
|
|
2870
|
+
const [submitting, setSubmitting] = react.useState(false);
|
|
2871
|
+
const [toastOn, setToastOn] = react.useState(false);
|
|
2872
|
+
const fullMobile = () => {
|
|
2873
|
+
const digits = phoneLocal.replace(/\D/g, "");
|
|
2874
|
+
const code = dialCode.replace(/\s/g, "") || DEFAULT_DIAL;
|
|
2875
|
+
return `${code}${digits}`;
|
|
2876
|
+
};
|
|
2877
|
+
const validate = () => {
|
|
2878
|
+
const next = {};
|
|
2879
|
+
if (!name.trim()) next.name = "Name is required";
|
|
2880
|
+
const digits = phoneLocal.replace(/\D/g, "");
|
|
2881
|
+
if (!digits) next.mobile = "Phone number is required";
|
|
2882
|
+
else if (digits.length < 6 || digits.length > 15) {
|
|
2883
|
+
next.mobile = "Enter a valid phone number";
|
|
2884
|
+
}
|
|
2885
|
+
setErrors(next);
|
|
2886
|
+
return Object.keys(next).length === 0;
|
|
2887
|
+
};
|
|
2888
|
+
const handleSubmit = async (e) => {
|
|
2889
|
+
e.preventDefault();
|
|
2890
|
+
if (!validate()) return;
|
|
2891
|
+
const mobile = fullMobile();
|
|
2892
|
+
setSubmitting(true);
|
|
2893
|
+
setErrors({});
|
|
2894
|
+
try {
|
|
2895
|
+
await Promise.resolve(onSubmit({ name: name.trim(), mobile }));
|
|
2896
|
+
setName("");
|
|
2897
|
+
setPhoneLocal("");
|
|
2898
|
+
setDialCode(dialCodes[0]?.code ?? DEFAULT_DIAL);
|
|
2899
|
+
setToastOn(true);
|
|
2900
|
+
setTimeout(() => setToastOn(false), 4e3);
|
|
2901
|
+
} catch (err) {
|
|
2902
|
+
const message = err instanceof Error ? err.message : "Something went wrong. Please try again.";
|
|
2903
|
+
setErrors((prev) => ({ ...prev, form: message }));
|
|
2904
|
+
} finally {
|
|
2905
|
+
setSubmitting(false);
|
|
2906
|
+
}
|
|
2907
|
+
};
|
|
2908
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2909
|
+
"section",
|
|
2910
|
+
{
|
|
2911
|
+
className: cn(sectionClass2, className),
|
|
2912
|
+
"aria-labelledby": "luxury-inquiry-title",
|
|
2913
|
+
...rest,
|
|
2914
|
+
children: [
|
|
2915
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cardClass6, children: /* @__PURE__ */ jsxRuntime.jsx("form", { onSubmit: handleSubmit, noValidate: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: layoutClass, children: [
|
|
2916
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: mainClass, children: [
|
|
2917
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2918
|
+
"div",
|
|
2919
|
+
{
|
|
2920
|
+
className: "mb-[20px] flex h-12 w-12 items-center justify-center rounded-full bg-lux-gold-light text-lux-gold-strong md:hidden",
|
|
2921
|
+
"aria-hidden": "true",
|
|
2922
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ConciergeIcon, {})
|
|
2923
|
+
}
|
|
2924
|
+
),
|
|
2925
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { id: "luxury-inquiry-title", className: headingClass, children: title }),
|
|
2926
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: subheadingClass, children: subheading }),
|
|
2927
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full min-w-0 flex-col gap-[22px]", children: [
|
|
2928
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full min-w-0", children: [
|
|
2929
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "sr-only", htmlFor: "luxury-inquiry-name", children: "Name" }),
|
|
2930
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2931
|
+
"input",
|
|
2932
|
+
{
|
|
2933
|
+
id: "luxury-inquiry-name",
|
|
2934
|
+
className: lineInputClass,
|
|
2935
|
+
type: "text",
|
|
2936
|
+
name: "name",
|
|
2937
|
+
placeholder: namePlaceholder,
|
|
2938
|
+
value: name,
|
|
2939
|
+
onChange: (e) => setName(e.target.value),
|
|
2940
|
+
disabled: submitting,
|
|
2941
|
+
autoComplete: "name",
|
|
2942
|
+
"aria-required": "true",
|
|
2943
|
+
"aria-invalid": !!errors.name
|
|
2944
|
+
}
|
|
2945
|
+
),
|
|
2946
|
+
errors.name && /* @__PURE__ */ jsxRuntime.jsx("span", { className: errorClass, role: "alert", children: errors.name })
|
|
2947
|
+
] }),
|
|
2948
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full min-w-0", children: [
|
|
2949
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full min-w-0 flex-row items-end gap-[12px]", children: [
|
|
2950
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-w-0 flex-none", children: [
|
|
2951
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "sr-only", htmlFor: "luxury-inquiry-dial", children: "Country calling code" }),
|
|
2952
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2953
|
+
"select",
|
|
2954
|
+
{
|
|
2955
|
+
id: "luxury-inquiry-dial",
|
|
2956
|
+
className: dialSelectClass,
|
|
2957
|
+
name: "dialCode",
|
|
2958
|
+
value: dialCode,
|
|
2959
|
+
onChange: (e) => setDialCode(e.target.value),
|
|
2960
|
+
disabled: submitting,
|
|
2961
|
+
"aria-label": "Country calling code",
|
|
2962
|
+
children: dialCodes.map((c) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: c.code, children: c.label }, c.code))
|
|
2963
|
+
}
|
|
2964
|
+
),
|
|
2965
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectChevron, {})
|
|
2966
|
+
] }),
|
|
2967
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
2968
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "sr-only", htmlFor: "luxury-inquiry-mobile", children: "Mobile number" }),
|
|
2969
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2970
|
+
"input",
|
|
2971
|
+
{
|
|
2972
|
+
id: "luxury-inquiry-mobile",
|
|
2973
|
+
className: lineInputClass,
|
|
2974
|
+
type: "tel",
|
|
2975
|
+
name: "mobile",
|
|
2976
|
+
placeholder: phonePlaceholder,
|
|
2977
|
+
value: phoneLocal,
|
|
2978
|
+
onChange: (e) => setPhoneLocal(e.target.value),
|
|
2979
|
+
disabled: submitting,
|
|
2980
|
+
autoComplete: "tel-national",
|
|
2981
|
+
inputMode: "numeric",
|
|
2982
|
+
"aria-required": "true",
|
|
2983
|
+
"aria-invalid": !!errors.mobile
|
|
2984
|
+
}
|
|
2985
|
+
)
|
|
2986
|
+
] })
|
|
2987
|
+
] }),
|
|
2988
|
+
errors.mobile && /* @__PURE__ */ jsxRuntime.jsx("span", { className: errorClass, role: "alert", children: errors.mobile })
|
|
2989
|
+
] }),
|
|
2990
|
+
errors.form && /* @__PURE__ */ jsxRuntime.jsx("span", { className: errorClass, role: "alert", children: errors.form })
|
|
2991
|
+
] })
|
|
2992
|
+
] }),
|
|
2993
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-none items-center justify-center md:min-w-[220px] md:justify-end md:self-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2994
|
+
"button",
|
|
2995
|
+
{
|
|
2996
|
+
className: actionClass,
|
|
2997
|
+
type: "submit",
|
|
2998
|
+
disabled: submitting,
|
|
2999
|
+
"aria-busy": submitting,
|
|
3000
|
+
children: submitting ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3001
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: spinnerClass, "aria-hidden": "true" }),
|
|
3002
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Connecting..." })
|
|
3003
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { children: "CONNECT WITH CONCIERGE" })
|
|
3004
|
+
}
|
|
3005
|
+
) })
|
|
3006
|
+
] }) }) }),
|
|
3007
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3008
|
+
"div",
|
|
3009
|
+
{
|
|
3010
|
+
className: cn(toastBaseClass, toastOn ? "opacity-100" : "pointer-events-none opacity-0"),
|
|
3011
|
+
role: "status",
|
|
3012
|
+
children: "Thank you! Your form has been submitted successfully. We'll be in touch soon."
|
|
3013
|
+
}
|
|
3014
|
+
)
|
|
3015
|
+
]
|
|
3016
|
+
}
|
|
3017
|
+
);
|
|
3018
|
+
};
|
|
3019
|
+
LuxuryInquiryForm.displayName = "LuxuryInquiryForm";
|
|
3020
|
+
var sectionClass3 = "w-full bg-background px-[20px] pt-[56px] pb-[64px] md:px-[48px] md:pt-[72px] md:pb-[88px]";
|
|
3021
|
+
var containerClass2 = "mx-auto flex w-full max-w-[720px] flex-col items-center gap-[20px] text-center md:gap-lg";
|
|
3022
|
+
var badgeClass2 = "inline-block rounded-full border border-lux-gold-strong px-md py-[6px] text-xs font-medium uppercase leading-[32px] tracking-[0.14em] text-lux-gold-strong";
|
|
3023
|
+
var headingClass2 = "m-0 font-luxury text-xl font-medium capitalize leading-[50px] tracking-[0.02em] text-lux-heading md:text-[40px]";
|
|
3024
|
+
var bodyClass = "m-0 max-w-[62ch] text-md font-regular leading-body text-lux-text";
|
|
3025
|
+
var LuxuryIntro = react.forwardRef(
|
|
3026
|
+
({ badge = "Experience", heading, body, className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx("section", { ref, className: cn(sectionClass3, className), ...rest, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: containerClass2, children: [
|
|
3027
|
+
badge ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeClass2, children: badge }) : null,
|
|
3028
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: headingClass2, children: heading }),
|
|
3029
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: bodyClass, children: body })
|
|
3030
|
+
] }) })
|
|
3031
|
+
);
|
|
3032
|
+
LuxuryIntro.displayName = "LuxuryIntro";
|
|
3033
|
+
var sectionClass4 = "w-full bg-background px-[20px] py-[40px] md:px-[48px] md:py-[56px]";
|
|
3034
|
+
var headingStackClass = "mx-auto mb-[40px] flex w-full flex-col items-center text-center";
|
|
3035
|
+
var badgeClass3 = "mb-[12px] inline-block rounded-full bg-lux-gold-strong px-md py-[6px] text-xs font-semibold uppercase leading-button tracking-[0.14em] text-lux-on-dark";
|
|
3036
|
+
var titleClass2 = "m-0 font-luxury text-xl font-medium leading-heading tracking-[0.02em] text-lux-heading md:text-[38px]";
|
|
3037
|
+
var rowWrapClass = "relative mx-auto w-full max-w-[1100px]";
|
|
3038
|
+
var rowClass2 = "flex snap-x snap-mandatory overflow-x-auto scroll-smooth [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
|
|
3039
|
+
var cardClass7 = "relative w-[90%] shrink-0 snap-center px-lg py-lg md:w-[50%] max-w-[800px] mx-auto";
|
|
3040
|
+
var photoGridClass = "relative mb-[30px] h-[180px]";
|
|
3041
|
+
var jumpingPhotoClass = "absolute left-0 top-0 h-[139px] w-[100px] -rotate-2 border-2 border-lux-gold object-cover";
|
|
3042
|
+
var groupPhotoClass = "absolute bottom-0 left-[70px] h-[97px] w-[180px] -rotate-2 border-2 border-lux-gold object-cover";
|
|
3043
|
+
var quoteBaseClass = "mb-[20px] overflow-hidden text-ellipsis text-left text-sm leading-body text-lux-text [display:-webkit-box] [-webkit-box-orient:vertical] md:text-md";
|
|
3044
|
+
var readMoreClass = "text-sm font-semibold text-lux-gold-strong underline-offset-2 hover:underline focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2";
|
|
3045
|
+
var nameClass = "mt-[8px] mb-0 text-right text-sm font-medium text-lux-gold-strong";
|
|
3046
|
+
var accentTapeBaseClass = "absolute z-[1] h-[20px] w-[100px] bg-lux-gold-light/60";
|
|
3047
|
+
var arrowClass = "absolute top-1/2 z-10 hidden -translate-y-1/2 items-center justify-center rounded-full border border-lux-gold bg-background text-lux-gold-strong shadow-sm md:inline-flex h-[40px] w-[40px] focus-visible:outline-2 focus-visible:outline-lux-gold focus-visible:outline-offset-2";
|
|
3048
|
+
var ChevronLeft3 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3049
|
+
"path",
|
|
3050
|
+
{
|
|
3051
|
+
d: "M15 6l-6 6 6 6",
|
|
3052
|
+
stroke: "currentColor",
|
|
3053
|
+
strokeWidth: "1.75",
|
|
3054
|
+
strokeLinecap: "round",
|
|
3055
|
+
strokeLinejoin: "round"
|
|
3056
|
+
}
|
|
3057
|
+
) });
|
|
3058
|
+
var ChevronRight3 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3059
|
+
"path",
|
|
3060
|
+
{
|
|
3061
|
+
d: "M9 6l6 6-6 6",
|
|
3062
|
+
stroke: "currentColor",
|
|
3063
|
+
strokeWidth: "1.75",
|
|
3064
|
+
strokeLinecap: "round",
|
|
3065
|
+
strokeLinejoin: "round"
|
|
3066
|
+
}
|
|
3067
|
+
) });
|
|
3068
|
+
var LuxuryTestimonials = react.forwardRef(
|
|
3069
|
+
({
|
|
3070
|
+
reviews,
|
|
3071
|
+
heading = "Unfiltered Reviews",
|
|
3072
|
+
badge = "Testimonials",
|
|
3073
|
+
lineClamp,
|
|
3074
|
+
className,
|
|
3075
|
+
...rest
|
|
3076
|
+
}, ref) => {
|
|
3077
|
+
const rowRef = react.useRef(null);
|
|
3078
|
+
const scrollBy = (direction) => {
|
|
3079
|
+
const row = rowRef.current;
|
|
3080
|
+
if (!row) return;
|
|
3081
|
+
row.scrollBy({ left: direction * row.clientWidth * 0.8, behavior: "smooth" });
|
|
3082
|
+
};
|
|
3083
|
+
const clampStyle = lineClamp ? { WebkitLineClamp: lineClamp } : void 0;
|
|
3084
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { ref, className: cn(sectionClass4, className), ...rest, children: [
|
|
3085
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: headingStackClass, children: [
|
|
3086
|
+
badge ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeClass3, children: badge }) : null,
|
|
3087
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: titleClass2, children: heading })
|
|
3088
|
+
] }),
|
|
3089
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: rowWrapClass, children: [
|
|
3090
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3091
|
+
"button",
|
|
3092
|
+
{
|
|
3093
|
+
type: "button",
|
|
3094
|
+
"aria-label": "Previous reviews",
|
|
3095
|
+
className: cn(arrowClass, "left-0"),
|
|
3096
|
+
onClick: () => scrollBy(-1),
|
|
3097
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft3, {})
|
|
3098
|
+
}
|
|
3099
|
+
),
|
|
3100
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: rowRef, className: rowClass2, children: reviews.map((review, index) => /* @__PURE__ */ jsxRuntime.jsxs("article", { className: cardClass7, children: [
|
|
3101
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3102
|
+
"span",
|
|
3103
|
+
{
|
|
3104
|
+
"aria-hidden": "true",
|
|
3105
|
+
className: cn(
|
|
3106
|
+
accentTapeBaseClass,
|
|
3107
|
+
index % 2 === 0 ? "left-[200px] top-[100px] rotate-[30deg]" : "left-0 top-[20px] -rotate-[30deg]"
|
|
3108
|
+
)
|
|
3109
|
+
}
|
|
3110
|
+
),
|
|
3111
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: photoGridClass, children: [
|
|
3112
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3113
|
+
"img",
|
|
3114
|
+
{
|
|
3115
|
+
src: review.image1,
|
|
3116
|
+
alt: `${review.name} travelling`,
|
|
3117
|
+
loading: "lazy",
|
|
3118
|
+
decoding: "async",
|
|
3119
|
+
className: jumpingPhotoClass
|
|
3120
|
+
}
|
|
3121
|
+
),
|
|
3122
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3123
|
+
"img",
|
|
3124
|
+
{
|
|
3125
|
+
src: review.image2,
|
|
3126
|
+
alt: `${review.name} with the group`,
|
|
3127
|
+
loading: "lazy",
|
|
3128
|
+
decoding: "async",
|
|
3129
|
+
className: groupPhotoClass
|
|
3130
|
+
}
|
|
3131
|
+
)
|
|
3132
|
+
] }),
|
|
3133
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: quoteBaseClass, style: clampStyle, children: [
|
|
3134
|
+
"\u201C",
|
|
3135
|
+
review.content,
|
|
3136
|
+
"\u201D"
|
|
3137
|
+
] }),
|
|
3138
|
+
review.link ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: review.link, className: readMoreClass, children: /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "continue reading ..." }) }) : null,
|
|
3139
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: nameClass, children: review.name })
|
|
3140
|
+
] }, `${review.name}-${review.content.slice(0, 16)}`)) }),
|
|
3141
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3142
|
+
"button",
|
|
3143
|
+
{
|
|
3144
|
+
type: "button",
|
|
3145
|
+
"aria-label": "Next reviews",
|
|
3146
|
+
className: cn(arrowClass, "right-0"),
|
|
3147
|
+
onClick: () => scrollBy(1),
|
|
3148
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRight3, {})
|
|
3149
|
+
}
|
|
3150
|
+
)
|
|
3151
|
+
] })
|
|
3152
|
+
] });
|
|
3153
|
+
}
|
|
3154
|
+
);
|
|
3155
|
+
LuxuryTestimonials.displayName = "LuxuryTestimonials";
|
|
2413
3156
|
var SearchSvg2 = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
2414
3157
|
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "9", r: "6.5", stroke: "currentColor", strokeWidth: "1.5" }),
|
|
2415
3158
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2515,7 +3258,7 @@ var OfficesSection = react.forwardRef(
|
|
|
2515
3258
|
}
|
|
2516
3259
|
);
|
|
2517
3260
|
OfficesSection.displayName = "OfficesSection";
|
|
2518
|
-
var
|
|
3261
|
+
var ChevronLeft4 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2519
3262
|
"path",
|
|
2520
3263
|
{
|
|
2521
3264
|
d: "M10 12L6 8l4-4",
|
|
@@ -2525,7 +3268,7 @@ var ChevronLeft3 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", he
|
|
|
2525
3268
|
strokeLinejoin: "round"
|
|
2526
3269
|
}
|
|
2527
3270
|
) });
|
|
2528
|
-
var
|
|
3271
|
+
var ChevronRight4 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2529
3272
|
"path",
|
|
2530
3273
|
{
|
|
2531
3274
|
d: "M6 4l4 4-4 4",
|
|
@@ -2596,7 +3339,7 @@ var PackagesCarousel = react.forwardRef(
|
|
|
2596
3339
|
disabled: !canPrev,
|
|
2597
3340
|
"aria-label": "Previous packages",
|
|
2598
3341
|
className: cn(arrowBase3, "-left-2"),
|
|
2599
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3342
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft4, {})
|
|
2600
3343
|
}
|
|
2601
3344
|
),
|
|
2602
3345
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2630,7 +3373,7 @@ var PackagesCarousel = react.forwardRef(
|
|
|
2630
3373
|
disabled: !canNext,
|
|
2631
3374
|
"aria-label": "Next packages",
|
|
2632
3375
|
className: cn(arrowBase3, "-right-2"),
|
|
2633
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3376
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRight4, {})
|
|
2634
3377
|
}
|
|
2635
3378
|
)
|
|
2636
3379
|
] })
|
|
@@ -2713,7 +3456,7 @@ var TeamSection = react.forwardRef(
|
|
|
2713
3456
|
}
|
|
2714
3457
|
);
|
|
2715
3458
|
TeamSection.displayName = "TeamSection";
|
|
2716
|
-
var
|
|
3459
|
+
var ChevronLeft5 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2717
3460
|
"path",
|
|
2718
3461
|
{
|
|
2719
3462
|
d: "M12 15l-5-5 5-5",
|
|
@@ -2723,7 +3466,7 @@ var ChevronLeft4 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", he
|
|
|
2723
3466
|
strokeLinejoin: "round"
|
|
2724
3467
|
}
|
|
2725
3468
|
) });
|
|
2726
|
-
var
|
|
3469
|
+
var ChevronRight5 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2727
3470
|
"path",
|
|
2728
3471
|
{
|
|
2729
3472
|
d: "M8 5l5 5-5 5",
|
|
@@ -2733,7 +3476,7 @@ var ChevronRight4 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", h
|
|
|
2733
3476
|
strokeLinejoin: "round"
|
|
2734
3477
|
}
|
|
2735
3478
|
) });
|
|
2736
|
-
var
|
|
3479
|
+
var arrowClass2 = "inline-flex items-center justify-center w-9 h-9 p-0 bg-primary border-none rounded-full text-on-dark cursor-pointer transition-opacity duration-150 ease-in disabled:opacity-40 disabled:cursor-not-allowed focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2";
|
|
2737
3480
|
var TestimonialsCarousel = react.forwardRef(
|
|
2738
3481
|
({ testimonials, defaultIndex = 0, activeIndex, onActiveIndexChange, className, ...rest }, ref) => {
|
|
2739
3482
|
const isControlled = activeIndex !== void 0;
|
|
@@ -2790,8 +3533,8 @@ var TestimonialsCarousel = react.forwardRef(
|
|
|
2790
3533
|
onClick: () => setIndex(currentIndex - 1),
|
|
2791
3534
|
disabled: isFirst,
|
|
2792
3535
|
"aria-label": "Previous testimonial",
|
|
2793
|
-
className:
|
|
2794
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3536
|
+
className: arrowClass2,
|
|
3537
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft5, {})
|
|
2795
3538
|
}
|
|
2796
3539
|
),
|
|
2797
3540
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2824,8 +3567,8 @@ var TestimonialsCarousel = react.forwardRef(
|
|
|
2824
3567
|
onClick: () => setIndex(currentIndex + 1),
|
|
2825
3568
|
disabled: isLast,
|
|
2826
3569
|
"aria-label": "Next testimonial",
|
|
2827
|
-
className:
|
|
2828
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3570
|
+
className: arrowClass2,
|
|
3571
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRight5, {})
|
|
2829
3572
|
}
|
|
2830
3573
|
)
|
|
2831
3574
|
] }) : null
|
|
@@ -2882,7 +3625,7 @@ var useDesktopVideoVisible = (ref, breakpointPx = 768) => {
|
|
|
2882
3625
|
}, [ref, breakpointPx]);
|
|
2883
3626
|
return shouldRender;
|
|
2884
3627
|
};
|
|
2885
|
-
var
|
|
3628
|
+
var ChevronLeft6 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2886
3629
|
"path",
|
|
2887
3630
|
{
|
|
2888
3631
|
d: "M10 12L6 8l4-4",
|
|
@@ -2892,7 +3635,7 @@ var ChevronLeft5 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", he
|
|
|
2892
3635
|
strokeLinejoin: "round"
|
|
2893
3636
|
}
|
|
2894
3637
|
) });
|
|
2895
|
-
var
|
|
3638
|
+
var ChevronRight6 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2896
3639
|
"path",
|
|
2897
3640
|
{
|
|
2898
3641
|
d: "M6 4l4 4-4 4",
|
|
@@ -2987,7 +3730,7 @@ var TripsCategorySection = react.forwardRef(
|
|
|
2987
3730
|
disabled: !canPrev,
|
|
2988
3731
|
"aria-label": "Previous trips",
|
|
2989
3732
|
className: cn(arrowBase4, "left-2"),
|
|
2990
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3733
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft6, {})
|
|
2991
3734
|
}
|
|
2992
3735
|
),
|
|
2993
3736
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3017,7 +3760,7 @@ var TripsCategorySection = react.forwardRef(
|
|
|
3017
3760
|
disabled: !canNext,
|
|
3018
3761
|
"aria-label": "Next trips",
|
|
3019
3762
|
className: cn(arrowBase4, "right-2"),
|
|
3020
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3763
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRight6, {})
|
|
3021
3764
|
}
|
|
3022
3765
|
),
|
|
3023
3766
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3347,9 +4090,24 @@ var layout = {
|
|
|
3347
4090
|
contentWidth: "760px",
|
|
3348
4091
|
mobileBreakpoint: "768px"
|
|
3349
4092
|
};
|
|
4093
|
+
var luxury = {
|
|
4094
|
+
colors: {
|
|
4095
|
+
gold: "#C5A059",
|
|
4096
|
+
goldStrong: "#A68411",
|
|
4097
|
+
goldLight: "#F3E5AB",
|
|
4098
|
+
goldSoft: "#E8D5B7",
|
|
4099
|
+
heading: "#9A7B4F",
|
|
4100
|
+
ink: "#0C060E",
|
|
4101
|
+
inkCard: "#1A1A1A",
|
|
4102
|
+
onDark: "#FFFDF9",
|
|
4103
|
+
text: "#2C2C2C"
|
|
4104
|
+
},
|
|
4105
|
+
font: 'var(--font-luxury-family, "Playfair Display"), Georgia, serif'
|
|
4106
|
+
};
|
|
3350
4107
|
var theme = {
|
|
3351
4108
|
...tokens,
|
|
3352
|
-
layout
|
|
4109
|
+
layout,
|
|
4110
|
+
luxury
|
|
3353
4111
|
};
|
|
3354
4112
|
|
|
3355
4113
|
exports.BottomNav = BottomNav;
|
|
@@ -3375,7 +4133,15 @@ exports.GalleryPhoto = GalleryPhoto;
|
|
|
3375
4133
|
exports.GallerySection = GallerySection;
|
|
3376
4134
|
exports.Hero = Hero;
|
|
3377
4135
|
exports.HomeHero = HomeHero;
|
|
4136
|
+
exports.ImageMarquee = ImageMarquee;
|
|
3378
4137
|
exports.LocationCard = LocationCard;
|
|
4138
|
+
exports.LuxuryCategoryNav = LuxuryCategoryNav;
|
|
4139
|
+
exports.LuxuryDestinationSection = LuxuryDestinationSection;
|
|
4140
|
+
exports.LuxuryHero = LuxuryHero;
|
|
4141
|
+
exports.LuxuryInquiryForm = LuxuryInquiryForm;
|
|
4142
|
+
exports.LuxuryIntro = LuxuryIntro;
|
|
4143
|
+
exports.LuxuryTestimonials = LuxuryTestimonials;
|
|
4144
|
+
exports.LuxuryTripCard = LuxuryTripCard;
|
|
3379
4145
|
exports.MonthTabs = MonthTabs;
|
|
3380
4146
|
exports.Navbar = Navbar;
|
|
3381
4147
|
exports.OfficesSection = OfficesSection;
|