keystone-design-bootstrap 1.0.47 → 1.0.49
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/{blog-post-CvRhU9ss.d.ts → blog-post-D7HFCDp1.d.ts} +2 -2
- package/dist/design_system/elements/index.d.ts +25 -1
- package/dist/design_system/elements/index.js +103 -3
- package/dist/design_system/elements/index.js.map +1 -1
- package/dist/design_system/sections/index.d.ts +64 -3
- package/dist/design_system/sections/index.js +1305 -458
- package/dist/design_system/sections/index.js.map +1 -1
- package/dist/form-BLZuTGkr.d.ts +137 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +1335 -487
- package/dist/index.js.map +1 -1
- package/dist/lib/server-api.d.ts +49 -4
- package/dist/lib/server-api.js +17 -0
- package/dist/lib/server-api.js.map +1 -1
- package/dist/photos-8jMeetqV.d.ts +47 -0
- package/dist/types/index.d.ts +6 -5
- package/dist/utils/photo-helpers.d.ts +6 -15
- package/dist/utils/photo-helpers.js +10 -1
- package/dist/utils/photo-helpers.js.map +1 -1
- package/package.json +1 -1
- package/src/design_system/elements/index.tsx +4 -0
- package/src/design_system/elements/modal/modal.tsx +129 -0
- package/src/design_system/sections/header-navigation.aman.tsx +3 -3
- package/src/design_system/sections/header-navigation.balance.tsx +2 -2
- package/src/design_system/sections/header-navigation.barelux.tsx +2 -2
- package/src/design_system/sections/index.tsx +20 -2
- package/src/design_system/sections/offer-detail.tsx +46 -0
- package/src/design_system/sections/offers-gallery.tsx +40 -0
- package/src/design_system/sections/offers-grid.tsx +108 -0
- package/src/design_system/sections/offers-section.tsx +90 -0
- package/src/design_system/sections/service-menu-section.tsx +813 -0
- package/src/lib/server-api.ts +63 -0
- package/src/types/api/photos.ts +11 -10
- package/src/types/api/service.ts +21 -0
- package/src/utils/photo-helpers.ts +3 -14
- package/dist/company-information-C_k_sLSB.d.ts +0 -46
- package/dist/form-CWXC-IHT.d.ts +0 -88
- package/dist/website-photos-_n2g24IM.d.ts +0 -20
package/dist/index.js
CHANGED
|
@@ -37,7 +37,7 @@ var __objRest = (source, exclude) => {
|
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
// src/design_system/sections/index.tsx
|
|
40
|
-
import
|
|
40
|
+
import React64 from "react";
|
|
41
41
|
|
|
42
42
|
// src/lib/component-registry.ts
|
|
43
43
|
var registry = /* @__PURE__ */ new Map();
|
|
@@ -97,10 +97,10 @@ function useTheme() {
|
|
|
97
97
|
|
|
98
98
|
// src/design_system/sections/hero-home.tsx
|
|
99
99
|
import { Fragment, useMemo as useMemo3, useState as useState5 } from "react";
|
|
100
|
-
import
|
|
100
|
+
import React15 from "react";
|
|
101
101
|
|
|
102
102
|
// src/design_system/elements/index.tsx
|
|
103
|
-
import
|
|
103
|
+
import React14 from "react";
|
|
104
104
|
|
|
105
105
|
// src/design_system/elements/buttons/button.tsx
|
|
106
106
|
import React2, { isValidElement } from "react";
|
|
@@ -3722,15 +3722,114 @@ function VideoPlayButton({ onClick, className = "" }) {
|
|
|
3722
3722
|
);
|
|
3723
3723
|
}
|
|
3724
3724
|
|
|
3725
|
+
// src/design_system/elements/modal/modal.tsx
|
|
3726
|
+
import React13, { useEffect as useEffect6, useRef as useRef4 } from "react";
|
|
3727
|
+
var MAX_WIDTH_CLASSES = {
|
|
3728
|
+
sm: "max-w-sm",
|
|
3729
|
+
md: "max-w-md",
|
|
3730
|
+
lg: "max-w-lg",
|
|
3731
|
+
xl: "max-w-xl",
|
|
3732
|
+
"2xl": "max-w-2xl",
|
|
3733
|
+
"3xl": "max-w-3xl",
|
|
3734
|
+
"4xl": "max-w-4xl",
|
|
3735
|
+
"5xl": "max-w-5xl"
|
|
3736
|
+
};
|
|
3737
|
+
function Modal({
|
|
3738
|
+
isOpen,
|
|
3739
|
+
onClose,
|
|
3740
|
+
title,
|
|
3741
|
+
titleId = "modal-title",
|
|
3742
|
+
children,
|
|
3743
|
+
overlayClassName,
|
|
3744
|
+
panelClassName,
|
|
3745
|
+
maxWidth = "md"
|
|
3746
|
+
}) {
|
|
3747
|
+
const overlayRef = useRef4(null);
|
|
3748
|
+
const closeButtonRef = useRef4(null);
|
|
3749
|
+
useEffect6(() => {
|
|
3750
|
+
var _a;
|
|
3751
|
+
if (!isOpen) return;
|
|
3752
|
+
const previouslyFocused = document.activeElement;
|
|
3753
|
+
(_a = closeButtonRef.current) == null ? void 0 : _a.focus();
|
|
3754
|
+
const handleEscape = (e) => {
|
|
3755
|
+
if (e.key === "Escape") onClose();
|
|
3756
|
+
};
|
|
3757
|
+
document.addEventListener("keydown", handleEscape);
|
|
3758
|
+
document.body.style.overflow = "hidden";
|
|
3759
|
+
return () => {
|
|
3760
|
+
document.removeEventListener("keydown", handleEscape);
|
|
3761
|
+
document.body.style.overflow = "";
|
|
3762
|
+
previouslyFocused == null ? void 0 : previouslyFocused.focus();
|
|
3763
|
+
};
|
|
3764
|
+
}, [isOpen, onClose]);
|
|
3765
|
+
if (!isOpen) return null;
|
|
3766
|
+
const maxWidthClass = MAX_WIDTH_CLASSES[maxWidth];
|
|
3767
|
+
return /* @__PURE__ */ React13.createElement(
|
|
3768
|
+
"div",
|
|
3769
|
+
{
|
|
3770
|
+
ref: overlayRef,
|
|
3771
|
+
className: overlayClassName != null ? overlayClassName : "fixed inset-0 z-[200] flex items-center justify-center p-4 bg-black/50",
|
|
3772
|
+
role: "dialog",
|
|
3773
|
+
"aria-modal": "true",
|
|
3774
|
+
"aria-labelledby": title ? titleId : void 0,
|
|
3775
|
+
onClick: (e) => e.target === overlayRef.current && onClose()
|
|
3776
|
+
},
|
|
3777
|
+
/* @__PURE__ */ React13.createElement(
|
|
3778
|
+
"div",
|
|
3779
|
+
{
|
|
3780
|
+
className: panelClassName != null ? panelClassName : `bg-primary border border-secondary rounded-lg shadow-xl w-full overflow-hidden ${maxWidthClass} max-h-[90vh] flex flex-col`,
|
|
3781
|
+
onClick: (e) => e.stopPropagation()
|
|
3782
|
+
},
|
|
3783
|
+
/* @__PURE__ */ React13.createElement("div", { className: "flex items-start justify-between gap-4 p-4 md:p-6 border-b border-secondary flex-shrink-0" }, title ? /* @__PURE__ */ React13.createElement(
|
|
3784
|
+
"h2",
|
|
3785
|
+
{
|
|
3786
|
+
id: titleId,
|
|
3787
|
+
className: "font-display text-lg font-normal text-fg-primary md:text-xl flex-1 min-w-0"
|
|
3788
|
+
},
|
|
3789
|
+
title
|
|
3790
|
+
) : /* @__PURE__ */ React13.createElement("span", { className: "flex-1", "aria-hidden": true }), /* @__PURE__ */ React13.createElement(
|
|
3791
|
+
"button",
|
|
3792
|
+
{
|
|
3793
|
+
ref: closeButtonRef,
|
|
3794
|
+
type: "button",
|
|
3795
|
+
onClick: onClose,
|
|
3796
|
+
className: "shrink-0 p-1 text-fg-primary hover:text-brand-accent rounded focus:outline-none focus:ring-2 focus:ring-brand-accent",
|
|
3797
|
+
"aria-label": "Close"
|
|
3798
|
+
},
|
|
3799
|
+
/* @__PURE__ */ React13.createElement(
|
|
3800
|
+
"svg",
|
|
3801
|
+
{
|
|
3802
|
+
className: "w-5 h-5",
|
|
3803
|
+
fill: "none",
|
|
3804
|
+
stroke: "currentColor",
|
|
3805
|
+
viewBox: "0 0 24 24",
|
|
3806
|
+
"aria-hidden": true
|
|
3807
|
+
},
|
|
3808
|
+
/* @__PURE__ */ React13.createElement(
|
|
3809
|
+
"path",
|
|
3810
|
+
{
|
|
3811
|
+
strokeLinecap: "round",
|
|
3812
|
+
strokeLinejoin: "round",
|
|
3813
|
+
strokeWidth: 2,
|
|
3814
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
3815
|
+
}
|
|
3816
|
+
)
|
|
3817
|
+
)
|
|
3818
|
+
)),
|
|
3819
|
+
/* @__PURE__ */ React13.createElement("div", { className: "overflow-y-auto flex-1 p-4 md:p-6" }, children)
|
|
3820
|
+
)
|
|
3821
|
+
);
|
|
3822
|
+
}
|
|
3823
|
+
|
|
3725
3824
|
// src/design_system/elements/index.tsx
|
|
3726
3825
|
function createThemedExport(componentName, BaseComponent) {
|
|
3727
3826
|
return function ThemedComponent(props) {
|
|
3728
3827
|
const { theme } = useTheme();
|
|
3729
3828
|
try {
|
|
3730
3829
|
const Component2 = getThemedComponent(componentName, theme);
|
|
3731
|
-
return
|
|
3830
|
+
return React14.createElement(Component2, props);
|
|
3732
3831
|
} catch (e) {
|
|
3733
|
-
return
|
|
3832
|
+
return React14.createElement(BaseComponent, props);
|
|
3734
3833
|
}
|
|
3735
3834
|
};
|
|
3736
3835
|
}
|
|
@@ -3805,13 +3904,13 @@ var AvatarsWithReview = ({
|
|
|
3805
3904
|
};
|
|
3806
3905
|
});
|
|
3807
3906
|
}, [stockPhotos]);
|
|
3808
|
-
return /* @__PURE__ */
|
|
3907
|
+
return /* @__PURE__ */ React15.createElement("div", { className: cx("flex items-center gap-4", className) }, /* @__PURE__ */ React15.createElement("div", { className: "inline-flex -space-x-3 overflow-hidden" }, avatarPhotos.map((avatar, index) => /* @__PURE__ */ React15.createElement(
|
|
3809
3908
|
"div",
|
|
3810
3909
|
{
|
|
3811
3910
|
key: index,
|
|
3812
3911
|
className: "inline-block size-10 rounded-full ring-[1.5px] ring-bg-primary outline-1 -outline-offset-1 outline-avatar-contrast-border overflow-hidden"
|
|
3813
3912
|
},
|
|
3814
|
-
/* @__PURE__ */
|
|
3913
|
+
/* @__PURE__ */ React15.createElement(
|
|
3815
3914
|
PhotoWithFallback2,
|
|
3816
3915
|
{
|
|
3817
3916
|
photoUrl: avatar.url,
|
|
@@ -3820,10 +3919,10 @@ var AvatarsWithReview = ({
|
|
|
3820
3919
|
className: "size-full object-cover"
|
|
3821
3920
|
}
|
|
3822
3921
|
)
|
|
3823
|
-
))), /* @__PURE__ */
|
|
3922
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-1" }, Array(5).fill(null).map((_, index) => {
|
|
3824
3923
|
const clipId0 = `clip0_star_${index}`;
|
|
3825
3924
|
const clipId1 = `clip1_star_${index}`;
|
|
3826
|
-
return /* @__PURE__ */
|
|
3925
|
+
return /* @__PURE__ */ React15.createElement(
|
|
3827
3926
|
"svg",
|
|
3828
3927
|
{
|
|
3829
3928
|
key: index,
|
|
@@ -3834,22 +3933,22 @@ var AvatarsWithReview = ({
|
|
|
3834
3933
|
className: "relative size-5 shrink-0 grow-0",
|
|
3835
3934
|
preserveAspectRatio: "none"
|
|
3836
3935
|
},
|
|
3837
|
-
/* @__PURE__ */
|
|
3936
|
+
/* @__PURE__ */ React15.createElement("g", { clipPath: `url(#${clipId0})` }, /* @__PURE__ */ React15.createElement(
|
|
3838
3937
|
"path",
|
|
3839
3938
|
{
|
|
3840
3939
|
d: "M9.53834 1.60996C9.70914 1.19932 10.2909 1.19932 10.4617 1.60996L12.5278 6.57744C12.5998 6.75056 12.7626 6.86885 12.9495 6.88383L18.3123 7.31376C18.7556 7.3493 18.9354 7.90256 18.5976 8.19189L14.5117 11.6919C14.3693 11.8139 14.3071 12.0053 14.3506 12.1876L15.5989 17.4208C15.7021 17.8534 15.2315 18.1954 14.8519 17.9635L10.2606 15.1592C10.1006 15.0615 9.89938 15.0615 9.73937 15.1592L5.14806 17.9635C4.76851 18.1954 4.29788 17.8534 4.40108 17.4208L5.64939 12.1876C5.69289 12.0053 5.6307 11.8139 5.48831 11.6919L1.40241 8.19189C1.06464 7.90256 1.24441 7.3493 1.68773 7.31376L7.05054 6.88383C7.23744 6.86885 7.40024 6.75056 7.47225 6.57744L9.53834 1.60996Z",
|
|
3841
3940
|
className: "fill-bg-tertiary"
|
|
3842
3941
|
}
|
|
3843
|
-
), /* @__PURE__ */
|
|
3942
|
+
), /* @__PURE__ */ React15.createElement("g", { clipPath: `url(#${clipId1})` }, /* @__PURE__ */ React15.createElement(
|
|
3844
3943
|
"path",
|
|
3845
3944
|
{
|
|
3846
3945
|
d: "M9.53834 1.60996C9.70914 1.19932 10.2909 1.19932 10.4617 1.60996L12.5278 6.57744C12.5998 6.75056 12.7626 6.86885 12.9495 6.88383L18.3123 7.31376C18.7556 7.3493 18.9354 7.90256 18.5976 8.19189L14.5117 11.6919C14.3693 11.8139 14.3071 12.0053 14.3506 12.1876L15.5989 17.4208C15.7021 17.8534 15.2315 18.1954 14.8519 17.9635L10.2606 15.1592C10.1006 15.0615 9.89938 15.0615 9.73937 15.1592L5.14806 17.9635C4.76851 18.1954 4.29788 17.8534 4.40108 17.4208L5.64939 12.1876C5.69289 12.0053 5.6307 11.8139 5.48831 11.6919L1.40241 8.19189C1.06464 7.90256 1.24441 7.3493 1.68773 7.31376L7.05054 6.88383C7.23744 6.86885 7.40024 6.75056 7.47225 6.57744L9.53834 1.60996Z",
|
|
3847
3946
|
className: "fill-warning-300"
|
|
3848
3947
|
}
|
|
3849
3948
|
))),
|
|
3850
|
-
/* @__PURE__ */
|
|
3949
|
+
/* @__PURE__ */ React15.createElement("defs", null, /* @__PURE__ */ React15.createElement("clipPath", { id: clipId0 }, /* @__PURE__ */ React15.createElement("rect", { width: 20, height: 20, fill: "white" })), /* @__PURE__ */ React15.createElement("clipPath", { id: clipId1 }, /* @__PURE__ */ React15.createElement("rect", { width: 20, height: 20, fill: "white" })))
|
|
3851
3950
|
);
|
|
3852
|
-
}))), /* @__PURE__ */
|
|
3951
|
+
}))), /* @__PURE__ */ React15.createElement("p", { className: "text-md font-medium text-tertiary" }, "from ", count, "+ reviews")));
|
|
3853
3952
|
};
|
|
3854
3953
|
var HeroHome = ({
|
|
3855
3954
|
websitePhotos,
|
|
@@ -3868,7 +3967,7 @@ var HeroHome = ({
|
|
|
3868
3967
|
alt: ((_b = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _b.alt) || "Hero image"
|
|
3869
3968
|
};
|
|
3870
3969
|
const stockPhotos = (websitePhotos == null ? void 0 : websitePhotos.stock_photos) || [];
|
|
3871
|
-
return /* @__PURE__ */
|
|
3970
|
+
return /* @__PURE__ */ React15.createElement(Fragment, null, /* @__PURE__ */ React15.createElement("section", { className: "bg-primary py-16 md:pb-24" }, /* @__PURE__ */ React15.createElement("div", { className: "mx-auto grid max-w-container grid-cols-1 items-center gap-16 px-4 md:px-8 lg:grid-cols-2 lg:gap-8" }, /* @__PURE__ */ React15.createElement("div", { className: "flex max-w-3xl flex-col items-start lg:pr-8" }, /* @__PURE__ */ React15.createElement("h1", { className: "text-display-md font-semibold text-primary md:text-display-lg lg:text-display-xl" }, headline || "Welcome"), /* @__PURE__ */ React15.createElement("p", { className: "mt-4 max-w-lg text-lg text-balance text-tertiary md:mt-6 md:text-xl" }, subhead || ""), email_signup && /* @__PURE__ */ React15.createElement(
|
|
3872
3971
|
Form2,
|
|
3873
3972
|
{
|
|
3874
3973
|
onSubmit: (e) => {
|
|
@@ -3881,7 +3980,7 @@ var HeroHome = ({
|
|
|
3881
3980
|
},
|
|
3882
3981
|
className: "mt-8 flex w-full flex-col items-stretch gap-4 md:mt-12 md:max-w-120 md:flex-row md:items-start"
|
|
3883
3982
|
},
|
|
3884
|
-
/* @__PURE__ */
|
|
3983
|
+
/* @__PURE__ */ React15.createElement(
|
|
3885
3984
|
Input3,
|
|
3886
3985
|
{
|
|
3887
3986
|
isRequired: true,
|
|
@@ -3890,7 +3989,7 @@ var HeroHome = ({
|
|
|
3890
3989
|
type: "email",
|
|
3891
3990
|
placeholder: email_signup.placeholder,
|
|
3892
3991
|
wrapperClassName: "py-0.5",
|
|
3893
|
-
hint: /* @__PURE__ */
|
|
3992
|
+
hint: /* @__PURE__ */ React15.createElement("span", null, "We care about your data in our", " ", /* @__PURE__ */ React15.createElement(
|
|
3894
3993
|
"a",
|
|
3895
3994
|
{
|
|
3896
3995
|
href: email_signup.privacy_policy_link,
|
|
@@ -3900,8 +3999,8 @@ var HeroHome = ({
|
|
|
3900
3999
|
), ".")
|
|
3901
4000
|
}
|
|
3902
4001
|
),
|
|
3903
|
-
/* @__PURE__ */
|
|
3904
|
-
), /* @__PURE__ */
|
|
4002
|
+
/* @__PURE__ */ React15.createElement(Button2, { type: "submit", color: "primary", size: "xl" }, email_signup.button_text)
|
|
4003
|
+
), /* @__PURE__ */ React15.createElement(
|
|
3905
4004
|
AvatarsWithReview,
|
|
3906
4005
|
{
|
|
3907
4006
|
count: reviews == null ? void 0 : reviews.count,
|
|
@@ -3910,11 +4009,11 @@ var HeroHome = ({
|
|
|
3910
4009
|
}
|
|
3911
4010
|
), (() => {
|
|
3912
4011
|
const statsToShow = statistics && statistics.length > 0 ? statistics.slice(0, 4) : [];
|
|
3913
|
-
return statsToShow.length > 0 && /* @__PURE__ */
|
|
4012
|
+
return statsToShow.length > 0 && /* @__PURE__ */ React15.createElement("dl", { className: "mt-8 grid grid-cols-2 gap-x-6 gap-y-4 md:mt-12" }, statsToShow.map((stat, index) => {
|
|
3914
4013
|
const IconComponent2 = mapIcon(stat.icon);
|
|
3915
|
-
return /* @__PURE__ */
|
|
4014
|
+
return /* @__PURE__ */ React15.createElement("div", { key: index, className: "flex flex-col gap-2" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, IconComponent2 && /* @__PURE__ */ React15.createElement("div", { className: "size-5 shrink-0" }, /* @__PURE__ */ React15.createElement(IconComponent2, { className: "w-full h-full" })), /* @__PURE__ */ React15.createElement("dd", { className: "text-lg font-semibold text-primary md:text-xl" }, stat.number)), /* @__PURE__ */ React15.createElement("dt", { className: "text-sm font-medium text-tertiary md:text-md" }, stat.label));
|
|
3916
4015
|
}));
|
|
3917
|
-
})()), /* @__PURE__ */
|
|
4016
|
+
})()), /* @__PURE__ */ React15.createElement("div", { className: "relative lg:h-full lg:min-h-160" }, /* @__PURE__ */ React15.createElement(
|
|
3918
4017
|
PhotoWithFallback2,
|
|
3919
4018
|
{
|
|
3920
4019
|
photoUrl: heroImage.url,
|
|
@@ -3922,7 +4021,7 @@ var HeroHome = ({
|
|
|
3922
4021
|
fallbackId: "hero-home-image",
|
|
3923
4022
|
className: "inset-0 h-70 w-full object-cover md:h-110 lg:absolute lg:h-full"
|
|
3924
4023
|
}
|
|
3925
|
-
), videoUrl && /* @__PURE__ */
|
|
4024
|
+
), videoUrl && /* @__PURE__ */ React15.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React15.createElement(VideoPlayButton, { onClick: () => setShowVideo(true) }))))), videoUrl && /* @__PURE__ */ React15.createElement(
|
|
3926
4025
|
VideoModal,
|
|
3927
4026
|
{
|
|
3928
4027
|
isOpen: showVideo,
|
|
@@ -4075,6 +4174,14 @@ var AboutHome = ({
|
|
|
4075
4174
|
};
|
|
4076
4175
|
|
|
4077
4176
|
// src/utils/photo-helpers.ts
|
|
4177
|
+
var VIDEO_EXTENSIONS = [".mp4", ".mov", ".webm", ".m4v", ".avi", ".mkv", ".flv", ".wmv"];
|
|
4178
|
+
function isVideoUrl(url) {
|
|
4179
|
+
var _a;
|
|
4180
|
+
if (!url || typeof url !== "string") return false;
|
|
4181
|
+
const path = (_a = url.split("?")[0]) != null ? _a : "";
|
|
4182
|
+
const ext = path.slice(path.lastIndexOf(".")).toLowerCase();
|
|
4183
|
+
return VIDEO_EXTENSIONS.includes(ext);
|
|
4184
|
+
}
|
|
4078
4185
|
function getPhotoUrl(photos) {
|
|
4079
4186
|
if (photos && photos.length > 0) {
|
|
4080
4187
|
const featuredPhoto = photos.find((pa) => pa.featured);
|
|
@@ -4134,21 +4241,21 @@ var TestimonialsHome = ({
|
|
|
4134
4241
|
};
|
|
4135
4242
|
|
|
4136
4243
|
// src/design_system/sections/testimonials-grid.tsx
|
|
4137
|
-
import
|
|
4244
|
+
import React16 from "react";
|
|
4138
4245
|
var TestimonialsGrid = ({
|
|
4139
4246
|
testimonials: testimonialsData,
|
|
4140
4247
|
title = "",
|
|
4141
4248
|
subtitle = ""
|
|
4142
4249
|
}) => {
|
|
4143
4250
|
const testimonials = Array.isArray(testimonialsData) ? testimonialsData : [];
|
|
4144
|
-
return /* @__PURE__ */
|
|
4251
|
+
return /* @__PURE__ */ React16.createElement("section", { className: "py-16 md:py-24" }, /* @__PURE__ */ React16.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React16.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React16.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React16.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), testimonials.length > 0 ? /* @__PURE__ */ React16.createElement("div", { className: "grid max-w-container grid-cols-1 gap-5 lg:grid-cols-3 lg:gap-6" }, testimonials.map((testimonial, index) => {
|
|
4145
4252
|
var _a;
|
|
4146
4253
|
const reviewerName = testimonial.reviewer_name || "Customer";
|
|
4147
4254
|
const quote = ((_a = testimonial.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
4148
4255
|
const username = `@${reviewerName.toLowerCase().replace(/\s+/g, "")}`;
|
|
4149
4256
|
const avatarUrl = getAvatarUrl(testimonial.photo_attachments, testimonial.id, reviewerName);
|
|
4150
4257
|
const rating = testimonial.rating || 5;
|
|
4151
|
-
return /* @__PURE__ */
|
|
4258
|
+
return /* @__PURE__ */ React16.createElement("div", { key: testimonial.id || index, className: "flex flex-col gap-6 rounded-2xl bg-secondary p-6 md:p-8" }, /* @__PURE__ */ React16.createElement("div", { className: "flex gap-0.5" }, Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ React16.createElement(
|
|
4152
4259
|
"svg",
|
|
4153
4260
|
{
|
|
4154
4261
|
key: i,
|
|
@@ -4158,8 +4265,8 @@ var TestimonialsGrid = ({
|
|
|
4158
4265
|
strokeWidth: 2,
|
|
4159
4266
|
viewBox: "0 0 24 24"
|
|
4160
4267
|
},
|
|
4161
|
-
/* @__PURE__ */
|
|
4162
|
-
))), /* @__PURE__ */
|
|
4268
|
+
/* @__PURE__ */ React16.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
|
|
4269
|
+
))), /* @__PURE__ */ React16.createElement("p", { className: "text-md text-primary" }, quote), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-3 mt-auto" }, /* @__PURE__ */ React16.createElement("div", { className: "size-12 shrink-0 overflow-hidden rounded-full" }, /* @__PURE__ */ React16.createElement(
|
|
4163
4270
|
PhotoWithFallback2,
|
|
4164
4271
|
{
|
|
4165
4272
|
photoUrl: avatarUrl,
|
|
@@ -4167,8 +4274,8 @@ var TestimonialsGrid = ({
|
|
|
4167
4274
|
fallbackId: `testimonial-${testimonial.id || index}`,
|
|
4168
4275
|
className: "size-full object-cover"
|
|
4169
4276
|
}
|
|
4170
|
-
)), /* @__PURE__ */
|
|
4171
|
-
})) : /* @__PURE__ */
|
|
4277
|
+
)), /* @__PURE__ */ React16.createElement("div", null, /* @__PURE__ */ React16.createElement("p", { className: "text-sm font-semibold text-primary" }, reviewerName), /* @__PURE__ */ React16.createElement("p", { className: "text-sm text-tertiary" }, username))));
|
|
4278
|
+
})) : /* @__PURE__ */ React16.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React16.createElement("p", { className: "text-gray-500" }, "No testimonials available"))));
|
|
4172
4279
|
};
|
|
4173
4280
|
|
|
4174
4281
|
// src/design_system/sections/faq-home.tsx
|
|
@@ -4259,12 +4366,12 @@ var FAQHome = ({
|
|
|
4259
4366
|
};
|
|
4260
4367
|
|
|
4261
4368
|
// src/design_system/sections/blog-section.tsx
|
|
4262
|
-
import
|
|
4369
|
+
import React17 from "react";
|
|
4263
4370
|
import Link from "next/link";
|
|
4264
4371
|
import { ArrowLeft as ArrowLeft2, ArrowRight as ArrowRight5, ArrowUpRight } from "@untitledui/icons";
|
|
4265
4372
|
|
|
4266
4373
|
// src/design_system/elements/carousel/carousel-base.tsx
|
|
4267
|
-
import { cloneElement as cloneElement3, createContext as createContext8, isValidElement as isValidElement12, useCallback as useCallback4, useContext as useContext9, useEffect as
|
|
4374
|
+
import { cloneElement as cloneElement3, createContext as createContext8, isValidElement as isValidElement12, useCallback as useCallback4, useContext as useContext9, useEffect as useEffect7, useRef as useRef5, useSyncExternalStore as useSyncExternalStore3 } from "react";
|
|
4268
4375
|
import useEmblaCarousel2 from "embla-carousel-react";
|
|
4269
4376
|
var CarouselContext2 = createContext8(null);
|
|
4270
4377
|
var useCarousel2 = () => {
|
|
@@ -4288,7 +4395,7 @@ var CarouselRoot2 = (_a) => {
|
|
|
4288
4395
|
}),
|
|
4289
4396
|
plugins
|
|
4290
4397
|
);
|
|
4291
|
-
const snapshotRef =
|
|
4398
|
+
const snapshotRef = useRef5(DEFAULT_SNAPSHOT2);
|
|
4292
4399
|
const getSnapshot = useCallback4(() => {
|
|
4293
4400
|
if (!api) {
|
|
4294
4401
|
return DEFAULT_SNAPSHOT2;
|
|
@@ -4340,7 +4447,7 @@ var CarouselRoot2 = (_a) => {
|
|
|
4340
4447
|
},
|
|
4341
4448
|
[scrollPrev, scrollNext]
|
|
4342
4449
|
);
|
|
4343
|
-
|
|
4450
|
+
useEffect7(() => {
|
|
4344
4451
|
if (!api || !setApi) return;
|
|
4345
4452
|
setApi(api);
|
|
4346
4453
|
}, [api, setApi]);
|
|
@@ -4465,7 +4572,7 @@ var BlogSection = ({
|
|
|
4465
4572
|
return "Recent";
|
|
4466
4573
|
}
|
|
4467
4574
|
};
|
|
4468
|
-
return /* @__PURE__ */
|
|
4575
|
+
return /* @__PURE__ */ React17.createElement("section", { className: `overflow-hidden ${backgroundColor} py-16 md:py-24` }, /* @__PURE__ */ React17.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col items-start justify-between lg:flex-row" }, /* @__PURE__ */ React17.createElement("div", { className: "max-w-3xl" }, /* @__PURE__ */ React17.createElement("p", { className: "text-sm font-semibold text-brand-secondary md:text-md" }, "Latest posts"), /* @__PURE__ */ React17.createElement("h2", { className: "mt-3 text-display-sm font-semibold text-primary md:text-display-md" }, title), /* @__PURE__ */ React17.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), showViewAll && /* @__PURE__ */ React17.createElement("div", { className: "hidden gap-3 lg:flex" }, /* @__PURE__ */ React17.createElement(Button2, { size: "xl", href: "/blog" }, "View all posts"))), postsArray.length > 0 ? /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
4469
4576
|
Carousel2.Root,
|
|
4470
4577
|
{
|
|
4471
4578
|
className: "mt-12 md:mt-16",
|
|
@@ -4473,11 +4580,11 @@ var BlogSection = ({
|
|
|
4473
4580
|
align: "start"
|
|
4474
4581
|
}
|
|
4475
4582
|
},
|
|
4476
|
-
/* @__PURE__ */
|
|
4583
|
+
/* @__PURE__ */ React17.createElement(Carousel2.Content, { overflowHidden: false, className: "gap-6 pr-4 md:gap-8 md:pr-8" }, postsArray.map((post, index) => {
|
|
4477
4584
|
var _a;
|
|
4478
4585
|
const author = Array.isArray(post.blog_post_authors) && post.blog_post_authors.length > 0 ? post.blog_post_authors[0] : null;
|
|
4479
4586
|
const excerpt = ((_a = post.excerpt_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
4480
|
-
return /* @__PURE__ */
|
|
4587
|
+
return /* @__PURE__ */ React17.createElement(Carousel2.Item, { key: post.id || index, className: "max-w-xs md:max-w-96" }, /* @__PURE__ */ React17.createElement("article", { className: cx("flex flex-col gap-4") }, /* @__PURE__ */ React17.createElement("div", { className: "relative" }, /* @__PURE__ */ React17.createElement("a", { href: `/blog/${post.slug || post.id}`, className: "w-full", tabIndex: -1 }, /* @__PURE__ */ React17.createElement(
|
|
4481
4588
|
PhotoWithFallback2,
|
|
4482
4589
|
{
|
|
4483
4590
|
item: post,
|
|
@@ -4485,48 +4592,50 @@ var BlogSection = ({
|
|
|
4485
4592
|
alt: post.title || "Blog post",
|
|
4486
4593
|
className: cx("aspect-[1.5] w-full object-cover")
|
|
4487
4594
|
}
|
|
4488
|
-
)), /* @__PURE__ */
|
|
4595
|
+
)), /* @__PURE__ */ React17.createElement("div", { className: "absolute inset-x-0 bottom-0 overflow-hidden bg-linear-to-b from-transparent to-black/40" }, /* @__PURE__ */ React17.createElement("div", { className: "relative flex items-start justify-between bg-alpha-white/30 p-4 backdrop-blur-md before:absolute before:inset-x-0 before:top-0 before:h-px before:bg-alpha-white/30 md:p-5" }, /* @__PURE__ */ React17.createElement("div", null, /* @__PURE__ */ React17.createElement(
|
|
4489
4596
|
"a",
|
|
4490
4597
|
{
|
|
4491
4598
|
href: (author == null ? void 0 : author.slug) ? `/blog/author/${author.slug}` : "/blog",
|
|
4492
4599
|
className: "block rounded-xs text-sm font-semibold text-white outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
4493
4600
|
},
|
|
4494
4601
|
(author == null ? void 0 : author.name) || "Author"
|
|
4495
|
-
), /* @__PURE__ */
|
|
4602
|
+
), /* @__PURE__ */ React17.createElement("time", { className: "block text-sm text-white" }, formatDate4(post.published_at || ""))), /* @__PURE__ */ React17.createElement(
|
|
4496
4603
|
Link,
|
|
4497
4604
|
{
|
|
4498
4605
|
href: "/blog",
|
|
4499
4606
|
className: "rounded-xs text-sm font-semibold text-white outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
4500
4607
|
},
|
|
4501
4608
|
"Blog"
|
|
4502
|
-
)))), /* @__PURE__ */
|
|
4609
|
+
)))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
4503
4610
|
"a",
|
|
4504
4611
|
{
|
|
4505
4612
|
href: `/blog/${post.slug || post.id}`,
|
|
4506
4613
|
className: "group/title flex justify-between gap-x-4 rounded-md text-lg font-semibold text-primary outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
4507
4614
|
},
|
|
4508
4615
|
post.title || "Untitled Post",
|
|
4509
|
-
/* @__PURE__ */
|
|
4616
|
+
/* @__PURE__ */ React17.createElement(
|
|
4510
4617
|
ArrowUpRight,
|
|
4511
4618
|
{
|
|
4512
4619
|
className: "mt-0.5 size-6 shrink-0 text-fg-quaternary transition duration-100 ease-linear group-hover/title:text-fg-quaternary_hover",
|
|
4513
4620
|
"aria-hidden": "true"
|
|
4514
4621
|
}
|
|
4515
4622
|
)
|
|
4516
|
-
), excerpt && /* @__PURE__ */
|
|
4623
|
+
), excerpt && /* @__PURE__ */ React17.createElement("p", { className: "line-clamp-2 text-md text-tertiary" }, excerpt))));
|
|
4517
4624
|
})),
|
|
4518
|
-
/* @__PURE__ */
|
|
4519
|
-
), showViewAll && /* @__PURE__ */
|
|
4625
|
+
/* @__PURE__ */ React17.createElement("div", { className: "mt-8 flex gap-4 md:gap-8" }, /* @__PURE__ */ React17.createElement(Carousel2.PrevTrigger, { asChild: true }, /* @__PURE__ */ React17.createElement(RoundButton2, { icon: ArrowLeft2 })), /* @__PURE__ */ React17.createElement(Carousel2.NextTrigger, { asChild: true }, /* @__PURE__ */ React17.createElement(RoundButton2, { icon: ArrowRight5 })))
|
|
4626
|
+
), showViewAll && /* @__PURE__ */ React17.createElement("div", { className: "mt-12 flex flex-col gap-3 lg:hidden" }, /* @__PURE__ */ React17.createElement(Button2, { size: "xl", href: "/blog" }, "View all posts"))) : /* @__PURE__ */ React17.createElement("div", { className: "mt-12 text-center md:mt-16" }, /* @__PURE__ */ React17.createElement("p", { className: "text-gray-500" }, "No blog posts available"))));
|
|
4520
4627
|
};
|
|
4521
4628
|
|
|
4522
4629
|
// src/design_system/sections/contact-section.tsx
|
|
4523
|
-
import
|
|
4630
|
+
import React21 from "react";
|
|
4524
4631
|
|
|
4525
4632
|
// src/design_system/sections/contact-section-form.tsx
|
|
4526
|
-
import
|
|
4633
|
+
import React20, { useRef as useRef6, useState as useState9 } from "react";
|
|
4527
4634
|
|
|
4528
4635
|
// src/design_system/components/DynamicFormFields.tsx
|
|
4529
|
-
import
|
|
4636
|
+
import React18, { useState as useState8 } from "react";
|
|
4637
|
+
import ReactMarkdown2 from "react-markdown";
|
|
4638
|
+
import remarkGfm2 from "remark-gfm";
|
|
4530
4639
|
|
|
4531
4640
|
// src/utils/countries.tsx
|
|
4532
4641
|
import Image6 from "next/image";
|
|
@@ -5898,12 +6007,53 @@ function allFieldsFlat(fields) {
|
|
|
5898
6007
|
}
|
|
5899
6008
|
return out;
|
|
5900
6009
|
}
|
|
5901
|
-
function renderField(field, index, showCountryCode, selectedCountryPhone, onCountryChange, phoneValues, setPhoneValues) {
|
|
5902
|
-
var _a, _b, _c, _d;
|
|
6010
|
+
function renderField(field, index, showCountryCode, selectedCountryPhone, onCountryChange, phoneValues, setPhoneValues, companyName, privacyPolicyUrl, termsOfServiceUrl) {
|
|
6011
|
+
var _a, _b, _c, _d, _e, _f;
|
|
5903
6012
|
const name = (_a = field.name) != null ? _a : `field-${index}`;
|
|
6013
|
+
const type = ((_b = field.type) != null ? _b : "text").toString().toLowerCase();
|
|
5904
6014
|
if (field.type === "hidden") {
|
|
5905
|
-
const val = (
|
|
5906
|
-
return /* @__PURE__ */
|
|
6015
|
+
const val = (_c = field.value) != null ? _c : "";
|
|
6016
|
+
return /* @__PURE__ */ React18.createElement("input", { key: name, type: "hidden", name, value: val });
|
|
6017
|
+
}
|
|
6018
|
+
if (type === "checkbox") {
|
|
6019
|
+
const labelRaw = (_d = field.label) != null ? _d : "";
|
|
6020
|
+
const companyNameClean = companyName.replace(/\*\*/g, "").trim();
|
|
6021
|
+
let labelWithCompany = companyNameClean ? labelRaw.replace(/\{\{company_name\}\}/gi, companyNameClean) : labelRaw;
|
|
6022
|
+
if (name === "tos_privacy_consent" && privacyPolicyUrl && termsOfServiceUrl) {
|
|
6023
|
+
labelWithCompany = labelWithCompany.replace(/\*\*Terms of Service\*\*/gi, `**[Terms of Service](${termsOfServiceUrl})**`).replace(/\*\*Privacy Policy\*\*/gi, `**[Privacy Policy](${privacyPolicyUrl})**`);
|
|
6024
|
+
}
|
|
6025
|
+
const id3 = `checkbox-${name}-${index}`;
|
|
6026
|
+
return /* @__PURE__ */ React18.createElement("div", { key: name, className: "flex items-start gap-3" }, /* @__PURE__ */ React18.createElement(
|
|
6027
|
+
"input",
|
|
6028
|
+
{
|
|
6029
|
+
type: "checkbox",
|
|
6030
|
+
id: id3,
|
|
6031
|
+
name,
|
|
6032
|
+
value: "on",
|
|
6033
|
+
required: Boolean(field.required),
|
|
6034
|
+
"aria-describedby": id3 ? `${id3}-desc` : void 0,
|
|
6035
|
+
className: "mt-1 h-4 w-4 shrink-0 rounded border-secondary focus:ring-focus-ring"
|
|
6036
|
+
}
|
|
6037
|
+
), /* @__PURE__ */ React18.createElement(
|
|
6038
|
+
"label",
|
|
6039
|
+
{
|
|
6040
|
+
id: id3 ? `${id3}-desc` : void 0,
|
|
6041
|
+
htmlFor: id3,
|
|
6042
|
+
className: "font-body text-sm text-tertiary [&_a]:underline [&_a]:outline-focus-ring [&_strong]:font-semibold"
|
|
6043
|
+
},
|
|
6044
|
+
/* @__PURE__ */ React18.createElement(
|
|
6045
|
+
ReactMarkdown2,
|
|
6046
|
+
{
|
|
6047
|
+
remarkPlugins: [remarkGfm2],
|
|
6048
|
+
components: {
|
|
6049
|
+
p: ({ children }) => /* @__PURE__ */ React18.createElement("span", null, children),
|
|
6050
|
+
strong: (props) => /* @__PURE__ */ React18.createElement("strong", __spreadValues({ className: "font-semibold" }, props)),
|
|
6051
|
+
a: (props) => /* @__PURE__ */ React18.createElement("a", __spreadProps(__spreadValues({}, props), { className: "underline outline-focus-ring focus-visible:outline-2 focus-visible:outline-offset-2" }))
|
|
6052
|
+
}
|
|
6053
|
+
},
|
|
6054
|
+
labelWithCompany
|
|
6055
|
+
)
|
|
6056
|
+
));
|
|
5907
6057
|
}
|
|
5908
6058
|
if (field.type === "tel" && showCountryCode) {
|
|
5909
6059
|
const countryOptions = countries_default.map((c) => ({
|
|
@@ -5912,22 +6062,22 @@ function renderField(field, index, showCountryCode, selectedCountryPhone, onCoun
|
|
|
5912
6062
|
}));
|
|
5913
6063
|
const country = countries_default.find((c) => c.code === selectedCountryPhone);
|
|
5914
6064
|
const nationalMask = getNationalMask(country);
|
|
5915
|
-
const value = (
|
|
5916
|
-
const placeholder = nationalMask ? nationalMask.replace(/#/g, "0") : (
|
|
6065
|
+
const value = (_e = phoneValues[name]) != null ? _e : "";
|
|
6066
|
+
const placeholder = nationalMask ? nationalMask.replace(/#/g, "0") : (_f = field.placeholder) != null ? _f : "";
|
|
5917
6067
|
const handlePhoneChange = (valueOrEvent) => {
|
|
5918
6068
|
const raw = typeof valueOrEvent === "string" ? valueOrEvent : valueOrEvent && typeof valueOrEvent === "object" && "target" in valueOrEvent && valueOrEvent.target && typeof valueOrEvent.target.value === "string" ? valueOrEvent.target.value : "";
|
|
5919
6069
|
const digits = raw.replace(/\D/g, "");
|
|
5920
6070
|
const formatted = nationalMask ? formatDigitsToMask(digits, nationalMask) : digits;
|
|
5921
6071
|
setPhoneValues((prev) => __spreadProps(__spreadValues({}, prev), { [name]: formatted }));
|
|
5922
6072
|
};
|
|
5923
|
-
return /* @__PURE__ */
|
|
6073
|
+
return /* @__PURE__ */ React18.createElement(
|
|
5924
6074
|
InputGroup2,
|
|
5925
6075
|
{
|
|
5926
6076
|
key: name,
|
|
5927
6077
|
label: field.label,
|
|
5928
6078
|
isRequired: Boolean(field.required),
|
|
5929
6079
|
size: "md",
|
|
5930
|
-
leadingAddon: /* @__PURE__ */
|
|
6080
|
+
leadingAddon: /* @__PURE__ */ React18.createElement(
|
|
5931
6081
|
NativeSelect2,
|
|
5932
6082
|
{
|
|
5933
6083
|
"aria-label": "Country code",
|
|
@@ -5937,7 +6087,7 @@ function renderField(field, index, showCountryCode, selectedCountryPhone, onCoun
|
|
|
5937
6087
|
}
|
|
5938
6088
|
)
|
|
5939
6089
|
},
|
|
5940
|
-
/* @__PURE__ */
|
|
6090
|
+
/* @__PURE__ */ React18.createElement(
|
|
5941
6091
|
InputBase3,
|
|
5942
6092
|
{
|
|
5943
6093
|
type: "tel",
|
|
@@ -5951,7 +6101,7 @@ function renderField(field, index, showCountryCode, selectedCountryPhone, onCoun
|
|
|
5951
6101
|
);
|
|
5952
6102
|
}
|
|
5953
6103
|
if (field.type === "textarea") {
|
|
5954
|
-
return /* @__PURE__ */
|
|
6104
|
+
return /* @__PURE__ */ React18.createElement(
|
|
5955
6105
|
Textarea,
|
|
5956
6106
|
{
|
|
5957
6107
|
key: name,
|
|
@@ -5964,7 +6114,7 @@ function renderField(field, index, showCountryCode, selectedCountryPhone, onCoun
|
|
|
5964
6114
|
);
|
|
5965
6115
|
}
|
|
5966
6116
|
const inputType = INPUT_TYPES.includes(field.type) ? field.type : "text";
|
|
5967
|
-
return /* @__PURE__ */
|
|
6117
|
+
return /* @__PURE__ */ React18.createElement(
|
|
5968
6118
|
Input3,
|
|
5969
6119
|
{
|
|
5970
6120
|
key: name,
|
|
@@ -5977,11 +6127,13 @@ function renderField(field, index, showCountryCode, selectedCountryPhone, onCoun
|
|
|
5977
6127
|
}
|
|
5978
6128
|
);
|
|
5979
6129
|
}
|
|
5980
|
-
function DynamicFormFields({ form, jobSlug }) {
|
|
6130
|
+
function DynamicFormFields({ form, jobSlug, privacyPolicyUrl, termsOfServiceUrl }) {
|
|
6131
|
+
var _a;
|
|
5981
6132
|
const [selectedCountryPhone, setSelectedCountryPhone] = useState8("US");
|
|
5982
6133
|
const [phoneValues, setPhoneValues] = useState8({});
|
|
5983
6134
|
const { settings } = form;
|
|
5984
6135
|
const fields = Array.isArray(form.fields) ? form.fields : [];
|
|
6136
|
+
const companyName = (_a = form.company_name) != null ? _a : "";
|
|
5985
6137
|
const handleCountryChange = (newCode) => {
|
|
5986
6138
|
setSelectedCountryPhone(newCode);
|
|
5987
6139
|
const country = countries_default.find((c) => c.code === newCode);
|
|
@@ -6002,24 +6154,40 @@ function DynamicFormFields({ form, jobSlug }) {
|
|
|
6002
6154
|
});
|
|
6003
6155
|
};
|
|
6004
6156
|
const showCountryCode = (settings == null ? void 0 : settings.show_country_code) !== false;
|
|
6005
|
-
const showPrivacyCheckbox = (settings == null ? void 0 : settings.show_privacy_checkbox) !== false;
|
|
6006
6157
|
const flat = allFieldsFlat(fields);
|
|
6007
6158
|
const hasPhoneField = flat.some((f) => f.type === "tel");
|
|
6008
|
-
|
|
6009
|
-
var
|
|
6159
|
+
const hasCheckboxFields = flat.some((f) => {
|
|
6160
|
+
var _a2;
|
|
6161
|
+
return ((_a2 = f.type) != null ? _a2 : "").toString().toLowerCase() === "checkbox";
|
|
6162
|
+
});
|
|
6163
|
+
const showPrivacyCheckbox = (settings == null ? void 0 : settings.show_privacy_checkbox) !== false && hasPhoneField && !hasCheckboxFields;
|
|
6164
|
+
const renderFieldWithProps = (item, i) => renderField(
|
|
6165
|
+
item,
|
|
6166
|
+
i,
|
|
6167
|
+
showCountryCode,
|
|
6168
|
+
selectedCountryPhone,
|
|
6169
|
+
handleCountryChange,
|
|
6170
|
+
phoneValues,
|
|
6171
|
+
setPhoneValues,
|
|
6172
|
+
companyName,
|
|
6173
|
+
privacyPolicyUrl,
|
|
6174
|
+
termsOfServiceUrl
|
|
6175
|
+
);
|
|
6176
|
+
return /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-6" }, fields.map((item, index) => {
|
|
6177
|
+
var _a2;
|
|
6010
6178
|
if (Array.isArray(item)) {
|
|
6011
6179
|
if (item.length === 0) return null;
|
|
6012
|
-
return /* @__PURE__ */
|
|
6180
|
+
return /* @__PURE__ */ React18.createElement(
|
|
6013
6181
|
"div",
|
|
6014
6182
|
{
|
|
6015
6183
|
key: `row-${index}`,
|
|
6016
6184
|
className: "flex flex-col gap-x-8 gap-y-6 md:flex-row"
|
|
6017
6185
|
},
|
|
6018
|
-
item.map((f, i) => /* @__PURE__ */
|
|
6186
|
+
item.map((f, i) => /* @__PURE__ */ React18.createElement("div", { key: f.name, className: "flex-1" }, renderFieldWithProps(f, i)))
|
|
6019
6187
|
);
|
|
6020
6188
|
}
|
|
6021
|
-
return /* @__PURE__ */
|
|
6022
|
-
}), jobSlug ? /* @__PURE__ */
|
|
6189
|
+
return /* @__PURE__ */ React18.createElement("div", { key: (_a2 = item.name) != null ? _a2 : `field-${index}` }, renderFieldWithProps(item, index));
|
|
6190
|
+
}), jobSlug ? /* @__PURE__ */ React18.createElement("input", { type: "hidden", name: "jobSlug", value: jobSlug }) : null, showPrivacyCheckbox && /* @__PURE__ */ React18.createElement(PrivacyCheckbox2, null));
|
|
6023
6191
|
}
|
|
6024
6192
|
|
|
6025
6193
|
// src/tracking/trackMetaLead.ts
|
|
@@ -6030,7 +6198,7 @@ function trackMetaLead(eventId) {
|
|
|
6030
6198
|
}
|
|
6031
6199
|
|
|
6032
6200
|
// src/next/contexts/form-definitions.tsx
|
|
6033
|
-
import
|
|
6201
|
+
import React19, { createContext as createContext9, useContext as useContext10 } from "react";
|
|
6034
6202
|
var FormDefinitionsContext = createContext9({
|
|
6035
6203
|
leadFormDefinition: null,
|
|
6036
6204
|
jobApplicationFormDefinition: null
|
|
@@ -6045,14 +6213,16 @@ var ContactSectionForm = ({
|
|
|
6045
6213
|
submitButtonText = "Send message",
|
|
6046
6214
|
successMessage = "Thank you for contacting us! We'll get back to you soon.",
|
|
6047
6215
|
thankYouMessage,
|
|
6048
|
-
onSuccess
|
|
6216
|
+
onSuccess,
|
|
6217
|
+
privacyPolicyUrl,
|
|
6218
|
+
termsOfServiceUrl
|
|
6049
6219
|
}) => {
|
|
6050
6220
|
const { leadFormDefinition } = useFormDefinitions();
|
|
6051
6221
|
const resolvedFormDefinition = formDefinition != null ? formDefinition : leadFormDefinition;
|
|
6052
6222
|
const [isSubmitting, setIsSubmitting] = useState9(false);
|
|
6053
6223
|
const [submitStatus, setSubmitStatus] = useState9("idle");
|
|
6054
6224
|
const [statusMessage, setStatusMessage] = useState9("");
|
|
6055
|
-
const formRef =
|
|
6225
|
+
const formRef = useRef6(null);
|
|
6056
6226
|
if (!resolvedFormDefinition || !Array.isArray(resolvedFormDefinition.fields) || resolvedFormDefinition.fields.length === 0) {
|
|
6057
6227
|
return null;
|
|
6058
6228
|
}
|
|
@@ -6065,7 +6235,8 @@ var ContactSectionForm = ({
|
|
|
6065
6235
|
const formData = new FormData(e.currentTarget);
|
|
6066
6236
|
const data = { formType: "lead" };
|
|
6067
6237
|
formData.forEach((value, key) => {
|
|
6068
|
-
if (key
|
|
6238
|
+
if (key.endsWith("_prefix")) return;
|
|
6239
|
+
if (typeof value === "string") data[key] = value;
|
|
6069
6240
|
});
|
|
6070
6241
|
try {
|
|
6071
6242
|
const response = await fetch("/api/form/", {
|
|
@@ -6091,7 +6262,14 @@ var ContactSectionForm = ({
|
|
|
6091
6262
|
}
|
|
6092
6263
|
setIsSubmitting(false);
|
|
6093
6264
|
};
|
|
6094
|
-
return /* @__PURE__ */
|
|
6265
|
+
return /* @__PURE__ */ React20.createElement(Form2, { ref: formRef, onSubmit: handleSubmit, className: "flex flex-col gap-8" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React20.createElement(
|
|
6266
|
+
DynamicFormFields,
|
|
6267
|
+
{
|
|
6268
|
+
form: resolvedFormDefinition,
|
|
6269
|
+
privacyPolicyUrl,
|
|
6270
|
+
termsOfServiceUrl
|
|
6271
|
+
}
|
|
6272
|
+
)), submitStatus === "success" && /* @__PURE__ */ React20.createElement("div", { className: "rounded-lg bg-success-50 p-4 text-success-700" }, thankYouMessage != null ? thankYouMessage : statusMessage), submitStatus === "error" && /* @__PURE__ */ React20.createElement("div", { className: "rounded-lg bg-error-50 p-4 text-error-700" }, statusMessage), /* @__PURE__ */ React20.createElement(
|
|
6095
6273
|
Button2,
|
|
6096
6274
|
{
|
|
6097
6275
|
type: "submit",
|
|
@@ -6104,17 +6282,34 @@ var ContactSectionForm = ({
|
|
|
6104
6282
|
};
|
|
6105
6283
|
|
|
6106
6284
|
// src/design_system/sections/contact-section.tsx
|
|
6285
|
+
function getLegalUrlsFromConfig(config) {
|
|
6286
|
+
var _a, _b, _c;
|
|
6287
|
+
if (!((_a = config == null ? void 0 : config.navigation) == null ? void 0 : _a.footer)) return {};
|
|
6288
|
+
const flat = config.navigation.footer.flat();
|
|
6289
|
+
const privacy = (_b = flat.find((l) => l.label === "Privacy Policy")) == null ? void 0 : _b.href;
|
|
6290
|
+
const terms = (_c = flat.find((l) => l.label === "Terms of Service")) == null ? void 0 : _c.href;
|
|
6291
|
+
return { privacyPolicyUrl: privacy, termsOfServiceUrl: terms };
|
|
6292
|
+
}
|
|
6107
6293
|
var ContactSection = ({
|
|
6108
6294
|
websitePhotos,
|
|
6109
6295
|
title = "",
|
|
6110
6296
|
subtitle = "",
|
|
6111
|
-
formDefinition
|
|
6297
|
+
formDefinition,
|
|
6298
|
+
config
|
|
6112
6299
|
}) => {
|
|
6300
|
+
const { privacyPolicyUrl, termsOfServiceUrl } = getLegalUrlsFromConfig(config);
|
|
6113
6301
|
const contactPhoto = websitePhotos == null ? void 0 : websitePhotos.contact;
|
|
6114
6302
|
const contactImageUrl = contactPhoto == null ? void 0 : contactPhoto.url;
|
|
6115
6303
|
const finalContactImage = contactImageUrl && contactImageUrl.trim() !== "" ? contactImageUrl : void 0;
|
|
6116
6304
|
const finalContactImageAlt = (contactPhoto == null ? void 0 : contactPhoto.alt) || "Contact image";
|
|
6117
|
-
return /* @__PURE__ */
|
|
6305
|
+
return /* @__PURE__ */ React21.createElement("section", { className: "bg-primary py-16 md:pt-16 md:pb-24" }, /* @__PURE__ */ React21.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React21.createElement("div", { className: "grid grid-cols-1 gap-12 md:gap-16 lg:grid-cols-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex w-full flex-col gap-12" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React21.createElement("h2", { className: "text-display-md font-semibold text-primary" }, title), subtitle && /* @__PURE__ */ React21.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), /* @__PURE__ */ React21.createElement(
|
|
6306
|
+
ContactSectionForm,
|
|
6307
|
+
{
|
|
6308
|
+
formDefinition,
|
|
6309
|
+
privacyPolicyUrl,
|
|
6310
|
+
termsOfServiceUrl
|
|
6311
|
+
}
|
|
6312
|
+
)), /* @__PURE__ */ React21.createElement("div", { className: "max-lg:hidden h-full min-h-0" }, /* @__PURE__ */ React21.createElement(
|
|
6118
6313
|
PhotoWithFallback2,
|
|
6119
6314
|
{
|
|
6120
6315
|
photoUrl: finalContactImage,
|
|
@@ -6219,7 +6414,7 @@ var FooterHome = ({
|
|
|
6219
6414
|
};
|
|
6220
6415
|
|
|
6221
6416
|
// src/design_system/sections/header-navigation.tsx
|
|
6222
|
-
import
|
|
6417
|
+
import React22, { useRef as useRef7, useState as useState10 } from "react";
|
|
6223
6418
|
import Link4 from "next/link";
|
|
6224
6419
|
import Image8 from "next/image";
|
|
6225
6420
|
import { ChevronDown as ChevronDown4 } from "@untitledui/icons";
|
|
@@ -6289,7 +6484,7 @@ function resolveCtaUrls(companyInformation, _ctaButton, overrides) {
|
|
|
6289
6484
|
var MobileNavItem = ({ label, href, children, onClose }) => {
|
|
6290
6485
|
const [isOpen, setIsOpen] = useState10(false);
|
|
6291
6486
|
if (href) {
|
|
6292
|
-
return /* @__PURE__ */
|
|
6487
|
+
return /* @__PURE__ */ React22.createElement("li", null, /* @__PURE__ */ React22.createElement(
|
|
6293
6488
|
Link4,
|
|
6294
6489
|
{
|
|
6295
6490
|
href,
|
|
@@ -6299,7 +6494,7 @@ var MobileNavItem = ({ label, href, children, onClose }) => {
|
|
|
6299
6494
|
label
|
|
6300
6495
|
));
|
|
6301
6496
|
}
|
|
6302
|
-
return /* @__PURE__ */
|
|
6497
|
+
return /* @__PURE__ */ React22.createElement("li", { className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React22.createElement(
|
|
6303
6498
|
"button",
|
|
6304
6499
|
{
|
|
6305
6500
|
"aria-expanded": isOpen,
|
|
@@ -6307,13 +6502,13 @@ var MobileNavItem = ({ label, href, children, onClose }) => {
|
|
|
6307
6502
|
className: "flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-primary hover:bg-primary_hover"
|
|
6308
6503
|
},
|
|
6309
6504
|
label,
|
|
6310
|
-
/* @__PURE__ */
|
|
6505
|
+
/* @__PURE__ */ React22.createElement(
|
|
6311
6506
|
ChevronDown4,
|
|
6312
6507
|
{
|
|
6313
6508
|
className: cx("size-4 stroke-[2.625px] text-fg-quaternary transition duration-100 ease-linear", isOpen ? "-rotate-180" : "rotate-0")
|
|
6314
6509
|
}
|
|
6315
6510
|
)
|
|
6316
|
-
), isOpen && /* @__PURE__ */
|
|
6511
|
+
), isOpen && /* @__PURE__ */ React22.createElement("div", null, children));
|
|
6317
6512
|
};
|
|
6318
6513
|
function HeaderNavigation({
|
|
6319
6514
|
variant = "standard",
|
|
@@ -6326,7 +6521,7 @@ function HeaderNavigation({
|
|
|
6326
6521
|
websitePhotos
|
|
6327
6522
|
}) {
|
|
6328
6523
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
6329
|
-
const headerRef =
|
|
6524
|
+
const headerRef = useRef7(null);
|
|
6330
6525
|
const navigation = navigationOverride || ((_a = config == null ? void 0 : config.navigation) == null ? void 0 : _a.header) || [];
|
|
6331
6526
|
const logoImage = logoImageOverride || getLogoUrl(websitePhotos) || ((_b = props == null ? void 0 : props.logo) == null ? void 0 : _b.image);
|
|
6332
6527
|
const logoText = logoTextOverride || (companyInformation == null ? void 0 : companyInformation.company_name) || ((_c = props == null ? void 0 : props.logo) == null ? void 0 : _c.text) || "";
|
|
@@ -6354,7 +6549,7 @@ function HeaderNavigation({
|
|
|
6354
6549
|
};
|
|
6355
6550
|
const HoverDropdown = ({ label, href, children }) => {
|
|
6356
6551
|
const [isOpen, setIsOpen] = useState10(false);
|
|
6357
|
-
const timeoutRef =
|
|
6552
|
+
const timeoutRef = React22.useRef(null);
|
|
6358
6553
|
const handleMouseEnter = () => {
|
|
6359
6554
|
if (timeoutRef.current) {
|
|
6360
6555
|
clearTimeout(timeoutRef.current);
|
|
@@ -6368,37 +6563,37 @@ function HeaderNavigation({
|
|
|
6368
6563
|
}, 100);
|
|
6369
6564
|
timeoutRef.current = id3;
|
|
6370
6565
|
};
|
|
6371
|
-
|
|
6566
|
+
React22.useEffect(() => {
|
|
6372
6567
|
return () => {
|
|
6373
6568
|
if (timeoutRef.current) {
|
|
6374
6569
|
clearTimeout(timeoutRef.current);
|
|
6375
6570
|
}
|
|
6376
6571
|
};
|
|
6377
6572
|
}, []);
|
|
6378
|
-
return /* @__PURE__ */
|
|
6573
|
+
return /* @__PURE__ */ React22.createElement(
|
|
6379
6574
|
"div",
|
|
6380
6575
|
{
|
|
6381
6576
|
className: "relative",
|
|
6382
6577
|
onMouseEnter: handleMouseEnter,
|
|
6383
6578
|
onMouseLeave: handleMouseLeave
|
|
6384
6579
|
},
|
|
6385
|
-
/* @__PURE__ */
|
|
6580
|
+
/* @__PURE__ */ React22.createElement(
|
|
6386
6581
|
Link4,
|
|
6387
6582
|
{
|
|
6388
6583
|
href: href || "#",
|
|
6389
6584
|
className: "flex cursor-pointer items-center gap-0.5 rounded-lg px-1.5 py-1 text-sm font-medium text-secondary outline-focus-ring transition duration-100 ease-linear hover:text-secondary_hover focus-visible:outline-2 focus-visible:outline-offset-2"
|
|
6390
6585
|
},
|
|
6391
|
-
/* @__PURE__ */
|
|
6392
|
-
/* @__PURE__ */
|
|
6586
|
+
/* @__PURE__ */ React22.createElement("span", { className: "px-0.5" }, label),
|
|
6587
|
+
/* @__PURE__ */ React22.createElement(ChevronDown4, { className: cx("size-4 stroke-[2.625px] text-fg-quaternary transition duration-100 ease-linear", isOpen ? "-rotate-180" : "rotate-0") })
|
|
6393
6588
|
),
|
|
6394
|
-
isOpen && /* @__PURE__ */
|
|
6589
|
+
isOpen && /* @__PURE__ */ React22.createElement(
|
|
6395
6590
|
"div",
|
|
6396
6591
|
{
|
|
6397
6592
|
className: "absolute top-full left-0 z-50 mt-1 origin-top animate-in fade-in slide-in-from-top-1 duration-75 ease-out",
|
|
6398
6593
|
onMouseEnter: handleMouseEnter,
|
|
6399
6594
|
onMouseLeave: handleMouseLeave
|
|
6400
6595
|
},
|
|
6401
|
-
/* @__PURE__ */
|
|
6596
|
+
/* @__PURE__ */ React22.createElement("div", { className: "w-max max-w-sm" }, children)
|
|
6402
6597
|
)
|
|
6403
6598
|
);
|
|
6404
6599
|
};
|
|
@@ -6407,7 +6602,7 @@ function HeaderNavigation({
|
|
|
6407
6602
|
return {
|
|
6408
6603
|
label: navItem.label,
|
|
6409
6604
|
href: navItem.href,
|
|
6410
|
-
menu: /* @__PURE__ */
|
|
6605
|
+
menu: /* @__PURE__ */ React22.createElement(
|
|
6411
6606
|
GenericHeaderComponent,
|
|
6412
6607
|
{
|
|
6413
6608
|
items: navItem.children.map((child) => ({
|
|
@@ -6424,7 +6619,7 @@ function HeaderNavigation({
|
|
|
6424
6619
|
href: navItem.href
|
|
6425
6620
|
};
|
|
6426
6621
|
});
|
|
6427
|
-
return /* @__PURE__ */
|
|
6622
|
+
return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
|
|
6428
6623
|
"header",
|
|
6429
6624
|
{
|
|
6430
6625
|
ref: headerRef,
|
|
@@ -6433,7 +6628,7 @@ function HeaderNavigation({
|
|
|
6433
6628
|
getVariantClasses()
|
|
6434
6629
|
)
|
|
6435
6630
|
},
|
|
6436
|
-
/* @__PURE__ */
|
|
6631
|
+
/* @__PURE__ */ React22.createElement("div", { className: "flex size-full max-w-container flex-1 items-center pr-3 pl-4 md:px-8" }, /* @__PURE__ */ React22.createElement("div", { className: "flex w-full justify-between gap-4" }, /* @__PURE__ */ React22.createElement("div", { className: "flex flex-1 items-center gap-5" }, /* @__PURE__ */ React22.createElement(Link4, { href: (logo == null ? void 0 : logo.href) || "/", className: "flex items-center space-x-2" }, logoImage ? /* @__PURE__ */ React22.createElement(
|
|
6437
6632
|
Image8,
|
|
6438
6633
|
{
|
|
6439
6634
|
src: logoImage,
|
|
@@ -6442,14 +6637,14 @@ function HeaderNavigation({
|
|
|
6442
6637
|
width: 32,
|
|
6443
6638
|
height: 32
|
|
6444
6639
|
}
|
|
6445
|
-
) : /* @__PURE__ */
|
|
6640
|
+
) : /* @__PURE__ */ React22.createElement("div", { className: "h-8 w-8 bg-blue-600 rounded-lg flex items-center justify-center" }, /* @__PURE__ */ React22.createElement("span", { className: "text-white font-bold text-lg" }, ((_e = logoText == null ? void 0 : logoText.charAt(0)) == null ? void 0 : _e.toUpperCase()) || "")), /* @__PURE__ */ React22.createElement("span", { className: "text-xl font-bold text-primary hidden md:block" }, logoText)), /* @__PURE__ */ React22.createElement("nav", { className: "max-md:hidden" }, /* @__PURE__ */ React22.createElement("ul", { className: "flex items-center gap-0.5" }, headerNavItems.map((navItem) => /* @__PURE__ */ React22.createElement("li", { key: navItem.label }, navItem.menu ? /* @__PURE__ */ React22.createElement(HoverDropdown, { label: navItem.label, href: navItem.href }, navItem.menu) : /* @__PURE__ */ React22.createElement(
|
|
6446
6641
|
Link4,
|
|
6447
6642
|
{
|
|
6448
6643
|
href: navItem.href || "#",
|
|
6449
6644
|
className: "flex cursor-pointer items-center gap-0.5 rounded-lg px-1.5 py-1 text-sm font-medium text-secondary outline-focus-ring transition duration-100 ease-linear hover:text-secondary_hover focus:outline-offset-2 focus-visible:outline-2"
|
|
6450
6645
|
},
|
|
6451
|
-
/* @__PURE__ */
|
|
6452
|
-
)))))), /* @__PURE__ */
|
|
6646
|
+
/* @__PURE__ */ React22.createElement("span", { className: "px-0.5" }, navItem.label)
|
|
6647
|
+
)))))), /* @__PURE__ */ React22.createElement("div", { className: "hidden items-center gap-3 md:flex" }, (cta_button == null ? void 0 : cta_button.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React22.createElement(
|
|
6453
6648
|
Button2,
|
|
6454
6649
|
{
|
|
6455
6650
|
href: ctaUrls.secondaryHref,
|
|
@@ -6459,7 +6654,7 @@ function HeaderNavigation({
|
|
|
6459
6654
|
size: "lg"
|
|
6460
6655
|
},
|
|
6461
6656
|
cta_button.label
|
|
6462
|
-
), /* @__PURE__ */
|
|
6657
|
+
), /* @__PURE__ */ React22.createElement(
|
|
6463
6658
|
Button2,
|
|
6464
6659
|
{
|
|
6465
6660
|
href: ctaUrls.primaryHref,
|
|
@@ -6469,7 +6664,7 @@ function HeaderNavigation({
|
|
|
6469
6664
|
size: "lg"
|
|
6470
6665
|
},
|
|
6471
6666
|
(cta_button == null ? void 0 : cta_button.secondary_label) && ctaUrls.hasSecondary ? cta_button.secondary_label : (cta_button == null ? void 0 : cta_button.label) || "Get Started"
|
|
6472
|
-
)), /* @__PURE__ */
|
|
6667
|
+
)), /* @__PURE__ */ React22.createElement(AriaDialogTrigger, null, /* @__PURE__ */ React22.createElement(
|
|
6473
6668
|
AriaButton8,
|
|
6474
6669
|
{
|
|
6475
6670
|
"aria-label": "Toggle navigation menu",
|
|
@@ -6479,7 +6674,7 @@ function HeaderNavigation({
|
|
|
6479
6674
|
isFocusVisible && "outline-2 outline-offset-2 outline-focus-ring"
|
|
6480
6675
|
)
|
|
6481
6676
|
},
|
|
6482
|
-
/* @__PURE__ */
|
|
6677
|
+
/* @__PURE__ */ React22.createElement("svg", { "aria-hidden": "true", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ React22.createElement(
|
|
6483
6678
|
"path",
|
|
6484
6679
|
{
|
|
6485
6680
|
className: "hidden text-secondary group-aria-expanded:block",
|
|
@@ -6489,7 +6684,7 @@ function HeaderNavigation({
|
|
|
6489
6684
|
strokeLinecap: "round",
|
|
6490
6685
|
strokeLinejoin: "round"
|
|
6491
6686
|
}
|
|
6492
|
-
), /* @__PURE__ */
|
|
6687
|
+
), /* @__PURE__ */ React22.createElement(
|
|
6493
6688
|
"path",
|
|
6494
6689
|
{
|
|
6495
6690
|
className: "text-secondary group-aria-expanded:hidden",
|
|
@@ -6500,7 +6695,7 @@ function HeaderNavigation({
|
|
|
6500
6695
|
strokeLinejoin: "round"
|
|
6501
6696
|
}
|
|
6502
6697
|
))
|
|
6503
|
-
), /* @__PURE__ */
|
|
6698
|
+
), /* @__PURE__ */ React22.createElement(
|
|
6504
6699
|
AriaPopover3,
|
|
6505
6700
|
{
|
|
6506
6701
|
triggerRef: headerRef,
|
|
@@ -6510,15 +6705,15 @@ function HeaderNavigation({
|
|
|
6510
6705
|
containerPadding: 0,
|
|
6511
6706
|
placement: "bottom left"
|
|
6512
6707
|
},
|
|
6513
|
-
/* @__PURE__ */
|
|
6514
|
-
(navItem) => navItem.menu ? /* @__PURE__ */
|
|
6708
|
+
/* @__PURE__ */ React22.createElement(AriaDialog, { className: "outline-hidden" }, /* @__PURE__ */ React22.createElement("nav", { className: "w-full bg-primary shadow-lg" }, /* @__PURE__ */ React22.createElement("ul", { className: "flex flex-col gap-0.5 py-5" }, headerNavItems.map(
|
|
6709
|
+
(navItem) => navItem.menu ? /* @__PURE__ */ React22.createElement(
|
|
6515
6710
|
MobileNavItem,
|
|
6516
6711
|
{
|
|
6517
6712
|
key: navItem.label,
|
|
6518
6713
|
label: navItem.label
|
|
6519
6714
|
},
|
|
6520
6715
|
navItem.menu
|
|
6521
|
-
) : /* @__PURE__ */
|
|
6716
|
+
) : /* @__PURE__ */ React22.createElement(
|
|
6522
6717
|
MobileNavItem,
|
|
6523
6718
|
{
|
|
6524
6719
|
key: navItem.label,
|
|
@@ -6526,7 +6721,7 @@ function HeaderNavigation({
|
|
|
6526
6721
|
href: navItem.href
|
|
6527
6722
|
}
|
|
6528
6723
|
)
|
|
6529
|
-
)), /* @__PURE__ */
|
|
6724
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-3 border-t border-secondary px-4 py-6" }, (cta_button == null ? void 0 : cta_button.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React22.createElement(
|
|
6530
6725
|
Button2,
|
|
6531
6726
|
{
|
|
6532
6727
|
href: ctaUrls.secondaryHref,
|
|
@@ -6536,7 +6731,7 @@ function HeaderNavigation({
|
|
|
6536
6731
|
size: "lg"
|
|
6537
6732
|
},
|
|
6538
6733
|
cta_button.label
|
|
6539
|
-
), /* @__PURE__ */
|
|
6734
|
+
), /* @__PURE__ */ React22.createElement(
|
|
6540
6735
|
Button2,
|
|
6541
6736
|
{
|
|
6542
6737
|
href: ctaUrls.primaryHref,
|
|
@@ -6548,7 +6743,7 @@ function HeaderNavigation({
|
|
|
6548
6743
|
(cta_button == null ? void 0 : cta_button.secondary_label) && ctaUrls.hasSecondary ? cta_button.secondary_label : (cta_button == null ? void 0 : cta_button.label) || "Get Started"
|
|
6549
6744
|
))))
|
|
6550
6745
|
))))
|
|
6551
|
-
), /* @__PURE__ */
|
|
6746
|
+
), /* @__PURE__ */ React22.createElement("div", { className: "fixed bottom-0 left-0 right-0 z-40 md:hidden bg-fg-primary" }, /* @__PURE__ */ React22.createElement("div", { className: "flex gap-0" }, (cta_button == null ? void 0 : cta_button.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React22.createElement(
|
|
6552
6747
|
Button2,
|
|
6553
6748
|
{
|
|
6554
6749
|
href: ctaUrls.secondaryHref,
|
|
@@ -6558,7 +6753,7 @@ function HeaderNavigation({
|
|
|
6558
6753
|
className: "flex-1 font-body text-sm uppercase tracking-wide py-4 rounded-none border-r border-white/20"
|
|
6559
6754
|
},
|
|
6560
6755
|
cta_button.label
|
|
6561
|
-
), /* @__PURE__ */
|
|
6756
|
+
), /* @__PURE__ */ React22.createElement(
|
|
6562
6757
|
Button2,
|
|
6563
6758
|
{
|
|
6564
6759
|
href: ctaUrls.primaryHref,
|
|
@@ -6591,7 +6786,7 @@ var StatisticsSection = ({
|
|
|
6591
6786
|
};
|
|
6592
6787
|
|
|
6593
6788
|
// src/design_system/sections/values-section.tsx
|
|
6594
|
-
import
|
|
6789
|
+
import React23 from "react";
|
|
6595
6790
|
var ValuesSection = ({
|
|
6596
6791
|
values = [],
|
|
6597
6792
|
label = "",
|
|
@@ -6602,16 +6797,16 @@ var ValuesSection = ({
|
|
|
6602
6797
|
className = ""
|
|
6603
6798
|
}) => {
|
|
6604
6799
|
const hasValues = values.length > 0;
|
|
6605
|
-
return /* @__PURE__ */
|
|
6800
|
+
return /* @__PURE__ */ React23.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React23.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React23.createElement("div", { className: "mx-auto flex w-full max-w-3xl flex-col items-center text-center" }, label && /* @__PURE__ */ React23.createElement("span", { className: "text-sm font-semibold text-brand-secondary md:text-md" }, label), title && /* @__PURE__ */ React23.createElement("h2", { className: `${label ? "mt-3" : ""} text-display-sm font-semibold text-primary md:text-display-md` }, title), subtitle && /* @__PURE__ */ React23.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle), description && !hasValues && /* @__PURE__ */ React23.createElement("p", { className: "mt-4 text-md text-tertiary md:mt-6 md:text-lg" }, description)), values.length > 0 ? /* @__PURE__ */ React23.createElement("div", { className: "mt-12 md:mt-16" }, (() => {
|
|
6606
6801
|
const anyIconMissing = values.some(
|
|
6607
6802
|
(value) => typeof value.icon === "string" && value.icon && !mapIcon(value.icon)
|
|
6608
6803
|
);
|
|
6609
6804
|
const useStarForAll = anyIconMissing;
|
|
6610
|
-
return /* @__PURE__ */
|
|
6805
|
+
return /* @__PURE__ */ React23.createElement("ul", { className: "grid w-full grid-cols-1 justify-items-center gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-16 lg:grid-cols-3" }, values.map((value, index) => {
|
|
6611
6806
|
const IconComponent2 = useStarForAll ? mapIcon("star") : mapIcon(value.icon) || mapIcon("star");
|
|
6612
6807
|
if (!IconComponent2) return null;
|
|
6613
|
-
const IconWrapper = ({ className: className2 }) => /* @__PURE__ */
|
|
6614
|
-
return /* @__PURE__ */
|
|
6808
|
+
const IconWrapper = ({ className: className2 }) => /* @__PURE__ */ React23.createElement("div", { className: className2 }, /* @__PURE__ */ React23.createElement(IconComponent2, { className: "w-full h-full" }));
|
|
6809
|
+
return /* @__PURE__ */ React23.createElement("li", { key: index }, /* @__PURE__ */ React23.createElement("div", { className: "flex max-w-sm flex-col items-center gap-4 text-center" }, /* @__PURE__ */ React23.createElement(
|
|
6615
6810
|
FeaturedIcon2,
|
|
6616
6811
|
{
|
|
6617
6812
|
icon: IconWrapper,
|
|
@@ -6620,7 +6815,7 @@ var ValuesSection = ({
|
|
|
6620
6815
|
theme: "modern",
|
|
6621
6816
|
className: "hidden md:inline-flex"
|
|
6622
6817
|
}
|
|
6623
|
-
), /* @__PURE__ */
|
|
6818
|
+
), /* @__PURE__ */ React23.createElement(
|
|
6624
6819
|
FeaturedIcon2,
|
|
6625
6820
|
{
|
|
6626
6821
|
icon: IconWrapper,
|
|
@@ -6629,13 +6824,13 @@ var ValuesSection = ({
|
|
|
6629
6824
|
theme: "modern",
|
|
6630
6825
|
className: "inline-flex md:hidden"
|
|
6631
6826
|
}
|
|
6632
|
-
), /* @__PURE__ */
|
|
6827
|
+
), /* @__PURE__ */ React23.createElement("div", null, /* @__PURE__ */ React23.createElement("h3", { className: "text-lg font-semibold text-primary" }, value.title), /* @__PURE__ */ React23.createElement("p", { className: "mt-1 text-md text-tertiary" }, value.description))));
|
|
6633
6828
|
}));
|
|
6634
6829
|
})()) : null));
|
|
6635
6830
|
};
|
|
6636
6831
|
|
|
6637
6832
|
// src/design_system/sections/team-grid.tsx
|
|
6638
|
-
import
|
|
6833
|
+
import React24 from "react";
|
|
6639
6834
|
var TeamGrid = ({
|
|
6640
6835
|
teamMembers: membersData,
|
|
6641
6836
|
title = "",
|
|
@@ -6646,10 +6841,10 @@ var TeamGrid = ({
|
|
|
6646
6841
|
}) => {
|
|
6647
6842
|
const members = Array.isArray(membersData) ? membersData : [];
|
|
6648
6843
|
const displayMembers = members.slice(0, maxMembers);
|
|
6649
|
-
return /* @__PURE__ */
|
|
6844
|
+
return /* @__PURE__ */ React24.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React24.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React24.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React24.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), displayMembers.length > 0 ? /* @__PURE__ */ React24.createElement("div", { className: "mt-12 md:mt-16" }, /* @__PURE__ */ React24.createElement("ul", { className: "grid w-full grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3 xl:grid-cols-4" }, displayMembers.map((member, index) => {
|
|
6650
6845
|
var _a;
|
|
6651
6846
|
const bio = ((_a = member.bio_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
6652
|
-
return /* @__PURE__ */
|
|
6847
|
+
return /* @__PURE__ */ React24.createElement("li", { key: member.id || index, className: "flex flex-col gap-5 md:gap-6" }, /* @__PURE__ */ React24.createElement(
|
|
6653
6848
|
PhotoWithFallback2,
|
|
6654
6849
|
{
|
|
6655
6850
|
item: member,
|
|
@@ -6657,15 +6852,15 @@ var TeamGrid = ({
|
|
|
6657
6852
|
alt: member.name || "Team member",
|
|
6658
6853
|
className: "h-78 w-full object-cover md:h-74 rounded-2xl"
|
|
6659
6854
|
}
|
|
6660
|
-
), /* @__PURE__ */
|
|
6661
|
-
}))) : /* @__PURE__ */
|
|
6855
|
+
), /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("h3", { className: "text-lg font-semibold text-primary md:text-xl" }, member.name), /* @__PURE__ */ React24.createElement("p", { className: "text-md text-brand-secondary md:mt-0.5 md:text-lg" }, member.position), bio && /* @__PURE__ */ React24.createElement("p", { className: "mt-4 text-md text-tertiary leading-relaxed" }, bio)));
|
|
6856
|
+
}))) : /* @__PURE__ */ React24.createElement("div", { className: "text-center mt-12" }, /* @__PURE__ */ React24.createElement("p", { className: "text-gray-500" }, "No team members available"))));
|
|
6662
6857
|
};
|
|
6663
6858
|
|
|
6664
6859
|
// src/design_system/sections/location-grid.tsx
|
|
6665
|
-
import
|
|
6860
|
+
import React25 from "react";
|
|
6666
6861
|
import { ArrowRight as ArrowRight6 } from "@untitledui/icons";
|
|
6667
|
-
var LocationIcon = ({ className }) => /* @__PURE__ */
|
|
6668
|
-
var PhoneIcon = ({ className }) => /* @__PURE__ */
|
|
6862
|
+
var LocationIcon = ({ className }) => /* @__PURE__ */ React25.createElement("svg", { className, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React25.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" }), /* @__PURE__ */ React25.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" }));
|
|
6863
|
+
var PhoneIcon = ({ className }) => /* @__PURE__ */ React25.createElement("svg", { className, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React25.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" }));
|
|
6669
6864
|
var LocationGrid = ({
|
|
6670
6865
|
locations: locationsData,
|
|
6671
6866
|
companyInformation,
|
|
@@ -6679,16 +6874,16 @@ var LocationGrid = ({
|
|
|
6679
6874
|
const locations = Array.isArray(locationsData) ? locationsData : [];
|
|
6680
6875
|
const resolved = companyInformation ? resolveCtaUrls(companyInformation) : null;
|
|
6681
6876
|
const primaryCtaHref = (_a = primaryCtaHrefOverride != null ? primaryCtaHrefOverride : resolved == null ? void 0 : resolved.primaryHref) != null ? _a : "/contact";
|
|
6682
|
-
return /* @__PURE__ */
|
|
6877
|
+
return /* @__PURE__ */ React25.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React25.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React25.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React25.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React25.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), locations.length > 0 ? /* @__PURE__ */ React25.createElement("ul", { className: "grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3" }, locations.map((location, index) => {
|
|
6683
6878
|
const fullAddress = `${location.address_line_1}${location.address_line_2 ? `, ${location.address_line_2}` : ""}, ${location.city}, ${location.state} ${location.zip_code}`.trim();
|
|
6684
|
-
return /* @__PURE__ */
|
|
6879
|
+
return /* @__PURE__ */ React25.createElement("li", { key: location.id || index, className: "flex flex-col gap-6 rounded-2xl bg-secondary p-6 ring-1 ring-secondary_alt md:p-8" }, /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React25.createElement("h3", { className: "text-lg font-semibold text-primary md:text-xl" }, location.name), fullAddress && /* @__PURE__ */ React25.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React25.createElement("div", { className: "size-5 shrink-0 mt-0.5 text-fg-quaternary" }, /* @__PURE__ */ React25.createElement(LocationIcon, { className: "w-full h-full" })), /* @__PURE__ */ React25.createElement("span", { className: "text-md text-tertiary" }, fullAddress)), location.phone && /* @__PURE__ */ React25.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React25.createElement("div", { className: "size-5 shrink-0 text-fg-quaternary" }, /* @__PURE__ */ React25.createElement(PhoneIcon, { className: "w-full h-full" })), /* @__PURE__ */ React25.createElement(
|
|
6685
6880
|
"a",
|
|
6686
6881
|
{
|
|
6687
6882
|
href: `tel:${location.phone}`,
|
|
6688
6883
|
className: "text-md text-tertiary hover:text-primary transition-colors"
|
|
6689
6884
|
},
|
|
6690
6885
|
location.phone
|
|
6691
|
-
))), /* @__PURE__ */
|
|
6886
|
+
))), /* @__PURE__ */ React25.createElement("div", { className: "flex flex-col gap-3 mt-auto" }, /* @__PURE__ */ React25.createElement(
|
|
6692
6887
|
Button2,
|
|
6693
6888
|
{
|
|
6694
6889
|
size: "lg",
|
|
@@ -6697,11 +6892,11 @@ var LocationGrid = ({
|
|
|
6697
6892
|
},
|
|
6698
6893
|
"View details"
|
|
6699
6894
|
)));
|
|
6700
|
-
})) : /* @__PURE__ */
|
|
6895
|
+
})) : /* @__PURE__ */ React25.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React25.createElement("div", { className: "text-gray-400 text-6xl mb-4" }, "\u{1F4CD}"), /* @__PURE__ */ React25.createElement("h3", { className: "text-xl font-semibold text-primary mb-2" }, "No Locations Available"), /* @__PURE__ */ React25.createElement("p", { className: "text-gray-600 mb-4" }, "We're working on adding our service locations."), /* @__PURE__ */ React25.createElement(Button2, { href: primaryCtaHref, target: isExternalCtaUrl(primaryCtaHref) ? "_blank" : void 0, rel: isExternalCtaUrl(primaryCtaHref) ? "noopener noreferrer" : void 0 }, "Contact Us"))));
|
|
6701
6896
|
};
|
|
6702
6897
|
|
|
6703
6898
|
// src/design_system/sections/location-details-section.tsx
|
|
6704
|
-
import
|
|
6899
|
+
import React26 from "react";
|
|
6705
6900
|
import { Mail01, MarkerPin02, Phone, Clock as Clock2 } from "@untitledui/icons";
|
|
6706
6901
|
var parseBusinessHours = (hours) => {
|
|
6707
6902
|
if (!hours) return [];
|
|
@@ -6751,7 +6946,7 @@ var LocationDetailsSection = ({
|
|
|
6751
6946
|
const showMap = true;
|
|
6752
6947
|
const fullAddress = `${location.address_line_1}${location.address_line_2 ? `, ${location.address_line_2}` : ""}, ${location.city}, ${location.state} ${location.zip_code}`.trim();
|
|
6753
6948
|
const businessHours = location.business_hours ? parseBusinessHours(location.business_hours) : [];
|
|
6754
|
-
return /* @__PURE__ */
|
|
6949
|
+
return /* @__PURE__ */ React26.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React26.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React26.createElement("div", { className: "flex w-full max-w-3xl flex-col" }, label && /* @__PURE__ */ React26.createElement("span", { className: "text-sm font-semibold text-brand-secondary md:text-md" }, label), title && /* @__PURE__ */ React26.createElement("h2", { className: "mt-3 text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React26.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), /* @__PURE__ */ React26.createElement("div", { className: "mt-12 grid grid-cols-1 items-start gap-12 md:mt-16 md:gap-16 lg:grid-cols-3" }, /* @__PURE__ */ React26.createElement("ul", { className: "col-span-1 grid w-full grid-cols-1 gap-x-8 gap-y-10 md:grid-cols-2 lg:grid-cols-1 lg:gap-y-12" }, location.address_line_1 && /* @__PURE__ */ React26.createElement("li", { className: "flex max-w-sm flex-col items-start gap-4 lg:flex-row" }, /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "hidden md:flex", size: "lg", icon: MarkerPin02, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "md:hidden", size: "md", icon: MarkerPin02, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement("div", { className: "lg:pt-2.5" }, /* @__PURE__ */ React26.createElement("h3", { className: "text-lg font-semibold text-primary" }, officeLabel), /* @__PURE__ */ React26.createElement("p", { className: "mt-1 text-md text-tertiary" }, officeDescription), /* @__PURE__ */ React26.createElement(
|
|
6755
6950
|
Button2,
|
|
6756
6951
|
{
|
|
6757
6952
|
href: `https://maps.google.com/?q=${encodeURIComponent(fullAddress)}`,
|
|
@@ -6764,7 +6959,7 @@ var LocationDetailsSection = ({
|
|
|
6764
6959
|
${location.address_line_2}` : "",
|
|
6765
6960
|
`
|
|
6766
6961
|
${location.city}, ${location.state} ${location.zip_code}`
|
|
6767
|
-
))), location.phone && /* @__PURE__ */
|
|
6962
|
+
))), location.phone && /* @__PURE__ */ React26.createElement("li", { className: "flex max-w-sm flex-col items-start gap-4 lg:flex-row" }, /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "hidden md:flex", size: "lg", icon: Phone, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "md:hidden", size: "md", icon: Phone, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement("div", { className: "lg:pt-2.5" }, /* @__PURE__ */ React26.createElement("h3", { className: "text-lg font-semibold text-primary" }, phoneLabel), /* @__PURE__ */ React26.createElement("p", { className: "mt-1 text-md text-tertiary" }, phoneDescription), /* @__PURE__ */ React26.createElement(Button2, { href: `tel:${location.phone}`, color: "link-color", size: "lg", className: "mt-4 lg:mt-5" }, location.phone))), location.email && /* @__PURE__ */ React26.createElement("li", { className: "flex max-w-sm flex-col items-start gap-4 lg:flex-row" }, /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "hidden md:flex", size: "lg", icon: Mail01, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "md:hidden", size: "md", icon: Mail01, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement("div", { className: "lg:pt-2.5" }, /* @__PURE__ */ React26.createElement("h3", { className: "text-lg font-semibold text-primary" }, emailLabel), /* @__PURE__ */ React26.createElement("p", { className: "mt-1 text-md text-tertiary" }, emailDescription), /* @__PURE__ */ React26.createElement(Button2, { href: `mailto:${location.email}`, color: "link-color", size: "lg", className: "mt-4 lg:mt-5" }, location.email))), businessHours.length > 0 && /* @__PURE__ */ React26.createElement("li", { className: "flex max-w-sm flex-col items-start gap-4 lg:flex-row" }, /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "hidden md:flex", size: "lg", icon: Clock2, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement(FeaturedIcon2, { className: "md:hidden", size: "md", icon: Clock2, color: "brand", theme: "light" }), /* @__PURE__ */ React26.createElement("div", { className: "lg:pt-2.5" }, /* @__PURE__ */ React26.createElement("h3", { className: "text-lg font-semibold text-primary" }, "Business Hours"), /* @__PURE__ */ React26.createElement("div", { className: "mt-1 flex flex-col gap-2 text-md text-tertiary" }, businessHours.map(({ day, hours }) => /* @__PURE__ */ React26.createElement("div", { key: day, className: "flex justify-between gap-4" }, /* @__PURE__ */ React26.createElement("span", { className: "font-medium capitalize" }, day, ":"), /* @__PURE__ */ React26.createElement("span", null, hours))))))), showMap && fullAddress && /* @__PURE__ */ React26.createElement("div", { className: "col-span-2 h-60 w-full border-none lg:h-full" }, /* @__PURE__ */ React26.createElement(
|
|
6768
6963
|
GoogleMap2,
|
|
6769
6964
|
{
|
|
6770
6965
|
address: fullAddress,
|
|
@@ -6775,7 +6970,7 @@ ${location.city}, ${location.state} ${location.zip_code}`
|
|
|
6775
6970
|
};
|
|
6776
6971
|
|
|
6777
6972
|
// src/design_system/sections/services-grid.tsx
|
|
6778
|
-
import
|
|
6973
|
+
import React27 from "react";
|
|
6779
6974
|
import { ArrowRight as ArrowRight7 } from "@untitledui/icons";
|
|
6780
6975
|
var ServicesGrid = ({
|
|
6781
6976
|
services: servicesData,
|
|
@@ -6785,12 +6980,12 @@ var ServicesGrid = ({
|
|
|
6785
6980
|
className = ""
|
|
6786
6981
|
}) => {
|
|
6787
6982
|
const services = Array.isArray(servicesData) ? servicesData : [];
|
|
6788
|
-
return /* @__PURE__ */
|
|
6983
|
+
return /* @__PURE__ */ React27.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React27.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React27.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React27.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React27.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), services.length > 0 ? /* @__PURE__ */ React27.createElement("ul", { className: "grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3" }, services.map((service, index) => {
|
|
6789
6984
|
var _a, _b, _c, _d;
|
|
6790
6985
|
const description = service.summary || (service.description_markdown ? service.description_markdown.replace(/[#*\[\]()]/g, "").trim().substring(0, 120) + "..." : "");
|
|
6791
6986
|
const photo = ((_b = (_a = service.photo_attachments) == null ? void 0 : _a.find((pa) => pa.featured)) == null ? void 0 : _b.photo) || ((_d = (_c = service.photo_attachments) == null ? void 0 : _c[0]) == null ? void 0 : _d.photo);
|
|
6792
6987
|
const imageAlt = (photo == null ? void 0 : photo.title) || service.name;
|
|
6793
|
-
return /* @__PURE__ */
|
|
6988
|
+
return /* @__PURE__ */ React27.createElement("li", { key: service.id || index }, /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col gap-12 bg-secondary p-5 md:inline-flex md:gap-16 md:p-6" }, /* @__PURE__ */ React27.createElement("div", { className: "h-48 w-full overflow-hidden rounded-lg md:h-64" }, /* @__PURE__ */ React27.createElement(
|
|
6794
6989
|
PhotoWithFallback2,
|
|
6795
6990
|
{
|
|
6796
6991
|
item: service,
|
|
@@ -6798,7 +6993,7 @@ var ServicesGrid = ({
|
|
|
6798
6993
|
alt: imageAlt || "Service image",
|
|
6799
6994
|
className: "size-full object-cover"
|
|
6800
6995
|
}
|
|
6801
|
-
)), /* @__PURE__ */
|
|
6996
|
+
)), /* @__PURE__ */ React27.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React27.createElement("div", null, /* @__PURE__ */ React27.createElement("h3", { className: "text-lg font-semibold text-primary" }, service.name), description && /* @__PURE__ */ React27.createElement("p", { className: "mt-1 text-md text-tertiary" }, description)), /* @__PURE__ */ React27.createElement(
|
|
6802
6997
|
Button2,
|
|
6803
6998
|
{
|
|
6804
6999
|
color: "link-color",
|
|
@@ -6808,25 +7003,29 @@ var ServicesGrid = ({
|
|
|
6808
7003
|
},
|
|
6809
7004
|
"Learn more"
|
|
6810
7005
|
))));
|
|
6811
|
-
})) : /* @__PURE__ */
|
|
7006
|
+
})) : /* @__PURE__ */ React27.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React27.createElement("p", { className: "text-gray-500" }, "No services available"))));
|
|
6812
7007
|
};
|
|
6813
7008
|
|
|
6814
7009
|
// src/design_system/sections/social-media-grid.tsx
|
|
6815
|
-
import
|
|
7010
|
+
import React28, { useState as useState11 } from "react";
|
|
6816
7011
|
import Image9 from "next/image";
|
|
6817
7012
|
import { ArrowLeft as ArrowLeft3, ArrowRight as ArrowRight8 } from "@untitledui/icons";
|
|
6818
7013
|
function getPostImageUrls(post) {
|
|
6819
|
-
var _a;
|
|
6820
|
-
|
|
7014
|
+
var _a, _b;
|
|
7015
|
+
const videoSet = ((_a = post.video_urls) == null ? void 0 : _a.length) ? new Set(post.video_urls) : null;
|
|
7016
|
+
const isVideo = (url) => isVideoUrl(url) || videoSet !== null && videoSet.has(url);
|
|
7017
|
+
if ((_b = post.image_urls) == null ? void 0 : _b.length) {
|
|
7018
|
+
return post.image_urls.filter((url) => !isVideo(url));
|
|
7019
|
+
}
|
|
6821
7020
|
const attachments = post.photo_attachments || [];
|
|
6822
7021
|
const sorted = [...attachments].sort((a, b) => {
|
|
6823
|
-
var _a2,
|
|
6824
|
-
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((
|
|
7022
|
+
var _a2, _b2;
|
|
7023
|
+
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((_b2 = b.sort_order) != null ? _b2 : 0);
|
|
6825
7024
|
});
|
|
6826
7025
|
return sorted.map((pa) => {
|
|
6827
|
-
var _a2,
|
|
6828
|
-
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((
|
|
6829
|
-
}).filter((url) => Boolean(url));
|
|
7026
|
+
var _a2, _b2, _c, _d;
|
|
7027
|
+
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((_b2 = pa.photo) == null ? void 0 : _b2.original_url) || ((_c = pa.photo) == null ? void 0 : _c.medium_url) || ((_d = pa.photo) == null ? void 0 : _d.thumbnail_url);
|
|
7028
|
+
}).filter((url) => Boolean(url)).filter((url) => !isVideo(url));
|
|
6830
7029
|
}
|
|
6831
7030
|
var getPlatformBadge = (platform) => {
|
|
6832
7031
|
const platformLower = (platform == null ? void 0 : platform.toLowerCase()) || "social";
|
|
@@ -6865,19 +7064,19 @@ var SocialMediaGrid = ({
|
|
|
6865
7064
|
const startIndex = (currentPage - 1) * postsPerPage;
|
|
6866
7065
|
const endIndex = startIndex + postsPerPage;
|
|
6867
7066
|
const paginatedPosts = posts.slice(startIndex, endIndex);
|
|
6868
|
-
return /* @__PURE__ */
|
|
7067
|
+
return /* @__PURE__ */ React28.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React28.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React28.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React28.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React28.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), paginatedPosts.length > 0 ? /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement("ul", { className: "grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3 xl:grid-cols-4" }, paginatedPosts.map((post, index) => {
|
|
6869
7068
|
var _a;
|
|
6870
7069
|
const images = getPostImageUrls(post);
|
|
6871
7070
|
const hasMultipleImages = images.length > 1;
|
|
6872
7071
|
const firstImage = images[0];
|
|
6873
7072
|
const content = ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
6874
|
-
return /* @__PURE__ */
|
|
7073
|
+
return /* @__PURE__ */ React28.createElement("li", { key: post.id || index, className: "flex flex-col gap-5 md:gap-6" }, /* @__PURE__ */ React28.createElement("div", { className: "relative h-78 w-full overflow-hidden md:h-74" }, firstImage ? hasMultipleImages ? /* @__PURE__ */ React28.createElement(
|
|
6875
7074
|
Carousel2.Root,
|
|
6876
7075
|
{
|
|
6877
7076
|
opts: { align: "start" },
|
|
6878
7077
|
className: "h-full w-full"
|
|
6879
7078
|
},
|
|
6880
|
-
/* @__PURE__ */
|
|
7079
|
+
/* @__PURE__ */ React28.createElement(Carousel2.Content, { className: "h-full" }, images.map((imgUrl, imgIndex) => /* @__PURE__ */ React28.createElement(Carousel2.Item, { key: imgIndex, className: "h-full" }, /* @__PURE__ */ React28.createElement(
|
|
6881
7080
|
Image9,
|
|
6882
7081
|
{
|
|
6883
7082
|
src: imgUrl,
|
|
@@ -6887,8 +7086,8 @@ var SocialMediaGrid = ({
|
|
|
6887
7086
|
height: 600
|
|
6888
7087
|
}
|
|
6889
7088
|
)))),
|
|
6890
|
-
/* @__PURE__ */
|
|
6891
|
-
) : /* @__PURE__ */
|
|
7089
|
+
/* @__PURE__ */ React28.createElement("div", { className: "absolute bottom-4 left-1/2 flex -translate-x-1/2 gap-2" }, /* @__PURE__ */ React28.createElement(Carousel2.PrevTrigger, { asChild: true }, /* @__PURE__ */ React28.createElement(RoundButton2, { icon: ArrowLeft3 })), /* @__PURE__ */ React28.createElement(Carousel2.NextTrigger, { asChild: true }, /* @__PURE__ */ React28.createElement(RoundButton2, { icon: ArrowRight8 })))
|
|
7090
|
+
) : /* @__PURE__ */ React28.createElement(
|
|
6892
7091
|
PhotoWithFallback2,
|
|
6893
7092
|
{
|
|
6894
7093
|
item: post,
|
|
@@ -6897,7 +7096,7 @@ var SocialMediaGrid = ({
|
|
|
6897
7096
|
fallbackId: `social-post-${post.id || index}`,
|
|
6898
7097
|
className: "size-full object-cover"
|
|
6899
7098
|
}
|
|
6900
|
-
) : /* @__PURE__ */
|
|
7099
|
+
) : /* @__PURE__ */ React28.createElement(
|
|
6901
7100
|
PhotoWithFallback2,
|
|
6902
7101
|
{
|
|
6903
7102
|
item: post,
|
|
@@ -6906,10 +7105,10 @@ var SocialMediaGrid = ({
|
|
|
6906
7105
|
fallbackId: `social-post-${post.id || index}`,
|
|
6907
7106
|
className: "size-full object-cover"
|
|
6908
7107
|
}
|
|
6909
|
-
), post.platform && /* @__PURE__ */
|
|
7108
|
+
), post.platform && /* @__PURE__ */ React28.createElement("div", { className: cx(
|
|
6910
7109
|
"absolute top-4 right-4 rounded-full px-3 py-1.5 text-sm font-semibold text-white",
|
|
6911
7110
|
getPlatformBadge(post.platform)
|
|
6912
|
-
) }, post.platform.charAt(0).toUpperCase() + post.platform.slice(1))), /* @__PURE__ */
|
|
7111
|
+
) }, post.platform.charAt(0).toUpperCase() + post.platform.slice(1))), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React28.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React28.createElement("span", { className: "text-sm text-tertiary" }, formatDate(post.posted_at))), content && /* @__PURE__ */ React28.createElement("p", { className: "text-md text-tertiary line-clamp-4" }, content), /* @__PURE__ */ React28.createElement(
|
|
6913
7112
|
Button2,
|
|
6914
7113
|
{
|
|
6915
7114
|
href: post.external_post_url || `https://${post.platform.toLowerCase()}.com`,
|
|
@@ -6921,18 +7120,18 @@ var SocialMediaGrid = ({
|
|
|
6921
7120
|
"View on ",
|
|
6922
7121
|
post.platform
|
|
6923
7122
|
)));
|
|
6924
|
-
})), totalPages > 1 && /* @__PURE__ */
|
|
7123
|
+
})), totalPages > 1 && /* @__PURE__ */ React28.createElement("div", { className: "mt-12" }, /* @__PURE__ */ React28.createElement(
|
|
6925
7124
|
PaginationPageMinimalCenter2,
|
|
6926
7125
|
{
|
|
6927
7126
|
page: currentPage,
|
|
6928
7127
|
total: totalPages,
|
|
6929
7128
|
onPageChange: setCurrentPage
|
|
6930
7129
|
}
|
|
6931
|
-
))) : /* @__PURE__ */
|
|
7130
|
+
))) : /* @__PURE__ */ React28.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React28.createElement("p", { className: "text-gray-500" }, "No social media posts available"))));
|
|
6932
7131
|
};
|
|
6933
7132
|
|
|
6934
7133
|
// src/design_system/sections/job-gallery.tsx
|
|
6935
|
-
import
|
|
7134
|
+
import React29 from "react";
|
|
6936
7135
|
import { Clock as Clock3, CurrencyDollarCircle } from "@untitledui/icons";
|
|
6937
7136
|
var JobGallery = ({
|
|
6938
7137
|
jobs: jobsData,
|
|
@@ -6951,7 +7150,7 @@ var JobGallery = ({
|
|
|
6951
7150
|
const careersPhoto = websitePhotos == null ? void 0 : websitePhotos.careers;
|
|
6952
7151
|
const finalHeaderImage = careersPhoto == null ? void 0 : careersPhoto.url;
|
|
6953
7152
|
const finalHeaderImageAlt = (careersPhoto == null ? void 0 : careersPhoto.alt) || "Team collaboration";
|
|
6954
|
-
const groupedJobs =
|
|
7153
|
+
const groupedJobs = React29.useMemo(() => {
|
|
6955
7154
|
const jobs = Array.isArray(jobsData) ? jobsData : [];
|
|
6956
7155
|
if (!jobs.length) return [];
|
|
6957
7156
|
const groups = {};
|
|
@@ -6964,7 +7163,7 @@ var JobGallery = ({
|
|
|
6964
7163
|
});
|
|
6965
7164
|
return Object.entries(groups);
|
|
6966
7165
|
}, [jobsData]);
|
|
6967
|
-
return /* @__PURE__ */
|
|
7166
|
+
return /* @__PURE__ */ React29.createElement("div", { className: `${backgroundColor} ${className}` }, /* @__PURE__ */ React29.createElement("section", { className: `${backgroundColor} py-16 md:py-24` }, /* @__PURE__ */ React29.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "mx-auto flex w-full max-w-3xl flex-col items-center text-center" }, label && /* @__PURE__ */ React29.createElement("span", { className: "text-sm font-semibold text-brand-secondary md:text-md" }, label), /* @__PURE__ */ React29.createElement("h1", { className: "mt-3 text-display-md font-semibold text-primary md:text-display-lg" }, title), /* @__PURE__ */ React29.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-6 md:text-xl" }, subtitle)))), /* @__PURE__ */ React29.createElement("section", { className: `${backgroundColor} py-16 md:py-24` }, /* @__PURE__ */ React29.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React29.createElement("div", { className: "mx-auto flex w-full max-w-3xl flex-col items-center text-center" }, /* @__PURE__ */ React29.createElement(Badge2, { className: "hidden md:flex", size: "lg", color: "brand", type: "pill-color" }, "Careers"), /* @__PURE__ */ React29.createElement(Badge2, { className: "md:hidden", size: "md", color: "brand", type: "pill-color" }, "Careers"), /* @__PURE__ */ React29.createElement("h2", { className: "mt-4 text-display-sm font-semibold text-primary md:text-display-md" }, title), /* @__PURE__ */ React29.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), /* @__PURE__ */ React29.createElement("div", { className: "mt-12 h-60 w-full md:mt-16 md:h-140 rounded-xl overflow-hidden" }, /* @__PURE__ */ React29.createElement(
|
|
6968
7167
|
PhotoWithFallback2,
|
|
6969
7168
|
{
|
|
6970
7169
|
photoUrl: finalHeaderImage,
|
|
@@ -6972,20 +7171,20 @@ var JobGallery = ({
|
|
|
6972
7171
|
fallbackId: "careers-header",
|
|
6973
7172
|
className: "size-full object-cover"
|
|
6974
7173
|
}
|
|
6975
|
-
)), groupedJobs.length > 0 ? /* @__PURE__ */
|
|
7174
|
+
)), groupedJobs.length > 0 ? /* @__PURE__ */ React29.createElement("div", { className: "mx-auto mt-12 max-w-3xl md:mt-16" }, /* @__PURE__ */ React29.createElement("ul", { className: "flex flex-col gap-8 md:gap-16" }, groupedJobs.map(([category, categoryJobs]) => /* @__PURE__ */ React29.createElement("li", { key: category }, /* @__PURE__ */ React29.createElement("h2", { className: "text-lg font-semibold text-primary md:text-xl" }, category), /* @__PURE__ */ React29.createElement("ul", { className: "mt-5 flex flex-col gap-4 md:mt-8 md:gap-6" }, categoryJobs.map((job, index) => {
|
|
6976
7175
|
var _a2;
|
|
6977
7176
|
const description = ((_a2 = job.description_markdown) == null ? void 0 : _a2.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
6978
|
-
return /* @__PURE__ */
|
|
7177
|
+
return /* @__PURE__ */ React29.createElement("li", { key: job.id || index }, /* @__PURE__ */ React29.createElement(
|
|
6979
7178
|
"a",
|
|
6980
7179
|
{
|
|
6981
7180
|
href: `/careers/${job.slug}`,
|
|
6982
7181
|
className: "flex flex-col rounded-2xl bg-primary p-6 ring-1 ring-secondary ring-inset hover:ring-2 hover:ring-brand-secondary transition-all"
|
|
6983
7182
|
},
|
|
6984
|
-
/* @__PURE__ */
|
|
6985
|
-
/* @__PURE__ */
|
|
6986
|
-
/* @__PURE__ */
|
|
7183
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex flex-col items-start gap-2 md:flex-row" }, /* @__PURE__ */ React29.createElement("h3", { className: "text-md font-semibold text-primary" }, job.title), /* @__PURE__ */ React29.createElement("div", { className: "flex flex-1 gap-2 md:flex-row-reverse md:justify-between" }, job.location && /* @__PURE__ */ React29.createElement(Badge2, { color: "gray", size: "md", type: "modern" }, job.location), job.employment_type && /* @__PURE__ */ React29.createElement(BadgeWithDot2, { color: "brand", size: "md", type: "modern" }, job.employment_type))),
|
|
7184
|
+
/* @__PURE__ */ React29.createElement("p", { className: "mt-2 text-md text-tertiary line-clamp-2" }, description),
|
|
7185
|
+
/* @__PURE__ */ React29.createElement("div", { className: "mt-5 flex gap-4" }, job.employment_type && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React29.createElement(Clock3, { size: 20, className: "text-fg-quaternary" }), /* @__PURE__ */ React29.createElement("span", { className: "text-sm font-medium text-tertiary" }, job.employment_type)), job.salary_range && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React29.createElement(CurrencyDollarCircle, { size: 20, className: "text-fg-quaternary" }), /* @__PURE__ */ React29.createElement("span", { className: "text-sm font-medium text-tertiary" }, job.salary_range)))
|
|
6987
7186
|
));
|
|
6988
|
-
})))))) : /* @__PURE__ */
|
|
7187
|
+
})))))) : /* @__PURE__ */ React29.createElement("div", { className: "text-center mt-12" }, /* @__PURE__ */ React29.createElement("p", { className: "text-gray-500 mb-4" }, "No open positions at the moment."), /* @__PURE__ */ React29.createElement("p", { className: "text-gray-600 mb-6" }, "We're always looking for talented individuals to join our team."), /* @__PURE__ */ React29.createElement(Button2, { href: primaryCtaHref, target: isExternalCtaUrl(primaryCtaHref) ? "_blank" : void 0, rel: isExternalCtaUrl(primaryCtaHref) ? "noopener noreferrer" : void 0 }, "Send Us Your Resume")))));
|
|
6989
7188
|
};
|
|
6990
7189
|
|
|
6991
7190
|
// src/design_system/sections/blog-home.tsx
|
|
@@ -7068,7 +7267,7 @@ var BlogHome = ({
|
|
|
7068
7267
|
};
|
|
7069
7268
|
|
|
7070
7269
|
// src/design_system/sections/blog-gallery.tsx
|
|
7071
|
-
import
|
|
7270
|
+
import React30, { useState as useState12 } from "react";
|
|
7072
7271
|
import { ArrowUpRight as ArrowUpRight4 } from "@untitledui/icons";
|
|
7073
7272
|
|
|
7074
7273
|
// src/design_system/sections/blog-cards.tsx
|
|
@@ -7502,16 +7701,16 @@ var BlogGallery = ({
|
|
|
7502
7701
|
const startIndex = (currentPage - 1) * postsPerPage;
|
|
7503
7702
|
const endIndex = startIndex + postsPerPage;
|
|
7504
7703
|
const paginatedNonFeaturedPosts = nonFeaturedPosts.slice(startIndex, endIndex);
|
|
7505
|
-
|
|
7704
|
+
React30.useEffect(() => {
|
|
7506
7705
|
setCurrentPage(1);
|
|
7507
7706
|
}, [sortBy]);
|
|
7508
|
-
return /* @__PURE__ */
|
|
7707
|
+
return /* @__PURE__ */ React30.createElement("section", { className }, /* @__PURE__ */ React30.createElement("div", { className: "mx-auto flex w-full max-w-container flex-col gap-12 px-4 md:gap-16 md:px-8" }, posts.length > 0 ? /* @__PURE__ */ React30.createElement(React30.Fragment, null, featuredPost && /* @__PURE__ */ React30.createElement(
|
|
7509
7708
|
"a",
|
|
7510
7709
|
{
|
|
7511
7710
|
href: `/blog/${featuredPost.slug}`,
|
|
7512
7711
|
className: "group hidden w-full overflow-hidden rounded-2xl outline-focus-ring select-none focus:outline-2 focus:outline-offset-4 md:flex md:flex-col"
|
|
7513
7712
|
},
|
|
7514
|
-
/* @__PURE__ */
|
|
7713
|
+
/* @__PURE__ */ React30.createElement("div", { className: "relative w-full overflow-hidden rounded-t-2xl md:h-145 lg:h-180" }, /* @__PURE__ */ React30.createElement(
|
|
7515
7714
|
PhotoWithFallback2,
|
|
7516
7715
|
{
|
|
7517
7716
|
item: featuredPost,
|
|
@@ -7522,9 +7721,9 @@ var BlogGallery = ({
|
|
|
7522
7721
|
)),
|
|
7523
7722
|
(() => {
|
|
7524
7723
|
const { title, summary, publishedAt, authorName, authorAvatarUrl } = getBlogPostData(featuredPost);
|
|
7525
|
-
return /* @__PURE__ */
|
|
7724
|
+
return /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col gap-4 rounded-b-2xl border border-t-0 border-secondary bg-primary p-6" }, /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-start gap-2" }, /* @__PURE__ */ React30.createElement("p", { className: "flex-1 text-display-xs font-semibold text-primary" }, title), /* @__PURE__ */ React30.createElement(ArrowUpRight4, { className: "size-5 shrink-0 text-tertiary group-hover:text-brand-secondary" })), summary && /* @__PURE__ */ React30.createElement("p", { className: "line-clamp-2 text-md text-tertiary" }, summary)), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-wrap items-center gap-4 text-sm text-tertiary" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React30.createElement(Avatar2, { focusable: true, size: "sm", src: authorAvatarUrl, alt: authorName }), /* @__PURE__ */ React30.createElement("span", { className: "font-medium" }, authorName)), /* @__PURE__ */ React30.createElement("span", null, publishedAt)));
|
|
7526
7725
|
})()
|
|
7527
|
-
), featuredPost && /* @__PURE__ */
|
|
7726
|
+
), featuredPost && /* @__PURE__ */ React30.createElement("div", { className: "md:hidden" }, /* @__PURE__ */ React30.createElement(BlogCardVertical, { article: featuredPost })), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col items-end gap-8 md:flex-row" }, /* @__PURE__ */ React30.createElement("div", { className: "relative w-full md:w-auto md:min-w-36 md:max-w-40" }, /* @__PURE__ */ React30.createElement(
|
|
7528
7727
|
Select3,
|
|
7529
7728
|
{
|
|
7530
7729
|
"aria-label": "Sort by",
|
|
@@ -7533,8 +7732,8 @@ var BlogGallery = ({
|
|
|
7533
7732
|
onSelectionChange: (value) => setSortBy(value),
|
|
7534
7733
|
items: defaultSortByOptions
|
|
7535
7734
|
},
|
|
7536
|
-
(item) => /* @__PURE__ */
|
|
7537
|
-
))), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */
|
|
7735
|
+
(item) => /* @__PURE__ */ React30.createElement(SelectItem2, { id: item.id }, item.label)
|
|
7736
|
+
))), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */ React30.createElement("ul", { className: "grid grid-cols-1 gap-x-8 gap-y-12 md:grid-cols-2 md:gap-y-12 lg:grid-cols-3" }, paginatedNonFeaturedPosts.map((post) => /* @__PURE__ */ React30.createElement("li", { key: post.id, className: cx(!isDesktop && "nth-[n+7]:hidden") }, /* @__PURE__ */ React30.createElement(BlogCardVertical, { article: post })))), totalPages > 1 && /* @__PURE__ */ React30.createElement(
|
|
7538
7737
|
PaginationPageDefault2,
|
|
7539
7738
|
{
|
|
7540
7739
|
rounded: true,
|
|
@@ -7542,11 +7741,11 @@ var BlogGallery = ({
|
|
|
7542
7741
|
total: totalPages,
|
|
7543
7742
|
onPageChange: setCurrentPage
|
|
7544
7743
|
}
|
|
7545
|
-
)) : /* @__PURE__ */
|
|
7744
|
+
)) : /* @__PURE__ */ React30.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React30.createElement("p", { className: "text-gray-500" }, "No blog posts available"))));
|
|
7546
7745
|
};
|
|
7547
7746
|
|
|
7548
7747
|
// src/design_system/sections/blog-post.tsx
|
|
7549
|
-
import
|
|
7748
|
+
import React31, { useState as useState13 } from "react";
|
|
7550
7749
|
import { Link01, Copy01 } from "@untitledui/icons";
|
|
7551
7750
|
|
|
7552
7751
|
// src/utils/markdown-toc.ts
|
|
@@ -7616,16 +7815,16 @@ var BlogPostSection = ({
|
|
|
7616
7815
|
}
|
|
7617
7816
|
};
|
|
7618
7817
|
if (!blogPost) {
|
|
7619
|
-
return /* @__PURE__ */
|
|
7818
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React31.createElement("div", { className: "text-gray-600 text-6xl mb-4" }, "\u{1F4DD}"), /* @__PURE__ */ React31.createElement("h3", { className: "text-xl font-semibold text-gray-900 mb-2" }, "Blog Post Not Found"), /* @__PURE__ */ React31.createElement("p", { className: "text-gray-600 mb-4" }, "The blog post you're looking for doesn't exist."), /* @__PURE__ */ React31.createElement(Button2, { href: "/blog" }, "View All Blog Posts"));
|
|
7620
7819
|
}
|
|
7621
|
-
return /* @__PURE__ */
|
|
7820
|
+
return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement("section", { className: "bg-primary py-2 md:py-2" }, /* @__PURE__ */ React31.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React31.createElement(
|
|
7622
7821
|
Breadcrumb2,
|
|
7623
7822
|
{
|
|
7624
7823
|
backHref: "/blog",
|
|
7625
7824
|
backLabel: "Blog",
|
|
7626
7825
|
currentLabel: blogPost.title
|
|
7627
7826
|
}
|
|
7628
|
-
))), /* @__PURE__ */
|
|
7827
|
+
))), /* @__PURE__ */ React31.createElement("section", { className: "bg-primary py-4 md:py-6" }, /* @__PURE__ */ React31.createElement("div", { className: "relative mx-auto max-w-container gap-16 px-4 pb-16 md:gap-8 md:px-8 md:pt-16 md:pb-24 grid grid-cols-1 items-center md:grid-cols-2" }, /* @__PURE__ */ React31.createElement("div", { className: "flex max-w-180 flex-col items-start" }, /* @__PURE__ */ React31.createElement(
|
|
7629
7828
|
BadgeGroup2,
|
|
7630
7829
|
{
|
|
7631
7830
|
size: "md",
|
|
@@ -7636,7 +7835,7 @@ var BlogPostSection = ({
|
|
|
7636
7835
|
iconTrailing: null
|
|
7637
7836
|
},
|
|
7638
7837
|
blogPost.reading_time_minutes ? `${blogPost.reading_time_minutes} min read` : blogPost.published_at ? formatDate4(blogPost.published_at) : "Recent"
|
|
7639
|
-
), /* @__PURE__ */
|
|
7838
|
+
), /* @__PURE__ */ React31.createElement("h1", { className: "mt-4 text-display-md font-semibold text-primary md:text-display-lg" }, blogPost.title), blogPost.excerpt && /* @__PURE__ */ React31.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-6 md:max-w-120 md:text-xl" }, (blogPost.excerpt || ((_b = blogPost.excerpt_markdown) == null ? void 0 : _b.replace(/[#*\[\]()]/g, "").trim()) || "").replace(/[#*\[\]()]/g, "").trim())), /* @__PURE__ */ React31.createElement(
|
|
7640
7839
|
PhotoWithFallback2,
|
|
7641
7840
|
{
|
|
7642
7841
|
item: blogPost,
|
|
@@ -7644,7 +7843,7 @@ var BlogPostSection = ({
|
|
|
7644
7843
|
alt: blogPost.title,
|
|
7645
7844
|
className: "order-first -ml-4 h-36 w-screen max-w-none object-cover md:order-1 md:ml-0 md:h-96 md:w-full md:max-w-full rounded-2xl"
|
|
7646
7845
|
}
|
|
7647
|
-
)), blogPost.content_markdown && /* @__PURE__ */
|
|
7846
|
+
)), blogPost.content_markdown && /* @__PURE__ */ React31.createElement("div", { className: "mx-auto max-w-container px-4 pb-16 md:px-8 md:pb-24" }, /* @__PURE__ */ React31.createElement("div", { className: "mx-auto flex justify-center gap-16" }, /* @__PURE__ */ React31.createElement("div", { className: "hidden w-70 flex-col gap-8 lg:flex" }, tableOfContents.length > 0 && /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement("div", { className: "w-full border-t border-secondary" }), /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React31.createElement("p", { className: "text-md font-semibold text-brand-secondary" }, "Table of contents"), /* @__PURE__ */ React31.createElement("ul", { className: "flex flex-col gap-3" }, tableOfContents.map((item) => /* @__PURE__ */ React31.createElement("li", { key: item.id }, /* @__PURE__ */ React31.createElement(
|
|
7648
7847
|
Button2,
|
|
7649
7848
|
{
|
|
7650
7849
|
size: "lg",
|
|
@@ -7652,12 +7851,12 @@ var BlogPostSection = ({
|
|
|
7652
7851
|
href: `#${item.id}`,
|
|
7653
7852
|
className: `${item.level === 3 ? "pl-4" : ""} w-full text-left whitespace-normal justify-start`
|
|
7654
7853
|
},
|
|
7655
|
-
/* @__PURE__ */
|
|
7656
|
-
))))), /* @__PURE__ */
|
|
7854
|
+
/* @__PURE__ */ React31.createElement("span", { className: "break-words block w-full" }, item.title)
|
|
7855
|
+
))))), /* @__PURE__ */ React31.createElement("div", { className: "w-full border-t border-secondary" })), blogPost.blog_post_authors && Array.isArray(blogPost.blog_post_authors) && blogPost.blog_post_authors.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-md font-semibold text-brand-secondary" }, "Author"), /* @__PURE__ */ React31.createElement("div", { className: "flex items-center gap-3" }, (() => {
|
|
7657
7856
|
const author = blogPost.blog_post_authors[0];
|
|
7658
7857
|
const authorName = (author == null ? void 0 : author.name) || "Author";
|
|
7659
7858
|
const authorAvatarUrl = getAvatarUrl(author == null ? void 0 : author.photo_attachments, author == null ? void 0 : author.id, authorName);
|
|
7660
|
-
return /* @__PURE__ */
|
|
7859
|
+
return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(
|
|
7661
7860
|
Avatar2,
|
|
7662
7861
|
{
|
|
7663
7862
|
src: authorAvatarUrl != null ? authorAvatarUrl : void 0,
|
|
@@ -7665,8 +7864,8 @@ var BlogPostSection = ({
|
|
|
7665
7864
|
initials: authorName.trim().charAt(0).toUpperCase() || "?",
|
|
7666
7865
|
size: "md"
|
|
7667
7866
|
}
|
|
7668
|
-
), /* @__PURE__ */
|
|
7669
|
-
})())), /* @__PURE__ */
|
|
7867
|
+
), /* @__PURE__ */ React31.createElement("div", null, /* @__PURE__ */ React31.createElement("p", { className: "text-md font-semibold text-primary" }, authorName), (author == null ? void 0 : author.bio_markdown) && /* @__PURE__ */ React31.createElement("p", { className: "text-md text-tertiary" }, author.bio_markdown.replace(/[#*\[\]()]/g, "").trim().substring(0, 100))));
|
|
7868
|
+
})())), /* @__PURE__ */ React31.createElement("div", { className: "w-full border-t border-secondary" }), /* @__PURE__ */ React31.createElement(
|
|
7670
7869
|
Form2,
|
|
7671
7870
|
{
|
|
7672
7871
|
onSubmit: (e) => {
|
|
@@ -7676,30 +7875,30 @@ var BlogPostSection = ({
|
|
|
7676
7875
|
},
|
|
7677
7876
|
className: "flex flex-col gap-4"
|
|
7678
7877
|
},
|
|
7679
|
-
/* @__PURE__ */
|
|
7680
|
-
/* @__PURE__ */
|
|
7681
|
-
/* @__PURE__ */
|
|
7682
|
-
), /* @__PURE__ */
|
|
7878
|
+
/* @__PURE__ */ React31.createElement("label", { htmlFor: "blog-email-input", className: "text-md font-semibold text-brand-secondary" }, "Subscribe to our newsletter"),
|
|
7879
|
+
/* @__PURE__ */ React31.createElement(Input3, { isRequired: true, id: "blog-email-input", name: "email", type: "email", placeholder: "Enter your email", size: "md" }),
|
|
7880
|
+
/* @__PURE__ */ React31.createElement(Button2, { type: "submit", size: "xl" }, "Subscribe")
|
|
7881
|
+
), /* @__PURE__ */ React31.createElement("div", { className: "w-full border-t border-secondary" }), /* @__PURE__ */ React31.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React31.createElement(
|
|
7683
7882
|
"button",
|
|
7684
7883
|
{
|
|
7685
7884
|
onClick: handleShareLink,
|
|
7686
7885
|
title: "Share link",
|
|
7687
7886
|
className: "inline-flex h-max cursor-pointer items-center justify-center gap-1.5 rounded-lg px-3.5 py-2.5 text-sm font-semibold outline-brand transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 bg-secondary text-primary hover:bg-secondary_hover"
|
|
7688
7887
|
},
|
|
7689
|
-
/* @__PURE__ */
|
|
7690
|
-
), /* @__PURE__ */
|
|
7888
|
+
/* @__PURE__ */ React31.createElement(Link01, { className: "size-5 shrink-0" })
|
|
7889
|
+
), /* @__PURE__ */ React31.createElement(
|
|
7691
7890
|
"button",
|
|
7692
7891
|
{
|
|
7693
7892
|
onClick: handleCopyLink,
|
|
7694
7893
|
title: copied ? "Copied!" : "Copy link",
|
|
7695
7894
|
className: "inline-flex h-max cursor-pointer items-center justify-center gap-1.5 rounded-lg px-3.5 py-2.5 text-sm font-semibold outline-brand transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 bg-secondary text-fg-quaternary hover:bg-secondary_hover"
|
|
7696
7895
|
},
|
|
7697
|
-
/* @__PURE__ */
|
|
7698
|
-
))), /* @__PURE__ */
|
|
7896
|
+
/* @__PURE__ */ React31.createElement(Copy01, { className: "size-5 shrink-0" })
|
|
7897
|
+
))), /* @__PURE__ */ React31.createElement("div", { className: "max-w-prose lg:max-w-180" }, /* @__PURE__ */ React31.createElement("div", { className: "prose-centered-quote mx-auto prose md:prose-lg", id: "content" }, /* @__PURE__ */ React31.createElement(MarkdownRenderer2, { content: blogPost.content_markdown || "" })), /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col items-start justify-between gap-y-8 lg:hidden lg:flex-row mt-8" }, blogPost.blog_post_authors && Array.isArray(blogPost.blog_post_authors) && blogPost.blog_post_authors.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React31.createElement("p", { className: "text-md font-semibold text-brand-secondary" }, "Author"), /* @__PURE__ */ React31.createElement("div", { className: "flex items-center gap-3" }, (() => {
|
|
7699
7898
|
const author = blogPost.blog_post_authors[0];
|
|
7700
7899
|
const authorName = (author == null ? void 0 : author.name) || "Author";
|
|
7701
7900
|
const authorAvatarUrl = getAvatarUrl(author == null ? void 0 : author.photo_attachments, author == null ? void 0 : author.id, authorName);
|
|
7702
|
-
return /* @__PURE__ */
|
|
7901
|
+
return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(
|
|
7703
7902
|
Avatar2,
|
|
7704
7903
|
{
|
|
7705
7904
|
src: authorAvatarUrl != null ? authorAvatarUrl : void 0,
|
|
@@ -7707,24 +7906,24 @@ var BlogPostSection = ({
|
|
|
7707
7906
|
initials: authorName.trim().charAt(0).toUpperCase() || "?",
|
|
7708
7907
|
size: "md"
|
|
7709
7908
|
}
|
|
7710
|
-
), /* @__PURE__ */
|
|
7711
|
-
})())), /* @__PURE__ */
|
|
7909
|
+
), /* @__PURE__ */ React31.createElement("div", null, /* @__PURE__ */ React31.createElement("p", { className: "text-md font-semibold text-primary" }, authorName), (author == null ? void 0 : author.bio_markdown) && /* @__PURE__ */ React31.createElement("p", { className: "text-md text-tertiary" }, author.bio_markdown.replace(/[#*\[\]()]/g, "").trim().substring(0, 100))));
|
|
7910
|
+
})())), /* @__PURE__ */ React31.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React31.createElement(
|
|
7712
7911
|
"button",
|
|
7713
7912
|
{
|
|
7714
7913
|
onClick: handleShareLink,
|
|
7715
7914
|
title: "Share link",
|
|
7716
7915
|
className: "inline-flex h-max cursor-pointer items-center justify-center gap-1.5 rounded-lg px-3.5 py-2.5 text-sm font-semibold outline-brand transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 bg-secondary text-primary hover:bg-secondary_hover"
|
|
7717
7916
|
},
|
|
7718
|
-
/* @__PURE__ */
|
|
7719
|
-
), /* @__PURE__ */
|
|
7917
|
+
/* @__PURE__ */ React31.createElement(Link01, { className: "size-5 shrink-0" })
|
|
7918
|
+
), /* @__PURE__ */ React31.createElement(
|
|
7720
7919
|
"button",
|
|
7721
7920
|
{
|
|
7722
7921
|
onClick: handleCopyLink,
|
|
7723
7922
|
title: copied ? "Copied!" : "Copy link",
|
|
7724
7923
|
className: "inline-flex h-max cursor-pointer items-center justify-center gap-1.5 rounded-lg px-3.5 py-2.5 text-sm font-semibold outline-brand transition duration-100 ease-linear focus-visible:outline-2 focus-visible:outline-offset-2 bg-secondary text-fg-quaternary hover:bg-secondary_hover"
|
|
7725
7924
|
},
|
|
7726
|
-
/* @__PURE__ */
|
|
7727
|
-
))))))), /* @__PURE__ */
|
|
7925
|
+
/* @__PURE__ */ React31.createElement(Copy01, { className: "size-5 shrink-0" })
|
|
7926
|
+
))))))), /* @__PURE__ */ React31.createElement("section", { className: "bg-primary pb-16 md:pb-24" }, /* @__PURE__ */ React31.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React31.createElement("div", { className: "mx-auto max-w-prose md:max-w-180" }, /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-end border-t border-secondary pt-8" }, blogPost.tags && Array.isArray(blogPost.tags) && blogPost.tags.length > 0 && /* @__PURE__ */ React31.createElement("div", { className: "flex flex-wrap gap-2" }, blogPost.tags.map((tag, index) => /* @__PURE__ */ React31.createElement(Badge2, { key: index, color: "gray", size: "md", type: "modern" }, typeof tag === "string" ? tag : tag.name))))))));
|
|
7728
7927
|
};
|
|
7729
7928
|
|
|
7730
7929
|
// src/design_system/sections/contact-home.tsx
|
|
@@ -7744,7 +7943,7 @@ var ContactHome = ({
|
|
|
7744
7943
|
};
|
|
7745
7944
|
|
|
7746
7945
|
// src/design_system/sections/faq-grid.tsx
|
|
7747
|
-
import
|
|
7946
|
+
import React32 from "react";
|
|
7748
7947
|
var renderMarkdown = (content) => {
|
|
7749
7948
|
let html = content.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" class="text-brand-secondary underline">$1</a>');
|
|
7750
7949
|
html = html.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
|
|
@@ -7770,17 +7969,17 @@ var FAQGrid = ({
|
|
|
7770
7969
|
const faqs = Array.isArray(faqsData) ? faqsData : [];
|
|
7771
7970
|
const resolved = companyInformation ? resolveCtaUrls(companyInformation) : null;
|
|
7772
7971
|
const effectiveCtaButtonHref = (_a = ctaButtonHref != null ? ctaButtonHref : resolved == null ? void 0 : resolved.primaryHref) != null ? _a : "/contact";
|
|
7773
|
-
return /* @__PURE__ */
|
|
7972
|
+
return /* @__PURE__ */ React32.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}`, id: "faq" }, /* @__PURE__ */ React32.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, /* @__PURE__ */ React32.createElement("div", { className: "flex w-full max-w-3xl flex-col" }, /* @__PURE__ */ React32.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React32.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), faqs.length > 0 && /* @__PURE__ */ React32.createElement("div", { className: "mt-12 md:mt-16" }, /* @__PURE__ */ React32.createElement("dl", { className: "grid w-full grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-16 lg:grid-cols-3" }, faqs.map((faq, index) => {
|
|
7774
7973
|
const answerContent = faq.answer_markdown || "";
|
|
7775
7974
|
const answerHtml = renderMarkdown(answerContent);
|
|
7776
|
-
return /* @__PURE__ */
|
|
7975
|
+
return /* @__PURE__ */ React32.createElement("div", { key: faq.id || index }, /* @__PURE__ */ React32.createElement("div", { className: "flex max-w-sm flex-col" }, /* @__PURE__ */ React32.createElement("dt", { className: "text-md font-semibold text-primary" }, faq.question), /* @__PURE__ */ React32.createElement(
|
|
7777
7976
|
"dd",
|
|
7778
7977
|
{
|
|
7779
7978
|
className: "mt-1 text-md text-tertiary",
|
|
7780
7979
|
dangerouslySetInnerHTML: { __html: answerHtml }
|
|
7781
7980
|
}
|
|
7782
7981
|
)));
|
|
7783
|
-
}))), (ctaTitle || ctaSubtitle || ctaButtonText) && /* @__PURE__ */
|
|
7982
|
+
}))), (ctaTitle || ctaSubtitle || ctaButtonText) && /* @__PURE__ */ React32.createElement("div", { className: "mt-12 flex flex-col items-start justify-between gap-6 rounded-2xl bg-secondary px-5 py-8 md:mt-16 md:flex-row md:gap-8 md:p-8" }, /* @__PURE__ */ React32.createElement("div", { className: "w-full max-w-3xl" }, ctaTitle && /* @__PURE__ */ React32.createElement("h4", { className: "text-xl font-semibold text-primary" }, ctaTitle), ctaSubtitle && /* @__PURE__ */ React32.createElement("p", { className: "mt-2 text-md text-tertiary md:text-lg" }, ctaSubtitle)), ctaButtonText && /* @__PURE__ */ React32.createElement(
|
|
7784
7983
|
Button2,
|
|
7785
7984
|
{
|
|
7786
7985
|
size: "xl",
|
|
@@ -7961,7 +8160,7 @@ import { Fragment as Fragment2 } from "react";
|
|
|
7961
8160
|
import Image10 from "next/image";
|
|
7962
8161
|
|
|
7963
8162
|
// src/design_system/elements/IconComponent.tsx
|
|
7964
|
-
import
|
|
8163
|
+
import React33 from "react";
|
|
7965
8164
|
var IconComponent = ({ icon, color: color2 = "blue", className = "" }) => {
|
|
7966
8165
|
const getIconColor = (colorName) => {
|
|
7967
8166
|
switch (colorName) {
|
|
@@ -7986,26 +8185,26 @@ var IconComponent = ({ icon, color: color2 = "blue", className = "" }) => {
|
|
|
7986
8185
|
const renderIcon = () => {
|
|
7987
8186
|
switch (icon) {
|
|
7988
8187
|
case "star":
|
|
7989
|
-
return /* @__PURE__ */
|
|
8188
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" }));
|
|
7990
8189
|
case "heart":
|
|
7991
|
-
return /* @__PURE__ */
|
|
8190
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { fillRule: "evenodd", d: "M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z", clipRule: "evenodd" }));
|
|
7992
8191
|
case "home":
|
|
7993
|
-
return /* @__PURE__ */
|
|
8192
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { d: "M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z" }));
|
|
7994
8193
|
case "person":
|
|
7995
|
-
return /* @__PURE__ */
|
|
8194
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { fillRule: "evenodd", d: "M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z", clipRule: "evenodd" }));
|
|
7996
8195
|
case "phone":
|
|
7997
|
-
return /* @__PURE__ */
|
|
8196
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { d: "M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.01 1.01l-.804 1.646a1 1 0 00.01 1.01l.74 4.435a1 1 0 01-.986.836H3a1 1 0 01-1-1V3z" }));
|
|
7998
8197
|
case "email":
|
|
7999
|
-
return /* @__PURE__ */
|
|
8198
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { d: "M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z" }), /* @__PURE__ */ React33.createElement("path", { d: "M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z" }));
|
|
8000
8199
|
case "location":
|
|
8001
|
-
return /* @__PURE__ */
|
|
8200
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { fillRule: "evenodd", d: "M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z", clipRule: "evenodd" }));
|
|
8002
8201
|
case "clock":
|
|
8003
|
-
return /* @__PURE__ */
|
|
8202
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z", clipRule: "evenodd" }));
|
|
8004
8203
|
default:
|
|
8005
|
-
return /* @__PURE__ */
|
|
8204
|
+
return /* @__PURE__ */ React33.createElement("svg", { className: `w-full h-full ${getIconColor(color2)}`, fill: "currentColor", viewBox: "0 0 20 20" }, /* @__PURE__ */ React33.createElement("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }));
|
|
8006
8205
|
}
|
|
8007
8206
|
};
|
|
8008
|
-
return /* @__PURE__ */
|
|
8207
|
+
return /* @__PURE__ */ React33.createElement("div", { className }, renderIcon());
|
|
8009
8208
|
};
|
|
8010
8209
|
var IconComponent_default = IconComponent;
|
|
8011
8210
|
|
|
@@ -8173,14 +8372,14 @@ var JobDetailHero = ({
|
|
|
8173
8372
|
};
|
|
8174
8373
|
|
|
8175
8374
|
// src/design_system/sections/job-application-form.tsx
|
|
8176
|
-
import
|
|
8375
|
+
import React34, { useRef as useRef8, useState as useState14 } from "react";
|
|
8177
8376
|
var JobApplicationForm = ({ jobSlug, formDefinition, inline = false }) => {
|
|
8178
8377
|
const { jobApplicationFormDefinition } = useFormDefinitions();
|
|
8179
8378
|
const resolvedFormDefinition = formDefinition != null ? formDefinition : jobApplicationFormDefinition;
|
|
8180
8379
|
const [isSubmitting, setIsSubmitting] = useState14(false);
|
|
8181
8380
|
const [submitStatus, setSubmitStatus] = useState14("idle");
|
|
8182
8381
|
const [statusMessage, setStatusMessage] = useState14("");
|
|
8183
|
-
const formRef =
|
|
8382
|
+
const formRef = useRef8(null);
|
|
8184
8383
|
const hasFields = resolvedFormDefinition != null && Array.isArray(resolvedFormDefinition.fields) && resolvedFormDefinition.fields.length > 0;
|
|
8185
8384
|
const handleSubmit = async (e) => {
|
|
8186
8385
|
var _a;
|
|
@@ -8216,7 +8415,7 @@ var JobApplicationForm = ({ jobSlug, formDefinition, inline = false }) => {
|
|
|
8216
8415
|
setIsSubmitting(false);
|
|
8217
8416
|
};
|
|
8218
8417
|
if (!hasFields) return null;
|
|
8219
|
-
const formContent = /* @__PURE__ */
|
|
8418
|
+
const formContent = /* @__PURE__ */ React34.createElement(Form2, { ref: formRef, onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ React34.createElement(DynamicFormFields, { form: resolvedFormDefinition, jobSlug }), submitStatus === "success" && /* @__PURE__ */ React34.createElement("div", { className: "rounded-lg bg-success-50 p-4 text-success-700" }, statusMessage), submitStatus === "error" && /* @__PURE__ */ React34.createElement("div", { className: "rounded-lg bg-error-50 p-4 text-error-700" }, statusMessage), /* @__PURE__ */ React34.createElement(
|
|
8220
8419
|
Button2,
|
|
8221
8420
|
{
|
|
8222
8421
|
type: "submit",
|
|
@@ -8229,7 +8428,7 @@ var JobApplicationForm = ({ jobSlug, formDefinition, inline = false }) => {
|
|
|
8229
8428
|
isSubmitting ? "Submitting..." : "Submit Application"
|
|
8230
8429
|
));
|
|
8231
8430
|
if (inline) return formContent;
|
|
8232
|
-
return /* @__PURE__ */
|
|
8431
|
+
return /* @__PURE__ */ React34.createElement("section", { id: "application-form", className: "bg-primary py-16 md:py-20" }, /* @__PURE__ */ React34.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React34.createElement("div", { className: "mx-auto max-w-2xl" }, /* @__PURE__ */ React34.createElement("div", { className: "mb-8 text-center" }, /* @__PURE__ */ React34.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, "Apply for this Position"), /* @__PURE__ */ React34.createElement("p", { className: "mt-4 text-lg text-tertiary" }, "Fill out the form below to submit your application")), formContent)));
|
|
8233
8432
|
};
|
|
8234
8433
|
|
|
8235
8434
|
// src/design_system/sections/job-detail-section.tsx
|
|
@@ -8265,9 +8464,116 @@ var PolicyDocumentSection = ({
|
|
|
8265
8464
|
return /* @__PURE__ */ React.createElement("section", { className: `py-12 md:py-16 ${className}` }, /* @__PURE__ */ React.createElement("div", { className: "mx-auto max-w-3xl px-4 md:px-8" }, /* @__PURE__ */ React.createElement("header", { className: "mb-10 border-b border-gray-200 pb-8" }, /* @__PURE__ */ React.createElement("h1", { className: "font-display text-4xl font-semibold text-gray-900 md:text-5xl" }, title), effectiveDate && /* @__PURE__ */ React.createElement("p", { className: "mt-3 text-sm text-gray-500" }, "Effective Date: ", effectiveDate)), /* @__PURE__ */ React.createElement("div", { className: "prose prose-gray max-w-none text-gray-700" }, /* @__PURE__ */ React.createElement(MarkdownRenderer, { content }))));
|
|
8266
8465
|
};
|
|
8267
8466
|
|
|
8467
|
+
// src/design_system/sections/offers-section.tsx
|
|
8468
|
+
function OffersSection({
|
|
8469
|
+
offers,
|
|
8470
|
+
title = "Offers",
|
|
8471
|
+
subtitle = "See our current offers.",
|
|
8472
|
+
maxOffers = 6,
|
|
8473
|
+
backgroundColor = "bg-primary",
|
|
8474
|
+
showViewAll = true
|
|
8475
|
+
}) {
|
|
8476
|
+
const list = Array.isArray(offers) ? offers : [];
|
|
8477
|
+
const displayList = list.filter((o) => !o.expired).slice(0, maxOffers);
|
|
8478
|
+
if (list.length === 0) {
|
|
8479
|
+
return null;
|
|
8480
|
+
}
|
|
8481
|
+
return /* @__PURE__ */ React.createElement("section", { className: `${backgroundColor} py-16 md:py-24` }, /* @__PURE__ */ React.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col items-start justify-between lg:flex-row" }, /* @__PURE__ */ React.createElement("div", { className: "max-w-3xl" }, /* @__PURE__ */ React.createElement("p", { className: "text-sm font-semibold text-brand-secondary md:text-md" }, "Current offers"), /* @__PURE__ */ React.createElement("h2", { className: "mt-3 text-display-sm font-semibold text-primary md:text-display-md" }, title), /* @__PURE__ */ React.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), showViewAll && /* @__PURE__ */ React.createElement("div", { className: "hidden gap-3 lg:flex" }, /* @__PURE__ */ React.createElement(Button2, { size: "xl", href: "/offers" }, "View all offers"))), /* @__PURE__ */ React.createElement("div", { className: "mx-auto mt-12 max-w-2xl space-y-6" }, displayList.map((offer) => /* @__PURE__ */ React.createElement(OfferCard, { key: offer.id, offer }))), showViewAll && /* @__PURE__ */ React.createElement("div", { className: "mt-12 flex flex-col gap-3 lg:hidden" }, /* @__PURE__ */ React.createElement(Button2, { size: "xl", href: "/offers" }, "View all offers"))));
|
|
8482
|
+
}
|
|
8483
|
+
function OfferCard({ offer }) {
|
|
8484
|
+
return /* @__PURE__ */ React.createElement("div", { className: "rounded-2xl border border-secondary bg-secondary/30 p-5 md:p-6" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("h3", { className: "text-lg font-semibold text-primary" }, offer.name), offer.description && /* @__PURE__ */ React.createElement("p", { className: "text-tertiary" }, offer.description), offer.value_terms && /* @__PURE__ */ React.createElement("p", { className: "text-sm font-medium text-primary" }, offer.value_terms), offer.expires_at && (() => {
|
|
8485
|
+
const d = new Date(offer.expires_at);
|
|
8486
|
+
if (Number.isNaN(d.getTime())) return null;
|
|
8487
|
+
return /* @__PURE__ */ React.createElement("p", { className: "text-xs text-tertiary" }, "Expires ", d.toLocaleDateString());
|
|
8488
|
+
})()));
|
|
8489
|
+
}
|
|
8490
|
+
|
|
8491
|
+
// src/design_system/sections/offers-gallery.tsx
|
|
8492
|
+
import React36 from "react";
|
|
8493
|
+
|
|
8494
|
+
// src/design_system/sections/offers-grid.tsx
|
|
8495
|
+
import React35 from "react";
|
|
8496
|
+
function OffersGrid({
|
|
8497
|
+
offers,
|
|
8498
|
+
title = "Offers",
|
|
8499
|
+
subtitle = "See our current offers.",
|
|
8500
|
+
websitePhotos,
|
|
8501
|
+
companyInformation,
|
|
8502
|
+
backgroundColor = "bg-primary"
|
|
8503
|
+
}) {
|
|
8504
|
+
const list = Array.isArray(offers) ? offers : [];
|
|
8505
|
+
const displayList = list.filter((o) => !o.expired);
|
|
8506
|
+
return /* @__PURE__ */ React35.createElement("section", { className: `${backgroundColor} py-16 md:py-24` }, /* @__PURE__ */ React35.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React35.createElement("div", { className: "mx-auto max-w-3xl text-center" }, /* @__PURE__ */ React35.createElement("h1", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React35.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), displayList.length > 0 ? /* @__PURE__ */ React35.createElement("ul", { className: "mx-auto mt-12 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3" }, displayList.map((offer, index) => /* @__PURE__ */ React35.createElement("li", { key: offer.id }, /* @__PURE__ */ React35.createElement(
|
|
8507
|
+
OffersGridCard,
|
|
8508
|
+
{
|
|
8509
|
+
offer,
|
|
8510
|
+
index,
|
|
8511
|
+
websitePhotos,
|
|
8512
|
+
companyInformation
|
|
8513
|
+
}
|
|
8514
|
+
)))) : /* @__PURE__ */ React35.createElement("div", { className: "mx-auto mt-12 max-w-md text-center" }, /* @__PURE__ */ React35.createElement("p", { className: "text-tertiary" }, "No offers available at the moment. Check back later."))));
|
|
8515
|
+
}
|
|
8516
|
+
function OffersGridCard({
|
|
8517
|
+
offer,
|
|
8518
|
+
index,
|
|
8519
|
+
websitePhotos,
|
|
8520
|
+
companyInformation
|
|
8521
|
+
}) {
|
|
8522
|
+
var _a;
|
|
8523
|
+
return /* @__PURE__ */ React35.createElement("article", { className: "flex flex-col overflow-hidden rounded-2xl border border-secondary bg-secondary/30" }, /* @__PURE__ */ React35.createElement("div", { className: "aspect-[4/3] w-full overflow-hidden" }, /* @__PURE__ */ React35.createElement(
|
|
8524
|
+
PhotoWithFallback2,
|
|
8525
|
+
{
|
|
8526
|
+
item: void 0,
|
|
8527
|
+
fallbackId: (_a = offer.id) != null ? _a : index,
|
|
8528
|
+
alt: offer.name,
|
|
8529
|
+
className: "size-full object-cover",
|
|
8530
|
+
websitePhotos,
|
|
8531
|
+
companyInformation
|
|
8532
|
+
}
|
|
8533
|
+
)), /* @__PURE__ */ React35.createElement("div", { className: "flex flex-1 flex-col gap-3 p-5 md:p-6" }, /* @__PURE__ */ React35.createElement("h2", { className: "text-lg font-semibold text-primary" }, offer.name), offer.description && /* @__PURE__ */ React35.createElement("p", { className: "text-tertiary line-clamp-2" }, offer.description), offer.value_terms && /* @__PURE__ */ React35.createElement("p", { className: "text-sm font-medium text-primary" }, offer.value_terms), offer.expires_at && (() => {
|
|
8534
|
+
const d = new Date(offer.expires_at);
|
|
8535
|
+
if (Number.isNaN(d.getTime())) return null;
|
|
8536
|
+
return /* @__PURE__ */ React35.createElement("p", { className: "text-xs text-tertiary" }, "Expires ", d.toLocaleDateString());
|
|
8537
|
+
})()));
|
|
8538
|
+
}
|
|
8539
|
+
|
|
8540
|
+
// src/design_system/sections/offers-gallery.tsx
|
|
8541
|
+
var OffersGallery = ({
|
|
8542
|
+
offers,
|
|
8543
|
+
title = "Offers",
|
|
8544
|
+
subtitle = "See our current offers.",
|
|
8545
|
+
websitePhotos,
|
|
8546
|
+
companyInformation,
|
|
8547
|
+
className = ""
|
|
8548
|
+
}) => /* @__PURE__ */ React36.createElement("section", { className }, /* @__PURE__ */ React36.createElement(
|
|
8549
|
+
OffersGrid,
|
|
8550
|
+
{
|
|
8551
|
+
offers,
|
|
8552
|
+
title,
|
|
8553
|
+
subtitle,
|
|
8554
|
+
websitePhotos,
|
|
8555
|
+
companyInformation
|
|
8556
|
+
}
|
|
8557
|
+
));
|
|
8558
|
+
registerThemeVariant("offers-gallery", "classic", OffersGallery);
|
|
8559
|
+
|
|
8560
|
+
// src/design_system/sections/offer-detail.tsx
|
|
8561
|
+
import React37 from "react";
|
|
8562
|
+
var OfferDetailSection = ({ offer }) => {
|
|
8563
|
+
if (!offer) {
|
|
8564
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React37.createElement("div", { className: "text-6xl mb-4" }, "\u{1F381}"), /* @__PURE__ */ React37.createElement("h3", { className: "text-xl font-semibold text-gray-900 mb-2" }, "Offer Not Found"), /* @__PURE__ */ React37.createElement("p", { className: "text-gray-600 mb-4" }, "The offer you're looking for doesn't exist or has expired."), /* @__PURE__ */ React37.createElement(Button2, { href: "/offers" }, "View All Offers"));
|
|
8565
|
+
}
|
|
8566
|
+
return /* @__PURE__ */ React37.createElement("div", { className: "mx-auto max-w-3xl px-4 py-12" }, /* @__PURE__ */ React37.createElement("h1", { className: "text-2xl font-semibold text-gray-900 mb-4" }, offer.name), offer.value_terms && /* @__PURE__ */ React37.createElement("p", { className: "text-gray-600 mb-2" }, offer.value_terms), offer.description && /* @__PURE__ */ React37.createElement("p", { className: "text-gray-600 mb-4" }, offer.description), offer.expires_at && (() => {
|
|
8567
|
+
const d = new Date(offer.expires_at);
|
|
8568
|
+
if (Number.isNaN(d.getTime())) return null;
|
|
8569
|
+
return /* @__PURE__ */ React37.createElement("p", { className: "text-sm text-gray-500 mb-6" }, "Expires ", d.toLocaleDateString());
|
|
8570
|
+
})(), /* @__PURE__ */ React37.createElement(Button2, { href: "/offers" }, "Back to Offers"));
|
|
8571
|
+
};
|
|
8572
|
+
registerThemeVariant("offer-detail", "classic", OfferDetailSection);
|
|
8573
|
+
|
|
8268
8574
|
// src/design_system/sections/hero-home.aman.tsx
|
|
8269
8575
|
import { Fragment as Fragment3, useState as useState15 } from "react";
|
|
8270
|
-
import
|
|
8576
|
+
import React38 from "react";
|
|
8271
8577
|
var HeroHome2 = ({
|
|
8272
8578
|
websitePhotos,
|
|
8273
8579
|
companyInformation,
|
|
@@ -8285,7 +8591,7 @@ var HeroHome2 = ({
|
|
|
8285
8591
|
url: ((_b = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _b.url) || "",
|
|
8286
8592
|
alt: ((_c = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _c.alt) || "Hero image"
|
|
8287
8593
|
};
|
|
8288
|
-
return /* @__PURE__ */
|
|
8594
|
+
return /* @__PURE__ */ React38.createElement(Fragment3, null, /* @__PURE__ */ React38.createElement("section", { className: "py-24 md:py-32" }, /* @__PURE__ */ React38.createElement("div", { className: "mx-auto max-w-4xl px-4 text-center md:px-8" }, /* @__PURE__ */ React38.createElement("h1", { className: "font-display text-5xl font-normal leading-tight text-fg-primary md:text-6xl lg:text-7xl" }, headline), /* @__PURE__ */ React38.createElement("p", { className: "mt-6 font-body text-lg leading-relaxed text-tertiary md:text-xl max-w-3xl mx-auto" }, subhead), ctaText && /* @__PURE__ */ React38.createElement(
|
|
8289
8595
|
"a",
|
|
8290
8596
|
{
|
|
8291
8597
|
href: effectiveCtaHref,
|
|
@@ -8295,7 +8601,7 @@ var HeroHome2 = ({
|
|
|
8295
8601
|
style: { color: "var(--color-text-brand-accent)" }
|
|
8296
8602
|
},
|
|
8297
8603
|
ctaText
|
|
8298
|
-
))), /* @__PURE__ */
|
|
8604
|
+
))), /* @__PURE__ */ React38.createElement("section", null, /* @__PURE__ */ React38.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React38.createElement("div", { className: "relative w-full h-[400px] md:h-[500px] lg:h-[600px]" }, /* @__PURE__ */ React38.createElement(
|
|
8299
8605
|
PhotoWithFallback2,
|
|
8300
8606
|
{
|
|
8301
8607
|
photoUrl: heroImage.url,
|
|
@@ -8303,7 +8609,7 @@ var HeroHome2 = ({
|
|
|
8303
8609
|
fallbackId: "hero-home-brand",
|
|
8304
8610
|
className: "w-full h-full object-cover"
|
|
8305
8611
|
}
|
|
8306
|
-
), videoUrl && /* @__PURE__ */
|
|
8612
|
+
), videoUrl && /* @__PURE__ */ React38.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React38.createElement(VideoPlayButton, { onClick: () => setShowVideo(true) }))))), videoUrl && /* @__PURE__ */ React38.createElement(
|
|
8307
8613
|
VideoModal,
|
|
8308
8614
|
{
|
|
8309
8615
|
isOpen: showVideo,
|
|
@@ -8315,7 +8621,7 @@ var HeroHome2 = ({
|
|
|
8315
8621
|
registerThemeVariant("hero-home", "aman", HeroHome2);
|
|
8316
8622
|
|
|
8317
8623
|
// src/design_system/sections/header-navigation.aman.tsx
|
|
8318
|
-
import
|
|
8624
|
+
import React39, { useState as useState16, useRef as useRef9, useCallback as useCallback5 } from "react";
|
|
8319
8625
|
import Link6 from "next/link";
|
|
8320
8626
|
import Image11 from "next/image";
|
|
8321
8627
|
var MAX_DROPDOWN_ITEMS = 3;
|
|
@@ -8328,20 +8634,20 @@ function HeaderNavigation2({
|
|
|
8328
8634
|
companyInformation,
|
|
8329
8635
|
websitePhotos
|
|
8330
8636
|
}) {
|
|
8331
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
8637
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
8332
8638
|
const [activeDropdown, setActiveDropdown] = useState16(null);
|
|
8333
8639
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState16(false);
|
|
8334
8640
|
const [dropdownTop, setDropdownTop] = useState16(0);
|
|
8335
8641
|
const [isScrolled, setIsScrolled] = useState16(false);
|
|
8336
|
-
const closeTimeoutRef =
|
|
8337
|
-
|
|
8642
|
+
const closeTimeoutRef = useRef9(null);
|
|
8643
|
+
React39.useEffect(() => {
|
|
8338
8644
|
const handleScroll = () => {
|
|
8339
8645
|
setIsScrolled(window.scrollY > 10);
|
|
8340
8646
|
};
|
|
8341
8647
|
window.addEventListener("scroll", handleScroll);
|
|
8342
8648
|
return () => window.removeEventListener("scroll", handleScroll);
|
|
8343
8649
|
}, []);
|
|
8344
|
-
|
|
8650
|
+
React39.useEffect(() => {
|
|
8345
8651
|
return () => {
|
|
8346
8652
|
if (closeTimeoutRef.current) {
|
|
8347
8653
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -8404,10 +8710,10 @@ function HeaderNavigation2({
|
|
|
8404
8710
|
viewAllLabel: ""
|
|
8405
8711
|
};
|
|
8406
8712
|
};
|
|
8407
|
-
return /* @__PURE__ */
|
|
8713
|
+
return /* @__PURE__ */ React39.createElement(React39.Fragment, null, /* @__PURE__ */ React39.createElement("header", { className: "hidden md:block sticky top-0 z-50 bg-primary border-b border-secondary transition-all duration-300" }, /* @__PURE__ */ React39.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React39.createElement("div", { className: cx(
|
|
8408
8714
|
"relative flex items-center justify-between transition-all duration-300",
|
|
8409
8715
|
isScrolled ? "py-2" : "py-8"
|
|
8410
|
-
) }, /* @__PURE__ */
|
|
8716
|
+
) }, /* @__PURE__ */ React39.createElement(Link6, { href: ((_d = props == null ? void 0 : props.logo) == null ? void 0 : _d.href) || "/", className: "flex items-center" }, logoUrl && /* @__PURE__ */ React39.createElement(
|
|
8411
8717
|
Image11,
|
|
8412
8718
|
{
|
|
8413
8719
|
src: logoUrl,
|
|
@@ -8416,7 +8722,7 @@ function HeaderNavigation2({
|
|
|
8416
8722
|
width: 120,
|
|
8417
8723
|
height: 40
|
|
8418
8724
|
}
|
|
8419
|
-
)), /* @__PURE__ */
|
|
8725
|
+
)), /* @__PURE__ */ React39.createElement(Link6, { href: ((_e = props == null ? void 0 : props.logo) == null ? void 0 : _e.href) || "/", className: "absolute left-1/2 transform -translate-x-1/2 font-display text-2xl md:text-3xl font-normal uppercase tracking-widest text-fg-primary", suppressHydrationWarning: true }, companyName), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center gap-3" }, ((_f = props == null ? void 0 : props.cta_button) == null ? void 0 : _f.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React39.createElement(
|
|
8420
8726
|
Button2,
|
|
8421
8727
|
{
|
|
8422
8728
|
href: ctaUrls.secondaryHref,
|
|
@@ -8427,18 +8733,18 @@ function HeaderNavigation2({
|
|
|
8427
8733
|
className: "font-body text-sm uppercase tracking-wide px-6 py-2 rounded-sm"
|
|
8428
8734
|
},
|
|
8429
8735
|
props.cta_button.label
|
|
8430
|
-
), /* @__PURE__ */
|
|
8736
|
+
), /* @__PURE__ */ React39.createElement(
|
|
8431
8737
|
Button2,
|
|
8432
8738
|
{
|
|
8433
8739
|
href: ctaUrls.primaryHref,
|
|
8434
|
-
target: (
|
|
8435
|
-
rel: ((
|
|
8740
|
+
target: (_h = (_g = props == null ? void 0 : props.cta_button) == null ? void 0 : _g.target) != null ? _h : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
8741
|
+
rel: ((_i = props == null ? void 0 : props.cta_button) == null ? void 0 : _i.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
8436
8742
|
size: "sm",
|
|
8437
8743
|
color: "primary",
|
|
8438
8744
|
className: "font-body text-sm uppercase tracking-wide px-6 py-2 rounded-sm"
|
|
8439
8745
|
},
|
|
8440
|
-
((
|
|
8441
|
-
))), /* @__PURE__ */
|
|
8746
|
+
((_j = props == null ? void 0 : props.cta_button) == null ? void 0 : _j.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_k = props == null ? void 0 : props.cta_button) == null ? void 0 : _k.label) || "Contact"
|
|
8747
|
+
))), /* @__PURE__ */ React39.createElement("nav", { className: "border-b border-secondary" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-center gap-8 py-4" }, navigation.map((item, i) => /* @__PURE__ */ React39.createElement(
|
|
8442
8748
|
"div",
|
|
8443
8749
|
{
|
|
8444
8750
|
key: i,
|
|
@@ -8446,7 +8752,7 @@ function HeaderNavigation2({
|
|
|
8446
8752
|
onMouseEnter: (e) => handleMouseEnter(item, e),
|
|
8447
8753
|
onMouseLeave: handleMouseLeave
|
|
8448
8754
|
},
|
|
8449
|
-
/* @__PURE__ */
|
|
8755
|
+
/* @__PURE__ */ React39.createElement(
|
|
8450
8756
|
Link6,
|
|
8451
8757
|
{
|
|
8452
8758
|
href: item.href,
|
|
@@ -8457,7 +8763,7 @@ function HeaderNavigation2({
|
|
|
8457
8763
|
},
|
|
8458
8764
|
item.label
|
|
8459
8765
|
),
|
|
8460
|
-
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */
|
|
8766
|
+
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */ React39.createElement(
|
|
8461
8767
|
"div",
|
|
8462
8768
|
{
|
|
8463
8769
|
className: "fixed left-0 right-0 w-full pt-6 pb-6 border-b border-secondary bg-primary z-50",
|
|
@@ -8465,9 +8771,9 @@ function HeaderNavigation2({
|
|
|
8465
8771
|
onMouseEnter: handleDropdownMouseEnter,
|
|
8466
8772
|
onMouseLeave: handleDropdownMouseLeave
|
|
8467
8773
|
},
|
|
8468
|
-
/* @__PURE__ */
|
|
8774
|
+
/* @__PURE__ */ React39.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-center gap-8" }, (() => {
|
|
8469
8775
|
const { items, showViewAll, viewAllHref, viewAllLabel } = getDropdownItems(item);
|
|
8470
|
-
return /* @__PURE__ */
|
|
8776
|
+
return /* @__PURE__ */ React39.createElement(React39.Fragment, null, items.map((link, j) => /* @__PURE__ */ React39.createElement(
|
|
8471
8777
|
Link6,
|
|
8472
8778
|
{
|
|
8473
8779
|
key: j,
|
|
@@ -8475,7 +8781,7 @@ function HeaderNavigation2({
|
|
|
8475
8781
|
className: "font-body text-sm text-fg-primary hover:underline whitespace-nowrap"
|
|
8476
8782
|
},
|
|
8477
8783
|
link.label
|
|
8478
|
-
)), showViewAll && /* @__PURE__ */
|
|
8784
|
+
)), showViewAll && /* @__PURE__ */ React39.createElement(
|
|
8479
8785
|
Link6,
|
|
8480
8786
|
{
|
|
8481
8787
|
href: viewAllHref,
|
|
@@ -8486,15 +8792,15 @@ function HeaderNavigation2({
|
|
|
8486
8792
|
));
|
|
8487
8793
|
})()))
|
|
8488
8794
|
)
|
|
8489
|
-
)))))), /* @__PURE__ */
|
|
8795
|
+
)))))), /* @__PURE__ */ React39.createElement("header", { className: "md:hidden sticky top-0 z-50 bg-primary border-b border-secondary" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-between px-4 py-4" }, /* @__PURE__ */ React39.createElement(
|
|
8490
8796
|
"button",
|
|
8491
8797
|
{
|
|
8492
8798
|
onClick: () => setIsMobileMenuOpen(true),
|
|
8493
8799
|
className: "text-fg-primary",
|
|
8494
8800
|
"aria-label": "Open menu"
|
|
8495
8801
|
},
|
|
8496
|
-
/* @__PURE__ */
|
|
8497
|
-
), /* @__PURE__ */
|
|
8802
|
+
/* @__PURE__ */ React39.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React39.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h16M4 18h16" }))
|
|
8803
|
+
), /* @__PURE__ */ React39.createElement(Link6, { href: ((_l = props == null ? void 0 : props.logo) == null ? void 0 : _l.href) || "/", className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React39.createElement(
|
|
8498
8804
|
Image11,
|
|
8499
8805
|
{
|
|
8500
8806
|
src: logoUrl,
|
|
@@ -8503,15 +8809,15 @@ function HeaderNavigation2({
|
|
|
8503
8809
|
width: 120,
|
|
8504
8810
|
height: 32
|
|
8505
8811
|
}
|
|
8506
|
-
) : /* @__PURE__ */
|
|
8812
|
+
) : /* @__PURE__ */ React39.createElement("span", { className: "font-display text-xl font-normal uppercase tracking-widest text-fg-primary" }, companyName)), /* @__PURE__ */ React39.createElement("div", { className: "w-6" }))), isMobileMenuOpen && /* @__PURE__ */ React39.createElement("div", { className: "fixed inset-0 bg-white z-50 md:hidden" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col h-full" }, /* @__PURE__ */ React39.createElement("div", { className: "flex items-center justify-between px-4 py-4 border-b border-secondary" }, /* @__PURE__ */ React39.createElement(
|
|
8507
8813
|
"button",
|
|
8508
8814
|
{
|
|
8509
8815
|
onClick: () => setIsMobileMenuOpen(false),
|
|
8510
8816
|
className: "text-fg-primary",
|
|
8511
8817
|
"aria-label": "Close menu"
|
|
8512
8818
|
},
|
|
8513
|
-
/* @__PURE__ */
|
|
8514
|
-
), /* @__PURE__ */
|
|
8819
|
+
/* @__PURE__ */ React39.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React39.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
8820
|
+
), /* @__PURE__ */ React39.createElement("div", { className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React39.createElement(
|
|
8515
8821
|
Image11,
|
|
8516
8822
|
{
|
|
8517
8823
|
src: logoUrl,
|
|
@@ -8520,9 +8826,9 @@ function HeaderNavigation2({
|
|
|
8520
8826
|
width: 120,
|
|
8521
8827
|
height: 32
|
|
8522
8828
|
}
|
|
8523
|
-
) : /* @__PURE__ */
|
|
8829
|
+
) : /* @__PURE__ */ React39.createElement("span", { className: "font-display text-xl font-normal uppercase tracking-widest text-fg-primary" }, companyName)), /* @__PURE__ */ React39.createElement("div", { className: "w-6" })), /* @__PURE__ */ React39.createElement("nav", { className: "flex-1 overflow-y-auto px-4 py-8" }, /* @__PURE__ */ React39.createElement("ul", { className: "space-y-4" }, navigation.map((item, i) => {
|
|
8524
8830
|
const { items, showViewAll, viewAllHref, viewAllLabel } = getDropdownItems(item);
|
|
8525
|
-
return /* @__PURE__ */
|
|
8831
|
+
return /* @__PURE__ */ React39.createElement("li", { key: i }, /* @__PURE__ */ React39.createElement(
|
|
8526
8832
|
Link6,
|
|
8527
8833
|
{
|
|
8528
8834
|
href: item.href,
|
|
@@ -8530,7 +8836,7 @@ function HeaderNavigation2({
|
|
|
8530
8836
|
onClick: () => setIsMobileMenuOpen(false)
|
|
8531
8837
|
},
|
|
8532
8838
|
item.label
|
|
8533
|
-
), items.length > 0 && /* @__PURE__ */
|
|
8839
|
+
), items.length > 0 && /* @__PURE__ */ React39.createElement("ul", { className: "ml-4 mt-2 space-y-2" }, items.map((link, j) => /* @__PURE__ */ React39.createElement("li", { key: j }, /* @__PURE__ */ React39.createElement(
|
|
8534
8840
|
Link6,
|
|
8535
8841
|
{
|
|
8536
8842
|
href: link.href,
|
|
@@ -8538,7 +8844,7 @@ function HeaderNavigation2({
|
|
|
8538
8844
|
onClick: () => setIsMobileMenuOpen(false)
|
|
8539
8845
|
},
|
|
8540
8846
|
link.label
|
|
8541
|
-
))), showViewAll && /* @__PURE__ */
|
|
8847
|
+
))), showViewAll && /* @__PURE__ */ React39.createElement("li", null, /* @__PURE__ */ React39.createElement(
|
|
8542
8848
|
Link6,
|
|
8543
8849
|
{
|
|
8544
8850
|
href: viewAllHref,
|
|
@@ -8548,7 +8854,7 @@ function HeaderNavigation2({
|
|
|
8548
8854
|
viewAllLabel,
|
|
8549
8855
|
" \u2192"
|
|
8550
8856
|
))));
|
|
8551
|
-
}))), /* @__PURE__ */
|
|
8857
|
+
}))), /* @__PURE__ */ React39.createElement("div", { className: "border-t border-secondary px-4 py-6" }, /* @__PURE__ */ React39.createElement("div", { className: "flex flex-col gap-3" }, ((_m = props == null ? void 0 : props.cta_button) == null ? void 0 : _m.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React39.createElement(
|
|
8552
8858
|
Button2,
|
|
8553
8859
|
{
|
|
8554
8860
|
href: ctaUrls.secondaryHref,
|
|
@@ -8559,18 +8865,18 @@ function HeaderNavigation2({
|
|
|
8559
8865
|
onClick: () => setIsMobileMenuOpen(false)
|
|
8560
8866
|
},
|
|
8561
8867
|
props.cta_button.label
|
|
8562
|
-
), /* @__PURE__ */
|
|
8868
|
+
), /* @__PURE__ */ React39.createElement(
|
|
8563
8869
|
Button2,
|
|
8564
8870
|
{
|
|
8565
8871
|
href: ctaUrls.primaryHref,
|
|
8566
|
-
target: (
|
|
8567
|
-
rel: ((
|
|
8872
|
+
target: (_o = (_n = props == null ? void 0 : props.cta_button) == null ? void 0 : _n.target) != null ? _o : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
8873
|
+
rel: ((_p = props == null ? void 0 : props.cta_button) == null ? void 0 : _p.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
8568
8874
|
color: "primary",
|
|
8569
8875
|
className: "w-full font-body text-sm uppercase tracking-wide py-3 rounded-sm",
|
|
8570
8876
|
onClick: () => setIsMobileMenuOpen(false)
|
|
8571
8877
|
},
|
|
8572
|
-
((
|
|
8573
|
-
))))), /* @__PURE__ */
|
|
8878
|
+
((_q = props == null ? void 0 : props.cta_button) == null ? void 0 : _q.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_r = props == null ? void 0 : props.cta_button) == null ? void 0 : _r.label) || "Contact"
|
|
8879
|
+
))))), /* @__PURE__ */ React39.createElement("div", { className: "fixed bottom-0 left-0 right-0 z-40 md:hidden bg-fg-primary" }, /* @__PURE__ */ React39.createElement("div", { className: "flex gap-0" }, ((_s = props == null ? void 0 : props.cta_button) == null ? void 0 : _s.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React39.createElement(
|
|
8574
8880
|
Button2,
|
|
8575
8881
|
{
|
|
8576
8882
|
href: ctaUrls.secondaryHref,
|
|
@@ -8580,16 +8886,16 @@ function HeaderNavigation2({
|
|
|
8580
8886
|
className: "flex-1 font-body text-sm uppercase tracking-wide py-4 rounded-none border-r border-gray-700"
|
|
8581
8887
|
},
|
|
8582
8888
|
props.cta_button.label
|
|
8583
|
-
), /* @__PURE__ */
|
|
8889
|
+
), /* @__PURE__ */ React39.createElement(
|
|
8584
8890
|
Button2,
|
|
8585
8891
|
{
|
|
8586
8892
|
href: ctaUrls.primaryHref,
|
|
8587
|
-
target: (
|
|
8588
|
-
rel: ((
|
|
8893
|
+
target: (_u = (_t = props == null ? void 0 : props.cta_button) == null ? void 0 : _t.target) != null ? _u : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
8894
|
+
rel: ((_v = props == null ? void 0 : props.cta_button) == null ? void 0 : _v.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
8589
8895
|
color: "primary",
|
|
8590
|
-
className: `${((
|
|
8896
|
+
className: `${((_w = props == null ? void 0 : props.cta_button) == null ? void 0 : _w.secondary_label) && ctaUrls.hasSecondary ? "flex-1" : "w-full"} font-body text-sm uppercase tracking-wide py-4 rounded-none`
|
|
8591
8897
|
},
|
|
8592
|
-
((
|
|
8898
|
+
((_x = props == null ? void 0 : props.cta_button) == null ? void 0 : _x.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_y = props == null ? void 0 : props.cta_button) == null ? void 0 : _y.label) || "Contact"
|
|
8593
8899
|
))));
|
|
8594
8900
|
}
|
|
8595
8901
|
registerThemeVariant("header-navigation", "aman", HeaderNavigation2);
|
|
@@ -8681,7 +8987,7 @@ var ServicesGrid2 = ({
|
|
|
8681
8987
|
registerThemeVariant("services-grid", "aman", ServicesGrid2);
|
|
8682
8988
|
|
|
8683
8989
|
// src/design_system/sections/testimonials-home.aman.tsx
|
|
8684
|
-
import
|
|
8990
|
+
import React40 from "react";
|
|
8685
8991
|
var TestimonialsHome2 = ({
|
|
8686
8992
|
testimonials: testimonialsData,
|
|
8687
8993
|
title = "",
|
|
@@ -8689,7 +8995,7 @@ var TestimonialsHome2 = ({
|
|
|
8689
8995
|
}) => {
|
|
8690
8996
|
const testimonials = Array.isArray(testimonialsData) ? testimonialsData : [];
|
|
8691
8997
|
const displayTestimonials = perPage ? testimonials.slice(0, perPage) : testimonials;
|
|
8692
|
-
return /* @__PURE__ */
|
|
8998
|
+
return /* @__PURE__ */ React40.createElement("section", null, /* @__PURE__ */ React40.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React40.createElement(
|
|
8693
8999
|
CarouselSectionWrapper,
|
|
8694
9000
|
{
|
|
8695
9001
|
title,
|
|
@@ -8704,7 +9010,7 @@ var TestimonialsHome2 = ({
|
|
|
8704
9010
|
const avatarUrl = getAvatarUrl(testimonial.photo_attachments, testimonial.id, reviewerName);
|
|
8705
9011
|
const rating = testimonial.rating || 5;
|
|
8706
9012
|
const isVerified = true;
|
|
8707
|
-
return /* @__PURE__ */
|
|
9013
|
+
return /* @__PURE__ */ React40.createElement(Carousel.Item, { key: testimonial.id || i, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React40.createElement("div", { className: "bg-white p-8 flex flex-col h-full" }, /* @__PURE__ */ React40.createElement("div", { className: "flex gap-1 mb-6" }, Array.from({ length: 5 }).map((_, starIdx) => /* @__PURE__ */ React40.createElement(
|
|
8708
9014
|
"svg",
|
|
8709
9015
|
{
|
|
8710
9016
|
key: starIdx,
|
|
@@ -8716,8 +9022,8 @@ var TestimonialsHome2 = ({
|
|
|
8716
9022
|
strokeWidth: "2",
|
|
8717
9023
|
viewBox: "0 0 24 24"
|
|
8718
9024
|
},
|
|
8719
|
-
/* @__PURE__ */
|
|
8720
|
-
))), /* @__PURE__ */
|
|
9025
|
+
/* @__PURE__ */ React40.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
|
|
9026
|
+
))), /* @__PURE__ */ React40.createElement("p", { className: "font-display text-lg leading-relaxed text-tertiary mb-6 flex-grow" }, '"', quote, '"'), /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React40.createElement("div", { className: "w-12 h-12 rounded-full overflow-hidden flex-shrink-0" }, /* @__PURE__ */ React40.createElement(
|
|
8721
9027
|
PhotoWithFallback2,
|
|
8722
9028
|
{
|
|
8723
9029
|
photoUrl: avatarUrl,
|
|
@@ -8725,21 +9031,21 @@ var TestimonialsHome2 = ({
|
|
|
8725
9031
|
fallbackId: testimonial.id || i,
|
|
8726
9032
|
className: "w-full h-full object-cover"
|
|
8727
9033
|
}
|
|
8728
|
-
)), /* @__PURE__ */
|
|
9034
|
+
)), /* @__PURE__ */ React40.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React40.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React40.createElement("p", { className: "font-body text-sm font-medium text-fg-primary" }, reviewerName), isVerified && /* @__PURE__ */ React40.createElement("svg", { className: "w-4 h-4 text-fg-primary", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React40.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z", clipRule: "evenodd" }))), /* @__PURE__ */ React40.createElement("p", { className: "font-body text-xs", style: { color: "var(--color-text-brand-secondary)" } }, username)))));
|
|
8729
9035
|
})
|
|
8730
9036
|
)));
|
|
8731
9037
|
};
|
|
8732
9038
|
registerThemeVariant("testimonials-home", "aman", TestimonialsHome2);
|
|
8733
9039
|
|
|
8734
9040
|
// src/design_system/sections/testimonials-grid.aman.tsx
|
|
8735
|
-
import
|
|
9041
|
+
import React41 from "react";
|
|
8736
9042
|
var TestimonialsGrid2 = ({
|
|
8737
9043
|
testimonials: testimonialsData,
|
|
8738
9044
|
title = "",
|
|
8739
9045
|
subtitle = ""
|
|
8740
9046
|
}) => {
|
|
8741
9047
|
const testimonials = Array.isArray(testimonialsData) ? testimonialsData : [];
|
|
8742
|
-
return /* @__PURE__ */
|
|
9048
|
+
return /* @__PURE__ */ React41.createElement("section", null, /* @__PURE__ */ React41.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React41.createElement("div", { className: "mb-12 text-center" }, title && /* @__PURE__ */ React41.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl" }, title), subtitle && /* @__PURE__ */ React41.createElement("p", { className: "mt-4 font-display text-lg leading-relaxed text-tertiary md:text-xl max-w-3xl mx-auto" }, subtitle)), testimonials.length > 0 ? /* @__PURE__ */ React41.createElement("div", { className: "grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3" }, testimonials.map((testimonial, i) => {
|
|
8743
9049
|
var _a;
|
|
8744
9050
|
const quote = ((_a = testimonial.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
8745
9051
|
const reviewerName = testimonial.reviewer_name || "Customer";
|
|
@@ -8747,7 +9053,7 @@ var TestimonialsGrid2 = ({
|
|
|
8747
9053
|
const avatarUrl = getAvatarUrl(testimonial.photo_attachments, testimonial.id, reviewerName);
|
|
8748
9054
|
const rating = testimonial.rating || 5;
|
|
8749
9055
|
const isVerified = true;
|
|
8750
|
-
return /* @__PURE__ */
|
|
9056
|
+
return /* @__PURE__ */ React41.createElement("div", { key: testimonial.id || i, className: "bg-white p-8 flex flex-col h-full" }, /* @__PURE__ */ React41.createElement("div", { className: "flex gap-1 mb-6" }, Array.from({ length: 5 }).map((_, starIdx) => /* @__PURE__ */ React41.createElement(
|
|
8751
9057
|
"svg",
|
|
8752
9058
|
{
|
|
8753
9059
|
key: starIdx,
|
|
@@ -8759,8 +9065,8 @@ var TestimonialsGrid2 = ({
|
|
|
8759
9065
|
strokeWidth: "2",
|
|
8760
9066
|
viewBox: "0 0 24 24"
|
|
8761
9067
|
},
|
|
8762
|
-
/* @__PURE__ */
|
|
8763
|
-
))), /* @__PURE__ */
|
|
9068
|
+
/* @__PURE__ */ React41.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
|
|
9069
|
+
))), /* @__PURE__ */ React41.createElement("p", { className: "font-display text-lg leading-relaxed text-tertiary mb-6 flex-grow" }, '"', quote, '"'), /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React41.createElement("div", { className: "w-12 h-12 rounded-full overflow-hidden flex-shrink-0" }, /* @__PURE__ */ React41.createElement(
|
|
8764
9070
|
PhotoWithFallback2,
|
|
8765
9071
|
{
|
|
8766
9072
|
photoUrl: avatarUrl,
|
|
@@ -8768,29 +9074,31 @@ var TestimonialsGrid2 = ({
|
|
|
8768
9074
|
fallbackId: testimonial.id || i,
|
|
8769
9075
|
className: "w-full h-full object-cover"
|
|
8770
9076
|
}
|
|
8771
|
-
)), /* @__PURE__ */
|
|
8772
|
-
})) : /* @__PURE__ */
|
|
9077
|
+
)), /* @__PURE__ */ React41.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React41.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React41.createElement("p", { className: "font-body text-sm font-medium text-fg-primary" }, reviewerName), isVerified && /* @__PURE__ */ React41.createElement("svg", { className: "w-4 h-4 text-fg-primary", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React41.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z", clipRule: "evenodd" }))), /* @__PURE__ */ React41.createElement("p", { className: "font-body text-xs", style: { color: "var(--color-text-brand-secondary)" } }, username))));
|
|
9078
|
+
})) : /* @__PURE__ */ React41.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React41.createElement("p", { className: "font-body text-base text-tertiary" }, "No testimonials available"))));
|
|
8773
9079
|
};
|
|
8774
9080
|
registerThemeVariant("testimonials-grid", "aman", TestimonialsGrid2);
|
|
8775
9081
|
|
|
8776
9082
|
// src/design_system/sections/contact-section.aman.tsx
|
|
8777
|
-
import
|
|
9083
|
+
import React43 from "react";
|
|
8778
9084
|
|
|
8779
9085
|
// src/design_system/sections/contact-section-form.aman.tsx
|
|
8780
|
-
import
|
|
9086
|
+
import React42, { useRef as useRef10, useState as useState17 } from "react";
|
|
8781
9087
|
var ContactSectionForm2 = ({
|
|
8782
9088
|
formDefinition,
|
|
8783
9089
|
submitButtonText = "Send message",
|
|
8784
9090
|
successMessage = "Thank you for contacting us! We'll get back to you soon.",
|
|
8785
9091
|
thankYouMessage,
|
|
8786
|
-
onSuccess
|
|
9092
|
+
onSuccess,
|
|
9093
|
+
privacyPolicyUrl,
|
|
9094
|
+
termsOfServiceUrl
|
|
8787
9095
|
}) => {
|
|
8788
9096
|
const { leadFormDefinition } = useFormDefinitions();
|
|
8789
9097
|
const resolvedFormDefinition = formDefinition != null ? formDefinition : leadFormDefinition;
|
|
8790
9098
|
const [isSubmitting, setIsSubmitting] = useState17(false);
|
|
8791
9099
|
const [submitStatus, setSubmitStatus] = useState17("idle");
|
|
8792
9100
|
const [statusMessage, setStatusMessage] = useState17("");
|
|
8793
|
-
const formRef =
|
|
9101
|
+
const formRef = useRef10(null);
|
|
8794
9102
|
const hasFields = resolvedFormDefinition != null && Array.isArray(resolvedFormDefinition.fields) && resolvedFormDefinition.fields.length > 0;
|
|
8795
9103
|
const handleSubmit = async (e) => {
|
|
8796
9104
|
var _a;
|
|
@@ -8801,7 +9109,8 @@ var ContactSectionForm2 = ({
|
|
|
8801
9109
|
const formData = new FormData(e.currentTarget);
|
|
8802
9110
|
const data = { formType: "lead" };
|
|
8803
9111
|
formData.forEach((value, key) => {
|
|
8804
|
-
if (key
|
|
9112
|
+
if (key.endsWith("_prefix")) return;
|
|
9113
|
+
if (typeof value === "string") data[key] = value;
|
|
8805
9114
|
});
|
|
8806
9115
|
try {
|
|
8807
9116
|
const response = await fetch("/api/form/", {
|
|
@@ -8828,7 +9137,14 @@ var ContactSectionForm2 = ({
|
|
|
8828
9137
|
setIsSubmitting(false);
|
|
8829
9138
|
};
|
|
8830
9139
|
if (!hasFields) return null;
|
|
8831
|
-
return /* @__PURE__ */
|
|
9140
|
+
return /* @__PURE__ */ React42.createElement(Form2, { ref: formRef, onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ React42.createElement(
|
|
9141
|
+
DynamicFormFields,
|
|
9142
|
+
{
|
|
9143
|
+
form: resolvedFormDefinition,
|
|
9144
|
+
privacyPolicyUrl,
|
|
9145
|
+
termsOfServiceUrl
|
|
9146
|
+
}
|
|
9147
|
+
), /* @__PURE__ */ React42.createElement(
|
|
8832
9148
|
Button2,
|
|
8833
9149
|
{
|
|
8834
9150
|
type: "submit",
|
|
@@ -8839,21 +9155,38 @@ var ContactSectionForm2 = ({
|
|
|
8839
9155
|
isLoading: isSubmitting
|
|
8840
9156
|
},
|
|
8841
9157
|
isSubmitting ? "Sending..." : submitButtonText
|
|
8842
|
-
), submitStatus === "success" && /* @__PURE__ */
|
|
9158
|
+
), submitStatus === "success" && /* @__PURE__ */ React42.createElement("div", { className: "rounded-sm bg-success-50 p-4 text-success-700 font-body" }, thankYouMessage != null ? thankYouMessage : statusMessage), submitStatus === "error" && /* @__PURE__ */ React42.createElement("div", { className: "rounded-sm bg-error-50 p-4 text-error-700 font-body text-sm" }, statusMessage));
|
|
8843
9159
|
};
|
|
8844
9160
|
|
|
8845
9161
|
// src/design_system/sections/contact-section.aman.tsx
|
|
9162
|
+
function getLegalUrlsFromConfig2(config) {
|
|
9163
|
+
var _a, _b, _c;
|
|
9164
|
+
if (!((_a = config == null ? void 0 : config.navigation) == null ? void 0 : _a.footer)) return {};
|
|
9165
|
+
const flat = config.navigation.footer.flat();
|
|
9166
|
+
const privacy = (_b = flat.find((l) => l.label === "Privacy Policy")) == null ? void 0 : _b.href;
|
|
9167
|
+
const terms = (_c = flat.find((l) => l.label === "Terms of Service")) == null ? void 0 : _c.href;
|
|
9168
|
+
return { privacyPolicyUrl: privacy, termsOfServiceUrl: terms };
|
|
9169
|
+
}
|
|
8846
9170
|
var ContactSection2 = ({
|
|
8847
9171
|
websitePhotos,
|
|
8848
9172
|
title = "",
|
|
8849
9173
|
subtitle = "",
|
|
8850
|
-
formDefinition
|
|
9174
|
+
formDefinition,
|
|
9175
|
+
config
|
|
8851
9176
|
}) => {
|
|
9177
|
+
const { privacyPolicyUrl, termsOfServiceUrl } = getLegalUrlsFromConfig2(config);
|
|
8852
9178
|
const contactPhoto = websitePhotos == null ? void 0 : websitePhotos.contact;
|
|
8853
9179
|
const contactImageUrl = contactPhoto == null ? void 0 : contactPhoto.url;
|
|
8854
9180
|
const finalContactImage = contactImageUrl && contactImageUrl.trim() !== "" ? contactImageUrl : void 0;
|
|
8855
9181
|
const finalContactImageAlt = (contactPhoto == null ? void 0 : contactPhoto.alt) || "Contact image";
|
|
8856
|
-
return /* @__PURE__ */
|
|
9182
|
+
return /* @__PURE__ */ React43.createElement("section", null, /* @__PURE__ */ React43.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React43.createElement("div", { className: "grid grid-cols-1 gap-12 md:gap-16 lg:grid-cols-2" }, /* @__PURE__ */ React43.createElement("div", { className: "flex w-full flex-col" }, /* @__PURE__ */ React43.createElement("div", { className: "mb-8" }, /* @__PURE__ */ React43.createElement("h2", { className: "font-display text-4xl font-normal leading-tight text-fg-primary md:text-5xl" }, title), /* @__PURE__ */ React43.createElement("p", { className: "mt-4 font-body text-lg leading-relaxed text-tertiary" }, subtitle)), /* @__PURE__ */ React43.createElement(
|
|
9183
|
+
ContactSectionForm2,
|
|
9184
|
+
{
|
|
9185
|
+
formDefinition,
|
|
9186
|
+
privacyPolicyUrl,
|
|
9187
|
+
termsOfServiceUrl
|
|
9188
|
+
}
|
|
9189
|
+
)), /* @__PURE__ */ React43.createElement("div", { className: "max-lg:hidden h-full min-h-0 overflow-hidden" }, /* @__PURE__ */ React43.createElement(
|
|
8857
9190
|
PhotoWithFallback2,
|
|
8858
9191
|
{
|
|
8859
9192
|
photoUrl: finalContactImage || "",
|
|
@@ -9093,17 +9426,21 @@ registerThemeVariant("location-details-section", "aman", LocationDetailsSection2
|
|
|
9093
9426
|
|
|
9094
9427
|
// src/design_system/sections/social-media-grid.aman.tsx
|
|
9095
9428
|
function getPostImageUrls2(post) {
|
|
9096
|
-
var _a;
|
|
9097
|
-
|
|
9429
|
+
var _a, _b;
|
|
9430
|
+
const videoSet = ((_a = post.video_urls) == null ? void 0 : _a.length) ? new Set(post.video_urls) : null;
|
|
9431
|
+
const isVideo = (url) => isVideoUrl(url) || videoSet !== null && videoSet.has(url);
|
|
9432
|
+
if ((_b = post.image_urls) == null ? void 0 : _b.length) {
|
|
9433
|
+
return post.image_urls.filter((url) => !isVideo(url));
|
|
9434
|
+
}
|
|
9098
9435
|
const attachments = post.photo_attachments || [];
|
|
9099
9436
|
const sorted = [...attachments].sort((a, b) => {
|
|
9100
|
-
var _a2,
|
|
9101
|
-
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((
|
|
9437
|
+
var _a2, _b2;
|
|
9438
|
+
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((_b2 = b.sort_order) != null ? _b2 : 0);
|
|
9102
9439
|
});
|
|
9103
9440
|
return sorted.map((pa) => {
|
|
9104
|
-
var _a2,
|
|
9105
|
-
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((
|
|
9106
|
-
}).filter((url) => Boolean(url));
|
|
9441
|
+
var _a2, _b2, _c, _d;
|
|
9442
|
+
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((_b2 = pa.photo) == null ? void 0 : _b2.original_url) || ((_c = pa.photo) == null ? void 0 : _c.medium_url) || ((_d = pa.photo) == null ? void 0 : _d.thumbnail_url);
|
|
9443
|
+
}).filter((url) => Boolean(url)).filter((url) => !isVideo(url));
|
|
9107
9444
|
}
|
|
9108
9445
|
var formatDate2 = (dateString) => {
|
|
9109
9446
|
if (!dateString) return "Recent";
|
|
@@ -9203,7 +9540,7 @@ var BlogHome2 = ({
|
|
|
9203
9540
|
registerThemeVariant("blog-home", "aman", BlogHome2);
|
|
9204
9541
|
|
|
9205
9542
|
// src/design_system/sections/blog-gallery.aman.tsx
|
|
9206
|
-
import
|
|
9543
|
+
import React44, { useState as useState18 } from "react";
|
|
9207
9544
|
var BlogGallery2 = ({
|
|
9208
9545
|
blogPosts: postsData,
|
|
9209
9546
|
postsPerPage = 12,
|
|
@@ -9217,13 +9554,13 @@ var BlogGallery2 = ({
|
|
|
9217
9554
|
const startIndex = (currentPage - 1) * postsPerPage;
|
|
9218
9555
|
const endIndex = startIndex + postsPerPage;
|
|
9219
9556
|
const paginatedNonFeaturedPosts = nonFeaturedPosts.slice(startIndex, endIndex);
|
|
9220
|
-
return /* @__PURE__ */
|
|
9557
|
+
return /* @__PURE__ */ React44.createElement("section", { className }, /* @__PURE__ */ React44.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, posts.length > 0 ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, featuredPost && /* @__PURE__ */ React44.createElement(
|
|
9221
9558
|
"a",
|
|
9222
9559
|
{
|
|
9223
9560
|
href: `/blog/${featuredPost.slug}`,
|
|
9224
9561
|
className: "block mb-16 group"
|
|
9225
9562
|
},
|
|
9226
|
-
/* @__PURE__ */
|
|
9563
|
+
/* @__PURE__ */ React44.createElement("div", { className: "w-full h-96 md:h-[500px] mb-8 overflow-hidden" }, /* @__PURE__ */ React44.createElement(
|
|
9227
9564
|
PhotoWithFallback2,
|
|
9228
9565
|
{
|
|
9229
9566
|
item: featuredPost,
|
|
@@ -9231,19 +9568,19 @@ var BlogGallery2 = ({
|
|
|
9231
9568
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
9232
9569
|
}
|
|
9233
9570
|
)),
|
|
9234
|
-
/* @__PURE__ */
|
|
9235
|
-
), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */
|
|
9571
|
+
/* @__PURE__ */ React44.createElement("div", { className: "max-w-3xl" }, /* @__PURE__ */ React44.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-4", style: { color: "var(--color-text-brand-secondary)" } }, featuredPost.published_at ? new Date(featuredPost.published_at).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "Recent"), /* @__PURE__ */ React44.createElement("h2", { className: "font-display text-3xl md:text-4xl font-normal text-fg-primary mb-6 group-hover:underline" }, featuredPost.title), featuredPost.excerpt_markdown && /* @__PURE__ */ React44.createElement("p", { className: "font-display text-lg leading-relaxed text-tertiary" }, featuredPost.excerpt_markdown.replace(/[#*\[\]()]/g, "").trim()))
|
|
9572
|
+
), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */ React44.createElement("div", { className: "grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3 mb-16" }, paginatedNonFeaturedPosts.map((post) => {
|
|
9236
9573
|
var _a;
|
|
9237
9574
|
const excerpt = post.excerpt_markdown || ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim().substring(0, 150)) || "";
|
|
9238
|
-
return /* @__PURE__ */
|
|
9575
|
+
return /* @__PURE__ */ React44.createElement("a", { key: post.id, href: `/blog/${post.slug}`, className: "flex flex-col group" }, /* @__PURE__ */ React44.createElement("div", { className: "w-full h-64 mb-6 overflow-hidden" }, /* @__PURE__ */ React44.createElement(
|
|
9239
9576
|
PhotoWithFallback2,
|
|
9240
9577
|
{
|
|
9241
9578
|
item: post,
|
|
9242
9579
|
fallbackId: post.id,
|
|
9243
9580
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
9244
9581
|
}
|
|
9245
|
-
)), /* @__PURE__ */
|
|
9246
|
-
})), totalPages > 1 && /* @__PURE__ */
|
|
9582
|
+
)), /* @__PURE__ */ React44.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-2", style: { color: "var(--color-text-brand-secondary)" } }, post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : "Recent"), /* @__PURE__ */ React44.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-4 group-hover:underline" }, post.title), excerpt && /* @__PURE__ */ React44.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-4 flex-grow line-clamp-3" }, excerpt));
|
|
9583
|
+
})), totalPages > 1 && /* @__PURE__ */ React44.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React44.createElement(
|
|
9247
9584
|
PaginationPageDefault2,
|
|
9248
9585
|
{
|
|
9249
9586
|
rounded: true,
|
|
@@ -9251,7 +9588,7 @@ var BlogGallery2 = ({
|
|
|
9251
9588
|
total: totalPages,
|
|
9252
9589
|
onPageChange: setCurrentPage
|
|
9253
9590
|
}
|
|
9254
|
-
))) : /* @__PURE__ */
|
|
9591
|
+
))) : /* @__PURE__ */ React44.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React44.createElement("p", { className: "font-body text-base text-tertiary" }, "No posts available"))));
|
|
9255
9592
|
};
|
|
9256
9593
|
registerThemeVariant("blog-gallery", "aman", BlogGallery2);
|
|
9257
9594
|
|
|
@@ -9282,7 +9619,7 @@ var BlogPostSection2 = ({
|
|
|
9282
9619
|
registerThemeVariant("blog-post", "aman", BlogPostSection2);
|
|
9283
9620
|
|
|
9284
9621
|
// src/design_system/sections/blog-section.aman.tsx
|
|
9285
|
-
import
|
|
9622
|
+
import React45 from "react";
|
|
9286
9623
|
var BlogSection2 = ({
|
|
9287
9624
|
blogPosts: postsData,
|
|
9288
9625
|
title = "",
|
|
@@ -9301,7 +9638,7 @@ var BlogSection2 = ({
|
|
|
9301
9638
|
return "Recent";
|
|
9302
9639
|
}
|
|
9303
9640
|
};
|
|
9304
|
-
return /* @__PURE__ */
|
|
9641
|
+
return /* @__PURE__ */ React45.createElement("section", null, /* @__PURE__ */ React45.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React45.createElement(
|
|
9305
9642
|
CarouselSectionWrapper,
|
|
9306
9643
|
{
|
|
9307
9644
|
title,
|
|
@@ -9311,14 +9648,14 @@ var BlogSection2 = ({
|
|
|
9311
9648
|
postsArray.map((post) => {
|
|
9312
9649
|
var _a;
|
|
9313
9650
|
const excerpt = ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim().substring(0, 150)) || "";
|
|
9314
|
-
return /* @__PURE__ */
|
|
9651
|
+
return /* @__PURE__ */ React45.createElement(Carousel.Item, { key: post.id, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React45.createElement("a", { href: `/blog/${post.slug}`, className: "flex flex-col h-full group" }, /* @__PURE__ */ React45.createElement("div", { className: "w-full h-64 mb-6 overflow-hidden" }, /* @__PURE__ */ React45.createElement(
|
|
9315
9652
|
PhotoWithFallback2,
|
|
9316
9653
|
{
|
|
9317
9654
|
item: post,
|
|
9318
9655
|
fallbackId: post.id,
|
|
9319
9656
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
9320
9657
|
}
|
|
9321
|
-
)), /* @__PURE__ */
|
|
9658
|
+
)), /* @__PURE__ */ React45.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-2", style: { color: "var(--color-text-brand-secondary)" } }, formatDate4(post.published_at)), /* @__PURE__ */ React45.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-4 group-hover:underline line-clamp-1" }, post.title), excerpt && /* @__PURE__ */ React45.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-4 flex-grow line-clamp-3" }, excerpt)));
|
|
9322
9659
|
})
|
|
9323
9660
|
)));
|
|
9324
9661
|
};
|
|
@@ -9332,9 +9669,9 @@ import { createContext as createContext10 } from "react";
|
|
|
9332
9669
|
var LayoutGroupContext = createContext10({});
|
|
9333
9670
|
|
|
9334
9671
|
// node_modules/framer-motion/dist/es/utils/use-constant.mjs
|
|
9335
|
-
import { useRef as
|
|
9672
|
+
import { useRef as useRef11 } from "react";
|
|
9336
9673
|
function useConstant(init) {
|
|
9337
|
-
const ref =
|
|
9674
|
+
const ref = useRef11(null);
|
|
9338
9675
|
if (ref.current === null) {
|
|
9339
9676
|
ref.current = init();
|
|
9340
9677
|
}
|
|
@@ -9342,13 +9679,13 @@ function useConstant(init) {
|
|
|
9342
9679
|
}
|
|
9343
9680
|
|
|
9344
9681
|
// node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs
|
|
9345
|
-
import { useLayoutEffect, useEffect as
|
|
9682
|
+
import { useLayoutEffect, useEffect as useEffect8 } from "react";
|
|
9346
9683
|
|
|
9347
9684
|
// node_modules/framer-motion/dist/es/utils/is-browser.mjs
|
|
9348
9685
|
var isBrowser = typeof window !== "undefined";
|
|
9349
9686
|
|
|
9350
9687
|
// node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs
|
|
9351
|
-
var useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect :
|
|
9688
|
+
var useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect8;
|
|
9352
9689
|
|
|
9353
9690
|
// node_modules/framer-motion/dist/es/context/PresenceContext.mjs
|
|
9354
9691
|
import { createContext as createContext11 } from "react";
|
|
@@ -12492,14 +12829,14 @@ var MotionConfigContext = createContext12({
|
|
|
12492
12829
|
});
|
|
12493
12830
|
|
|
12494
12831
|
// node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs
|
|
12495
|
-
import { useContext as useContext11, useId as useId4, useEffect as
|
|
12832
|
+
import { useContext as useContext11, useId as useId4, useEffect as useEffect9, useCallback as useCallback6 } from "react";
|
|
12496
12833
|
function usePresence(subscribe = true) {
|
|
12497
12834
|
const context = useContext11(PresenceContext);
|
|
12498
12835
|
if (context === null)
|
|
12499
12836
|
return [true, null];
|
|
12500
12837
|
const { isPresent, onExitComplete, register } = context;
|
|
12501
12838
|
const id3 = useId4();
|
|
12502
|
-
|
|
12839
|
+
useEffect9(() => {
|
|
12503
12840
|
if (subscribe) {
|
|
12504
12841
|
return register(id3);
|
|
12505
12842
|
}
|
|
@@ -13201,7 +13538,7 @@ function useMotionRef(visualState, visualElement, externalRef) {
|
|
|
13201
13538
|
}
|
|
13202
13539
|
|
|
13203
13540
|
// node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs
|
|
13204
|
-
import { useContext as useContext14, useRef as
|
|
13541
|
+
import { useContext as useContext14, useRef as useRef12, useInsertionEffect, useEffect as useEffect10 } from "react";
|
|
13205
13542
|
|
|
13206
13543
|
// node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs
|
|
13207
13544
|
var camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase();
|
|
@@ -13221,7 +13558,7 @@ function useVisualElement(Component2, visualState, props, createVisualElement, P
|
|
|
13221
13558
|
const lazyContext = useContext14(LazyContext);
|
|
13222
13559
|
const presenceContext = useContext14(PresenceContext);
|
|
13223
13560
|
const reducedMotionConfig = useContext14(MotionConfigContext).reducedMotion;
|
|
13224
|
-
const visualElementRef =
|
|
13561
|
+
const visualElementRef = useRef12(null);
|
|
13225
13562
|
createVisualElement = createVisualElement || lazyContext.renderer;
|
|
13226
13563
|
if (!visualElementRef.current && createVisualElement) {
|
|
13227
13564
|
visualElementRef.current = createVisualElement(Component2, {
|
|
@@ -13238,14 +13575,14 @@ function useVisualElement(Component2, visualState, props, createVisualElement, P
|
|
|
13238
13575
|
if (visualElement && !visualElement.projection && ProjectionNodeConstructor && (visualElement.type === "html" || visualElement.type === "svg")) {
|
|
13239
13576
|
createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);
|
|
13240
13577
|
}
|
|
13241
|
-
const isMounted =
|
|
13578
|
+
const isMounted = useRef12(false);
|
|
13242
13579
|
useInsertionEffect(() => {
|
|
13243
13580
|
if (visualElement && isMounted.current) {
|
|
13244
13581
|
visualElement.update(props, presenceContext);
|
|
13245
13582
|
}
|
|
13246
13583
|
});
|
|
13247
13584
|
const optimisedAppearId = props[optimizedAppearDataAttribute];
|
|
13248
|
-
const wantsHandoff =
|
|
13585
|
+
const wantsHandoff = useRef12(Boolean(optimisedAppearId) && !((_a = window.MotionHandoffIsComplete) == null ? void 0 : _a.call(window, optimisedAppearId)) && ((_b = window.MotionHasOptimisedAnimation) == null ? void 0 : _b.call(window, optimisedAppearId)));
|
|
13249
13586
|
useIsomorphicLayoutEffect(() => {
|
|
13250
13587
|
if (!visualElement)
|
|
13251
13588
|
return;
|
|
@@ -13257,7 +13594,7 @@ function useVisualElement(Component2, visualState, props, createVisualElement, P
|
|
|
13257
13594
|
visualElement.animationState.animateChanges();
|
|
13258
13595
|
}
|
|
13259
13596
|
});
|
|
13260
|
-
|
|
13597
|
+
useEffect10(() => {
|
|
13261
13598
|
if (!visualElement)
|
|
13262
13599
|
return;
|
|
13263
13600
|
if (!wantsHandoff.current && visualElement.animationState) {
|
|
@@ -17322,11 +17659,11 @@ var JobDetailHero2 = ({
|
|
|
17322
17659
|
registerThemeVariant("hero-job-detail", "aman", JobDetailHero2);
|
|
17323
17660
|
|
|
17324
17661
|
// src/design_system/sections/job-application-form.aman.tsx
|
|
17325
|
-
import
|
|
17662
|
+
import React46, { useRef as useRef13, useState as useState21 } from "react";
|
|
17326
17663
|
|
|
17327
17664
|
// src/design_system/sections/hero-home.barelux.tsx
|
|
17328
17665
|
import { Fragment as Fragment6, useState as useState22 } from "react";
|
|
17329
|
-
import
|
|
17666
|
+
import React47 from "react";
|
|
17330
17667
|
var HeroHome3 = ({
|
|
17331
17668
|
websitePhotos,
|
|
17332
17669
|
companyInformation,
|
|
@@ -17345,7 +17682,7 @@ var HeroHome3 = ({
|
|
|
17345
17682
|
url: ((_b = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _b.url) || "",
|
|
17346
17683
|
alt: ((_c = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _c.alt) || ""
|
|
17347
17684
|
};
|
|
17348
|
-
return /* @__PURE__ */
|
|
17685
|
+
return /* @__PURE__ */ React47.createElement(Fragment6, null, /* @__PURE__ */ React47.createElement("section", { className: "relative w-full h-[60vh] min-h-[500px] max-h-[550px]" }, /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0" }, /* @__PURE__ */ React47.createElement(
|
|
17349
17686
|
PhotoWithFallback2,
|
|
17350
17687
|
{
|
|
17351
17688
|
photoUrl: heroImage.url,
|
|
@@ -17353,7 +17690,7 @@ var HeroHome3 = ({
|
|
|
17353
17690
|
fallbackId: "hero-home-barelux",
|
|
17354
17691
|
className: "w-full h-full object-cover"
|
|
17355
17692
|
}
|
|
17356
|
-
)), /* @__PURE__ */
|
|
17693
|
+
)), /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 bg-black/50" }), /* @__PURE__ */ React47.createElement("div", { className: "relative h-full flex items-center" }, /* @__PURE__ */ React47.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8 w-full" }, /* @__PURE__ */ React47.createElement("div", { className: "max-w-2xl" }, tagline && /* @__PURE__ */ React47.createElement("p", { className: "font-body text-sm font-semibold uppercase tracking-widest text-white mb-5" }, tagline), /* @__PURE__ */ React47.createElement("h1", { className: "font-display text-display-xl font-normal leading-none text-white mb-4" }, headline), /* @__PURE__ */ React47.createElement("p", { className: "font-body text-base md:text-lg leading-normal text-white mb-6 max-w-xl" }, subhead), ctaText && /* @__PURE__ */ React47.createElement(
|
|
17357
17694
|
Button2,
|
|
17358
17695
|
{
|
|
17359
17696
|
href: effectiveCtaHref,
|
|
@@ -17363,7 +17700,7 @@ var HeroHome3 = ({
|
|
|
17363
17700
|
size: "md"
|
|
17364
17701
|
},
|
|
17365
17702
|
ctaText
|
|
17366
|
-
)))), videoUrl && /* @__PURE__ */
|
|
17703
|
+
)))), videoUrl && /* @__PURE__ */ React47.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React47.createElement(VideoPlayButton, { onClick: () => setShowVideo(true) }))), videoUrl && /* @__PURE__ */ React47.createElement(
|
|
17367
17704
|
VideoModal,
|
|
17368
17705
|
{
|
|
17369
17706
|
isOpen: showVideo,
|
|
@@ -17375,7 +17712,7 @@ var HeroHome3 = ({
|
|
|
17375
17712
|
registerThemeVariant("hero-home", "barelux", HeroHome3);
|
|
17376
17713
|
|
|
17377
17714
|
// src/design_system/sections/header-navigation.barelux.tsx
|
|
17378
|
-
import
|
|
17715
|
+
import React48, { useState as useState23, useRef as useRef14, useCallback as useCallback8 } from "react";
|
|
17379
17716
|
import Link8 from "next/link";
|
|
17380
17717
|
import Image12 from "next/image";
|
|
17381
17718
|
var MAX_DROPDOWN_ITEMS2 = 6;
|
|
@@ -17388,11 +17725,11 @@ function HeaderNavigation3({
|
|
|
17388
17725
|
companyInformation,
|
|
17389
17726
|
websitePhotos
|
|
17390
17727
|
}) {
|
|
17391
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
17728
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
|
|
17392
17729
|
const [activeDropdown, setActiveDropdown] = useState23(null);
|
|
17393
17730
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState23(false);
|
|
17394
|
-
const closeTimeoutRef =
|
|
17395
|
-
|
|
17731
|
+
const closeTimeoutRef = useRef14(null);
|
|
17732
|
+
React48.useEffect(() => {
|
|
17396
17733
|
return () => {
|
|
17397
17734
|
if (closeTimeoutRef.current) {
|
|
17398
17735
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -17448,7 +17785,7 @@ function HeaderNavigation3({
|
|
|
17448
17785
|
viewAllLabel: ""
|
|
17449
17786
|
};
|
|
17450
17787
|
};
|
|
17451
|
-
return /* @__PURE__ */
|
|
17788
|
+
return /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement("header", { className: "hidden md:block sticky top-0 z-50 bg-primary border-b border-primary" }, /* @__PURE__ */ React48.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React48.createElement("div", { className: "flex items-center justify-between py-4" }, /* @__PURE__ */ React48.createElement(Link8, { href: ((_d = props == null ? void 0 : props.logo) == null ? void 0 : _d.href) || "/", className: "flex items-center flex-shrink-0" }, logoUrl ? /* @__PURE__ */ React48.createElement(
|
|
17452
17789
|
Image12,
|
|
17453
17790
|
{
|
|
17454
17791
|
src: logoUrl,
|
|
@@ -17457,7 +17794,7 @@ function HeaderNavigation3({
|
|
|
17457
17794
|
width: 120,
|
|
17458
17795
|
height: 40
|
|
17459
17796
|
}
|
|
17460
|
-
) : /* @__PURE__ */
|
|
17797
|
+
) : /* @__PURE__ */ React48.createElement("span", { className: "font-display text-xl font-normal text-fg-primary" }, companyName)), /* @__PURE__ */ React48.createElement("nav", { className: "flex items-center gap-8 flex-1 ml-12" }, navigation.map((item, i) => /* @__PURE__ */ React48.createElement(
|
|
17461
17798
|
"div",
|
|
17462
17799
|
{
|
|
17463
17800
|
key: i,
|
|
@@ -17465,16 +17802,16 @@ function HeaderNavigation3({
|
|
|
17465
17802
|
onMouseEnter: () => handleMouseEnter(item),
|
|
17466
17803
|
onMouseLeave: handleMouseLeave
|
|
17467
17804
|
},
|
|
17468
|
-
/* @__PURE__ */
|
|
17805
|
+
/* @__PURE__ */ React48.createElement(
|
|
17469
17806
|
Link8,
|
|
17470
17807
|
{
|
|
17471
17808
|
href: item.href,
|
|
17472
17809
|
className: "font-body text-md font-normal text-fg-primary hover:text-brand-accent transition-colors duration-200 flex items-center gap-1 whitespace-nowrap"
|
|
17473
17810
|
},
|
|
17474
17811
|
item.label,
|
|
17475
|
-
item.children && item.children.length > 0 && /* @__PURE__ */
|
|
17812
|
+
item.children && item.children.length > 0 && /* @__PURE__ */ React48.createElement("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React48.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }))
|
|
17476
17813
|
),
|
|
17477
|
-
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */
|
|
17814
|
+
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */ React48.createElement(
|
|
17478
17815
|
"div",
|
|
17479
17816
|
{
|
|
17480
17817
|
className: "absolute left-0 top-full mt-2 w-64 py-3 bg-white border border-secondary rounded-lg shadow-lg z-50",
|
|
@@ -17483,7 +17820,7 @@ function HeaderNavigation3({
|
|
|
17483
17820
|
},
|
|
17484
17821
|
(() => {
|
|
17485
17822
|
const { items, showViewAll, viewAllHref, viewAllLabel } = getDropdownItems(item);
|
|
17486
|
-
return /* @__PURE__ */
|
|
17823
|
+
return /* @__PURE__ */ React48.createElement(React48.Fragment, null, items.map((link, j) => /* @__PURE__ */ React48.createElement(
|
|
17487
17824
|
Link8,
|
|
17488
17825
|
{
|
|
17489
17826
|
key: j,
|
|
@@ -17491,7 +17828,7 @@ function HeaderNavigation3({
|
|
|
17491
17828
|
className: "block font-body text-md text-fg-primary hover:text-brand-accent hover:bg-secondary transition-colors px-4 py-2"
|
|
17492
17829
|
},
|
|
17493
17830
|
link.label
|
|
17494
|
-
)), showViewAll && /* @__PURE__ */
|
|
17831
|
+
)), showViewAll && /* @__PURE__ */ React48.createElement(
|
|
17495
17832
|
Link8,
|
|
17496
17833
|
{
|
|
17497
17834
|
href: viewAllHref,
|
|
@@ -17502,7 +17839,7 @@ function HeaderNavigation3({
|
|
|
17502
17839
|
));
|
|
17503
17840
|
})()
|
|
17504
17841
|
)
|
|
17505
|
-
))), /* @__PURE__ */
|
|
17842
|
+
))), /* @__PURE__ */ React48.createElement("div", { className: "flex items-center gap-3 flex-shrink-0 ml-4" }, ((_e = props == null ? void 0 : props.cta_button) == null ? void 0 : _e.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React48.createElement(
|
|
17506
17843
|
Button2,
|
|
17507
17844
|
{
|
|
17508
17845
|
href: ctaUrls.secondaryHref,
|
|
@@ -17512,25 +17849,25 @@ function HeaderNavigation3({
|
|
|
17512
17849
|
size: "sm"
|
|
17513
17850
|
},
|
|
17514
17851
|
props.cta_button.label
|
|
17515
|
-
), /* @__PURE__ */
|
|
17852
|
+
), /* @__PURE__ */ React48.createElement(
|
|
17516
17853
|
Button2,
|
|
17517
17854
|
{
|
|
17518
17855
|
href: ctaUrls.primaryHref,
|
|
17519
|
-
target: (
|
|
17520
|
-
rel: ((
|
|
17856
|
+
target: (_g = (_f = props == null ? void 0 : props.cta_button) == null ? void 0 : _f.target) != null ? _g : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
17857
|
+
rel: ((_h = props == null ? void 0 : props.cta_button) == null ? void 0 : _h.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
17521
17858
|
color: "primary",
|
|
17522
17859
|
size: "sm"
|
|
17523
17860
|
},
|
|
17524
|
-
((
|
|
17525
|
-
))))), /* @__PURE__ */
|
|
17861
|
+
((_i = props == null ? void 0 : props.cta_button) == null ? void 0 : _i.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_j = props == null ? void 0 : props.cta_button) == null ? void 0 : _j.label) || ""
|
|
17862
|
+
))))), /* @__PURE__ */ React48.createElement("header", { className: "md:hidden sticky top-0 z-50 bg-primary border-b border-secondary" }, /* @__PURE__ */ React48.createElement("div", { className: "flex items-center justify-between px-4 py-4" }, /* @__PURE__ */ React48.createElement(
|
|
17526
17863
|
"button",
|
|
17527
17864
|
{
|
|
17528
17865
|
onClick: () => setIsMobileMenuOpen(true),
|
|
17529
17866
|
className: "text-fg-primary",
|
|
17530
17867
|
"aria-label": "Open menu"
|
|
17531
17868
|
},
|
|
17532
|
-
/* @__PURE__ */
|
|
17533
|
-
), /* @__PURE__ */
|
|
17869
|
+
/* @__PURE__ */ React48.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React48.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h16M4 18h16" }))
|
|
17870
|
+
), /* @__PURE__ */ React48.createElement(Link8, { href: ((_k = props == null ? void 0 : props.logo) == null ? void 0 : _k.href) || "/", className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React48.createElement(
|
|
17534
17871
|
Image12,
|
|
17535
17872
|
{
|
|
17536
17873
|
src: logoUrl,
|
|
@@ -17539,15 +17876,15 @@ function HeaderNavigation3({
|
|
|
17539
17876
|
width: 120,
|
|
17540
17877
|
height: 32
|
|
17541
17878
|
}
|
|
17542
|
-
) : /* @__PURE__ */
|
|
17879
|
+
) : /* @__PURE__ */ React48.createElement("span", { className: "font-display text-lg font-normal text-fg-primary" }, companyName)), /* @__PURE__ */ React48.createElement("div", { className: "w-6" }))), isMobileMenuOpen && /* @__PURE__ */ React48.createElement("div", { className: "fixed inset-0 bg-white z-50 md:hidden" }, /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col h-full" }, /* @__PURE__ */ React48.createElement("div", { className: "flex items-center justify-between px-4 py-4 border-b border-secondary" }, /* @__PURE__ */ React48.createElement(
|
|
17543
17880
|
"button",
|
|
17544
17881
|
{
|
|
17545
17882
|
onClick: () => setIsMobileMenuOpen(false),
|
|
17546
17883
|
className: "text-fg-primary",
|
|
17547
17884
|
"aria-label": "Close menu"
|
|
17548
17885
|
},
|
|
17549
|
-
/* @__PURE__ */
|
|
17550
|
-
), /* @__PURE__ */
|
|
17886
|
+
/* @__PURE__ */ React48.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React48.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
17887
|
+
), /* @__PURE__ */ React48.createElement("div", { className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React48.createElement(
|
|
17551
17888
|
Image12,
|
|
17552
17889
|
{
|
|
17553
17890
|
src: logoUrl,
|
|
@@ -17556,9 +17893,9 @@ function HeaderNavigation3({
|
|
|
17556
17893
|
width: 120,
|
|
17557
17894
|
height: 32
|
|
17558
17895
|
}
|
|
17559
|
-
) : /* @__PURE__ */
|
|
17896
|
+
) : /* @__PURE__ */ React48.createElement("span", { className: "font-display text-lg font-normal text-fg-primary" }, companyName)), /* @__PURE__ */ React48.createElement("div", { className: "w-6" })), /* @__PURE__ */ React48.createElement("nav", { className: "flex-1 overflow-y-auto px-4 py-8" }, /* @__PURE__ */ React48.createElement("ul", { className: "space-y-4" }, navigation.map((item, i) => {
|
|
17560
17897
|
const { items } = getDropdownItems(item);
|
|
17561
|
-
return /* @__PURE__ */
|
|
17898
|
+
return /* @__PURE__ */ React48.createElement("li", { key: i }, /* @__PURE__ */ React48.createElement(
|
|
17562
17899
|
Link8,
|
|
17563
17900
|
{
|
|
17564
17901
|
href: item.href,
|
|
@@ -17566,7 +17903,7 @@ function HeaderNavigation3({
|
|
|
17566
17903
|
onClick: () => setIsMobileMenuOpen(false)
|
|
17567
17904
|
},
|
|
17568
17905
|
item.label
|
|
17569
|
-
), items.length > 0 && /* @__PURE__ */
|
|
17906
|
+
), items.length > 0 && /* @__PURE__ */ React48.createElement("ul", { className: "ml-4 mt-2 space-y-2" }, items.map((link, j) => /* @__PURE__ */ React48.createElement("li", { key: j }, /* @__PURE__ */ React48.createElement(
|
|
17570
17907
|
Link8,
|
|
17571
17908
|
{
|
|
17572
17909
|
href: link.href,
|
|
@@ -17575,7 +17912,7 @@ function HeaderNavigation3({
|
|
|
17575
17912
|
},
|
|
17576
17913
|
link.label
|
|
17577
17914
|
)))));
|
|
17578
|
-
}))), /* @__PURE__ */
|
|
17915
|
+
}))), /* @__PURE__ */ React48.createElement("div", { className: "border-t border-secondary px-4 py-6" }, /* @__PURE__ */ React48.createElement("div", { className: "flex flex-col gap-3" }, ((_l = props == null ? void 0 : props.cta_button) == null ? void 0 : _l.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React48.createElement(
|
|
17579
17916
|
Button2,
|
|
17580
17917
|
{
|
|
17581
17918
|
href: ctaUrls.secondaryHref,
|
|
@@ -17585,7 +17922,7 @@ function HeaderNavigation3({
|
|
|
17585
17922
|
onClick: () => setIsMobileMenuOpen(false)
|
|
17586
17923
|
},
|
|
17587
17924
|
props.cta_button.secondary_label
|
|
17588
|
-
), /* @__PURE__ */
|
|
17925
|
+
), /* @__PURE__ */ React48.createElement(
|
|
17589
17926
|
Button2,
|
|
17590
17927
|
{
|
|
17591
17928
|
href: ctaUrls.primaryHref,
|
|
@@ -17594,8 +17931,8 @@ function HeaderNavigation3({
|
|
|
17594
17931
|
className: "w-full",
|
|
17595
17932
|
onClick: () => setIsMobileMenuOpen(false)
|
|
17596
17933
|
},
|
|
17597
|
-
((
|
|
17598
|
-
))))), /* @__PURE__ */
|
|
17934
|
+
((_m = props == null ? void 0 : props.cta_button) == null ? void 0 : _m.label) || ""
|
|
17935
|
+
))))), /* @__PURE__ */ React48.createElement("div", { className: "fixed bottom-0 left-0 right-0 z-40 md:hidden bg-fg-primary" }, /* @__PURE__ */ React48.createElement("div", { className: "flex gap-0" }, ((_n = props == null ? void 0 : props.cta_button) == null ? void 0 : _n.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React48.createElement(
|
|
17599
17936
|
Button2,
|
|
17600
17937
|
{
|
|
17601
17938
|
href: ctaUrls.secondaryHref,
|
|
@@ -17605,38 +17942,38 @@ function HeaderNavigation3({
|
|
|
17605
17942
|
className: "flex-1 font-body text-sm uppercase tracking-wide py-4 rounded-none border-r border-white/20"
|
|
17606
17943
|
},
|
|
17607
17944
|
props.cta_button.label
|
|
17608
|
-
), /* @__PURE__ */
|
|
17945
|
+
), /* @__PURE__ */ React48.createElement(
|
|
17609
17946
|
Button2,
|
|
17610
17947
|
{
|
|
17611
17948
|
href: ctaUrls.primaryHref,
|
|
17612
|
-
target: (
|
|
17613
|
-
rel: ((
|
|
17949
|
+
target: (_p = (_o = props == null ? void 0 : props.cta_button) == null ? void 0 : _o.target) != null ? _p : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
17950
|
+
rel: ((_q = props == null ? void 0 : props.cta_button) == null ? void 0 : _q.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
17614
17951
|
color: "primary",
|
|
17615
|
-
className: `${((
|
|
17952
|
+
className: `${((_r = props == null ? void 0 : props.cta_button) == null ? void 0 : _r.secondary_label) && ctaUrls.hasSecondary ? "flex-1" : "w-full"} font-body text-sm uppercase tracking-wide py-4 rounded-none`
|
|
17616
17953
|
},
|
|
17617
|
-
((
|
|
17954
|
+
((_s = props == null ? void 0 : props.cta_button) == null ? void 0 : _s.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_t = props == null ? void 0 : props.cta_button) == null ? void 0 : _t.label) || "Contact"
|
|
17618
17955
|
))));
|
|
17619
17956
|
}
|
|
17620
17957
|
registerThemeVariant("header-navigation", "barelux", HeaderNavigation3);
|
|
17621
17958
|
|
|
17622
17959
|
// src/design_system/sections/services-home.barelux.tsx
|
|
17623
|
-
import
|
|
17960
|
+
import React49 from "react";
|
|
17624
17961
|
var ServicesHome3 = ({
|
|
17625
17962
|
services = [],
|
|
17626
17963
|
title = "",
|
|
17627
17964
|
subtitle = ""
|
|
17628
17965
|
}) => {
|
|
17629
17966
|
const displayServices = services;
|
|
17630
|
-
return /* @__PURE__ */
|
|
17967
|
+
return /* @__PURE__ */ React49.createElement("section", { className: "py-16 md:py-20 lg:py-24 bg-secondary" }, /* @__PURE__ */ React49.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React49.createElement("div", { className: "mx-auto max-w-3xl text-center mb-12" }, /* @__PURE__ */ React49.createElement("h2", { className: "font-display text-display-md font-normal text-fg-primary mb-4" }, title), /* @__PURE__ */ React49.createElement("p", { className: "font-body text-base text-secondary leading-normal" }, subtitle)), /* @__PURE__ */ React49.createElement("div", { className: "flex flex-wrap justify-center gap-6" }, displayServices.map((service) => {
|
|
17631
17968
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
17632
|
-
return /* @__PURE__ */
|
|
17969
|
+
return /* @__PURE__ */ React49.createElement(
|
|
17633
17970
|
"a",
|
|
17634
17971
|
{
|
|
17635
17972
|
key: service.id,
|
|
17636
17973
|
href: `/services/${service.slug}`,
|
|
17637
17974
|
className: "group block bg-white rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-300 w-full md:w-[calc(50%-0.75rem)] lg:w-[calc(25%-1.125rem)] flex flex-col"
|
|
17638
17975
|
},
|
|
17639
|
-
/* @__PURE__ */
|
|
17976
|
+
/* @__PURE__ */ React49.createElement("div", { className: "relative w-full h-56 overflow-hidden flex-shrink-0" }, /* @__PURE__ */ React49.createElement(
|
|
17640
17977
|
PhotoWithFallback2,
|
|
17641
17978
|
{
|
|
17642
17979
|
photoUrl: ((_c = (_b = (_a = service.photo_attachments) == null ? void 0 : _a[0]) == null ? void 0 : _b.photo) == null ? void 0 : _c.large_url) || ((_f = (_e = (_d = service.photo_attachments) == null ? void 0 : _d[0]) == null ? void 0 : _e.photo) == null ? void 0 : _f.medium_url) || "",
|
|
@@ -17645,7 +17982,7 @@ var ServicesHome3 = ({
|
|
|
17645
17982
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
17646
17983
|
}
|
|
17647
17984
|
)),
|
|
17648
|
-
/* @__PURE__ */
|
|
17985
|
+
/* @__PURE__ */ React49.createElement("div", { className: "p-6" }, /* @__PURE__ */ React49.createElement("h3", { className: "font-body text-base font-semibold uppercase tracking-wide text-fg-primary mb-3 leading-tight" }, service.name), service.summary && /* @__PURE__ */ React49.createElement("p", { className: "font-body text-sm text-tertiary leading-relaxed" }, service.summary))
|
|
17649
17986
|
);
|
|
17650
17987
|
}))));
|
|
17651
17988
|
};
|
|
@@ -17695,7 +18032,7 @@ var AboutHome3 = ({
|
|
|
17695
18032
|
registerThemeVariant("about-home", "barelux", AboutHome3);
|
|
17696
18033
|
|
|
17697
18034
|
// src/design_system/sections/testimonials-home.barelux.tsx
|
|
17698
|
-
import
|
|
18035
|
+
import React50 from "react";
|
|
17699
18036
|
import { ChevronLeft as ChevronLeft7, ChevronRight as ChevronRight2 } from "@untitledui/icons";
|
|
17700
18037
|
var TestimonialsHome3 = ({
|
|
17701
18038
|
testimonials: testimonialsData,
|
|
@@ -17706,7 +18043,7 @@ var TestimonialsHome3 = ({
|
|
|
17706
18043
|
emptyMessage = "No testimonials available"
|
|
17707
18044
|
}) => {
|
|
17708
18045
|
const testimonials = Array.isArray(testimonialsData) ? testimonialsData : [];
|
|
17709
|
-
return /* @__PURE__ */
|
|
18046
|
+
return /* @__PURE__ */ React50.createElement("section", { className: "py-16 md:py-20 lg:py-24 bg-secondary" }, /* @__PURE__ */ React50.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React50.createElement("div", { className: "mx-auto max-w-3xl text-center mb-12 md:mb-16" }, /* @__PURE__ */ React50.createElement("h2", { className: "font-display text-4xl font-medium text-fg-primary md:text-5xl mb-4" }, title), /* @__PURE__ */ React50.createElement("p", { className: "font-body text-lg text-secondary leading-normal" }, subtitle)), testimonials.length > 0 ? /* @__PURE__ */ React50.createElement(Carousel.Root, { opts: { align: "start", loop: true } }, /* @__PURE__ */ React50.createElement("div", { className: "flex items-center justify-end mb-8" }, /* @__PURE__ */ React50.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React50.createElement(Carousel.PrevTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React50.createElement(ChevronLeft7, { className: "w-6 h-6 text-fg-primary" })), /* @__PURE__ */ React50.createElement(Carousel.NextTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React50.createElement(ChevronRight2, { className: "w-6 h-6 text-fg-primary" })))), /* @__PURE__ */ React50.createElement(Carousel.Content, { className: "-ml-4" }, testimonials.map((testimonial, i) => {
|
|
17710
18047
|
var _a;
|
|
17711
18048
|
const quote = ((_a = testimonial.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
17712
18049
|
const reviewerName = testimonial.reviewer_name || "";
|
|
@@ -17714,7 +18051,7 @@ var TestimonialsHome3 = ({
|
|
|
17714
18051
|
const avatarUrl = getAvatarUrl(testimonial.photo_attachments, testimonial.id, reviewerName);
|
|
17715
18052
|
const rating = testimonial.rating || 5;
|
|
17716
18053
|
const isVerified = true;
|
|
17717
|
-
return /* @__PURE__ */
|
|
18054
|
+
return /* @__PURE__ */ React50.createElement(Carousel.Item, { key: testimonial.id || i, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React50.createElement("div", { className: "bg-white rounded-2xl p-8 flex flex-col shadow-sm", style: { minHeight: "400px" } }, /* @__PURE__ */ React50.createElement("div", { className: "flex gap-1 mb-6" }, Array.from({ length: 5 }).map((_, starIdx) => /* @__PURE__ */ React50.createElement(
|
|
17718
18055
|
"svg",
|
|
17719
18056
|
{
|
|
17720
18057
|
key: starIdx,
|
|
@@ -17726,8 +18063,8 @@ var TestimonialsHome3 = ({
|
|
|
17726
18063
|
strokeWidth: "2",
|
|
17727
18064
|
viewBox: "0 0 24 24"
|
|
17728
18065
|
},
|
|
17729
|
-
/* @__PURE__ */
|
|
17730
|
-
))), /* @__PURE__ */
|
|
18066
|
+
/* @__PURE__ */ React50.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
|
|
18067
|
+
))), /* @__PURE__ */ React50.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-6 flex-grow" }, '"', quote, '"'), /* @__PURE__ */ React50.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React50.createElement("div", { className: "w-12 h-12 rounded-full overflow-hidden flex-shrink-0" }, /* @__PURE__ */ React50.createElement(
|
|
17731
18068
|
PhotoWithFallback2,
|
|
17732
18069
|
{
|
|
17733
18070
|
photoUrl: avatarUrl,
|
|
@@ -17735,8 +18072,8 @@ var TestimonialsHome3 = ({
|
|
|
17735
18072
|
fallbackId: testimonial.id || i,
|
|
17736
18073
|
className: "w-full h-full object-cover"
|
|
17737
18074
|
}
|
|
17738
|
-
)), /* @__PURE__ */
|
|
17739
|
-
}))) : /* @__PURE__ */
|
|
18075
|
+
)), /* @__PURE__ */ React50.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React50.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React50.createElement("p", { className: "font-body text-sm font-medium text-fg-primary" }, reviewerName), isVerified && /* @__PURE__ */ React50.createElement("svg", { className: "w-4 h-4 text-fg-primary", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React50.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z", clipRule: "evenodd" }))), /* @__PURE__ */ React50.createElement("p", { className: "font-body text-xs", style: { color: "var(--color-text-brand-secondary)" } }, username)))));
|
|
18076
|
+
}))) : /* @__PURE__ */ React50.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React50.createElement("p", { className: "font-body text-base text-tertiary" }, emptyMessage)), testimonials.length > 0 && viewAllText && /* @__PURE__ */ React50.createElement("div", { className: "mt-12 text-center" }, /* @__PURE__ */ React50.createElement(
|
|
17740
18077
|
Button2,
|
|
17741
18078
|
{
|
|
17742
18079
|
href: viewAllHref,
|
|
@@ -17749,7 +18086,7 @@ var TestimonialsHome3 = ({
|
|
|
17749
18086
|
registerThemeVariant("testimonials-home", "barelux", TestimonialsHome3);
|
|
17750
18087
|
|
|
17751
18088
|
// src/design_system/sections/blog-section.barelux.tsx
|
|
17752
|
-
import
|
|
18089
|
+
import React51 from "react";
|
|
17753
18090
|
import { ChevronLeft as ChevronLeft8, ChevronRight as ChevronRight3 } from "@untitledui/icons";
|
|
17754
18091
|
var BlogSection3 = ({
|
|
17755
18092
|
blogPosts: postsData,
|
|
@@ -17774,18 +18111,18 @@ var BlogSection3 = ({
|
|
|
17774
18111
|
return recentLabel;
|
|
17775
18112
|
}
|
|
17776
18113
|
};
|
|
17777
|
-
return /* @__PURE__ */
|
|
18114
|
+
return /* @__PURE__ */ React51.createElement("section", { className: "py-16 md:py-20 lg:py-24 bg-primary" }, /* @__PURE__ */ React51.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React51.createElement("div", { className: "mx-auto max-w-3xl text-center mb-12 md:mb-16" }, /* @__PURE__ */ React51.createElement("h2", { className: "font-display text-4xl font-medium text-fg-primary md:text-5xl mb-4" }, title), /* @__PURE__ */ React51.createElement("p", { className: "font-body text-lg text-secondary leading-normal" }, subtitle)), postsArray.length > 0 ? /* @__PURE__ */ React51.createElement(Carousel.Root, { opts: { align: "start", loop: true } }, /* @__PURE__ */ React51.createElement("div", { className: "flex items-center justify-end mb-8" }, /* @__PURE__ */ React51.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React51.createElement(Carousel.PrevTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React51.createElement(ChevronLeft8, { className: "w-6 h-6 text-fg-primary" })), /* @__PURE__ */ React51.createElement(Carousel.NextTrigger, { className: "rounded-full p-2 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React51.createElement(ChevronRight3, { className: "w-6 h-6 text-fg-primary" })))), /* @__PURE__ */ React51.createElement(Carousel.Content, { className: "-ml-4" }, postsArray.map((post) => {
|
|
17778
18115
|
var _a;
|
|
17779
18116
|
const excerpt = ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim().substring(0, 150)) || "";
|
|
17780
|
-
return /* @__PURE__ */
|
|
18117
|
+
return /* @__PURE__ */ React51.createElement(Carousel.Item, { key: post.id, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React51.createElement("a", { href: `/blog/${post.slug}`, className: "flex flex-col group" }, /* @__PURE__ */ React51.createElement("div", { className: "w-full h-64 mb-6 overflow-hidden rounded-2xl" }, /* @__PURE__ */ React51.createElement(
|
|
17781
18118
|
PhotoWithFallback2,
|
|
17782
18119
|
{
|
|
17783
18120
|
item: post,
|
|
17784
18121
|
fallbackId: post.id,
|
|
17785
18122
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
17786
18123
|
}
|
|
17787
|
-
)), /* @__PURE__ */
|
|
17788
|
-
}))) : /* @__PURE__ */
|
|
18124
|
+
)), /* @__PURE__ */ React51.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-2", style: { color: "var(--color-text-brand-secondary)" } }, formatDate4(post.published_at)), /* @__PURE__ */ React51.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-4 group-hover:underline line-clamp-2" }, post.title), excerpt && /* @__PURE__ */ React51.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-4 line-clamp-3" }, excerpt)));
|
|
18125
|
+
}))) : /* @__PURE__ */ React51.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React51.createElement("p", { className: "font-body text-base text-tertiary" }, emptyMessage)), postsArray.length > 0 && viewAllText && /* @__PURE__ */ React51.createElement("div", { className: "mt-12 text-center" }, /* @__PURE__ */ React51.createElement(
|
|
17789
18126
|
Button2,
|
|
17790
18127
|
{
|
|
17791
18128
|
href: viewAllHref,
|
|
@@ -17798,7 +18135,7 @@ var BlogSection3 = ({
|
|
|
17798
18135
|
registerThemeVariant("blog-section", "barelux", BlogSection3);
|
|
17799
18136
|
|
|
17800
18137
|
// src/design_system/sections/blog-gallery.barelux.tsx
|
|
17801
|
-
import
|
|
18138
|
+
import React52, { useState as useState24 } from "react";
|
|
17802
18139
|
var BlogGallery3 = ({
|
|
17803
18140
|
blogPosts: postsData,
|
|
17804
18141
|
postsPerPage = 12,
|
|
@@ -17816,13 +18153,13 @@ var BlogGallery3 = ({
|
|
|
17816
18153
|
const startIndex = (currentPage - 1) * postsPerPage;
|
|
17817
18154
|
const endIndex = startIndex + postsPerPage;
|
|
17818
18155
|
const paginatedNonFeaturedPosts = nonFeaturedPosts.slice(startIndex, endIndex);
|
|
17819
|
-
return /* @__PURE__ */
|
|
18156
|
+
return /* @__PURE__ */ React52.createElement("section", { className: `py-16 md:py-20 lg:py-24 bg-primary ${className}` }, /* @__PURE__ */ React52.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React52.createElement("div", { className: "mx-auto max-w-3xl text-center mb-12 md:mb-16" }, /* @__PURE__ */ React52.createElement("h1", { className: "font-display text-4xl font-medium text-fg-primary md:text-5xl mb-4" }, title), /* @__PURE__ */ React52.createElement("p", { className: "font-body text-lg text-secondary leading-normal" }, subtitle)), posts.length > 0 ? /* @__PURE__ */ React52.createElement(React52.Fragment, null, featuredPost && /* @__PURE__ */ React52.createElement(
|
|
17820
18157
|
"a",
|
|
17821
18158
|
{
|
|
17822
18159
|
href: `/blog/${featuredPost.slug}`,
|
|
17823
18160
|
className: "block mb-16 group"
|
|
17824
18161
|
},
|
|
17825
|
-
/* @__PURE__ */
|
|
18162
|
+
/* @__PURE__ */ React52.createElement("div", { className: "w-full h-96 md:h-[500px] mb-8 overflow-hidden rounded-2xl" }, /* @__PURE__ */ React52.createElement(
|
|
17826
18163
|
PhotoWithFallback2,
|
|
17827
18164
|
{
|
|
17828
18165
|
item: featuredPost,
|
|
@@ -17830,19 +18167,19 @@ var BlogGallery3 = ({
|
|
|
17830
18167
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
17831
18168
|
}
|
|
17832
18169
|
)),
|
|
17833
|
-
/* @__PURE__ */
|
|
17834
|
-
), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */
|
|
18170
|
+
/* @__PURE__ */ React52.createElement("div", { className: "max-w-3xl" }, /* @__PURE__ */ React52.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-4", style: { color: "var(--color-text-brand-secondary)" } }, featuredPost.published_at ? new Date(featuredPost.published_at).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : recentLabel), /* @__PURE__ */ React52.createElement("h2", { className: "font-display text-3xl md:text-4xl font-normal text-fg-primary mb-6 group-hover:underline" }, featuredPost.title), featuredPost.excerpt_markdown && /* @__PURE__ */ React52.createElement("p", { className: "font-body text-lg leading-relaxed text-tertiary" }, featuredPost.excerpt_markdown.replace(/[#*\[\]()]/g, "").trim()))
|
|
18171
|
+
), paginatedNonFeaturedPosts.length > 0 && /* @__PURE__ */ React52.createElement("div", { className: "grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3 mb-16" }, paginatedNonFeaturedPosts.map((post) => {
|
|
17835
18172
|
var _a;
|
|
17836
18173
|
const excerpt = post.excerpt_markdown || ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim().substring(0, 150)) || "";
|
|
17837
|
-
return /* @__PURE__ */
|
|
18174
|
+
return /* @__PURE__ */ React52.createElement("a", { key: post.id, href: `/blog/${post.slug}`, className: "flex flex-col group" }, /* @__PURE__ */ React52.createElement("div", { className: "w-full h-64 mb-6 overflow-hidden rounded-2xl" }, /* @__PURE__ */ React52.createElement(
|
|
17838
18175
|
PhotoWithFallback2,
|
|
17839
18176
|
{
|
|
17840
18177
|
item: post,
|
|
17841
18178
|
fallbackId: post.id,
|
|
17842
18179
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
17843
18180
|
}
|
|
17844
|
-
)), /* @__PURE__ */
|
|
17845
|
-
})), totalPages > 1 && /* @__PURE__ */
|
|
18181
|
+
)), /* @__PURE__ */ React52.createElement("p", { className: "text-xs font-body font-normal uppercase tracking-widest mb-2", style: { color: "var(--color-text-brand-secondary)" } }, post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" }) : recentLabel), /* @__PURE__ */ React52.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-4 group-hover:underline line-clamp-2" }, post.title), excerpt && /* @__PURE__ */ React52.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-4 flex-grow line-clamp-3" }, excerpt));
|
|
18182
|
+
})), totalPages > 1 && /* @__PURE__ */ React52.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ React52.createElement(
|
|
17846
18183
|
PaginationPageDefault2,
|
|
17847
18184
|
{
|
|
17848
18185
|
rounded: true,
|
|
@@ -17850,23 +18187,27 @@ var BlogGallery3 = ({
|
|
|
17850
18187
|
total: totalPages,
|
|
17851
18188
|
onPageChange: setCurrentPage
|
|
17852
18189
|
}
|
|
17853
|
-
))) : /* @__PURE__ */
|
|
18190
|
+
))) : /* @__PURE__ */ React52.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React52.createElement("p", { className: "font-body text-base text-tertiary" }, emptyMessage))));
|
|
17854
18191
|
};
|
|
17855
18192
|
registerThemeVariant("blog-gallery", "barelux", BlogGallery3);
|
|
17856
18193
|
|
|
17857
18194
|
// src/design_system/sections/social-media-grid.barelux.tsx
|
|
17858
18195
|
function getPostImageUrls3(post) {
|
|
17859
|
-
var _a;
|
|
17860
|
-
|
|
18196
|
+
var _a, _b;
|
|
18197
|
+
const videoSet = ((_a = post.video_urls) == null ? void 0 : _a.length) ? new Set(post.video_urls) : null;
|
|
18198
|
+
const isVideo = (url) => isVideoUrl(url) || videoSet !== null && videoSet.has(url);
|
|
18199
|
+
if ((_b = post.image_urls) == null ? void 0 : _b.length) {
|
|
18200
|
+
return post.image_urls.filter((url) => !isVideo(url));
|
|
18201
|
+
}
|
|
17861
18202
|
const attachments = post.photo_attachments || [];
|
|
17862
18203
|
const sorted = [...attachments].sort((a, b) => {
|
|
17863
|
-
var _a2,
|
|
17864
|
-
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((
|
|
18204
|
+
var _a2, _b2;
|
|
18205
|
+
return ((_a2 = a.sort_order) != null ? _a2 : 0) - ((_b2 = b.sort_order) != null ? _b2 : 0);
|
|
17865
18206
|
});
|
|
17866
18207
|
return sorted.map((pa) => {
|
|
17867
|
-
var _a2,
|
|
17868
|
-
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((
|
|
17869
|
-
}).filter((url) => Boolean(url));
|
|
18208
|
+
var _a2, _b2, _c, _d;
|
|
18209
|
+
return ((_a2 = pa.photo) == null ? void 0 : _a2.large_url) || ((_b2 = pa.photo) == null ? void 0 : _b2.original_url) || ((_c = pa.photo) == null ? void 0 : _c.medium_url) || ((_d = pa.photo) == null ? void 0 : _d.thumbnail_url);
|
|
18210
|
+
}).filter((url) => Boolean(url)).filter((url) => !isVideo(url));
|
|
17870
18211
|
}
|
|
17871
18212
|
var formatDate3 = (dateString, recentLabel = "Recent") => {
|
|
17872
18213
|
if (!dateString) return recentLabel;
|
|
@@ -17941,23 +18282,25 @@ var SocialMediaGrid3 = ({
|
|
|
17941
18282
|
registerThemeVariant("social-media-grid", "barelux", SocialMediaGrid3);
|
|
17942
18283
|
|
|
17943
18284
|
// src/design_system/sections/contact-section.barelux.tsx
|
|
17944
|
-
import
|
|
18285
|
+
import React54 from "react";
|
|
17945
18286
|
|
|
17946
18287
|
// src/design_system/sections/contact-section-form.barelux.tsx
|
|
17947
|
-
import
|
|
18288
|
+
import React53, { useRef as useRef15, useState as useState25 } from "react";
|
|
17948
18289
|
var ContactSectionForm3 = ({
|
|
17949
18290
|
formDefinition,
|
|
17950
18291
|
submitButtonText = "Send message",
|
|
17951
18292
|
successMessage = "Thank you for contacting us! We'll get back to you soon.",
|
|
17952
18293
|
thankYouMessage,
|
|
17953
|
-
onSuccess
|
|
18294
|
+
onSuccess,
|
|
18295
|
+
privacyPolicyUrl,
|
|
18296
|
+
termsOfServiceUrl
|
|
17954
18297
|
}) => {
|
|
17955
18298
|
const { leadFormDefinition } = useFormDefinitions();
|
|
17956
18299
|
const resolvedFormDefinition = formDefinition != null ? formDefinition : leadFormDefinition;
|
|
17957
18300
|
const [isSubmitting, setIsSubmitting] = useState25(false);
|
|
17958
18301
|
const [submitStatus, setSubmitStatus] = useState25("idle");
|
|
17959
18302
|
const [statusMessage, setStatusMessage] = useState25("");
|
|
17960
|
-
const formRef =
|
|
18303
|
+
const formRef = useRef15(null);
|
|
17961
18304
|
const hasFields = resolvedFormDefinition != null && Array.isArray(resolvedFormDefinition.fields) && resolvedFormDefinition.fields.length > 0;
|
|
17962
18305
|
const handleSubmit = async (e) => {
|
|
17963
18306
|
var _a;
|
|
@@ -17968,7 +18311,8 @@ var ContactSectionForm3 = ({
|
|
|
17968
18311
|
const formData = new FormData(e.currentTarget);
|
|
17969
18312
|
const data = { formType: "lead" };
|
|
17970
18313
|
formData.forEach((value, key) => {
|
|
17971
|
-
if (key
|
|
18314
|
+
if (key.endsWith("_prefix")) return;
|
|
18315
|
+
if (typeof value === "string") data[key] = value;
|
|
17972
18316
|
});
|
|
17973
18317
|
try {
|
|
17974
18318
|
const response = await fetch("/api/form/", {
|
|
@@ -17995,7 +18339,14 @@ var ContactSectionForm3 = ({
|
|
|
17995
18339
|
setIsSubmitting(false);
|
|
17996
18340
|
};
|
|
17997
18341
|
if (!hasFields) return null;
|
|
17998
|
-
return /* @__PURE__ */
|
|
18342
|
+
return /* @__PURE__ */ React53.createElement(Form2, { ref: formRef, onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ React53.createElement(
|
|
18343
|
+
DynamicFormFields,
|
|
18344
|
+
{
|
|
18345
|
+
form: resolvedFormDefinition,
|
|
18346
|
+
privacyPolicyUrl,
|
|
18347
|
+
termsOfServiceUrl
|
|
18348
|
+
}
|
|
18349
|
+
), /* @__PURE__ */ React53.createElement(
|
|
17999
18350
|
Button2,
|
|
18000
18351
|
{
|
|
18001
18352
|
type: "submit",
|
|
@@ -18006,21 +18357,38 @@ var ContactSectionForm3 = ({
|
|
|
18006
18357
|
isLoading: isSubmitting
|
|
18007
18358
|
},
|
|
18008
18359
|
submitStatus === "success" ? successMessage.split("!")[0] + "!" : isSubmitting ? "Sending..." : submitButtonText
|
|
18009
|
-
), submitStatus === "success" && /* @__PURE__ */
|
|
18360
|
+
), submitStatus === "success" && /* @__PURE__ */ React53.createElement("div", { className: "font-body text-sm text-center", style: { color: "var(--color-text-brand-accent)" } }, thankYouMessage != null ? thankYouMessage : statusMessage), submitStatus === "error" && /* @__PURE__ */ React53.createElement("div", { className: "rounded-lg bg-error-50 p-4 text-error-700 font-body text-sm text-center" }, statusMessage));
|
|
18010
18361
|
};
|
|
18011
18362
|
|
|
18012
18363
|
// src/design_system/sections/contact-section.barelux.tsx
|
|
18364
|
+
function getLegalUrlsFromConfig3(config) {
|
|
18365
|
+
var _a, _b, _c;
|
|
18366
|
+
if (!((_a = config == null ? void 0 : config.navigation) == null ? void 0 : _a.footer)) return {};
|
|
18367
|
+
const flat = config.navigation.footer.flat();
|
|
18368
|
+
const privacy = (_b = flat.find((l) => l.label === "Privacy Policy")) == null ? void 0 : _b.href;
|
|
18369
|
+
const terms = (_c = flat.find((l) => l.label === "Terms of Service")) == null ? void 0 : _c.href;
|
|
18370
|
+
return { privacyPolicyUrl: privacy, termsOfServiceUrl: terms };
|
|
18371
|
+
}
|
|
18013
18372
|
var ContactSection3 = ({
|
|
18014
18373
|
websitePhotos,
|
|
18015
18374
|
title = "",
|
|
18016
18375
|
subtitle = "",
|
|
18017
|
-
formDefinition
|
|
18376
|
+
formDefinition,
|
|
18377
|
+
config
|
|
18018
18378
|
}) => {
|
|
18379
|
+
const { privacyPolicyUrl, termsOfServiceUrl } = getLegalUrlsFromConfig3(config);
|
|
18019
18380
|
const contactPhoto = websitePhotos == null ? void 0 : websitePhotos.contact;
|
|
18020
18381
|
const contactImageUrl = contactPhoto == null ? void 0 : contactPhoto.url;
|
|
18021
18382
|
const finalContactImage = contactImageUrl && contactImageUrl.trim() !== "" ? contactImageUrl : void 0;
|
|
18022
18383
|
const finalContactImageAlt = (contactPhoto == null ? void 0 : contactPhoto.alt) || "Contact image";
|
|
18023
|
-
return /* @__PURE__ */
|
|
18384
|
+
return /* @__PURE__ */ React54.createElement("section", { className: "py-16 md:py-20 lg:py-24 bg-primary" }, /* @__PURE__ */ React54.createElement("div", { className: "mx-auto max-w-7xl px-4 md:px-8" }, /* @__PURE__ */ React54.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-16" }, /* @__PURE__ */ React54.createElement("div", null, /* @__PURE__ */ React54.createElement("h2", { className: "font-display text-4xl font-medium text-fg-primary md:text-5xl mb-6" }, title), /* @__PURE__ */ React54.createElement("p", { className: "font-body text-lg text-secondary leading-relaxed mb-8" }, subtitle), /* @__PURE__ */ React54.createElement(
|
|
18385
|
+
ContactSectionForm3,
|
|
18386
|
+
{
|
|
18387
|
+
formDefinition,
|
|
18388
|
+
privacyPolicyUrl,
|
|
18389
|
+
termsOfServiceUrl
|
|
18390
|
+
}
|
|
18391
|
+
)), finalContactImage && /* @__PURE__ */ React54.createElement("div", { className: "max-lg:hidden relative h-full min-h-0 overflow-hidden rounded-lg" }, /* @__PURE__ */ React54.createElement(
|
|
18024
18392
|
PhotoWithFallback2,
|
|
18025
18393
|
{
|
|
18026
18394
|
photoUrl: finalContactImage,
|
|
@@ -18085,7 +18453,7 @@ registerThemeVariant("footer-home", "barelux", FooterHome3);
|
|
|
18085
18453
|
|
|
18086
18454
|
// src/design_system/sections/hero-home.balance.tsx
|
|
18087
18455
|
import { Fragment as Fragment7, useState as useState26 } from "react";
|
|
18088
|
-
import
|
|
18456
|
+
import React55 from "react";
|
|
18089
18457
|
var HeroHome4 = ({
|
|
18090
18458
|
websitePhotos,
|
|
18091
18459
|
companyInformation,
|
|
@@ -18103,7 +18471,7 @@ var HeroHome4 = ({
|
|
|
18103
18471
|
url: ((_b = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _b.url) || "",
|
|
18104
18472
|
alt: ((_c = websitePhotos == null ? void 0 : websitePhotos.hero) == null ? void 0 : _c.alt) || "Hero image"
|
|
18105
18473
|
};
|
|
18106
|
-
return /* @__PURE__ */
|
|
18474
|
+
return /* @__PURE__ */ React55.createElement(Fragment7, null, /* @__PURE__ */ React55.createElement("section", { className: "bg-primary py-20 md:py-28" }, /* @__PURE__ */ React55.createElement("div", { className: "mx-auto max-w-4xl px-4 text-center md:px-8" }, /* @__PURE__ */ React55.createElement("h1", { className: "font-display text-5xl font-normal leading-tight text-fg-primary md:text-6xl lg:text-7xl" }, headline), /* @__PURE__ */ React55.createElement("p", { className: "mt-6 font-body text-lg leading-relaxed text-secondary md:text-xl max-w-3xl mx-auto" }, subhead), ctaText && /* @__PURE__ */ React55.createElement("div", { className: "mt-10" }, /* @__PURE__ */ React55.createElement(
|
|
18107
18475
|
Button2,
|
|
18108
18476
|
{
|
|
18109
18477
|
as: "a",
|
|
@@ -18115,7 +18483,7 @@ var HeroHome4 = ({
|
|
|
18115
18483
|
className: "font-body font-medium"
|
|
18116
18484
|
},
|
|
18117
18485
|
ctaText
|
|
18118
|
-
)))), /* @__PURE__ */
|
|
18486
|
+
)))), /* @__PURE__ */ React55.createElement("section", { className: "bg-primary" }, /* @__PURE__ */ React55.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8 pb-16 md:pb-24" }, /* @__PURE__ */ React55.createElement("div", { className: "relative w-full h-[450px] md:h-[550px] lg:h-[650px] overflow-hidden" }, /* @__PURE__ */ React55.createElement(
|
|
18119
18487
|
PhotoWithFallback2,
|
|
18120
18488
|
{
|
|
18121
18489
|
photoUrl: heroImage.url,
|
|
@@ -18123,7 +18491,7 @@ var HeroHome4 = ({
|
|
|
18123
18491
|
fallbackId: "hero-home-balance",
|
|
18124
18492
|
className: "w-full h-full object-cover"
|
|
18125
18493
|
}
|
|
18126
|
-
), videoUrl && /* @__PURE__ */
|
|
18494
|
+
), videoUrl && /* @__PURE__ */ React55.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, /* @__PURE__ */ React55.createElement(VideoPlayButton, { onClick: () => setShowVideo(true) }))))), videoUrl && /* @__PURE__ */ React55.createElement(
|
|
18127
18495
|
VideoModal,
|
|
18128
18496
|
{
|
|
18129
18497
|
isOpen: showVideo,
|
|
@@ -18135,7 +18503,7 @@ var HeroHome4 = ({
|
|
|
18135
18503
|
registerThemeVariant("hero-home", "balance", HeroHome4);
|
|
18136
18504
|
|
|
18137
18505
|
// src/design_system/sections/header-navigation.balance.tsx
|
|
18138
|
-
import
|
|
18506
|
+
import React56, { useState as useState27, useRef as useRef16, useCallback as useCallback9 } from "react";
|
|
18139
18507
|
import Link10 from "next/link";
|
|
18140
18508
|
import Image13 from "next/image";
|
|
18141
18509
|
function HeaderNavigation4({
|
|
@@ -18147,11 +18515,11 @@ function HeaderNavigation4({
|
|
|
18147
18515
|
companyInformation,
|
|
18148
18516
|
websitePhotos
|
|
18149
18517
|
}) {
|
|
18150
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
18518
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
|
|
18151
18519
|
const [activeDropdown, setActiveDropdown] = useState27(null);
|
|
18152
18520
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState27(false);
|
|
18153
|
-
const closeTimeoutRef =
|
|
18154
|
-
|
|
18521
|
+
const closeTimeoutRef = useRef16(null);
|
|
18522
|
+
React56.useEffect(() => {
|
|
18155
18523
|
return () => {
|
|
18156
18524
|
if (closeTimeoutRef.current) {
|
|
18157
18525
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -18189,7 +18557,7 @@ function HeaderNavigation4({
|
|
|
18189
18557
|
const handleDropdownMouseLeave = useCallback9(() => {
|
|
18190
18558
|
handleMouseLeave();
|
|
18191
18559
|
}, [handleMouseLeave]);
|
|
18192
|
-
return /* @__PURE__ */
|
|
18560
|
+
return /* @__PURE__ */ React56.createElement(React56.Fragment, null, /* @__PURE__ */ React56.createElement("header", { className: "hidden md:block sticky top-0 z-50 bg-primary", style: { borderBottom: "3px solid rgb(217, 191, 168)" } }, /* @__PURE__ */ React56.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React56.createElement("div", { className: "relative flex items-center justify-between py-5" }, /* @__PURE__ */ React56.createElement(Link10, { href: ((_d = props == null ? void 0 : props.logo) == null ? void 0 : _d.href) || "/", className: "flex items-center z-10" }, logoUrl ? /* @__PURE__ */ React56.createElement(
|
|
18193
18561
|
Image13,
|
|
18194
18562
|
{
|
|
18195
18563
|
src: logoUrl,
|
|
@@ -18198,7 +18566,7 @@ function HeaderNavigation4({
|
|
|
18198
18566
|
width: 180,
|
|
18199
18567
|
height: 48
|
|
18200
18568
|
}
|
|
18201
|
-
) : /* @__PURE__ */
|
|
18569
|
+
) : /* @__PURE__ */ React56.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React56.createElement("span", { className: "font-display text-2xl font-normal", style: { color: "rgb(148, 102, 76)" } }, companyName), /* @__PURE__ */ React56.createElement("span", { className: "font-body text-xs tracking-widest uppercase", style: { color: "rgb(148, 102, 76)", opacity: 0.7 } }, "Concierge Cosmetic Injections"))), /* @__PURE__ */ React56.createElement("nav", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 flex items-center gap-1" }, navigation.map((item) => /* @__PURE__ */ React56.createElement(
|
|
18202
18570
|
"div",
|
|
18203
18571
|
{
|
|
18204
18572
|
key: item.label,
|
|
@@ -18206,7 +18574,7 @@ function HeaderNavigation4({
|
|
|
18206
18574
|
onMouseEnter: () => handleMouseEnter(item),
|
|
18207
18575
|
onMouseLeave: handleMouseLeave
|
|
18208
18576
|
},
|
|
18209
|
-
item.href ? /* @__PURE__ */
|
|
18577
|
+
item.href ? /* @__PURE__ */ React56.createElement(
|
|
18210
18578
|
Link10,
|
|
18211
18579
|
{
|
|
18212
18580
|
href: item.href,
|
|
@@ -18214,15 +18582,15 @@ function HeaderNavigation4({
|
|
|
18214
18582
|
style: { color: "rgb(170, 143, 123)" }
|
|
18215
18583
|
},
|
|
18216
18584
|
item.label
|
|
18217
|
-
) : /* @__PURE__ */
|
|
18218
|
-
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */
|
|
18585
|
+
) : /* @__PURE__ */ React56.createElement("span", { className: "font-display text-xl font-semibold px-5 py-2 cursor-pointer", style: { color: "rgb(170, 143, 123)" } }, item.label),
|
|
18586
|
+
item.children && item.children.length > 0 && activeDropdown === item.label && /* @__PURE__ */ React56.createElement(
|
|
18219
18587
|
"div",
|
|
18220
18588
|
{
|
|
18221
18589
|
className: "absolute left-0 top-full pt-2",
|
|
18222
18590
|
onMouseEnter: handleDropdownMouseEnter,
|
|
18223
18591
|
onMouseLeave: handleDropdownMouseLeave
|
|
18224
18592
|
},
|
|
18225
|
-
/* @__PURE__ */
|
|
18593
|
+
/* @__PURE__ */ React56.createElement("div", { className: "balance-dropdown-panel bg-primary border border-secondary shadow-md min-w-48 py-2" }, item.children.map((child) => /* @__PURE__ */ React56.createElement(
|
|
18226
18594
|
Link10,
|
|
18227
18595
|
{
|
|
18228
18596
|
key: child.href,
|
|
@@ -18233,7 +18601,7 @@ function HeaderNavigation4({
|
|
|
18233
18601
|
child.label
|
|
18234
18602
|
)))
|
|
18235
18603
|
)
|
|
18236
|
-
))), /* @__PURE__ */
|
|
18604
|
+
))), /* @__PURE__ */ React56.createElement("div", { className: "flex items-center gap-3 flex-shrink-0 z-10" }, ((_e = props == null ? void 0 : props.cta_button) == null ? void 0 : _e.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React56.createElement(
|
|
18237
18605
|
Button2,
|
|
18238
18606
|
{
|
|
18239
18607
|
href: ctaUrls.secondaryHref,
|
|
@@ -18243,25 +18611,25 @@ function HeaderNavigation4({
|
|
|
18243
18611
|
size: "sm"
|
|
18244
18612
|
},
|
|
18245
18613
|
props.cta_button.label
|
|
18246
|
-
), /* @__PURE__ */
|
|
18614
|
+
), /* @__PURE__ */ React56.createElement(
|
|
18247
18615
|
Button2,
|
|
18248
18616
|
{
|
|
18249
18617
|
href: ctaUrls.primaryHref,
|
|
18250
|
-
target: (
|
|
18251
|
-
rel: ((
|
|
18618
|
+
target: (_g = (_f = props == null ? void 0 : props.cta_button) == null ? void 0 : _f.target) != null ? _g : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
18619
|
+
rel: ((_h = props == null ? void 0 : props.cta_button) == null ? void 0 : _h.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
18252
18620
|
color: "primary",
|
|
18253
18621
|
size: "sm"
|
|
18254
18622
|
},
|
|
18255
|
-
((
|
|
18256
|
-
))))), /* @__PURE__ */
|
|
18623
|
+
((_i = props == null ? void 0 : props.cta_button) == null ? void 0 : _i.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_j = props == null ? void 0 : props.cta_button) == null ? void 0 : _j.label) || ""
|
|
18624
|
+
))))), /* @__PURE__ */ React56.createElement("header", { className: "md:hidden sticky top-0 z-50 bg-primary", style: { borderBottom: "3px solid rgb(217, 191, 168)" } }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center justify-between px-4 py-4" }, /* @__PURE__ */ React56.createElement(
|
|
18257
18625
|
"button",
|
|
18258
18626
|
{
|
|
18259
18627
|
onClick: () => setIsMobileMenuOpen(true),
|
|
18260
18628
|
className: "text-fg-primary",
|
|
18261
18629
|
"aria-label": "Open menu"
|
|
18262
18630
|
},
|
|
18263
|
-
/* @__PURE__ */
|
|
18264
|
-
), /* @__PURE__ */
|
|
18631
|
+
/* @__PURE__ */ React56.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React56.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h16M4 18h16" }))
|
|
18632
|
+
), /* @__PURE__ */ React56.createElement(Link10, { href: ((_k = props == null ? void 0 : props.logo) == null ? void 0 : _k.href) || "/", className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React56.createElement(
|
|
18265
18633
|
Image13,
|
|
18266
18634
|
{
|
|
18267
18635
|
src: logoUrl,
|
|
@@ -18270,15 +18638,15 @@ function HeaderNavigation4({
|
|
|
18270
18638
|
width: 120,
|
|
18271
18639
|
height: 32
|
|
18272
18640
|
}
|
|
18273
|
-
) : /* @__PURE__ */
|
|
18641
|
+
) : /* @__PURE__ */ React56.createElement("span", { className: "font-display text-lg font-normal text-fg-primary" }, companyName)), /* @__PURE__ */ React56.createElement("div", { className: "w-6" }))), isMobileMenuOpen && /* @__PURE__ */ React56.createElement("div", { className: "balance-mobile-menu fixed inset-0 bg-primary z-50 md:hidden" }, /* @__PURE__ */ React56.createElement("div", { className: "flex flex-col h-full" }, /* @__PURE__ */ React56.createElement("div", { className: "flex items-center justify-between px-4 py-4", style: { borderBottom: "3px solid rgb(217, 191, 168)" } }, /* @__PURE__ */ React56.createElement(
|
|
18274
18642
|
"button",
|
|
18275
18643
|
{
|
|
18276
18644
|
onClick: () => setIsMobileMenuOpen(false),
|
|
18277
18645
|
className: "text-fg-primary",
|
|
18278
18646
|
"aria-label": "Close menu"
|
|
18279
18647
|
},
|
|
18280
|
-
/* @__PURE__ */
|
|
18281
|
-
), /* @__PURE__ */
|
|
18648
|
+
/* @__PURE__ */ React56.createElement("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React56.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
18649
|
+
), /* @__PURE__ */ React56.createElement("div", { className: "flex items-center" }, logoUrl ? /* @__PURE__ */ React56.createElement(
|
|
18282
18650
|
Image13,
|
|
18283
18651
|
{
|
|
18284
18652
|
src: logoUrl,
|
|
@@ -18287,7 +18655,7 @@ function HeaderNavigation4({
|
|
|
18287
18655
|
width: 120,
|
|
18288
18656
|
height: 32
|
|
18289
18657
|
}
|
|
18290
|
-
) : /* @__PURE__ */
|
|
18658
|
+
) : /* @__PURE__ */ React56.createElement("span", { className: "font-display text-lg font-normal text-fg-primary" }, companyName)), /* @__PURE__ */ React56.createElement("div", { className: "w-6" })), /* @__PURE__ */ React56.createElement("nav", { className: "flex-1 overflow-y-auto px-4 py-8" }, /* @__PURE__ */ React56.createElement("ul", { className: "space-y-4" }, navigation.map((item) => /* @__PURE__ */ React56.createElement("li", { key: item.label }, /* @__PURE__ */ React56.createElement(
|
|
18291
18659
|
Link10,
|
|
18292
18660
|
{
|
|
18293
18661
|
href: item.href || "#",
|
|
@@ -18296,7 +18664,7 @@ function HeaderNavigation4({
|
|
|
18296
18664
|
onClick: () => setIsMobileMenuOpen(false)
|
|
18297
18665
|
},
|
|
18298
18666
|
item.label
|
|
18299
|
-
), item.children && item.children.length > 0 && /* @__PURE__ */
|
|
18667
|
+
), item.children && item.children.length > 0 && /* @__PURE__ */ React56.createElement("ul", { className: "ml-4 mt-2 space-y-2" }, item.children.map((child) => /* @__PURE__ */ React56.createElement("li", { key: child.href }, /* @__PURE__ */ React56.createElement(
|
|
18300
18668
|
Link10,
|
|
18301
18669
|
{
|
|
18302
18670
|
href: child.href,
|
|
@@ -18304,7 +18672,7 @@ function HeaderNavigation4({
|
|
|
18304
18672
|
onClick: () => setIsMobileMenuOpen(false)
|
|
18305
18673
|
},
|
|
18306
18674
|
child.label
|
|
18307
|
-
)))))))), /* @__PURE__ */
|
|
18675
|
+
)))))))), /* @__PURE__ */ React56.createElement("div", { className: "px-4 py-6", style: { borderTop: "1px solid rgb(217, 191, 168)" } }, /* @__PURE__ */ React56.createElement("div", { className: "flex flex-col gap-3" }, ((_l = props == null ? void 0 : props.cta_button) == null ? void 0 : _l.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React56.createElement(
|
|
18308
18676
|
Button2,
|
|
18309
18677
|
{
|
|
18310
18678
|
href: ctaUrls.secondaryHref,
|
|
@@ -18314,7 +18682,7 @@ function HeaderNavigation4({
|
|
|
18314
18682
|
onClick: () => setIsMobileMenuOpen(false)
|
|
18315
18683
|
},
|
|
18316
18684
|
props.cta_button.secondary_label
|
|
18317
|
-
), /* @__PURE__ */
|
|
18685
|
+
), /* @__PURE__ */ React56.createElement(
|
|
18318
18686
|
Button2,
|
|
18319
18687
|
{
|
|
18320
18688
|
href: ctaUrls.primaryHref,
|
|
@@ -18323,8 +18691,8 @@ function HeaderNavigation4({
|
|
|
18323
18691
|
className: "w-full",
|
|
18324
18692
|
onClick: () => setIsMobileMenuOpen(false)
|
|
18325
18693
|
},
|
|
18326
|
-
((
|
|
18327
|
-
))))), /* @__PURE__ */
|
|
18694
|
+
((_m = props == null ? void 0 : props.cta_button) == null ? void 0 : _m.label) || ""
|
|
18695
|
+
))))), /* @__PURE__ */ React56.createElement("div", { className: "fixed bottom-0 left-0 right-0 z-40 md:hidden", style: { backgroundColor: "rgb(148, 133, 84)" } }, /* @__PURE__ */ React56.createElement("div", { className: "flex gap-0" }, ((_n = props == null ? void 0 : props.cta_button) == null ? void 0 : _n.secondary_label) && ctaUrls.hasSecondary && /* @__PURE__ */ React56.createElement(
|
|
18328
18696
|
Button2,
|
|
18329
18697
|
{
|
|
18330
18698
|
href: ctaUrls.secondaryHref,
|
|
@@ -18335,16 +18703,16 @@ function HeaderNavigation4({
|
|
|
18335
18703
|
style: { borderRight: "1px solid rgba(255, 255, 255, 0.2)" }
|
|
18336
18704
|
},
|
|
18337
18705
|
props.cta_button.label
|
|
18338
|
-
), /* @__PURE__ */
|
|
18706
|
+
), /* @__PURE__ */ React56.createElement(
|
|
18339
18707
|
Button2,
|
|
18340
18708
|
{
|
|
18341
18709
|
href: ctaUrls.primaryHref,
|
|
18342
|
-
target: (
|
|
18343
|
-
rel: ((
|
|
18710
|
+
target: (_p = (_o = props == null ? void 0 : props.cta_button) == null ? void 0 : _o.target) != null ? _p : isExternalCtaUrl(ctaUrls.primaryHref) ? "_blank" : void 0,
|
|
18711
|
+
rel: ((_q = props == null ? void 0 : props.cta_button) == null ? void 0 : _q.target) === "_blank" || isExternalCtaUrl(ctaUrls.primaryHref) ? "noopener noreferrer" : void 0,
|
|
18344
18712
|
color: "primary",
|
|
18345
|
-
className: `${((
|
|
18713
|
+
className: `${((_r = props == null ? void 0 : props.cta_button) == null ? void 0 : _r.secondary_label) && ctaUrls.hasSecondary ? "flex-1" : "w-full"} font-body text-sm uppercase tracking-wide py-4 rounded-none`
|
|
18346
18714
|
},
|
|
18347
|
-
((
|
|
18715
|
+
((_s = props == null ? void 0 : props.cta_button) == null ? void 0 : _s.secondary_label) && ctaUrls.hasSecondary ? props.cta_button.secondary_label : ((_t = props == null ? void 0 : props.cta_button) == null ? void 0 : _t.label) || "Contact"
|
|
18348
18716
|
))));
|
|
18349
18717
|
}
|
|
18350
18718
|
registerThemeVariant("header-navigation", "balance", HeaderNavigation4);
|
|
@@ -18408,23 +18776,25 @@ var FooterHome4 = ({
|
|
|
18408
18776
|
registerThemeVariant("footer-home", "balance", FooterHome4);
|
|
18409
18777
|
|
|
18410
18778
|
// src/design_system/sections/contact-section.balance.tsx
|
|
18411
|
-
import
|
|
18779
|
+
import React58 from "react";
|
|
18412
18780
|
|
|
18413
18781
|
// src/design_system/sections/contact-section-form.balance.tsx
|
|
18414
|
-
import
|
|
18782
|
+
import React57, { useRef as useRef17, useState as useState28 } from "react";
|
|
18415
18783
|
var ContactSectionForm4 = ({
|
|
18416
18784
|
formDefinition,
|
|
18417
18785
|
submitButtonText = "Send message",
|
|
18418
18786
|
successMessage = "Thank you for contacting us! We'll get back to you soon.",
|
|
18419
18787
|
thankYouMessage,
|
|
18420
|
-
onSuccess
|
|
18788
|
+
onSuccess,
|
|
18789
|
+
privacyPolicyUrl,
|
|
18790
|
+
termsOfServiceUrl
|
|
18421
18791
|
}) => {
|
|
18422
18792
|
const { leadFormDefinition } = useFormDefinitions();
|
|
18423
18793
|
const resolvedFormDefinition = formDefinition != null ? formDefinition : leadFormDefinition;
|
|
18424
18794
|
const [isSubmitting, setIsSubmitting] = useState28(false);
|
|
18425
18795
|
const [submitStatus, setSubmitStatus] = useState28("idle");
|
|
18426
18796
|
const [statusMessage, setStatusMessage] = useState28("");
|
|
18427
|
-
const formRef =
|
|
18797
|
+
const formRef = useRef17(null);
|
|
18428
18798
|
const hasFields = resolvedFormDefinition != null && Array.isArray(resolvedFormDefinition.fields) && resolvedFormDefinition.fields.length > 0;
|
|
18429
18799
|
const handleSubmit = async (e) => {
|
|
18430
18800
|
var _a;
|
|
@@ -18435,7 +18805,8 @@ var ContactSectionForm4 = ({
|
|
|
18435
18805
|
const formData = new FormData(e.currentTarget);
|
|
18436
18806
|
const data = { formType: "lead" };
|
|
18437
18807
|
formData.forEach((value, key) => {
|
|
18438
|
-
if (key
|
|
18808
|
+
if (key.endsWith("_prefix")) return;
|
|
18809
|
+
if (typeof value === "string") data[key] = value;
|
|
18439
18810
|
});
|
|
18440
18811
|
try {
|
|
18441
18812
|
const response = await fetch("/api/form/", {
|
|
@@ -18462,7 +18833,14 @@ var ContactSectionForm4 = ({
|
|
|
18462
18833
|
setIsSubmitting(false);
|
|
18463
18834
|
};
|
|
18464
18835
|
if (!hasFields) return null;
|
|
18465
|
-
return /* @__PURE__ */
|
|
18836
|
+
return /* @__PURE__ */ React57.createElement(Form2, { ref: formRef, onSubmit: handleSubmit, className: "flex flex-col gap-6" }, /* @__PURE__ */ React57.createElement(
|
|
18837
|
+
DynamicFormFields,
|
|
18838
|
+
{
|
|
18839
|
+
form: resolvedFormDefinition,
|
|
18840
|
+
privacyPolicyUrl,
|
|
18841
|
+
termsOfServiceUrl
|
|
18842
|
+
}
|
|
18843
|
+
), /* @__PURE__ */ React57.createElement(
|
|
18466
18844
|
Button2,
|
|
18467
18845
|
{
|
|
18468
18846
|
type: "submit",
|
|
@@ -18473,21 +18851,31 @@ var ContactSectionForm4 = ({
|
|
|
18473
18851
|
isLoading: isSubmitting
|
|
18474
18852
|
},
|
|
18475
18853
|
isSubmitting ? "Sending..." : submitButtonText
|
|
18476
|
-
), submitStatus === "success" && /* @__PURE__ */
|
|
18854
|
+
), submitStatus === "success" && /* @__PURE__ */ React57.createElement("div", { className: "rounded-sm bg-success-50 p-4 text-success-700 font-body" }, thankYouMessage != null ? thankYouMessage : statusMessage), submitStatus === "error" && /* @__PURE__ */ React57.createElement("div", { className: "rounded-sm bg-error-50 p-4 text-error-700 font-body text-sm" }, statusMessage));
|
|
18477
18855
|
};
|
|
18478
18856
|
|
|
18479
18857
|
// src/design_system/sections/contact-section.balance.tsx
|
|
18858
|
+
function getLegalUrlsFromConfig4(config) {
|
|
18859
|
+
var _a, _b, _c;
|
|
18860
|
+
if (!((_a = config == null ? void 0 : config.navigation) == null ? void 0 : _a.footer)) return {};
|
|
18861
|
+
const flat = config.navigation.footer.flat();
|
|
18862
|
+
const privacy = (_b = flat.find((l) => l.label === "Privacy Policy")) == null ? void 0 : _b.href;
|
|
18863
|
+
const terms = (_c = flat.find((l) => l.label === "Terms of Service")) == null ? void 0 : _c.href;
|
|
18864
|
+
return { privacyPolicyUrl: privacy, termsOfServiceUrl: terms };
|
|
18865
|
+
}
|
|
18480
18866
|
var ContactSection4 = ({
|
|
18481
18867
|
websitePhotos,
|
|
18482
18868
|
title = "",
|
|
18483
18869
|
subtitle = "",
|
|
18484
|
-
formDefinition
|
|
18870
|
+
formDefinition,
|
|
18871
|
+
config
|
|
18485
18872
|
}) => {
|
|
18873
|
+
const { privacyPolicyUrl, termsOfServiceUrl } = getLegalUrlsFromConfig4(config);
|
|
18486
18874
|
const contactPhoto = websitePhotos == null ? void 0 : websitePhotos.contact;
|
|
18487
18875
|
const contactImageUrl = contactPhoto == null ? void 0 : contactPhoto.url;
|
|
18488
18876
|
const finalContactImage = contactImageUrl && contactImageUrl.trim() !== "" ? contactImageUrl : void 0;
|
|
18489
18877
|
const finalContactImageAlt = (contactPhoto == null ? void 0 : contactPhoto.alt) || "Contact image";
|
|
18490
|
-
return /* @__PURE__ */
|
|
18878
|
+
return /* @__PURE__ */ React58.createElement("section", { className: "bg-primary py-16 md:py-24" }, /* @__PURE__ */ React58.createElement("div", { className: "mx-auto max-w-4xl px-4 md:px-8" }, /* @__PURE__ */ React58.createElement("div", { className: "text-center mb-12" }, /* @__PURE__ */ React58.createElement("h2", { className: "font-display text-4xl font-normal leading-tight text-fg-primary md:text-5xl" }, title), /* @__PURE__ */ React58.createElement("p", { className: "mt-4 font-body text-lg leading-relaxed text-tertiary max-w-2xl mx-auto" }, subtitle)), finalContactImage && /* @__PURE__ */ React58.createElement("div", { className: "mb-12 overflow-hidden h-72 md:h-96" }, /* @__PURE__ */ React58.createElement(
|
|
18491
18879
|
PhotoWithFallback2,
|
|
18492
18880
|
{
|
|
18493
18881
|
photoUrl: finalContactImage,
|
|
@@ -18495,7 +18883,14 @@ var ContactSection4 = ({
|
|
|
18495
18883
|
fallbackId: "contact-image",
|
|
18496
18884
|
className: "h-full w-full object-cover"
|
|
18497
18885
|
}
|
|
18498
|
-
)), /* @__PURE__ */
|
|
18886
|
+
)), /* @__PURE__ */ React58.createElement("div", { className: "max-w-2xl mx-auto" }, /* @__PURE__ */ React58.createElement(
|
|
18887
|
+
ContactSectionForm4,
|
|
18888
|
+
{
|
|
18889
|
+
formDefinition,
|
|
18890
|
+
privacyPolicyUrl,
|
|
18891
|
+
termsOfServiceUrl
|
|
18892
|
+
}
|
|
18893
|
+
))));
|
|
18499
18894
|
};
|
|
18500
18895
|
registerThemeVariant("contact-section", "balance", ContactSection4);
|
|
18501
18896
|
|
|
@@ -18577,7 +18972,7 @@ var AboutHome4 = ({
|
|
|
18577
18972
|
registerThemeVariant("about-home", "balance", AboutHome4);
|
|
18578
18973
|
|
|
18579
18974
|
// src/design_system/sections/testimonials-home.balance.tsx
|
|
18580
|
-
import
|
|
18975
|
+
import React59 from "react";
|
|
18581
18976
|
var TestimonialsHome4 = ({
|
|
18582
18977
|
testimonials: testimonialsData,
|
|
18583
18978
|
title = "",
|
|
@@ -18586,7 +18981,7 @@ var TestimonialsHome4 = ({
|
|
|
18586
18981
|
}) => {
|
|
18587
18982
|
const testimonials = Array.isArray(testimonialsData) ? testimonialsData : [];
|
|
18588
18983
|
const displayTestimonials = perPage ? testimonials.slice(0, perPage) : testimonials;
|
|
18589
|
-
return /* @__PURE__ */
|
|
18984
|
+
return /* @__PURE__ */ React59.createElement("section", { className: "bg-primary py-16 md:py-24" }, /* @__PURE__ */ React59.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React59.createElement("div", { className: "text-center mb-12 max-w-3xl mx-auto" }, /* @__PURE__ */ React59.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl mb-4" }, title), subtitle && /* @__PURE__ */ React59.createElement("p", { className: "font-body text-lg text-secondary" }, subtitle)), /* @__PURE__ */ React59.createElement(
|
|
18590
18985
|
CarouselSectionWrapper,
|
|
18591
18986
|
{
|
|
18592
18987
|
title: "",
|
|
@@ -18600,7 +18995,7 @@ var TestimonialsHome4 = ({
|
|
|
18600
18995
|
const avatarUrl = getAvatarUrl(testimonial.photo_attachments, testimonial.id, reviewerName);
|
|
18601
18996
|
const rating = testimonial.rating || 5;
|
|
18602
18997
|
const initials = reviewerName.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
|
|
18603
|
-
return /* @__PURE__ */
|
|
18998
|
+
return /* @__PURE__ */ React59.createElement(Carousel.Item, { key: testimonial.id || i, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React59.createElement("div", { className: "bg-secondary/30 p-8 h-full flex flex-col" }, /* @__PURE__ */ React59.createElement("div", { className: "flex gap-1 mb-6" }, Array.from({ length: 5 }).map((_, starIdx) => /* @__PURE__ */ React59.createElement(
|
|
18604
18999
|
"svg",
|
|
18605
19000
|
{
|
|
18606
19001
|
key: starIdx,
|
|
@@ -18612,8 +19007,8 @@ var TestimonialsHome4 = ({
|
|
|
18612
19007
|
strokeWidth: "2",
|
|
18613
19008
|
viewBox: "0 0 24 24"
|
|
18614
19009
|
},
|
|
18615
|
-
/* @__PURE__ */
|
|
18616
|
-
))), /* @__PURE__ */
|
|
19010
|
+
/* @__PURE__ */ React59.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
|
|
19011
|
+
))), /* @__PURE__ */ React59.createElement("p", { className: "font-body text-base leading-relaxed text-secondary mb-8 flex-grow" }, '"', quote, '"'), /* @__PURE__ */ React59.createElement("div", { className: "flex items-center gap-4 pt-6 border-t border-primary/20" }, /* @__PURE__ */ React59.createElement(
|
|
18617
19012
|
Avatar2,
|
|
18618
19013
|
{
|
|
18619
19014
|
src: avatarUrl,
|
|
@@ -18621,14 +19016,14 @@ var TestimonialsHome4 = ({
|
|
|
18621
19016
|
initials,
|
|
18622
19017
|
size: "xl"
|
|
18623
19018
|
}
|
|
18624
|
-
), /* @__PURE__ */
|
|
19019
|
+
), /* @__PURE__ */ React59.createElement("div", null, /* @__PURE__ */ React59.createElement("p", { className: "font-body text-sm font-medium text-fg-primary" }, reviewerName), /* @__PURE__ */ React59.createElement("p", { className: "font-body text-xs text-tertiary mt-0.5" }, "Verified Customer")))));
|
|
18625
19020
|
})
|
|
18626
19021
|
)));
|
|
18627
19022
|
};
|
|
18628
19023
|
registerThemeVariant("testimonials-home", "balance", TestimonialsHome4);
|
|
18629
19024
|
|
|
18630
19025
|
// src/design_system/sections/blog-section.balance.tsx
|
|
18631
|
-
import
|
|
19026
|
+
import React60 from "react";
|
|
18632
19027
|
var BlogSection4 = ({
|
|
18633
19028
|
blogPosts: postsData,
|
|
18634
19029
|
title = "",
|
|
@@ -18648,7 +19043,7 @@ var BlogSection4 = ({
|
|
|
18648
19043
|
return "Recent";
|
|
18649
19044
|
}
|
|
18650
19045
|
};
|
|
18651
|
-
return /* @__PURE__ */
|
|
19046
|
+
return /* @__PURE__ */ React60.createElement("section", { className: "bg-secondary py-16 md:py-24" }, /* @__PURE__ */ React60.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, /* @__PURE__ */ React60.createElement("div", { className: "text-center mb-16 max-w-3xl mx-auto" }, /* @__PURE__ */ React60.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl mb-4" }, title), subtitle && /* @__PURE__ */ React60.createElement("p", { className: "font-body text-lg text-secondary" }, subtitle)), /* @__PURE__ */ React60.createElement(
|
|
18652
19047
|
CarouselSectionWrapper,
|
|
18653
19048
|
{
|
|
18654
19049
|
title: "",
|
|
@@ -18658,16 +19053,16 @@ var BlogSection4 = ({
|
|
|
18658
19053
|
postsArray.map((post) => {
|
|
18659
19054
|
var _a;
|
|
18660
19055
|
const excerpt = ((_a = post.content_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim().substring(0, 150)) || "";
|
|
18661
|
-
return /* @__PURE__ */
|
|
19056
|
+
return /* @__PURE__ */ React60.createElement(Carousel.Item, { key: post.id, className: "pl-4 md:basis-1/2 lg:basis-1/3" }, /* @__PURE__ */ React60.createElement("a", { href: `/blog/${post.slug}`, className: "flex flex-col h-full group bg-primary" }, /* @__PURE__ */ React60.createElement("div", { className: "w-full h-64 overflow-hidden" }, /* @__PURE__ */ React60.createElement(
|
|
18662
19057
|
PhotoWithFallback2,
|
|
18663
19058
|
{
|
|
18664
19059
|
item: post,
|
|
18665
19060
|
fallbackId: post.id,
|
|
18666
19061
|
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
18667
19062
|
}
|
|
18668
|
-
)), /* @__PURE__ */
|
|
19063
|
+
)), /* @__PURE__ */ React60.createElement("div", { className: "p-6 flex flex-col flex-grow" }, /* @__PURE__ */ React60.createElement("p", { className: "text-xs font-body font-medium uppercase tracking-wide mb-3 text-brand-accent" }, formatDate4(post.published_at)), /* @__PURE__ */ React60.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-3 group-hover:text-brand-accent transition-colors line-clamp-2" }, post.title), excerpt && /* @__PURE__ */ React60.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary flex-grow line-clamp-3" }, excerpt), /* @__PURE__ */ React60.createElement("span", { className: "mt-4 font-body text-sm font-medium uppercase tracking-wide", style: { color: "var(--color-text-brand-accent)" } }, "Read More \u2192"))));
|
|
18669
19064
|
})
|
|
18670
|
-
), postsArray.length > 0 && /* @__PURE__ */
|
|
19065
|
+
), postsArray.length > 0 && /* @__PURE__ */ React60.createElement("div", { className: "mt-12 text-center" }, /* @__PURE__ */ React60.createElement(
|
|
18671
19066
|
Button2,
|
|
18672
19067
|
{
|
|
18673
19068
|
as: "a",
|
|
@@ -18682,7 +19077,7 @@ var BlogSection4 = ({
|
|
|
18682
19077
|
registerThemeVariant("blog-section", "balance", BlogSection4);
|
|
18683
19078
|
|
|
18684
19079
|
// src/design_system/sections/team-grid.balance.tsx
|
|
18685
|
-
import
|
|
19080
|
+
import React61 from "react";
|
|
18686
19081
|
var TeamGrid3 = ({
|
|
18687
19082
|
teamMembers: membersData,
|
|
18688
19083
|
title = "",
|
|
@@ -18693,10 +19088,10 @@ var TeamGrid3 = ({
|
|
|
18693
19088
|
}) => {
|
|
18694
19089
|
const members = Array.isArray(membersData) ? membersData : [];
|
|
18695
19090
|
const displayMembers = members.slice(0, maxMembers);
|
|
18696
|
-
return /* @__PURE__ */
|
|
19091
|
+
return /* @__PURE__ */ React61.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React61.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React61.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React61.createElement("h2", { className: "text-display-sm font-semibold text-primary md:text-display-md" }, title), subtitle && /* @__PURE__ */ React61.createElement("p", { className: "mt-4 text-lg text-tertiary md:mt-5 md:text-xl" }, subtitle)), displayMembers.length > 0 ? /* @__PURE__ */ React61.createElement("div", { className: "mt-12 md:mt-16" }, /* @__PURE__ */ React61.createElement("ul", { className: "grid w-full grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3 xl:grid-cols-4 justify-items-center" }, displayMembers.map((member, index) => {
|
|
18697
19092
|
var _a;
|
|
18698
19093
|
const bio = ((_a = member.bio_markdown) == null ? void 0 : _a.replace(/[#*\[\]()]/g, "").trim()) || "";
|
|
18699
|
-
return /* @__PURE__ */
|
|
19094
|
+
return /* @__PURE__ */ React61.createElement("li", { key: member.id || index, className: "flex flex-col gap-5 md:gap-6 max-w-xs w-full" }, /* @__PURE__ */ React61.createElement(
|
|
18700
19095
|
PhotoWithFallback2,
|
|
18701
19096
|
{
|
|
18702
19097
|
item: member,
|
|
@@ -18704,13 +19099,13 @@ var TeamGrid3 = ({
|
|
|
18704
19099
|
alt: member.name || "Team member",
|
|
18705
19100
|
className: "h-78 w-full object-cover md:h-74 rounded-2xl"
|
|
18706
19101
|
}
|
|
18707
|
-
), /* @__PURE__ */
|
|
18708
|
-
}))) : /* @__PURE__ */
|
|
19102
|
+
), /* @__PURE__ */ React61.createElement("div", null, /* @__PURE__ */ React61.createElement("h3", { className: "text-lg font-semibold text-primary md:text-xl" }, member.name), /* @__PURE__ */ React61.createElement("p", { className: "text-md text-brand-secondary md:mt-0.5 md:text-lg" }, member.position), bio && /* @__PURE__ */ React61.createElement("p", { className: "mt-4 text-md text-tertiary leading-relaxed" }, bio)));
|
|
19103
|
+
}))) : /* @__PURE__ */ React61.createElement("div", { className: "text-center mt-12" }, /* @__PURE__ */ React61.createElement("p", { className: "text-gray-500" }, "No team members available"))));
|
|
18709
19104
|
};
|
|
18710
19105
|
registerThemeVariant("team-grid", "balance", TeamGrid3);
|
|
18711
19106
|
|
|
18712
19107
|
// src/design_system/sections/services-grid.balance.tsx
|
|
18713
|
-
import
|
|
19108
|
+
import React62 from "react";
|
|
18714
19109
|
import Link12 from "next/link";
|
|
18715
19110
|
var ServicesGrid3 = ({
|
|
18716
19111
|
services: servicesData,
|
|
@@ -18720,12 +19115,12 @@ var ServicesGrid3 = ({
|
|
|
18720
19115
|
className = ""
|
|
18721
19116
|
}) => {
|
|
18722
19117
|
const services = Array.isArray(servicesData) ? servicesData : [];
|
|
18723
|
-
return /* @__PURE__ */
|
|
19118
|
+
return /* @__PURE__ */ React62.createElement("section", { className: `${backgroundColor} py-16 md:py-24 ${className}` }, /* @__PURE__ */ React62.createElement("div", { className: "mx-auto w-full max-w-container px-4 md:px-8" }, (title || subtitle) && /* @__PURE__ */ React62.createElement("div", { className: "mx-auto mb-12 flex w-full max-w-3xl flex-col items-center text-center" }, title && /* @__PURE__ */ React62.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl" }, title), subtitle && /* @__PURE__ */ React62.createElement("p", { className: "mt-4 font-body text-lg text-secondary md:mt-5 md:text-xl" }, subtitle)), services.length > 0 ? /* @__PURE__ */ React62.createElement("ul", { className: "grid grid-cols-1 gap-x-8 gap-y-10 sm:grid-cols-2 md:gap-y-12 lg:grid-cols-3" }, services.map((service, index) => {
|
|
18724
19119
|
var _a, _b, _c, _d;
|
|
18725
19120
|
const description = service.summary || (service.description_markdown ? service.description_markdown.replace(/[#*\[\]()]/g, "").trim().substring(0, 120) + "..." : "");
|
|
18726
19121
|
const photo = ((_b = (_a = service.photo_attachments) == null ? void 0 : _a.find((pa) => pa.featured)) == null ? void 0 : _b.photo) || ((_d = (_c = service.photo_attachments) == null ? void 0 : _c[0]) == null ? void 0 : _d.photo);
|
|
18727
19122
|
const imageAlt = (photo == null ? void 0 : photo.title) || service.name;
|
|
18728
|
-
return /* @__PURE__ */
|
|
19123
|
+
return /* @__PURE__ */ React62.createElement("li", { key: service.id || index }, /* @__PURE__ */ React62.createElement("div", { className: "flex flex-col gap-12 bg-secondary p-5 md:inline-flex md:gap-16 md:p-6 rounded-lg group" }, /* @__PURE__ */ React62.createElement(Link12, { href: `/services/${service.slug}`, className: "block" }, /* @__PURE__ */ React62.createElement("div", { className: "h-48 w-full overflow-hidden rounded-lg md:h-64" }, /* @__PURE__ */ React62.createElement(
|
|
18729
19124
|
PhotoWithFallback2,
|
|
18730
19125
|
{
|
|
18731
19126
|
item: service,
|
|
@@ -18733,8 +19128,8 @@ var ServicesGrid3 = ({
|
|
|
18733
19128
|
alt: imageAlt || "Service image",
|
|
18734
19129
|
className: "size-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
18735
19130
|
}
|
|
18736
|
-
)), /* @__PURE__ */
|
|
18737
|
-
})) : /* @__PURE__ */
|
|
19131
|
+
)), /* @__PURE__ */ React62.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mt-4 mb-3 group-hover:text-brand-accent transition-colors" }, service.name), description && /* @__PURE__ */ React62.createElement("p", { className: "font-body text-base leading-relaxed text-tertiary mb-4" }, description), /* @__PURE__ */ React62.createElement("span", { className: "font-body text-sm font-medium uppercase tracking-wide", style: { color: "var(--color-text-brand-accent)" } }, "Learn More \u2192"))));
|
|
19132
|
+
})) : /* @__PURE__ */ React62.createElement("div", { className: "text-center py-12" }, /* @__PURE__ */ React62.createElement("p", { className: "font-body text-base text-tertiary" }, "No services available"))));
|
|
18738
19133
|
};
|
|
18739
19134
|
registerThemeVariant("services-grid", "balance", ServicesGrid3);
|
|
18740
19135
|
|
|
@@ -18850,15 +19245,459 @@ var FeatureTabHorizontal = ({ title, subtitle, footer, isCurrent }) => /* @__PUR
|
|
|
18850
19245
|
footer
|
|
18851
19246
|
);
|
|
18852
19247
|
|
|
19248
|
+
// src/design_system/sections/service-menu-section.tsx
|
|
19249
|
+
import React63, { useState as useState30, useEffect as useEffect11, useCallback as useCallback10, useMemo as useMemo8 } from "react";
|
|
19250
|
+
import { createPortal } from "react-dom";
|
|
19251
|
+
var SERVICE_MENU_MODAL_ROOT_ID = "service-menu-modal-root";
|
|
19252
|
+
var CYCLE_INTERVAL_MIN_MS = 6e3;
|
|
19253
|
+
var CYCLE_INTERVAL_MAX_MS = 8e3;
|
|
19254
|
+
function seedToUnit(seed) {
|
|
19255
|
+
let h = 2166136261 >>> 0;
|
|
19256
|
+
for (let i = 0; i < seed.length; i++) {
|
|
19257
|
+
h ^= seed.charCodeAt(i);
|
|
19258
|
+
h = Math.imul(h, 16777619) >>> 0 >>> 0;
|
|
19259
|
+
}
|
|
19260
|
+
return (h >>> 0) / 4294967296;
|
|
19261
|
+
}
|
|
19262
|
+
function photoAttachmentDisplayUrl(pa) {
|
|
19263
|
+
var _a, _b;
|
|
19264
|
+
return ((_a = pa.photo) == null ? void 0 : _a.large_url) || ((_b = pa.photo) == null ? void 0 : _b.medium_url);
|
|
19265
|
+
}
|
|
19266
|
+
function photoAttachmentAlt(pa) {
|
|
19267
|
+
var _a, _b;
|
|
19268
|
+
return ((_a = pa.photo) == null ? void 0 : _a.alt_text) || ((_b = pa.photo) == null ? void 0 : _b.title) || "";
|
|
19269
|
+
}
|
|
19270
|
+
function shuffleWithSeed(array, seed) {
|
|
19271
|
+
if (array.length <= 1) return array;
|
|
19272
|
+
const arr = [...array];
|
|
19273
|
+
let h = 2166136261 >>> 0;
|
|
19274
|
+
for (let i = 0; i < seed.length; i++) {
|
|
19275
|
+
h ^= seed.charCodeAt(i);
|
|
19276
|
+
h = Math.imul(h, 16777619) >>> 0 >>> 0;
|
|
19277
|
+
}
|
|
19278
|
+
const next = (step) => {
|
|
19279
|
+
h = Math.imul(1664525, h + step >>> 0) + 1013904223 >>> 0;
|
|
19280
|
+
return (h >>> 0) / 4294967296;
|
|
19281
|
+
};
|
|
19282
|
+
for (let i = arr.length - 1; i > 0; i--) {
|
|
19283
|
+
const j = Math.floor(next(i) * (i + 1));
|
|
19284
|
+
[arr[i], arr[j]] = [arr[j], arr[i]];
|
|
19285
|
+
}
|
|
19286
|
+
return arr;
|
|
19287
|
+
}
|
|
19288
|
+
var CROSSFADE_DURATION_MS = 600;
|
|
19289
|
+
function useCycledPhotoList(photoAttachments, seed) {
|
|
19290
|
+
return useMemo8(
|
|
19291
|
+
() => {
|
|
19292
|
+
const arr = Array.isArray(photoAttachments) && photoAttachments.length > 0 ? photoAttachments : [];
|
|
19293
|
+
if (arr.length === 0) return [];
|
|
19294
|
+
const shuffled = shuffleWithSeed(arr, seed);
|
|
19295
|
+
return shuffled.map((pa) => {
|
|
19296
|
+
var _a;
|
|
19297
|
+
return { url: (_a = photoAttachmentDisplayUrl(pa)) != null ? _a : "", alt: photoAttachmentAlt(pa) };
|
|
19298
|
+
}).filter((x) => x.url);
|
|
19299
|
+
},
|
|
19300
|
+
[photoAttachments, seed]
|
|
19301
|
+
);
|
|
19302
|
+
}
|
|
19303
|
+
function GridCardWithImage({
|
|
19304
|
+
photoAttachments,
|
|
19305
|
+
fallbackId,
|
|
19306
|
+
fallbackAlt,
|
|
19307
|
+
title,
|
|
19308
|
+
subtitle,
|
|
19309
|
+
children,
|
|
19310
|
+
onClick,
|
|
19311
|
+
websitePhotos,
|
|
19312
|
+
companyInformation,
|
|
19313
|
+
cycleSeed
|
|
19314
|
+
}) {
|
|
19315
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
19316
|
+
const seed = cycleSeed != null ? cycleSeed : String(fallbackId);
|
|
19317
|
+
const list = useCycledPhotoList(photoAttachments, seed);
|
|
19318
|
+
const [currentIndex, setCurrentIndex] = useState30(0);
|
|
19319
|
+
const [transitioning, setTransitioning] = useState30(false);
|
|
19320
|
+
const intervalMs = useMemo8(
|
|
19321
|
+
() => CYCLE_INTERVAL_MIN_MS + Math.floor(seedToUnit(seed) * (CYCLE_INTERVAL_MAX_MS - CYCLE_INTERVAL_MIN_MS + 1)),
|
|
19322
|
+
[seed]
|
|
19323
|
+
);
|
|
19324
|
+
useEffect11(() => {
|
|
19325
|
+
if (list.length <= 1) return;
|
|
19326
|
+
const id3 = setInterval(() => setTransitioning(true), intervalMs);
|
|
19327
|
+
return () => clearInterval(id3);
|
|
19328
|
+
}, [list.length, intervalMs]);
|
|
19329
|
+
useEffect11(() => {
|
|
19330
|
+
if (!transitioning || list.length <= 1) return;
|
|
19331
|
+
const t = setTimeout(() => {
|
|
19332
|
+
setCurrentIndex((i) => (i + 1) % list.length);
|
|
19333
|
+
setTransitioning(false);
|
|
19334
|
+
}, CROSSFADE_DURATION_MS);
|
|
19335
|
+
return () => clearTimeout(t);
|
|
19336
|
+
}, [transitioning, list.length]);
|
|
19337
|
+
const nextIndex = list.length > 1 ? (currentIndex + 1) % list.length : 0;
|
|
19338
|
+
const currentItem = list[currentIndex];
|
|
19339
|
+
const displayAlt = (currentItem == null ? void 0 : currentItem.alt) || fallbackAlt;
|
|
19340
|
+
const singleUrl = (_a = list[0]) == null ? void 0 : _a.url;
|
|
19341
|
+
return /* @__PURE__ */ React63.createElement(
|
|
19342
|
+
"button",
|
|
19343
|
+
{
|
|
19344
|
+
type: "button",
|
|
19345
|
+
onClick,
|
|
19346
|
+
className: "flex flex-col h-full w-full text-left group block rounded-lg outline-none focus-visible:ring-2 focus-visible:ring-brand-accent focus-visible:ring-offset-2"
|
|
19347
|
+
},
|
|
19348
|
+
/* @__PURE__ */ React63.createElement("div", { className: "w-full h-36 overflow-hidden rounded-lg mb-3 relative" }, list.length === 0 ? /* @__PURE__ */ React63.createElement(
|
|
19349
|
+
PhotoWithFallback2,
|
|
19350
|
+
{
|
|
19351
|
+
item: void 0,
|
|
19352
|
+
fallbackId,
|
|
19353
|
+
alt: fallbackAlt,
|
|
19354
|
+
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
|
|
19355
|
+
websitePhotos,
|
|
19356
|
+
companyInformation
|
|
19357
|
+
}
|
|
19358
|
+
) : list.length === 1 && singleUrl ? (
|
|
19359
|
+
// eslint-disable-next-line @next/next/no-img-element -- dynamic API URLs; next/image not configured for external host
|
|
19360
|
+
/* @__PURE__ */ React63.createElement(
|
|
19361
|
+
"img",
|
|
19362
|
+
{
|
|
19363
|
+
src: singleUrl,
|
|
19364
|
+
alt: displayAlt,
|
|
19365
|
+
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
19366
|
+
}
|
|
19367
|
+
)
|
|
19368
|
+
) : /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
|
|
19369
|
+
"div",
|
|
19370
|
+
{
|
|
19371
|
+
className: `absolute inset-0 ${transitioning ? "transition-opacity duration-[600ms] ease-in-out" : "transition-none"}`,
|
|
19372
|
+
style: { opacity: transitioning ? 0 : 1 }
|
|
19373
|
+
},
|
|
19374
|
+
/* @__PURE__ */ React63.createElement(
|
|
19375
|
+
"img",
|
|
19376
|
+
{
|
|
19377
|
+
src: (_b = list[currentIndex]) == null ? void 0 : _b.url,
|
|
19378
|
+
alt: (_d = (_c = list[currentIndex]) == null ? void 0 : _c.alt) != null ? _d : displayAlt,
|
|
19379
|
+
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
19380
|
+
}
|
|
19381
|
+
)
|
|
19382
|
+
), /* @__PURE__ */ React63.createElement(
|
|
19383
|
+
"div",
|
|
19384
|
+
{
|
|
19385
|
+
className: `absolute inset-0 ${transitioning ? "transition-opacity duration-[600ms] ease-in-out" : "transition-none"}`,
|
|
19386
|
+
style: { opacity: transitioning ? 1 : 0 }
|
|
19387
|
+
},
|
|
19388
|
+
/* @__PURE__ */ React63.createElement(
|
|
19389
|
+
"img",
|
|
19390
|
+
{
|
|
19391
|
+
src: (_e = list[nextIndex]) == null ? void 0 : _e.url,
|
|
19392
|
+
alt: (_g = (_f = list[nextIndex]) == null ? void 0 : _f.alt) != null ? _g : displayAlt,
|
|
19393
|
+
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
19394
|
+
}
|
|
19395
|
+
)
|
|
19396
|
+
))),
|
|
19397
|
+
subtitle && /* @__PURE__ */ React63.createElement("p", { className: "text-xs font-medium text-fg-secondary uppercase tracking-wide line-clamp-1" }, subtitle),
|
|
19398
|
+
/* @__PURE__ */ React63.createElement("h4", { className: "font-display text-base font-normal text-fg-primary mt-1 group-hover:underline line-clamp-2" }, title),
|
|
19399
|
+
children
|
|
19400
|
+
);
|
|
19401
|
+
}
|
|
19402
|
+
function CarouselRow({
|
|
19403
|
+
rowTitle,
|
|
19404
|
+
items,
|
|
19405
|
+
renderItem
|
|
19406
|
+
}) {
|
|
19407
|
+
if (!(items == null ? void 0 : items.length)) return null;
|
|
19408
|
+
return /* @__PURE__ */ React63.createElement("div", { className: "mb-12 last:mb-0" }, /* @__PURE__ */ React63.createElement(Carousel.Root, { opts: { align: "start", loop: true } }, /* @__PURE__ */ React63.createElement("div", { className: "flex items-center justify-between gap-4 mb-2" }, /* @__PURE__ */ React63.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary md:text-3xl" }, rowTitle), /* @__PURE__ */ React63.createElement("div", { className: "flex gap-2 flex-shrink-0" }, /* @__PURE__ */ React63.createElement(Carousel.PrevTrigger, { className: "rounded-full p-1.5 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React63.createElement("svg", { className: "w-5 h-5 text-fg-primary", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": true }, /* @__PURE__ */ React63.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }))), /* @__PURE__ */ React63.createElement(Carousel.NextTrigger, { className: "rounded-full p-1.5 border border-secondary hover:bg-primary_hover transition-colors disabled:opacity-30 disabled:cursor-not-allowed" }, /* @__PURE__ */ React63.createElement("svg", { className: "w-5 h-5 text-fg-primary", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", "aria-hidden": true }, /* @__PURE__ */ React63.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }))))), /* @__PURE__ */ React63.createElement(Carousel.Content, { className: "-ml-3" }, items.map((item, index) => {
|
|
19409
|
+
var _a;
|
|
19410
|
+
return /* @__PURE__ */ React63.createElement(Carousel.Item, { key: (_a = item.id) != null ? _a : index, className: "pl-3 basis-[70%] sm:basis-1/2 md:basis-1/3 lg:basis-1/4" }, renderItem(item, index));
|
|
19411
|
+
}))));
|
|
19412
|
+
}
|
|
19413
|
+
function GridRow({
|
|
19414
|
+
rowTitle,
|
|
19415
|
+
items,
|
|
19416
|
+
renderItem
|
|
19417
|
+
}) {
|
|
19418
|
+
if (!(items == null ? void 0 : items.length)) return null;
|
|
19419
|
+
return /* @__PURE__ */ React63.createElement("div", { className: "mb-12 last:mb-0" }, /* @__PURE__ */ React63.createElement("h3", { className: "font-display text-2xl font-normal text-fg-primary mb-3 md:text-3xl" }, rowTitle), /* @__PURE__ */ React63.createElement("div", { className: "grid grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4" }, items.map((item, index) => {
|
|
19420
|
+
var _a;
|
|
19421
|
+
return /* @__PURE__ */ React63.createElement("div", { key: (_a = item.id) != null ? _a : index, className: "min-w-0 flex" }, renderItem(item, index));
|
|
19422
|
+
})));
|
|
19423
|
+
}
|
|
19424
|
+
function MenuBlock({
|
|
19425
|
+
rowTitle,
|
|
19426
|
+
items,
|
|
19427
|
+
renderItem,
|
|
19428
|
+
layout: layout2
|
|
19429
|
+
}) {
|
|
19430
|
+
if (!(items == null ? void 0 : items.length)) return null;
|
|
19431
|
+
return layout2 === "carousel" ? /* @__PURE__ */ React63.createElement(CarouselRow, { rowTitle, items, renderItem }) : /* @__PURE__ */ React63.createElement(GridRow, { rowTitle, items, renderItem });
|
|
19432
|
+
}
|
|
19433
|
+
function formatPriceCents(cents) {
|
|
19434
|
+
if (cents == null) return null;
|
|
19435
|
+
return new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(cents / 100);
|
|
19436
|
+
}
|
|
19437
|
+
function ModalSection({ title, children }) {
|
|
19438
|
+
return /* @__PURE__ */ React63.createElement("div", null, /* @__PURE__ */ React63.createElement("h3", { className: "font-display text-sm font-semibold text-fg-primary uppercase tracking-wide mb-2" }, title), children);
|
|
19439
|
+
}
|
|
19440
|
+
function DetailModalContent({
|
|
19441
|
+
detail,
|
|
19442
|
+
serviceItems = []
|
|
19443
|
+
}) {
|
|
19444
|
+
var _a, _b, _c, _d, _e;
|
|
19445
|
+
if (detail.type === "offer") {
|
|
19446
|
+
const o = detail.item;
|
|
19447
|
+
const categoryLine = ((_a = o.category_names) == null ? void 0 : _a.length) ? o.category_names.join(" | ") : null;
|
|
19448
|
+
const descriptionContent = o.description || o.first_service_description_markdown;
|
|
19449
|
+
const relatedServices = ((_b = o.services) == null ? void 0 : _b.length) ? o.services : (_c = o.service_items) != null ? _c : [];
|
|
19450
|
+
const relatedPackages = (_d = o.packages) != null ? _d : [];
|
|
19451
|
+
return /* @__PURE__ */ React63.createElement("div", { className: "space-y-6" }, categoryLine && /* @__PURE__ */ React63.createElement("p", { className: "text-sm font-medium text-fg-secondary uppercase tracking-wide" }, categoryLine), o.value_terms && !categoryLine && /* @__PURE__ */ React63.createElement("p", { className: "text-sm font-medium text-fg-secondary uppercase tracking-wide" }, o.value_terms), descriptionContent && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Offer details" }, /* @__PURE__ */ React63.createElement("div", { className: "prose prose-sm font-body text-fg-primary max-w-none" }, o.description ? /* @__PURE__ */ React63.createElement("p", { className: "text-fg-primary" }, o.description) : /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: o.first_service_description_markdown }))), o.expires_at && (() => {
|
|
19452
|
+
const d = new Date(o.expires_at);
|
|
19453
|
+
if (Number.isNaN(d.getTime())) return null;
|
|
19454
|
+
return /* @__PURE__ */ React63.createElement("p", { className: "text-sm text-tertiary" }, "Expires ", d.toLocaleDateString(void 0, { dateStyle: "medium" }));
|
|
19455
|
+
})(), relatedServices.length > 0 && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Related services" }, /* @__PURE__ */ React63.createElement("ul", { className: "space-y-4" }, relatedServices.map((s) => /* @__PURE__ */ React63.createElement("li", { key: s.id, className: "border border-secondary rounded-lg p-4 bg-secondary/20" }, /* @__PURE__ */ React63.createElement("p", { className: "font-display font-medium text-fg-primary" }, s.name), "description_markdown" in s && s.description_markdown ? /* @__PURE__ */ React63.createElement("div", { className: "mt-2 prose prose-sm font-body text-fg-secondary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: s.description_markdown })) : s.summary ? /* @__PURE__ */ React63.createElement("p", { className: "mt-2 font-body text-sm text-fg-secondary" }, s.summary) : null)))), relatedPackages.length > 0 && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Related packages" }, /* @__PURE__ */ React63.createElement("ul", { className: "space-y-4" }, relatedPackages.map((pkg) => /* @__PURE__ */ React63.createElement("li", { key: pkg.id, className: "border border-secondary rounded-lg p-4 bg-secondary/20" }, /* @__PURE__ */ React63.createElement("p", { className: "font-display font-medium text-fg-primary" }, pkg.name), "description_markdown" in pkg && pkg.description_markdown ? /* @__PURE__ */ React63.createElement("div", { className: "mt-2 prose prose-sm font-body text-fg-secondary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: pkg.description_markdown })) : pkg.summary ? /* @__PURE__ */ React63.createElement("p", { className: "mt-2 font-body text-sm text-fg-secondary" }, pkg.summary) : null)))));
|
|
19456
|
+
}
|
|
19457
|
+
if (detail.type === "package") {
|
|
19458
|
+
const p = detail.item;
|
|
19459
|
+
const categoryLine = ((_e = p.category_names) == null ? void 0 : _e.length) ? p.category_names.join(" | ") : null;
|
|
19460
|
+
const descriptionMarkdown2 = p.description_markdown || p.summary || p.first_service_description_markdown;
|
|
19461
|
+
return /* @__PURE__ */ React63.createElement("div", { className: "space-y-6" }, categoryLine && /* @__PURE__ */ React63.createElement("p", { className: "text-sm font-medium text-fg-secondary uppercase tracking-wide" }, categoryLine), descriptionMarkdown2 && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Package details" }, /* @__PURE__ */ React63.createElement("div", { className: "prose prose-sm font-body text-fg-primary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: descriptionMarkdown2 }))), p.package_items && p.package_items.length > 0 && /* @__PURE__ */ React63.createElement(ModalSection, { title: "What's included" }, /* @__PURE__ */ React63.createElement("ul", { className: "space-y-4" }, p.package_items.map((pi, i) => {
|
|
19462
|
+
var _a2, _b2, _c2, _d2, _e2, _f, _g, _h, _i;
|
|
19463
|
+
const fullItem = ((_a2 = pi.service_item) == null ? void 0 : _a2.id) != null ? serviceItems.find((si2) => si2.id === pi.service_item.id) : null;
|
|
19464
|
+
const name = (_d2 = (_c2 = fullItem == null ? void 0 : fullItem.name) != null ? _c2 : (_b2 = pi.service_item) == null ? void 0 : _b2.name) != null ? _d2 : "Item";
|
|
19465
|
+
const desc = (_g = (_e2 = fullItem == null ? void 0 : fullItem.summary) != null ? _e2 : fullItem == null ? void 0 : fullItem.description_markdown) != null ? _g : (_f = pi.service_item) == null ? void 0 : _f.summary;
|
|
19466
|
+
return /* @__PURE__ */ React63.createElement("li", { key: (_i = (_h = pi.service_item) == null ? void 0 : _h.id) != null ? _i : i, className: "border border-secondary rounded-lg p-4 bg-secondary/20" }, /* @__PURE__ */ React63.createElement("p", { className: "font-display font-medium text-fg-primary" }, pi.quantity > 1 && `${pi.quantity}\xD7 `, name), desc && /* @__PURE__ */ React63.createElement("div", { className: "mt-2 prose prose-sm font-body text-fg-secondary max-w-none" }, typeof desc === "string" && !desc.includes("\n") && !desc.match(/[#*\[\]]/) ? /* @__PURE__ */ React63.createElement("p", null, desc) : /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: desc })));
|
|
19467
|
+
}))), p.pricing_info && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Pricing" }, /* @__PURE__ */ React63.createElement("div", { className: "rounded-lg border border-secondary bg-secondary/40 p-4" }, /* @__PURE__ */ React63.createElement("div", { className: "prose prose-sm font-body text-fg-primary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: p.pricing_info })))));
|
|
19468
|
+
}
|
|
19469
|
+
const si = detail.item;
|
|
19470
|
+
const priceStr = formatPriceCents(si.price_cents);
|
|
19471
|
+
const summary = si.summary || si.service_summary;
|
|
19472
|
+
const descriptionMarkdown = si.description_markdown || si.service_description_markdown;
|
|
19473
|
+
return /* @__PURE__ */ React63.createElement("div", { className: "space-y-6" }, si.service_name && /* @__PURE__ */ React63.createElement("p", { className: "text-sm font-medium text-fg-secondary uppercase tracking-wide" }, si.service_name), priceStr && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Price" }, /* @__PURE__ */ React63.createElement("p", { className: "font-display text-lg font-normal text-fg-primary" }, priceStr), si.duration_minutes != null && si.duration_minutes > 0 && /* @__PURE__ */ React63.createElement("p", { className: "font-body text-sm text-fg-secondary mt-1" }, "Duration: ", si.duration_minutes, " min")), summary && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Overview" }, /* @__PURE__ */ React63.createElement("p", { className: "font-body text-fg-primary" }, summary)), descriptionMarkdown && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Full description" }, /* @__PURE__ */ React63.createElement("div", { className: "prose prose-sm font-body text-fg-primary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: descriptionMarkdown }))), si.pricing_info && /* @__PURE__ */ React63.createElement(ModalSection, { title: "Pricing details" }, /* @__PURE__ */ React63.createElement("div", { className: "rounded-lg border border-secondary bg-secondary/40 p-4" }, /* @__PURE__ */ React63.createElement("div", { className: "prose prose-sm font-body text-fg-primary max-w-none" }, /* @__PURE__ */ React63.createElement(MarkdownRenderer2, { content: si.pricing_info })))));
|
|
19474
|
+
}
|
|
19475
|
+
function ServiceMenuSection({
|
|
19476
|
+
title = "Service Menu",
|
|
19477
|
+
subtitle,
|
|
19478
|
+
offers = null,
|
|
19479
|
+
packages = null,
|
|
19480
|
+
services = null,
|
|
19481
|
+
websitePhotos,
|
|
19482
|
+
companyInformation,
|
|
19483
|
+
viewAllHref,
|
|
19484
|
+
viewAllText = "View All",
|
|
19485
|
+
servicesRowTitle = "Treatments",
|
|
19486
|
+
variant = "section"
|
|
19487
|
+
}) {
|
|
19488
|
+
const offerList = React63.useMemo(
|
|
19489
|
+
() => Array.isArray(offers) ? offers.filter((o) => !o.expired) : [],
|
|
19490
|
+
[offers]
|
|
19491
|
+
);
|
|
19492
|
+
const packageList = React63.useMemo(
|
|
19493
|
+
() => Array.isArray(packages) ? packages : [],
|
|
19494
|
+
[packages]
|
|
19495
|
+
);
|
|
19496
|
+
const serviceList = React63.useMemo(
|
|
19497
|
+
() => Array.isArray(services) ? services : [],
|
|
19498
|
+
[services]
|
|
19499
|
+
);
|
|
19500
|
+
const serviceItemIdToService = React63.useMemo(() => {
|
|
19501
|
+
const m = /* @__PURE__ */ new Map();
|
|
19502
|
+
serviceList.forEach((s) => (s.service_items || []).forEach((si) => m.set(si.id, s)));
|
|
19503
|
+
return m;
|
|
19504
|
+
}, [serviceList]);
|
|
19505
|
+
const packagesForMenu = React63.useMemo(
|
|
19506
|
+
() => packageList.map((pkg) => {
|
|
19507
|
+
var _a, _b, _c;
|
|
19508
|
+
const category_names = [
|
|
19509
|
+
...new Set(
|
|
19510
|
+
(pkg.package_items || []).map((pi) => {
|
|
19511
|
+
var _a2, _b2, _c2;
|
|
19512
|
+
return (_c2 = serviceItemIdToService.get((_b2 = (_a2 = pi.service_item) == null ? void 0 : _a2.id) != null ? _b2 : 0)) == null ? void 0 : _c2.name;
|
|
19513
|
+
}).filter(Boolean)
|
|
19514
|
+
)
|
|
19515
|
+
];
|
|
19516
|
+
const firstPi = (_a = pkg.package_items) == null ? void 0 : _a[0];
|
|
19517
|
+
const firstService = firstPi ? serviceItemIdToService.get((_c = (_b = firstPi.service_item) == null ? void 0 : _b.id) != null ? _c : 0) : void 0;
|
|
19518
|
+
const first_service_description_markdown = (firstService == null ? void 0 : firstService.description_markdown) || (firstService == null ? void 0 : firstService.summary) || null;
|
|
19519
|
+
return __spreadProps(__spreadValues({}, pkg), { category_names, first_service_description_markdown });
|
|
19520
|
+
}),
|
|
19521
|
+
[packageList, serviceItemIdToService]
|
|
19522
|
+
);
|
|
19523
|
+
const offersForMenu = React63.useMemo(
|
|
19524
|
+
() => offerList.map((offer) => {
|
|
19525
|
+
var _a, _b, _c;
|
|
19526
|
+
const category_names = (_b = ((_a = offer.category_names) == null ? void 0 : _a.length) ? offer.category_names : null) != null ? _b : (offer.service_ids || []).map((id3) => {
|
|
19527
|
+
var _a2;
|
|
19528
|
+
return (_a2 = serviceList.find((s) => s.id === id3)) == null ? void 0 : _a2.name;
|
|
19529
|
+
}).filter(Boolean);
|
|
19530
|
+
const firstServiceId = (_c = offer.service_ids) == null ? void 0 : _c[0];
|
|
19531
|
+
const firstService = firstServiceId ? serviceList.find((s) => s.id === firstServiceId) : void 0;
|
|
19532
|
+
const first_service_description_markdown = (firstService == null ? void 0 : firstService.description_markdown) || (firstService == null ? void 0 : firstService.summary) || null;
|
|
19533
|
+
return __spreadProps(__spreadValues({}, offer), { category_names: category_names != null ? category_names : [], first_service_description_markdown });
|
|
19534
|
+
}),
|
|
19535
|
+
[offerList, serviceList]
|
|
19536
|
+
);
|
|
19537
|
+
const serviceItemsForMenu = serviceList.flatMap(
|
|
19538
|
+
(s) => (s.service_items || []).map((si) => __spreadProps(__spreadValues({}, si), {
|
|
19539
|
+
service_name: s.name,
|
|
19540
|
+
service_summary: s.summary,
|
|
19541
|
+
service_description_markdown: s.description_markdown
|
|
19542
|
+
}))
|
|
19543
|
+
);
|
|
19544
|
+
const hasAny = offersForMenu.length > 0 || packagesForMenu.length > 0 || serviceItemsForMenu.length > 0;
|
|
19545
|
+
const CAROUSEL_MIN = 3;
|
|
19546
|
+
const isPage = variant === "page";
|
|
19547
|
+
const offersLayout = isPage ? "grid" : offersForMenu.length >= CAROUSEL_MIN ? "carousel" : "grid";
|
|
19548
|
+
const packagesLayout = isPage ? "grid" : packagesForMenu.length >= CAROUSEL_MIN ? "carousel" : "grid";
|
|
19549
|
+
const serviceItemsLayout = isPage ? "grid" : serviceItemsForMenu.length >= CAROUSEL_MIN ? "carousel" : "grid";
|
|
19550
|
+
const [detailItem, setDetailItem] = useState30(null);
|
|
19551
|
+
const [portalTarget, setPortalTarget] = useState30(null);
|
|
19552
|
+
useEffect11(() => {
|
|
19553
|
+
let el = document.getElementById(SERVICE_MENU_MODAL_ROOT_ID);
|
|
19554
|
+
if (!el) {
|
|
19555
|
+
el = document.createElement("div");
|
|
19556
|
+
el.id = SERVICE_MENU_MODAL_ROOT_ID;
|
|
19557
|
+
document.body.appendChild(el);
|
|
19558
|
+
}
|
|
19559
|
+
setPortalTarget(el);
|
|
19560
|
+
return () => {
|
|
19561
|
+
el == null ? void 0 : el.remove();
|
|
19562
|
+
};
|
|
19563
|
+
}, []);
|
|
19564
|
+
const closeModal = useCallback10(() => setDetailItem(null), []);
|
|
19565
|
+
const renderOfferCard = useCallback10(
|
|
19566
|
+
(offer, index) => {
|
|
19567
|
+
var _a, _b;
|
|
19568
|
+
const categorySubtitle = ((_a = offer.category_names) == null ? void 0 : _a.length) ? offer.category_names.join(" | ") : (_b = offer.value_terms) != null ? _b : null;
|
|
19569
|
+
const cardDesc = offer.description || offer.first_service_description_markdown;
|
|
19570
|
+
const plainDesc = cardDesc ? (typeof cardDesc === "string" ? cardDesc : "").replace(/[#*`\[\]]/g, "").replace(/\n+/g, " ").trim() : "";
|
|
19571
|
+
const descText = plainDesc.length > 120 ? plainDesc.slice(0, 120) + "\u2026" : plainDesc;
|
|
19572
|
+
return /* @__PURE__ */ React63.createElement(
|
|
19573
|
+
GridCardWithImage,
|
|
19574
|
+
{
|
|
19575
|
+
photoAttachments: offer.photo_attachments,
|
|
19576
|
+
fallbackId: offer.id,
|
|
19577
|
+
fallbackAlt: offer.name,
|
|
19578
|
+
title: offer.name,
|
|
19579
|
+
subtitle: categorySubtitle,
|
|
19580
|
+
onClick: () => setDetailItem({ type: "offer", item: offer }),
|
|
19581
|
+
websitePhotos,
|
|
19582
|
+
companyInformation,
|
|
19583
|
+
cycleSeed: `offer-${offer.id}-${index}`
|
|
19584
|
+
},
|
|
19585
|
+
descText && /* @__PURE__ */ React63.createElement("p", { className: "font-body text-sm text-tertiary mt-1 line-clamp-2" }, descText)
|
|
19586
|
+
);
|
|
19587
|
+
},
|
|
19588
|
+
[websitePhotos, companyInformation]
|
|
19589
|
+
);
|
|
19590
|
+
const renderPackageCard = useCallback10(
|
|
19591
|
+
(pkg, index) => {
|
|
19592
|
+
var _a;
|
|
19593
|
+
const categorySubtitle = ((_a = pkg.category_names) == null ? void 0 : _a.length) ? pkg.category_names.join(" | ") : null;
|
|
19594
|
+
const cardDesc = pkg.description_markdown || pkg.summary || pkg.first_service_description_markdown;
|
|
19595
|
+
const plainDesc = cardDesc ? cardDesc.replace(/[#*`\[\]]/g, "").replace(/\n+/g, " ").trim() : "";
|
|
19596
|
+
const descText = plainDesc.length > 120 ? plainDesc.slice(0, 120) + "\u2026" : plainDesc;
|
|
19597
|
+
return /* @__PURE__ */ React63.createElement(
|
|
19598
|
+
GridCardWithImage,
|
|
19599
|
+
{
|
|
19600
|
+
photoAttachments: pkg.photo_attachments,
|
|
19601
|
+
fallbackId: `pkg-${pkg.id}`,
|
|
19602
|
+
fallbackAlt: pkg.name,
|
|
19603
|
+
title: pkg.name,
|
|
19604
|
+
subtitle: categorySubtitle,
|
|
19605
|
+
onClick: () => setDetailItem({ type: "package", item: pkg }),
|
|
19606
|
+
websitePhotos,
|
|
19607
|
+
companyInformation,
|
|
19608
|
+
cycleSeed: `pkg-${pkg.id}-${index}`
|
|
19609
|
+
},
|
|
19610
|
+
descText && /* @__PURE__ */ React63.createElement("p", { className: "font-body text-sm text-tertiary mt-1 line-clamp-2" }, descText)
|
|
19611
|
+
);
|
|
19612
|
+
},
|
|
19613
|
+
[websitePhotos, companyInformation]
|
|
19614
|
+
);
|
|
19615
|
+
const renderServiceItemCard = useCallback10(
|
|
19616
|
+
(si, index) => {
|
|
19617
|
+
var _a, _b, _c, _d;
|
|
19618
|
+
return /* @__PURE__ */ React63.createElement(
|
|
19619
|
+
GridCardWithImage,
|
|
19620
|
+
{
|
|
19621
|
+
photoAttachments: si.photo_attachments,
|
|
19622
|
+
fallbackId: `service-item-${si.id}`,
|
|
19623
|
+
fallbackAlt: ((_c = (_b = (_a = si.photo_attachments) == null ? void 0 : _a[0]) == null ? void 0 : _b.photo) == null ? void 0 : _c.title) || si.name,
|
|
19624
|
+
title: si.name,
|
|
19625
|
+
subtitle: (_d = si.service_name) != null ? _d : null,
|
|
19626
|
+
onClick: () => setDetailItem({ type: "service_item", item: si }),
|
|
19627
|
+
websitePhotos,
|
|
19628
|
+
companyInformation,
|
|
19629
|
+
cycleSeed: `service-item-${si.id}-${index}`
|
|
19630
|
+
},
|
|
19631
|
+
formatPriceCents(si.price_cents) && /* @__PURE__ */ React63.createElement("p", { className: "font-body text-sm font-medium text-fg-primary mt-1" }, formatPriceCents(si.price_cents)),
|
|
19632
|
+
(() => {
|
|
19633
|
+
const desc = si.summary || si.description_markdown || si.service_summary || si.service_description_markdown;
|
|
19634
|
+
if (!desc) return null;
|
|
19635
|
+
const plain = desc.replace(/[#*`\[\]]/g, "").replace(/\n+/g, " ").trim();
|
|
19636
|
+
const text = plain.length > 120 ? plain.slice(0, 120) + "\u2026" : plain;
|
|
19637
|
+
return /* @__PURE__ */ React63.createElement("p", { className: "font-body text-sm text-tertiary mt-1 line-clamp-2" }, text);
|
|
19638
|
+
})()
|
|
19639
|
+
);
|
|
19640
|
+
},
|
|
19641
|
+
[websitePhotos, companyInformation]
|
|
19642
|
+
);
|
|
19643
|
+
if (!hasAny) return null;
|
|
19644
|
+
const modalTitle = detailItem ? detailItem.item.name : "";
|
|
19645
|
+
return /* @__PURE__ */ React63.createElement("section", { className: variant === "page" ? "py-12 md:py-20" : "py-12 md:py-16" }, /* @__PURE__ */ React63.createElement("div", { className: "mx-auto max-w-container px-4 md:px-8" }, variant === "section" && /* @__PURE__ */ React63.createElement("div", { className: "mx-auto max-w-3xl text-center mb-12 md:mb-16" }, title && /* @__PURE__ */ React63.createElement("h2", { className: "font-display text-4xl font-normal text-fg-primary md:text-5xl" }, title), subtitle && /* @__PURE__ */ React63.createElement("p", { className: "mt-4 font-display text-lg leading-relaxed text-tertiary md:text-xl max-w-3xl mx-auto" }, subtitle)), /* @__PURE__ */ React63.createElement(
|
|
19646
|
+
MenuBlock,
|
|
19647
|
+
{
|
|
19648
|
+
rowTitle: "Offers",
|
|
19649
|
+
items: offersForMenu,
|
|
19650
|
+
layout: offersLayout,
|
|
19651
|
+
renderItem: renderOfferCard
|
|
19652
|
+
}
|
|
19653
|
+
), /* @__PURE__ */ React63.createElement(
|
|
19654
|
+
MenuBlock,
|
|
19655
|
+
{
|
|
19656
|
+
rowTitle: "Packages",
|
|
19657
|
+
items: packagesForMenu,
|
|
19658
|
+
layout: packagesLayout,
|
|
19659
|
+
renderItem: renderPackageCard
|
|
19660
|
+
}
|
|
19661
|
+
), /* @__PURE__ */ React63.createElement(
|
|
19662
|
+
MenuBlock,
|
|
19663
|
+
{
|
|
19664
|
+
rowTitle: servicesRowTitle,
|
|
19665
|
+
items: serviceItemsForMenu,
|
|
19666
|
+
layout: serviceItemsLayout,
|
|
19667
|
+
renderItem: renderServiceItemCard
|
|
19668
|
+
}
|
|
19669
|
+
), variant === "section" && viewAllHref && viewAllText && /* @__PURE__ */ React63.createElement("div", { className: "mt-12 text-center" }, /* @__PURE__ */ React63.createElement(Button2, { href: viewAllHref, color: "primary", size: "md" }, viewAllText))), portalTarget && detailItem && createPortal(
|
|
19670
|
+
/* @__PURE__ */ React63.createElement(
|
|
19671
|
+
Modal,
|
|
19672
|
+
{
|
|
19673
|
+
isOpen: true,
|
|
19674
|
+
onClose: closeModal,
|
|
19675
|
+
title: modalTitle,
|
|
19676
|
+
maxWidth: "2xl"
|
|
19677
|
+
},
|
|
19678
|
+
/* @__PURE__ */ React63.createElement(
|
|
19679
|
+
DetailModalContent,
|
|
19680
|
+
{
|
|
19681
|
+
detail: detailItem,
|
|
19682
|
+
services: serviceList,
|
|
19683
|
+
packages: packagesForMenu,
|
|
19684
|
+
serviceItems: serviceItemsForMenu
|
|
19685
|
+
}
|
|
19686
|
+
)
|
|
19687
|
+
),
|
|
19688
|
+
portalTarget
|
|
19689
|
+
));
|
|
19690
|
+
}
|
|
19691
|
+
|
|
18853
19692
|
// src/design_system/sections/index.tsx
|
|
18854
19693
|
function createThemedExport2(componentName, BaseComponent) {
|
|
18855
19694
|
return function ThemedComponent(props) {
|
|
18856
19695
|
const { theme } = useTheme();
|
|
18857
19696
|
try {
|
|
18858
19697
|
const Component2 = getThemedComponent(componentName, theme);
|
|
18859
|
-
return
|
|
19698
|
+
return React64.createElement(Component2, props);
|
|
18860
19699
|
} catch (e) {
|
|
18861
|
-
return
|
|
19700
|
+
return React64.createElement(BaseComponent, props);
|
|
18862
19701
|
}
|
|
18863
19702
|
};
|
|
18864
19703
|
}
|
|
@@ -18897,6 +19736,9 @@ var PolicyDocumentSection2 = PolicyDocumentSection;
|
|
|
18897
19736
|
var SocialMediaHero3 = createThemedExport2("hero-social-media", SocialMediaHero);
|
|
18898
19737
|
var TestimonialsHero3 = createThemedExport2("hero-testimonials", TestimonialsHero);
|
|
18899
19738
|
var HomeHeroComponent2 = createThemedExport2("home-hero-component", HomeHeroComponent);
|
|
19739
|
+
var OffersSection2 = createThemedExport2("offers-section", OffersSection);
|
|
19740
|
+
var OffersGallery2 = createThemedExport2("offers-gallery", OffersGallery);
|
|
19741
|
+
var OfferDetailSection2 = createThemedExport2("offer-detail", OfferDetailSection);
|
|
18900
19742
|
|
|
18901
19743
|
// src/lib/actions.ts
|
|
18902
19744
|
var API_URL = process.env.API_URL || "http://localhost:3000/api/v1";
|
|
@@ -19002,7 +19844,7 @@ async function submitLeadFormAction(formData) {
|
|
|
19002
19844
|
}
|
|
19003
19845
|
|
|
19004
19846
|
// src/design_system/components/ChatWidget.tsx
|
|
19005
|
-
import
|
|
19847
|
+
import React65, { useState as useState31, useEffect as useEffect12, useRef as useRef18, useCallback as useCallback11 } from "react";
|
|
19006
19848
|
import { X, MessageChatSquare } from "@untitledui/icons";
|
|
19007
19849
|
var formatTime = (isoString) => {
|
|
19008
19850
|
const date = new Date(isoString);
|
|
@@ -19026,14 +19868,14 @@ function ChatWidget({
|
|
|
19026
19868
|
displayName: providedDisplayName,
|
|
19027
19869
|
teamMembers = []
|
|
19028
19870
|
}) {
|
|
19029
|
-
const [isOpen, setIsOpen] =
|
|
19030
|
-
const [messages, setMessages] =
|
|
19031
|
-
const [inputValue, setInputValue] =
|
|
19032
|
-
const [isLoading, setIsLoading] =
|
|
19033
|
-
const [sessionId, setSessionId] =
|
|
19034
|
-
const [waitingForReply, setWaitingForReply] =
|
|
19035
|
-
const messagesEndRef =
|
|
19036
|
-
|
|
19871
|
+
const [isOpen, setIsOpen] = useState31(false);
|
|
19872
|
+
const [messages, setMessages] = useState31([]);
|
|
19873
|
+
const [inputValue, setInputValue] = useState31("");
|
|
19874
|
+
const [isLoading, setIsLoading] = useState31(false);
|
|
19875
|
+
const [sessionId, setSessionId] = useState31("");
|
|
19876
|
+
const [waitingForReply, setWaitingForReply] = useState31(false);
|
|
19877
|
+
const messagesEndRef = useRef18(null);
|
|
19878
|
+
useEffect12(() => {
|
|
19037
19879
|
if (providedSessionId) {
|
|
19038
19880
|
setSessionId(providedSessionId);
|
|
19039
19881
|
} else {
|
|
@@ -19047,7 +19889,7 @@ function ChatWidget({
|
|
|
19047
19889
|
}
|
|
19048
19890
|
}
|
|
19049
19891
|
}, [providedSessionId]);
|
|
19050
|
-
const loadMessages =
|
|
19892
|
+
const loadMessages = useCallback11(async () => {
|
|
19051
19893
|
try {
|
|
19052
19894
|
const response = await fetch(`/api/chat/?identifier=${encodeURIComponent(sessionId)}`);
|
|
19053
19895
|
if (response.ok) {
|
|
@@ -19061,12 +19903,12 @@ function ChatWidget({
|
|
|
19061
19903
|
}
|
|
19062
19904
|
return [];
|
|
19063
19905
|
}, [sessionId]);
|
|
19064
|
-
|
|
19906
|
+
useEffect12(() => {
|
|
19065
19907
|
if (isOpen && sessionId) {
|
|
19066
19908
|
loadMessages();
|
|
19067
19909
|
}
|
|
19068
19910
|
}, [isOpen, sessionId, loadMessages]);
|
|
19069
|
-
|
|
19911
|
+
useEffect12(() => {
|
|
19070
19912
|
var _a;
|
|
19071
19913
|
(_a = messagesEndRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
|
|
19072
19914
|
}, [messages]);
|
|
@@ -19156,7 +19998,7 @@ function ChatWidget({
|
|
|
19156
19998
|
} : void 0;
|
|
19157
19999
|
const widgetBrandClass = primaryColor ? "bg-[var(--widget-primary)]" : "bg-brand-solid";
|
|
19158
20000
|
const widgetBrandHoverClass = primaryColor ? "hover:bg-[var(--widget-primary-hover)]" : "hover:bg-brand-solid_hover";
|
|
19159
|
-
return /* @__PURE__ */
|
|
20001
|
+
return /* @__PURE__ */ React65.createElement(
|
|
19160
20002
|
"div",
|
|
19161
20003
|
{
|
|
19162
20004
|
className: cx(
|
|
@@ -19165,7 +20007,7 @@ function ChatWidget({
|
|
|
19165
20007
|
),
|
|
19166
20008
|
style: customColorVars
|
|
19167
20009
|
},
|
|
19168
|
-
!isOpen && /* @__PURE__ */
|
|
20010
|
+
!isOpen && /* @__PURE__ */ React65.createElement(
|
|
19169
20011
|
"button",
|
|
19170
20012
|
{
|
|
19171
20013
|
onClick: () => setIsOpen(true),
|
|
@@ -19175,15 +20017,15 @@ function ChatWidget({
|
|
|
19175
20017
|
),
|
|
19176
20018
|
"aria-label": "Open chat"
|
|
19177
20019
|
},
|
|
19178
|
-
/* @__PURE__ */
|
|
20020
|
+
/* @__PURE__ */ React65.createElement(MessageChatSquare, { className: "size-6" })
|
|
19179
20021
|
),
|
|
19180
|
-
isOpen && /* @__PURE__ */
|
|
20022
|
+
isOpen && /* @__PURE__ */ React65.createElement("div", { className: "flex h-[500px] w-[380px] flex-col overflow-hidden rounded-xl bg-primary shadow-2xl ring-1 ring-secondary ring-inset" }, /* @__PURE__ */ React65.createElement("div", { className: cx(
|
|
19181
20023
|
"flex items-center justify-between gap-3 p-4 text-white",
|
|
19182
20024
|
widgetBrandClass
|
|
19183
|
-
) }, /* @__PURE__ */
|
|
20025
|
+
) }, /* @__PURE__ */ React65.createElement("div", { className: "flex min-w-0 flex-1 flex-col gap-2" }, /* @__PURE__ */ React65.createElement("h3", { className: "m-0 text-lg font-semibold leading-tight" }, "Chat with us"), (() => {
|
|
19184
20026
|
const membersWithPhotos = teamMembers.filter((m) => m.photo_url);
|
|
19185
20027
|
if (membersWithPhotos.length === 0) return null;
|
|
19186
|
-
return /* @__PURE__ */
|
|
20028
|
+
return /* @__PURE__ */ React65.createElement("div", { className: "flex -space-x-2" }, membersWithPhotos.slice(0, 5).map((member) => /* @__PURE__ */ React65.createElement(
|
|
19187
20029
|
Avatar,
|
|
19188
20030
|
{
|
|
19189
20031
|
key: member.id,
|
|
@@ -19192,28 +20034,28 @@ function ChatWidget({
|
|
|
19192
20034
|
alt: member.name,
|
|
19193
20035
|
className: "bg-white ring-2 ring-white"
|
|
19194
20036
|
}
|
|
19195
|
-
)), membersWithPhotos.length > 5 && /* @__PURE__ */
|
|
20037
|
+
)), membersWithPhotos.length > 5 && /* @__PURE__ */ React65.createElement(
|
|
19196
20038
|
Avatar,
|
|
19197
20039
|
{
|
|
19198
20040
|
size: "xs",
|
|
19199
20041
|
className: "bg-white ring-2 ring-white",
|
|
19200
|
-
placeholder: /* @__PURE__ */
|
|
20042
|
+
placeholder: /* @__PURE__ */ React65.createElement("span", { className: "flex items-center justify-center text-xs font-semibold text-tertiary" }, "+", membersWithPhotos.length - 5)
|
|
19201
20043
|
}
|
|
19202
20044
|
));
|
|
19203
|
-
})()), /* @__PURE__ */
|
|
20045
|
+
})()), /* @__PURE__ */ React65.createElement(
|
|
19204
20046
|
"button",
|
|
19205
20047
|
{
|
|
19206
20048
|
onClick: () => setIsOpen(false),
|
|
19207
20049
|
className: "cursor-pointer rounded-md p-1 text-white outline-none transition-colors hover:bg-white/10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white",
|
|
19208
20050
|
"aria-label": "Close chat"
|
|
19209
20051
|
},
|
|
19210
|
-
/* @__PURE__ */
|
|
19211
|
-
)), /* @__PURE__ */
|
|
20052
|
+
/* @__PURE__ */ React65.createElement(X, { className: "size-5" })
|
|
20053
|
+
)), /* @__PURE__ */ React65.createElement("ul", { className: "flex flex-1 flex-col gap-4 overflow-y-auto px-4 py-4" }, messages.length === 0 && /* @__PURE__ */ React65.createElement("li", { className: "mt-5 text-center text-sm text-quaternary" }, "Start a conversation! We're here to help."), messages.map((message, index) => {
|
|
19212
20054
|
var _a, _b, _c, _d;
|
|
19213
20055
|
const isUser = message.sender_type === "contact";
|
|
19214
20056
|
const prevMessage = index > 0 ? messages[index - 1] : null;
|
|
19215
20057
|
const showAvatar = !isUser && (!prevMessage || prevMessage.sender_type === "contact");
|
|
19216
|
-
return /* @__PURE__ */
|
|
20058
|
+
return /* @__PURE__ */ React65.createElement(
|
|
19217
20059
|
"li",
|
|
19218
20060
|
{
|
|
19219
20061
|
key: message.id,
|
|
@@ -19222,7 +20064,7 @@ function ChatWidget({
|
|
|
19222
20064
|
isUser ? "self-end pl-10" : "pr-8"
|
|
19223
20065
|
)
|
|
19224
20066
|
},
|
|
19225
|
-
!isUser && showAvatar && /* @__PURE__ */
|
|
20067
|
+
!isUser && showAvatar && /* @__PURE__ */ React65.createElement(
|
|
19226
20068
|
Avatar,
|
|
19227
20069
|
{
|
|
19228
20070
|
size: "sm",
|
|
@@ -19232,8 +20074,8 @@ function ChatWidget({
|
|
|
19232
20074
|
initials: ((_c = teamMembers[0]) == null ? void 0 : _c.photo_url) ? void 0 : (((_d = teamMembers[0]) == null ? void 0 : _d.name) || message.sender_display_name).split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2)
|
|
19233
20075
|
}
|
|
19234
20076
|
),
|
|
19235
|
-
!isUser && !showAvatar && /* @__PURE__ */
|
|
19236
|
-
/* @__PURE__ */
|
|
20077
|
+
!isUser && !showAvatar && /* @__PURE__ */ React65.createElement("div", { className: "size-8 shrink-0" }),
|
|
20078
|
+
/* @__PURE__ */ React65.createElement("article", { className: "flex min-w-0 flex-1 flex-col gap-1" }, /* @__PURE__ */ React65.createElement("header", { className: "flex items-center gap-2 px-0.5" }, /* @__PURE__ */ React65.createElement("cite", { className: "flex-1 truncate text-xs font-medium text-tertiary not-italic" }, isUser ? providedDisplayName || "You" : message.sender_display_name), /* @__PURE__ */ React65.createElement("time", { className: "text-xs text-quaternary", dateTime: message.created_at }, formatTime(message.created_at))), /* @__PURE__ */ React65.createElement(
|
|
19237
20079
|
"div",
|
|
19238
20080
|
{
|
|
19239
20081
|
className: cx(
|
|
@@ -19247,7 +20089,7 @@ function ChatWidget({
|
|
|
19247
20089
|
message.body
|
|
19248
20090
|
))
|
|
19249
20091
|
);
|
|
19250
|
-
}), waitingForReply && /* @__PURE__ */
|
|
20092
|
+
}), waitingForReply && /* @__PURE__ */ React65.createElement("li", { className: "relative flex items-start gap-3 pr-8" }, /* @__PURE__ */ React65.createElement(Avatar, { size: "sm", className: "shrink-0" }), /* @__PURE__ */ React65.createElement("article", { className: "flex min-w-0 flex-1 flex-col gap-1" }, /* @__PURE__ */ React65.createElement("div", { className: "flex h-9 w-16 items-center justify-center gap-1 rounded-xl rounded-tl-none bg-secondary ring-1 ring-inset ring-secondary" }, /* @__PURE__ */ React65.createElement("div", { className: "size-1.5 animate-bounce rounded-full bg-fg-tertiary [animation-delay:-0.3s]" }), /* @__PURE__ */ React65.createElement("div", { className: "size-1.5 animate-bounce rounded-full bg-fg-quaternary [animation-delay:-0.15s]" }), /* @__PURE__ */ React65.createElement("div", { className: "size-1.5 animate-bounce rounded-full bg-fg-tertiary" })))), /* @__PURE__ */ React65.createElement("div", { ref: messagesEndRef })), /* @__PURE__ */ React65.createElement("div", { className: "flex gap-2 border-t border-secondary p-3" }, /* @__PURE__ */ React65.createElement(
|
|
19251
20093
|
"input",
|
|
19252
20094
|
{
|
|
19253
20095
|
type: "text",
|
|
@@ -19258,7 +20100,7 @@ function ChatWidget({
|
|
|
19258
20100
|
disabled: isLoading,
|
|
19259
20101
|
className: "flex-1 rounded-lg border border-secondary bg-primary px-3 py-2.5 text-sm text-primary outline-none ring-brand transition-colors placeholder:text-placeholder focus:border-brand focus:ring-1 disabled:cursor-not-allowed disabled:bg-disabled"
|
|
19260
20102
|
}
|
|
19261
|
-
), /* @__PURE__ */
|
|
20103
|
+
), /* @__PURE__ */ React65.createElement(
|
|
19262
20104
|
"button",
|
|
19263
20105
|
{
|
|
19264
20106
|
onClick: sendMessage,
|
|
@@ -19357,7 +20199,12 @@ export {
|
|
|
19357
20199
|
LocationDetailsSection3 as LocationDetailsSection,
|
|
19358
20200
|
LocationGrid3 as LocationGrid,
|
|
19359
20201
|
MarkdownRenderer2 as MarkdownRenderer,
|
|
20202
|
+
Modal,
|
|
19360
20203
|
NativeSelect2 as NativeSelect,
|
|
20204
|
+
OfferDetailSection2 as OfferDetailSection,
|
|
20205
|
+
OffersGallery2 as OffersGallery,
|
|
20206
|
+
OffersGrid,
|
|
20207
|
+
OffersSection2 as OffersSection,
|
|
19361
20208
|
Pagination,
|
|
19362
20209
|
PaginationPageDefault2 as PaginationPageDefault,
|
|
19363
20210
|
PaginationPageMinimalCenter2 as PaginationPageMinimalCenter,
|
|
@@ -19371,6 +20218,7 @@ export {
|
|
|
19371
20218
|
SelectItem2 as SelectItem,
|
|
19372
20219
|
ServiceDetailContent2 as ServiceDetailContent,
|
|
19373
20220
|
ServiceDetailHero3 as ServiceDetailHero,
|
|
20221
|
+
ServiceMenuSection,
|
|
19374
20222
|
ServicesGrid4 as ServicesGrid,
|
|
19375
20223
|
ServicesHome5 as ServicesHome,
|
|
19376
20224
|
SocialIcon,
|