keystone-design-bootstrap 1.0.57 → 1.0.59
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-vWzW8yFb.d.ts +50 -0
- package/dist/contexts/index.d.ts +13 -0
- package/dist/design_system/elements/index.d.ts +383 -0
- package/dist/design_system/logo/keystone-logo.d.ts +6 -0
- package/dist/design_system/sections/index.d.ts +232 -0
- package/dist/design_system/sections/index.js +25 -37
- package/dist/design_system/sections/index.js.map +1 -1
- package/dist/index.d.ts +69 -0
- package/dist/index.js +25 -37
- package/dist/index.js.map +1 -1
- package/dist/lib/component-registry.d.ts +13 -0
- package/dist/lib/hooks/index.d.ts +83 -0
- package/dist/lib/server-api.d.ts +44 -0
- package/dist/package-CB1tENyG.d.ts +148 -0
- package/dist/photos-CmBdWiuZ.d.ts +27 -0
- package/dist/themes/index.d.ts +16 -0
- package/dist/types/index.d.ts +312 -0
- package/dist/utils/cx.d.ts +15 -0
- package/dist/utils/gradient-placeholder.d.ts +8 -0
- package/dist/utils/is-react-component.d.ts +21 -0
- package/dist/utils/markdown-toc.d.ts +14 -0
- package/dist/utils/phone-helpers.d.ts +24 -0
- package/dist/utils/photo-helpers.d.ts +38 -0
- package/dist/website-photos-Cl1YqAno.d.ts +21 -0
- package/package.json +1 -1
- package/src/design_system/portal/PortalPage.tsx +107 -91
- package/src/design_system/portal/PortalTabTracker.tsx +24 -0
- package/src/design_system/sections/contact-section-form.aman.tsx +2 -2
- package/src/design_system/sections/contact-section-form.balance.tsx +2 -2
- package/src/design_system/sections/contact-section-form.barelux.tsx +2 -2
- package/src/design_system/sections/contact-section-form.tsx +2 -2
- package/src/design_system/sections/header-navigation.aman.tsx +1 -4
- package/src/design_system/sections/header-navigation.balance.tsx +1 -4
- package/src/design_system/sections/header-navigation.barelux.tsx +1 -4
- package/src/design_system/sections/header-navigation.tsx +1 -8
- package/src/index.ts +1 -1
- package/src/lib/cta-urls.ts +15 -38
- package/src/next/layouts/root-layout.tsx +6 -7
- package/src/next/routes/consumer-auth.ts +2 -4
- package/src/tracking/MetaPixelTracker.tsx +17 -12
- package/src/tracking/firePixelEvent.ts +26 -0
- package/src/tracking/index.ts +2 -6
- package/src/types/api/company-information.ts +2 -0
- package/src/tracking/BookingCtaTracker.tsx +0 -32
- package/src/tracking/ViewContentTracker.tsx +0 -21
- package/src/tracking/trackInitiateCheckout.ts +0 -16
- package/src/tracking/trackMetaLead.ts +0 -14
- package/src/tracking/trackViewContent.ts +0 -19
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { S as Service, F as FormDefinition, P as Package, C as CompanyInformation } from '../../package-CB1tENyG.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import React__default, { ComponentProps, ReactNode, FC } from 'react';
|
|
4
|
+
export { Theme } from '../../themes/index.js';
|
|
5
|
+
import { B as BlogPost, a as BlogPostAuthor, d as BlogPostTag } from '../../blog-post-vWzW8yFb.js';
|
|
6
|
+
import { BadgeGroup } from '../elements/index.js';
|
|
7
|
+
import { W as WebsitePhotos } from '../../website-photos-Cl1YqAno.js';
|
|
8
|
+
import '../../photos-CmBdWiuZ.js';
|
|
9
|
+
import 'react-aria-components';
|
|
10
|
+
import 'embla-carousel-react';
|
|
11
|
+
|
|
12
|
+
interface PolicyDocumentSectionProps {
|
|
13
|
+
/** Page title (e.g. "Terms of Service" or "Privacy Policy") */
|
|
14
|
+
title: string;
|
|
15
|
+
/** Optional effective date string (e.g. "January 1, 2025") */
|
|
16
|
+
effectiveDate?: string;
|
|
17
|
+
/** Full markdown content for the policy (supports placeholders replaced before passing in) */
|
|
18
|
+
content: string;
|
|
19
|
+
/** Optional additional class name for the container */
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface ServiceDetailContentProps {
|
|
24
|
+
service?: Service | null;
|
|
25
|
+
/** Label above the title (e.g. "Why Balance Aesthetics") */
|
|
26
|
+
sectionLabel?: string;
|
|
27
|
+
/** CTA button text */
|
|
28
|
+
ctaText?: string;
|
|
29
|
+
/** CTA button href */
|
|
30
|
+
ctaHref?: string;
|
|
31
|
+
/** Fallback summary when service.summary is empty */
|
|
32
|
+
defaultSummary?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare const getBlogPostData: (article: BlogPost) => {
|
|
36
|
+
author: BlogPostAuthor | null;
|
|
37
|
+
authorName: string;
|
|
38
|
+
authorHref: string;
|
|
39
|
+
authorAvatarUrl: string | null;
|
|
40
|
+
tag: BlogPostTag | null;
|
|
41
|
+
tagName: string;
|
|
42
|
+
tagHref: string;
|
|
43
|
+
href: string;
|
|
44
|
+
title: string;
|
|
45
|
+
publishedAt: string;
|
|
46
|
+
summary: string;
|
|
47
|
+
};
|
|
48
|
+
declare const BlogCardVertical: ({ article, imageClassName }: {
|
|
49
|
+
article: BlogPost;
|
|
50
|
+
imageClassName?: string;
|
|
51
|
+
}) => React.JSX.Element;
|
|
52
|
+
declare const BlogCardVerticalBadge: ({ article, badgeTheme, imageClassName, }: {
|
|
53
|
+
article: BlogPost;
|
|
54
|
+
badgeTheme?: ComponentProps<typeof BadgeGroup>["theme"];
|
|
55
|
+
imageClassName?: string;
|
|
56
|
+
}) => React.JSX.Element;
|
|
57
|
+
declare const BlogCardVerticalCompact: ({ article, imageClassName, titleClassName, className, }: {
|
|
58
|
+
article: BlogPost;
|
|
59
|
+
imageClassName?: string;
|
|
60
|
+
titleClassName?: string;
|
|
61
|
+
className?: string;
|
|
62
|
+
}) => React.JSX.Element;
|
|
63
|
+
declare const BlogCardVerticalMinimal: ({ article, imageClassName, className }: {
|
|
64
|
+
article: BlogPost;
|
|
65
|
+
imageClassName?: string;
|
|
66
|
+
className?: string;
|
|
67
|
+
}) => React.JSX.Element;
|
|
68
|
+
declare const BlogCardHorizontal: ({ article, imageClassName }: {
|
|
69
|
+
article: BlogPost;
|
|
70
|
+
imageClassName?: string;
|
|
71
|
+
}) => React.JSX.Element;
|
|
72
|
+
declare const BlogCardHorizontalBadge: ({ article }: {
|
|
73
|
+
article: BlogPost;
|
|
74
|
+
}) => React.JSX.Element;
|
|
75
|
+
declare const BlogCardHorizontalCompact: ({ article, imageClassName }: {
|
|
76
|
+
article: BlogPost;
|
|
77
|
+
imageClassName?: string;
|
|
78
|
+
}) => React.JSX.Element;
|
|
79
|
+
declare const BlogCardHorizontalMinimal: ({ article }: {
|
|
80
|
+
article: BlogPost;
|
|
81
|
+
}) => React.JSX.Element;
|
|
82
|
+
declare const BlogCardFullWidthVertical: ({ article }: {
|
|
83
|
+
article: BlogPost;
|
|
84
|
+
}) => React.JSX.Element;
|
|
85
|
+
declare const BlogCardFullWidthVerticalAlt: ({ article }: {
|
|
86
|
+
article: BlogPost;
|
|
87
|
+
}) => React.JSX.Element;
|
|
88
|
+
declare const BlogCardFullWidthVerticalCompact: ({ article }: {
|
|
89
|
+
article: BlogPost;
|
|
90
|
+
}) => React.JSX.Element;
|
|
91
|
+
declare const BlogCardFullWidthVerticalMinimal: ({ article }: {
|
|
92
|
+
article: BlogPost;
|
|
93
|
+
}) => React.JSX.Element;
|
|
94
|
+
declare const BlogCardFullWidthHorizontal: ({ article }: {
|
|
95
|
+
article: BlogPost;
|
|
96
|
+
}) => React.JSX.Element;
|
|
97
|
+
declare const BlogCardFullWidthHorizontalAlt: ({ article }: {
|
|
98
|
+
article: BlogPost;
|
|
99
|
+
}) => React.JSX.Element;
|
|
100
|
+
declare const BlogCardFullWidthHorizontalCompact: ({ article }: {
|
|
101
|
+
article: BlogPost;
|
|
102
|
+
}) => React.JSX.Element;
|
|
103
|
+
declare const BlogCardFullWidthHorizontalMinimal: ({ article }: {
|
|
104
|
+
article: BlogPost;
|
|
105
|
+
}) => React.JSX.Element;
|
|
106
|
+
|
|
107
|
+
interface FeatureTabProps {
|
|
108
|
+
title: string;
|
|
109
|
+
subtitle: string;
|
|
110
|
+
footer?: ReactNode;
|
|
111
|
+
isCurrent?: boolean;
|
|
112
|
+
}
|
|
113
|
+
declare const FeatureTabVertical: ({ title, subtitle, footer, isCurrent }: FeatureTabProps) => React.JSX.Element;
|
|
114
|
+
declare const FeatureTabHorizontal: ({ title, subtitle, footer, isCurrent }: FeatureTabProps) => React.JSX.Element;
|
|
115
|
+
|
|
116
|
+
interface TextCentered {
|
|
117
|
+
title: string;
|
|
118
|
+
subtitle: string;
|
|
119
|
+
footer?: ReactNode;
|
|
120
|
+
}
|
|
121
|
+
declare const FeatureTextCentered: ({ title, subtitle, footer }: TextCentered) => React.JSX.Element;
|
|
122
|
+
declare const FeatureTextLeft: ({ title, subtitle, footer }: TextCentered) => React.JSX.Element;
|
|
123
|
+
interface FeatureTextIcon extends TextCentered {
|
|
124
|
+
icon: FC<{
|
|
125
|
+
className?: string;
|
|
126
|
+
}>;
|
|
127
|
+
}
|
|
128
|
+
declare const FeatureTextIconTopCentered: ({ icon: Icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
129
|
+
declare const FeatureTextIconTopLeft: ({ icon: Icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
130
|
+
declare const FeatureTextIconLeft: ({ icon: Icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
131
|
+
declare const FeatureTextFeaturedIconTopCentered: ({ color, theme, icon, title, subtitle, footer, }: FeatureTextIcon & {
|
|
132
|
+
color?: "brand" | "gray" | "success" | "warning" | "error";
|
|
133
|
+
theme?: "light" | "gradient" | "dark" | "outline" | "modern";
|
|
134
|
+
}) => React.JSX.Element;
|
|
135
|
+
declare const FeatureTextFeaturedIconTopLeft: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
136
|
+
declare const FeatureTextFeaturedIconLeft: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
137
|
+
declare const FeatureTextFeaturedIconBox: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
138
|
+
interface FeatureTextIntegrationIcon extends TextCentered {
|
|
139
|
+
imgUrl: string;
|
|
140
|
+
}
|
|
141
|
+
declare const FeatureTextIntegrationIconTopCentered: ({ imgUrl, title, subtitle, footer }: FeatureTextIntegrationIcon) => React.JSX.Element;
|
|
142
|
+
declare const FeatureTextIntegrationIconTopLeft: ({ imgUrl, title, subtitle, footer }: FeatureTextIntegrationIcon) => React.JSX.Element;
|
|
143
|
+
declare const FeatureTextIntegrationIconLeft: ({ imgUrl, title, subtitle, footer }: FeatureTextIntegrationIcon) => React.JSX.Element;
|
|
144
|
+
declare const FeatureTextIntegrationIconBox: ({ imgUrl, title, subtitle, footer }: FeatureTextIntegrationIcon) => React.JSX.Element;
|
|
145
|
+
declare const FeatureTextIconCard: ({ icon: Icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
146
|
+
declare const FeatureTextFeaturedIconCard: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
147
|
+
declare const FeatureTextLeftBrand: ({ title, subtitle, footer }: TextCentered) => React.JSX.Element;
|
|
148
|
+
declare const FeatureTextFeaturedIconTopCenteredBrand: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
149
|
+
declare const FeatureTextFeaturedIconTopLeftBrand: ({ icon, title, subtitle, footer }: FeatureTextIcon) => React.JSX.Element;
|
|
150
|
+
|
|
151
|
+
interface JobApplicationFormProps {
|
|
152
|
+
jobSlug: string;
|
|
153
|
+
/** Form fields are rendered from this definition (required). */
|
|
154
|
+
formDefinition: FormDefinition | null | undefined;
|
|
155
|
+
inline?: boolean;
|
|
156
|
+
}
|
|
157
|
+
declare const JobApplicationForm: ({ jobSlug, formDefinition, inline }: JobApplicationFormProps) => React__default.JSX.Element | null;
|
|
158
|
+
|
|
159
|
+
interface EmailSignupSectionProps {
|
|
160
|
+
title?: string;
|
|
161
|
+
subtitle?: string;
|
|
162
|
+
buttonText?: string;
|
|
163
|
+
successMessage?: string;
|
|
164
|
+
/** Override the form definition (falls back to context). */
|
|
165
|
+
formDefinition?: FormDefinition | null;
|
|
166
|
+
}
|
|
167
|
+
declare const EmailSignupSection: ({ title, subtitle, buttonText, successMessage, formDefinition, }: EmailSignupSectionProps) => React__default.JSX.Element | null;
|
|
168
|
+
|
|
169
|
+
/** Package with category names and first-service description fallback (derived from services). */
|
|
170
|
+
interface PackageForMenu extends Package {
|
|
171
|
+
category_names?: string[];
|
|
172
|
+
first_service_description_markdown?: string | null;
|
|
173
|
+
}
|
|
174
|
+
interface ServiceMenuSectionProps {
|
|
175
|
+
title?: string;
|
|
176
|
+
subtitle?: string;
|
|
177
|
+
packages?: Package[] | null;
|
|
178
|
+
/** Services (used to derive service items for the third row). */
|
|
179
|
+
services?: Service[] | null;
|
|
180
|
+
websitePhotos?: WebsitePhotos | null;
|
|
181
|
+
companyInformation?: CompanyInformation | null;
|
|
182
|
+
viewAllHref?: string;
|
|
183
|
+
/** Label for the View All button (e.g. "View All"). */
|
|
184
|
+
viewAllText?: string;
|
|
185
|
+
/** Customer-friendly label for the third row (individual service items). Default "Treatments". */
|
|
186
|
+
servicesRowTitle?: string;
|
|
187
|
+
/** 'section' = compact header + carousel (e.g. home). 'page' = hero + grid (e.g. /service-menu). */
|
|
188
|
+
variant?: 'section' | 'page';
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Service Menu: packages and treatments (service items). Specials appear as card badges and in modals.
|
|
192
|
+
*/
|
|
193
|
+
declare function ServiceMenuSection({ title, subtitle, packages, services, websitePhotos, companyInformation, viewAllHref, viewAllText, servicesRowTitle, variant, }: ServiceMenuSectionProps): React__default.JSX.Element | null;
|
|
194
|
+
|
|
195
|
+
declare const HeroHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
196
|
+
declare const ServicesHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
197
|
+
declare const AboutHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
198
|
+
declare const TestimonialsHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
199
|
+
declare const TestimonialsGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
200
|
+
declare const FAQHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
201
|
+
declare const BlogSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
202
|
+
declare const ContactSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
203
|
+
declare const FooterHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
204
|
+
declare const HeaderNavigation: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
205
|
+
declare const GenericHeaderComponent: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
206
|
+
declare const StatisticsSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
207
|
+
declare const ValuesSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
208
|
+
declare const TeamGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
209
|
+
declare const LocationGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
210
|
+
declare const LocationDetailsSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
211
|
+
declare const ServicesGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
212
|
+
declare const SocialMediaGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
213
|
+
declare const JobGallery: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
214
|
+
declare const BlogHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
215
|
+
declare const BlogGallery: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
216
|
+
declare const BlogPostSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
217
|
+
declare const ContactHome: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
218
|
+
declare const FAQGrid: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
219
|
+
declare const FAQHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
220
|
+
|
|
221
|
+
declare const GenericTextHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
222
|
+
declare const LocationDetailHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
223
|
+
declare const ServiceDetailHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
224
|
+
declare const ServiceDetailContent: ({ service, sectionLabel, ctaText, ctaHref, defaultSummary, }: ServiceDetailContentProps) => React__default.JSX.Element | null;
|
|
225
|
+
declare const JobDetailHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
226
|
+
declare const JobDetailSection: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
227
|
+
declare const PolicyDocumentSection: ({ title, effectiveDate, content, className, }: PolicyDocumentSectionProps) => React__default.JSX.Element;
|
|
228
|
+
declare const SocialMediaHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
229
|
+
declare const TestimonialsHero: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
230
|
+
declare const HomeHeroComponent: (props: Record<string, unknown>) => React__default.ReactElement<Record<string, unknown>, string | React__default.JSXElementConstructor<any>>;
|
|
231
|
+
|
|
232
|
+
export { AboutHome, BlogCardFullWidthHorizontal, BlogCardFullWidthHorizontalAlt, BlogCardFullWidthHorizontalCompact, BlogCardFullWidthHorizontalMinimal, BlogCardFullWidthVertical, BlogCardFullWidthVerticalAlt, BlogCardFullWidthVerticalCompact, BlogCardFullWidthVerticalMinimal, BlogCardHorizontal, BlogCardHorizontalBadge, BlogCardHorizontalCompact, BlogCardHorizontalMinimal, BlogCardVertical, BlogCardVerticalBadge, BlogCardVerticalCompact, BlogCardVerticalMinimal, BlogGallery, BlogHome, BlogPostSection, BlogSection, ContactHome, ContactSection, EmailSignupSection, type EmailSignupSectionProps, FAQGrid, FAQHero, FAQHome, FeatureTabHorizontal, FeatureTabVertical, FeatureTextCentered, FeatureTextFeaturedIconBox, FeatureTextFeaturedIconCard, FeatureTextFeaturedIconLeft, FeatureTextFeaturedIconTopCentered, FeatureTextFeaturedIconTopCenteredBrand, FeatureTextFeaturedIconTopLeft, FeatureTextFeaturedIconTopLeftBrand, FeatureTextIconCard, FeatureTextIconLeft, FeatureTextIconTopCentered, FeatureTextIconTopLeft, FeatureTextIntegrationIconBox, FeatureTextIntegrationIconLeft, FeatureTextIntegrationIconTopCentered, FeatureTextIntegrationIconTopLeft, FeatureTextLeft, FeatureTextLeftBrand, FooterHome, GenericHeaderComponent, GenericTextHero, HeaderNavigation, HeroHome, HomeHeroComponent, JobApplicationForm, JobDetailHero, JobDetailSection, JobGallery, LocationDetailHero, LocationDetailsSection, LocationGrid, type PackageForMenu, PolicyDocumentSection, ServiceDetailContent, ServiceDetailHero, ServiceMenuSection, type ServiceMenuSectionProps, ServicesGrid, ServicesHome, SocialMediaGrid, SocialMediaHero, StatisticsSection, TeamGrid, TestimonialsGrid, TestimonialsHero, TestimonialsHome, ValuesSection, getBlogPostData };
|
|
@@ -6171,16 +6171,19 @@ function DynamicFormFields({ form, jobSlug, privacyPolicyUrl, termsOfServiceUrl
|
|
|
6171
6171
|
}), jobSlug ? /* @__PURE__ */ React18.createElement("input", { type: "hidden", name: "jobSlug", value: jobSlug }) : null, showPrivacyCheckbox && /* @__PURE__ */ React18.createElement(PrivacyCheckbox2, null));
|
|
6172
6172
|
}
|
|
6173
6173
|
|
|
6174
|
-
// src/tracking/
|
|
6175
|
-
function
|
|
6176
|
-
if (typeof window === "undefined"
|
|
6174
|
+
// src/tracking/firePixelEvent.ts
|
|
6175
|
+
function firePixelEvent(event, params) {
|
|
6176
|
+
if (typeof window === "undefined") return;
|
|
6177
6177
|
const fbq = window.fbq;
|
|
6178
6178
|
if (!fbq) {
|
|
6179
|
-
console.debug("[MetaPixel]
|
|
6179
|
+
console.debug("[MetaPixel] skipped \u2014 fbq not loaded", { event });
|
|
6180
6180
|
return;
|
|
6181
6181
|
}
|
|
6182
|
-
|
|
6183
|
-
|
|
6182
|
+
const normalized = {};
|
|
6183
|
+
if (params == null ? void 0 : params.contentName) normalized.content_name = params.contentName;
|
|
6184
|
+
if (params == null ? void 0 : params.contentCategory) normalized.content_category = params.contentCategory;
|
|
6185
|
+
console.debug("[MetaPixel]", event, normalized);
|
|
6186
|
+
fbq("track", event, Object.keys(normalized).length > 0 ? normalized : void 0);
|
|
6184
6187
|
}
|
|
6185
6188
|
|
|
6186
6189
|
// src/next/contexts/form-definitions.tsx
|
|
@@ -6237,7 +6240,7 @@ var ContactSectionForm = ({
|
|
|
6237
6240
|
setStatusMessage(result.message || successMessage);
|
|
6238
6241
|
(_a = formRef.current) == null ? void 0 : _a.reset();
|
|
6239
6242
|
onSuccess == null ? void 0 : onSuccess();
|
|
6240
|
-
|
|
6243
|
+
firePixelEvent("Lead");
|
|
6241
6244
|
setTimeout(() => setSubmitStatus("idle"), 5e3);
|
|
6242
6245
|
} else {
|
|
6243
6246
|
setSubmitStatus("error");
|
|
@@ -6454,17 +6457,14 @@ var CONTACT_PATH = "/contact";
|
|
|
6454
6457
|
function isExternalCtaUrl(href) {
|
|
6455
6458
|
return href.startsWith("http://") || href.startsWith("https://");
|
|
6456
6459
|
}
|
|
6457
|
-
function resolveCtaUrls(companyInformation
|
|
6458
|
-
var _a;
|
|
6459
|
-
const
|
|
6460
|
-
const
|
|
6461
|
-
const primaryHref = (
|
|
6462
|
-
const secondaryHref =
|
|
6463
|
-
|
|
6464
|
-
|
|
6465
|
-
secondaryHref,
|
|
6466
|
-
hasSecondary
|
|
6467
|
-
};
|
|
6460
|
+
function resolveCtaUrls(companyInformation) {
|
|
6461
|
+
var _a, _b, _c;
|
|
6462
|
+
const portalUrl = ((_a = companyInformation == null ? void 0 : companyInformation.portal_url) == null ? void 0 : _a.trim()) || null;
|
|
6463
|
+
const externalUrl = ((_b = companyInformation == null ? void 0 : companyInformation.external_management_url) == null ? void 0 : _b.trim()) || null;
|
|
6464
|
+
const primaryHref = (_c = portalUrl != null ? portalUrl : externalUrl) != null ? _c : CONTACT_PATH;
|
|
6465
|
+
const secondaryHref = CONTACT_PATH;
|
|
6466
|
+
const hasSecondary = primaryHref !== CONTACT_PATH;
|
|
6467
|
+
return { primaryHref, secondaryHref, hasSecondary };
|
|
6468
6468
|
}
|
|
6469
6469
|
|
|
6470
6470
|
// src/design_system/sections/header-navigation.tsx
|
|
@@ -6513,10 +6513,7 @@ function HeaderNavigation({
|
|
|
6513
6513
|
const logoImage = logoImageOverride || getLogoUrl(websitePhotos) || ((_b = props == null ? void 0 : props.logo) == null ? void 0 : _b.image);
|
|
6514
6514
|
const logoText = logoTextOverride || (companyInformation == null ? void 0 : companyInformation.company_name) || ((_c = props == null ? void 0 : props.logo) == null ? void 0 : _c.text) || "";
|
|
6515
6515
|
const cta_button = props == null ? void 0 : props.cta_button;
|
|
6516
|
-
const ctaUrls = resolveCtaUrls(companyInformation
|
|
6517
|
-
primaryHrefOverride: props == null ? void 0 : props.primaryHrefOverride,
|
|
6518
|
-
secondaryHrefOverride: props == null ? void 0 : props.secondaryHrefOverride
|
|
6519
|
-
});
|
|
6516
|
+
const ctaUrls = resolveCtaUrls(companyInformation);
|
|
6520
6517
|
const logo = {
|
|
6521
6518
|
text: logoText || "",
|
|
6522
6519
|
href: ((_d = props == null ? void 0 : props.logo) == null ? void 0 : _d.href) || "/",
|
|
@@ -8538,10 +8535,7 @@ function HeaderNavigation2({
|
|
|
8538
8535
|
const logoUrl = logoImageOverride || getLogoUrl(websitePhotos) || ((_a = props == null ? void 0 : props.logo) == null ? void 0 : _a.image);
|
|
8539
8536
|
const companyName = logoTextOverride || (companyInformation == null ? void 0 : companyInformation.company_name) || ((_b = props == null ? void 0 : props.logo) == null ? void 0 : _b.text) || "";
|
|
8540
8537
|
const navigation = navigationOverride || ((_c = config == null ? void 0 : config.navigation) == null ? void 0 : _c.header) || [];
|
|
8541
|
-
const ctaUrls = resolveCtaUrls(companyInformation
|
|
8542
|
-
primaryHrefOverride: props == null ? void 0 : props.primaryHrefOverride,
|
|
8543
|
-
secondaryHrefOverride: props == null ? void 0 : props.secondaryHrefOverride
|
|
8544
|
-
});
|
|
8538
|
+
const ctaUrls = resolveCtaUrls(companyInformation);
|
|
8545
8539
|
const cancelCloseTimeout = useCallback5(() => {
|
|
8546
8540
|
if (closeTimeoutRef.current) {
|
|
8547
8541
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -9007,7 +9001,7 @@ var ContactSectionForm2 = ({
|
|
|
9007
9001
|
setStatusMessage(result.message || successMessage);
|
|
9008
9002
|
(_a = formRef.current) == null ? void 0 : _a.reset();
|
|
9009
9003
|
onSuccess == null ? void 0 : onSuccess();
|
|
9010
|
-
|
|
9004
|
+
firePixelEvent("Lead");
|
|
9011
9005
|
setTimeout(() => setSubmitStatus("idle"), 5e3);
|
|
9012
9006
|
} else {
|
|
9013
9007
|
setSubmitStatus("error");
|
|
@@ -17622,10 +17616,7 @@ function HeaderNavigation3({
|
|
|
17622
17616
|
const logoUrl = logoImageOverride || getLogoUrl(websitePhotos) || ((_a = props == null ? void 0 : props.logo) == null ? void 0 : _a.image);
|
|
17623
17617
|
const companyName = logoTextOverride || (companyInformation == null ? void 0 : companyInformation.company_name) || ((_b = props == null ? void 0 : props.logo) == null ? void 0 : _b.text) || "";
|
|
17624
17618
|
const navigation = navigationOverride || ((_c = config == null ? void 0 : config.navigation) == null ? void 0 : _c.header) || [];
|
|
17625
|
-
const ctaUrls = resolveCtaUrls(companyInformation
|
|
17626
|
-
primaryHrefOverride: props == null ? void 0 : props.primaryHrefOverride,
|
|
17627
|
-
secondaryHrefOverride: props == null ? void 0 : props.secondaryHrefOverride
|
|
17628
|
-
});
|
|
17619
|
+
const ctaUrls = resolveCtaUrls(companyInformation);
|
|
17629
17620
|
const cancelCloseTimeout = useCallback8(() => {
|
|
17630
17621
|
if (closeTimeoutRef.current) {
|
|
17631
17622
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -18211,7 +18202,7 @@ var ContactSectionForm3 = ({
|
|
|
18211
18202
|
setStatusMessage(result.message || successMessage);
|
|
18212
18203
|
(_a = formRef.current) == null ? void 0 : _a.reset();
|
|
18213
18204
|
onSuccess == null ? void 0 : onSuccess();
|
|
18214
|
-
|
|
18205
|
+
firePixelEvent("Lead");
|
|
18215
18206
|
setTimeout(() => setSubmitStatus("idle"), 5e3);
|
|
18216
18207
|
} else {
|
|
18217
18208
|
setSubmitStatus("error");
|
|
@@ -18414,10 +18405,7 @@ function HeaderNavigation4({
|
|
|
18414
18405
|
const logoUrl = logoImageOverride || getLogoUrl(websitePhotos) || ((_a = props == null ? void 0 : props.logo) == null ? void 0 : _a.image);
|
|
18415
18406
|
const companyName = logoTextOverride || (companyInformation == null ? void 0 : companyInformation.company_name) || ((_b = props == null ? void 0 : props.logo) == null ? void 0 : _b.text) || "";
|
|
18416
18407
|
const navigation = navigationOverride || ((_c = config == null ? void 0 : config.navigation) == null ? void 0 : _c.header) || [];
|
|
18417
|
-
const ctaUrls = resolveCtaUrls(companyInformation
|
|
18418
|
-
primaryHrefOverride: props == null ? void 0 : props.primaryHrefOverride,
|
|
18419
|
-
secondaryHrefOverride: props == null ? void 0 : props.secondaryHrefOverride
|
|
18420
|
-
});
|
|
18408
|
+
const ctaUrls = resolveCtaUrls(companyInformation);
|
|
18421
18409
|
const cancelCloseTimeout = useCallback9(() => {
|
|
18422
18410
|
if (closeTimeoutRef.current) {
|
|
18423
18411
|
clearTimeout(closeTimeoutRef.current);
|
|
@@ -18707,7 +18695,7 @@ var ContactSectionForm4 = ({
|
|
|
18707
18695
|
setStatusMessage(result.message || successMessage);
|
|
18708
18696
|
(_a = formRef.current) == null ? void 0 : _a.reset();
|
|
18709
18697
|
onSuccess == null ? void 0 : onSuccess();
|
|
18710
|
-
|
|
18698
|
+
firePixelEvent("Lead");
|
|
18711
18699
|
setTimeout(() => setSubmitStatus("idle"), 5e3);
|
|
18712
18700
|
} else {
|
|
18713
18701
|
setSubmitStatus("error");
|