@opensite/ui 2.2.3 → 2.2.5
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/about-culture-tabs.cjs +83 -17
- package/dist/about-culture-tabs.js +83 -17
- package/dist/components.cjs +83 -17
- package/dist/components.js +83 -17
- package/dist/contact-callback.cjs +38 -552
- package/dist/contact-callback.d.cts +6 -74
- package/dist/contact-callback.d.ts +6 -74
- package/dist/contact-callback.js +36 -535
- package/dist/contact-careers.cjs +19 -555
- package/dist/contact-careers.d.cts +6 -62
- package/dist/contact-careers.d.ts +6 -62
- package/dist/contact-careers.js +18 -539
- package/dist/contact-catering.cjs +19 -531
- package/dist/contact-catering.d.cts +6 -61
- package/dist/contact-catering.d.ts +6 -61
- package/dist/contact-catering.js +18 -515
- package/dist/contact-consultation.cjs +87 -543
- package/dist/contact-consultation.d.cts +6 -61
- package/dist/contact-consultation.d.ts +6 -61
- package/dist/contact-consultation.js +88 -544
- package/dist/contact-demo.cjs +20 -563
- package/dist/contact-demo.d.cts +10 -50
- package/dist/contact-demo.d.ts +10 -50
- package/dist/contact-demo.js +19 -547
- package/dist/contact-emergency.cjs +1 -1
- package/dist/contact-emergency.js +1 -1
- package/dist/contact-event.cjs +19 -562
- package/dist/contact-event.d.cts +10 -50
- package/dist/contact-event.d.ts +10 -50
- package/dist/contact-event.js +19 -547
- package/dist/contact-feedback.cjs +19 -562
- package/dist/contact-feedback.d.cts +10 -50
- package/dist/contact-feedback.d.ts +10 -50
- package/dist/contact-feedback.js +19 -547
- package/dist/contact-fitness.cjs +19 -562
- package/dist/contact-fitness.d.cts +10 -50
- package/dist/contact-fitness.d.ts +10 -50
- package/dist/contact-fitness.js +19 -547
- package/dist/contact-guest.cjs +19 -562
- package/dist/contact-guest.d.cts +10 -50
- package/dist/contact-guest.d.ts +10 -50
- package/dist/contact-guest.js +19 -547
- package/dist/contact-insurance.cjs +19 -562
- package/dist/contact-insurance.d.cts +10 -50
- package/dist/contact-insurance.d.ts +10 -50
- package/dist/contact-insurance.js +19 -547
- package/dist/contact-interview.cjs +19 -562
- package/dist/contact-interview.d.cts +11 -51
- package/dist/contact-interview.d.ts +11 -51
- package/dist/contact-interview.js +19 -547
- package/dist/contact-locations.cjs +19 -562
- package/dist/contact-locations.d.cts +11 -51
- package/dist/contact-locations.d.ts +11 -51
- package/dist/contact-locations.js +19 -547
- package/dist/contact-maintenance.cjs +19 -562
- package/dist/contact-maintenance.d.cts +10 -50
- package/dist/contact-maintenance.d.ts +10 -50
- package/dist/contact-maintenance.js +19 -547
- package/dist/contact-map.cjs +19 -562
- package/dist/contact-map.d.cts +11 -51
- package/dist/contact-map.d.ts +11 -51
- package/dist/contact-map.js +19 -547
- package/dist/contact-minimal.cjs +19 -562
- package/dist/contact-minimal.d.cts +10 -50
- package/dist/contact-minimal.d.ts +10 -50
- package/dist/contact-minimal.js +19 -547
- package/dist/contact-moving.cjs +19 -562
- package/dist/contact-moving.d.cts +11 -51
- package/dist/contact-moving.d.ts +11 -51
- package/dist/contact-moving.js +19 -547
- package/dist/contact-multistep.cjs +19 -562
- package/dist/contact-multistep.d.cts +11 -51
- package/dist/contact-multistep.d.ts +11 -51
- package/dist/contact-multistep.js +19 -547
- package/dist/contact-partnership.cjs +22 -565
- package/dist/contact-partnership.d.cts +10 -50
- package/dist/contact-partnership.d.ts +10 -50
- package/dist/contact-partnership.js +22 -550
- package/dist/contact-photography.cjs +19 -562
- package/dist/contact-photography.d.cts +7 -50
- package/dist/contact-photography.d.ts +7 -50
- package/dist/contact-photography.js +18 -546
- package/dist/contact-press.cjs +19 -562
- package/dist/contact-press.d.cts +10 -50
- package/dist/contact-press.d.ts +10 -50
- package/dist/contact-press.js +19 -547
- package/dist/contact-quote.cjs +19 -562
- package/dist/contact-quote.d.cts +11 -51
- package/dist/contact-quote.d.ts +11 -51
- package/dist/contact-quote.js +19 -547
- package/dist/contact-referral.cjs +19 -562
- package/dist/contact-referral.d.cts +10 -50
- package/dist/contact-referral.d.ts +10 -50
- package/dist/contact-referral.js +19 -547
- package/dist/contact-report.cjs +19 -562
- package/dist/contact-report.d.cts +10 -50
- package/dist/contact-report.d.ts +10 -50
- package/dist/contact-report.js +19 -547
- package/dist/contact-reservation.cjs +19 -562
- package/dist/contact-reservation.d.cts +10 -50
- package/dist/contact-reservation.d.ts +10 -50
- package/dist/contact-reservation.js +19 -547
- package/dist/contact-retreat.cjs +88 -567
- package/dist/contact-retreat.d.cts +11 -51
- package/dist/contact-retreat.d.ts +11 -51
- package/dist/contact-retreat.js +90 -569
- package/dist/contact-rsvp.cjs +19 -562
- package/dist/contact-rsvp.d.cts +11 -51
- package/dist/contact-rsvp.d.ts +11 -51
- package/dist/contact-rsvp.js +19 -547
- package/dist/contact-sales.cjs +19 -562
- package/dist/contact-sales.d.cts +10 -50
- package/dist/contact-sales.d.ts +10 -50
- package/dist/contact-sales.js +19 -547
- package/dist/contact-schedule.cjs +19 -562
- package/dist/contact-schedule.d.cts +11 -51
- package/dist/contact-schedule.d.ts +11 -51
- package/dist/contact-schedule.js +19 -547
- package/dist/contact-sponsorship.cjs +19 -562
- package/dist/contact-sponsorship.d.cts +11 -51
- package/dist/contact-sponsorship.d.ts +11 -51
- package/dist/contact-sponsorship.js +19 -547
- package/dist/contact-support.cjs +19 -562
- package/dist/contact-support.d.cts +11 -51
- package/dist/contact-support.d.ts +11 -51
- package/dist/contact-support.js +19 -547
- package/dist/contact-tenant.cjs +19 -562
- package/dist/contact-tenant.d.cts +11 -51
- package/dist/contact-tenant.d.ts +11 -51
- package/dist/contact-tenant.js +19 -547
- package/dist/contact-volunteer.cjs +19 -562
- package/dist/contact-volunteer.d.cts +11 -51
- package/dist/contact-volunteer.d.ts +11 -51
- package/dist/contact-volunteer.js +19 -547
- package/dist/contact-warranty.cjs +19 -562
- package/dist/contact-warranty.d.cts +10 -50
- package/dist/contact-warranty.d.ts +10 -50
- package/dist/contact-warranty.js +19 -547
- package/dist/contact-wedding.cjs +19 -562
- package/dist/contact-wedding.d.cts +10 -50
- package/dist/contact-wedding.d.ts +10 -50
- package/dist/contact-wedding.js +19 -547
- package/dist/hero-presentation-platform-video.cjs +76 -27
- package/dist/hero-presentation-platform-video.js +76 -27
- package/dist/index.cjs +83 -17
- package/dist/index.js +83 -17
- package/dist/registry.cjs +768 -4196
- package/dist/registry.js +769 -4197
- package/package.json +12 -2
package/dist/contact-retreat.cjs
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var forms = require('@page-speed/forms');
|
|
4
|
+
var React4 = require('react');
|
|
6
5
|
var integration = require('@page-speed/forms/integration');
|
|
7
6
|
var clsx = require('clsx');
|
|
8
7
|
var tailwindMerge = require('tailwind-merge');
|
|
9
|
-
var classVarianceAuthority = require('class-variance-authority');
|
|
10
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
9
|
|
|
12
10
|
function _interopNamespace(e) {
|
|
@@ -27,430 +25,12 @@ function _interopNamespace(e) {
|
|
|
27
25
|
return Object.freeze(n);
|
|
28
26
|
}
|
|
29
27
|
|
|
30
|
-
var
|
|
28
|
+
var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
|
|
31
29
|
|
|
32
30
|
// components/blocks/contact/contact-retreat.tsx
|
|
33
31
|
function cn(...inputs) {
|
|
34
32
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
35
33
|
}
|
|
36
|
-
function normalizePhoneNumber(input) {
|
|
37
|
-
const trimmed = input.trim();
|
|
38
|
-
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
39
|
-
return trimmed;
|
|
40
|
-
}
|
|
41
|
-
const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
|
|
42
|
-
if (match) {
|
|
43
|
-
const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
|
|
44
|
-
const extension = match[3];
|
|
45
|
-
const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
|
|
46
|
-
const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
|
|
47
|
-
return `tel:${withExtension}`;
|
|
48
|
-
}
|
|
49
|
-
const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
|
|
50
|
-
return `tel:${cleaned}`;
|
|
51
|
-
}
|
|
52
|
-
function normalizeEmail(input) {
|
|
53
|
-
const trimmed = input.trim();
|
|
54
|
-
if (trimmed.toLowerCase().startsWith("mailto:")) {
|
|
55
|
-
return trimmed;
|
|
56
|
-
}
|
|
57
|
-
return `mailto:${trimmed}`;
|
|
58
|
-
}
|
|
59
|
-
function isEmail(input) {
|
|
60
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
61
|
-
return emailRegex.test(input.trim());
|
|
62
|
-
}
|
|
63
|
-
function isPhoneNumber(input) {
|
|
64
|
-
const trimmed = input.trim();
|
|
65
|
-
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
|
|
69
|
-
return phoneRegex.test(trimmed);
|
|
70
|
-
}
|
|
71
|
-
function isInternalUrl(href) {
|
|
72
|
-
if (typeof window === "undefined") {
|
|
73
|
-
return href.startsWith("/") && !href.startsWith("//");
|
|
74
|
-
}
|
|
75
|
-
const trimmed = href.trim();
|
|
76
|
-
if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
try {
|
|
80
|
-
const url = new URL(trimmed, window.location.href);
|
|
81
|
-
const currentOrigin = window.location.origin;
|
|
82
|
-
const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
|
|
83
|
-
return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
|
|
84
|
-
} catch {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
function toRelativePath(href) {
|
|
89
|
-
if (typeof window === "undefined") {
|
|
90
|
-
return href;
|
|
91
|
-
}
|
|
92
|
-
const trimmed = href.trim();
|
|
93
|
-
if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
|
|
94
|
-
return trimmed;
|
|
95
|
-
}
|
|
96
|
-
try {
|
|
97
|
-
const url = new URL(trimmed, window.location.href);
|
|
98
|
-
const currentOrigin = window.location.origin;
|
|
99
|
-
const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
|
|
100
|
-
if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
|
|
101
|
-
return url.pathname + url.search + url.hash;
|
|
102
|
-
}
|
|
103
|
-
} catch {
|
|
104
|
-
}
|
|
105
|
-
return trimmed;
|
|
106
|
-
}
|
|
107
|
-
function useNavigation({
|
|
108
|
-
href,
|
|
109
|
-
onClick
|
|
110
|
-
} = {}) {
|
|
111
|
-
const linkType = React__namespace.useMemo(() => {
|
|
112
|
-
if (!href || href.trim() === "") {
|
|
113
|
-
return onClick ? "none" : "none";
|
|
114
|
-
}
|
|
115
|
-
const trimmed = href.trim();
|
|
116
|
-
if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
|
|
117
|
-
return "mailto";
|
|
118
|
-
}
|
|
119
|
-
if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
|
|
120
|
-
return "tel";
|
|
121
|
-
}
|
|
122
|
-
if (isInternalUrl(trimmed)) {
|
|
123
|
-
return "internal";
|
|
124
|
-
}
|
|
125
|
-
try {
|
|
126
|
-
new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
|
|
127
|
-
return "external";
|
|
128
|
-
} catch {
|
|
129
|
-
return "internal";
|
|
130
|
-
}
|
|
131
|
-
}, [href, onClick]);
|
|
132
|
-
const normalizedHref = React__namespace.useMemo(() => {
|
|
133
|
-
if (!href || href.trim() === "") {
|
|
134
|
-
return void 0;
|
|
135
|
-
}
|
|
136
|
-
const trimmed = href.trim();
|
|
137
|
-
switch (linkType) {
|
|
138
|
-
case "tel":
|
|
139
|
-
return normalizePhoneNumber(trimmed);
|
|
140
|
-
case "mailto":
|
|
141
|
-
return normalizeEmail(trimmed);
|
|
142
|
-
case "internal":
|
|
143
|
-
return toRelativePath(trimmed);
|
|
144
|
-
case "external":
|
|
145
|
-
return trimmed;
|
|
146
|
-
default:
|
|
147
|
-
return trimmed;
|
|
148
|
-
}
|
|
149
|
-
}, [href, linkType]);
|
|
150
|
-
const target = React__namespace.useMemo(() => {
|
|
151
|
-
switch (linkType) {
|
|
152
|
-
case "external":
|
|
153
|
-
return "_blank";
|
|
154
|
-
case "internal":
|
|
155
|
-
return "_self";
|
|
156
|
-
case "mailto":
|
|
157
|
-
case "tel":
|
|
158
|
-
return void 0;
|
|
159
|
-
default:
|
|
160
|
-
return void 0;
|
|
161
|
-
}
|
|
162
|
-
}, [linkType]);
|
|
163
|
-
const rel = React__namespace.useMemo(() => {
|
|
164
|
-
if (linkType === "external") {
|
|
165
|
-
return "noopener noreferrer";
|
|
166
|
-
}
|
|
167
|
-
return void 0;
|
|
168
|
-
}, [linkType]);
|
|
169
|
-
const isExternal = linkType === "external";
|
|
170
|
-
const isInternal = linkType === "internal";
|
|
171
|
-
const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
|
|
172
|
-
const handleClick = React__namespace.useCallback(
|
|
173
|
-
(event) => {
|
|
174
|
-
if (onClick) {
|
|
175
|
-
try {
|
|
176
|
-
onClick(event);
|
|
177
|
-
} catch (error) {
|
|
178
|
-
console.error("Error in user onClick handler:", error);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (event.defaultPrevented) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
|
|
185
|
-
!event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
|
|
186
|
-
if (typeof window !== "undefined") {
|
|
187
|
-
const handler = window.__opensiteNavigationHandler;
|
|
188
|
-
if (typeof handler === "function") {
|
|
189
|
-
try {
|
|
190
|
-
const handled = handler(normalizedHref, event.nativeEvent || event);
|
|
191
|
-
if (handled !== false) {
|
|
192
|
-
event.preventDefault();
|
|
193
|
-
}
|
|
194
|
-
} catch (error) {
|
|
195
|
-
console.error("Error in navigation handler:", error);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
|
-
[onClick, shouldUseRouter, normalizedHref]
|
|
202
|
-
);
|
|
203
|
-
return {
|
|
204
|
-
linkType,
|
|
205
|
-
normalizedHref,
|
|
206
|
-
target,
|
|
207
|
-
rel,
|
|
208
|
-
isExternal,
|
|
209
|
-
isInternal,
|
|
210
|
-
shouldUseRouter,
|
|
211
|
-
handleClick
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
var baseStyles = [
|
|
215
|
-
// Layout
|
|
216
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
|
|
217
|
-
// Typography - using CSS variables with sensible defaults
|
|
218
|
-
"font-[var(--button-font-family,inherit)]",
|
|
219
|
-
"font-[var(--button-font-weight,500)]",
|
|
220
|
-
"tracking-[var(--button-letter-spacing,0)]",
|
|
221
|
-
"leading-[var(--button-line-height,1.25)]",
|
|
222
|
-
"[text-transform:var(--button-text-transform,none)]",
|
|
223
|
-
"text-sm",
|
|
224
|
-
// Border radius
|
|
225
|
-
"rounded-[var(--button-radius,var(--radius,0.375rem))]",
|
|
226
|
-
// Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)
|
|
227
|
-
"[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]",
|
|
228
|
-
// Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows
|
|
229
|
-
"[box-shadow:var(--button-shadow,none)]",
|
|
230
|
-
"hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]",
|
|
231
|
-
// Disabled state
|
|
232
|
-
"disabled:pointer-events-none disabled:opacity-50",
|
|
233
|
-
// SVG handling
|
|
234
|
-
"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
|
|
235
|
-
// Focus styles
|
|
236
|
-
"outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
237
|
-
// Invalid state
|
|
238
|
-
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
|
|
239
|
-
].join(" ");
|
|
240
|
-
var buttonVariants = classVarianceAuthority.cva(baseStyles, {
|
|
241
|
-
variants: {
|
|
242
|
-
variant: {
|
|
243
|
-
// Default (Primary) variant - full customization
|
|
244
|
-
default: [
|
|
245
|
-
"bg-[var(--button-default-bg,hsl(var(--primary)))]",
|
|
246
|
-
"text-[var(--button-default-fg,hsl(var(--primary-foreground)))]",
|
|
247
|
-
"border-[length:var(--button-default-border-width,0px)]",
|
|
248
|
-
"border-[color:var(--button-default-border,transparent)]",
|
|
249
|
-
"[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]",
|
|
250
|
-
"hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]",
|
|
251
|
-
"hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]",
|
|
252
|
-
"hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]",
|
|
253
|
-
"hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]"
|
|
254
|
-
].join(" "),
|
|
255
|
-
// Destructive variant - full customization
|
|
256
|
-
destructive: [
|
|
257
|
-
"bg-[var(--button-destructive-bg,hsl(var(--destructive)))]",
|
|
258
|
-
"text-[var(--button-destructive-fg,white)]",
|
|
259
|
-
"border-[length:var(--button-destructive-border-width,0px)]",
|
|
260
|
-
"border-[color:var(--button-destructive-border,transparent)]",
|
|
261
|
-
"[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]",
|
|
262
|
-
"hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]",
|
|
263
|
-
"hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]",
|
|
264
|
-
"hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]",
|
|
265
|
-
"hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]",
|
|
266
|
-
"focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
|
|
267
|
-
"dark:bg-destructive/60"
|
|
268
|
-
].join(" "),
|
|
269
|
-
// Outline variant - full customization with proper border handling
|
|
270
|
-
outline: [
|
|
271
|
-
"bg-[var(--button-outline-bg,hsl(var(--background)))]",
|
|
272
|
-
"text-[var(--button-outline-fg,inherit)]",
|
|
273
|
-
"border-[length:var(--button-outline-border-width,1px)]",
|
|
274
|
-
"border-[color:var(--button-outline-border,hsl(var(--border)))]",
|
|
275
|
-
"[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]",
|
|
276
|
-
"hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]",
|
|
277
|
-
"hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]",
|
|
278
|
-
"hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]",
|
|
279
|
-
"hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]",
|
|
280
|
-
"dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
|
|
281
|
-
].join(" "),
|
|
282
|
-
// Secondary variant - full customization
|
|
283
|
-
secondary: [
|
|
284
|
-
"bg-[var(--button-secondary-bg,hsl(var(--secondary)))]",
|
|
285
|
-
"text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]",
|
|
286
|
-
"border-[length:var(--button-secondary-border-width,0px)]",
|
|
287
|
-
"border-[color:var(--button-secondary-border,transparent)]",
|
|
288
|
-
"[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]",
|
|
289
|
-
"hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]",
|
|
290
|
-
"hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]",
|
|
291
|
-
"hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]",
|
|
292
|
-
"hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]"
|
|
293
|
-
].join(" "),
|
|
294
|
-
// Ghost variant - full customization
|
|
295
|
-
ghost: [
|
|
296
|
-
"bg-[var(--button-ghost-bg,transparent)]",
|
|
297
|
-
"text-[var(--button-ghost-fg,inherit)]",
|
|
298
|
-
"border-[length:var(--button-ghost-border-width,0px)]",
|
|
299
|
-
"border-[color:var(--button-ghost-border,transparent)]",
|
|
300
|
-
"[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]",
|
|
301
|
-
"hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]",
|
|
302
|
-
"hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]",
|
|
303
|
-
"hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]",
|
|
304
|
-
"hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]",
|
|
305
|
-
"dark:hover:bg-accent/50"
|
|
306
|
-
].join(" "),
|
|
307
|
-
// Link variant - full customization
|
|
308
|
-
link: [
|
|
309
|
-
"bg-[var(--button-link-bg,transparent)]",
|
|
310
|
-
"text-[var(--button-link-fg,hsl(var(--primary)))]",
|
|
311
|
-
"border-[length:var(--button-link-border-width,0px)]",
|
|
312
|
-
"border-[color:var(--button-link-border,transparent)]",
|
|
313
|
-
"[box-shadow:var(--button-link-shadow,none)]",
|
|
314
|
-
"hover:bg-[var(--button-link-hover-bg,transparent)]",
|
|
315
|
-
"hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]",
|
|
316
|
-
"hover:[box-shadow:var(--button-link-shadow-hover,none)]",
|
|
317
|
-
"underline-offset-4 hover:underline"
|
|
318
|
-
].join(" ")
|
|
319
|
-
},
|
|
320
|
-
size: {
|
|
321
|
-
default: [
|
|
322
|
-
"h-[var(--button-height-md,2.25rem)]",
|
|
323
|
-
"px-[var(--button-padding-x-md,1rem)]",
|
|
324
|
-
"py-[var(--button-padding-y-md,0.5rem)]",
|
|
325
|
-
"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
|
|
326
|
-
].join(" "),
|
|
327
|
-
sm: [
|
|
328
|
-
"h-[var(--button-height-sm,2rem)]",
|
|
329
|
-
"px-[var(--button-padding-x-sm,0.75rem)]",
|
|
330
|
-
"py-[var(--button-padding-y-sm,0.25rem)]",
|
|
331
|
-
"gap-1.5",
|
|
332
|
-
"has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]"
|
|
333
|
-
].join(" "),
|
|
334
|
-
md: [
|
|
335
|
-
"h-[var(--button-height-md,2.25rem)]",
|
|
336
|
-
"px-[var(--button-padding-x-md,1rem)]",
|
|
337
|
-
"py-[var(--button-padding-y-md,0.5rem)]",
|
|
338
|
-
"has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
|
|
339
|
-
].join(" "),
|
|
340
|
-
lg: [
|
|
341
|
-
"h-[var(--button-height-lg,2.5rem)]",
|
|
342
|
-
"px-[var(--button-padding-x-lg,1.5rem)]",
|
|
343
|
-
"py-[var(--button-padding-y-lg,0.5rem)]",
|
|
344
|
-
"has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]"
|
|
345
|
-
].join(" "),
|
|
346
|
-
icon: "size-[var(--button-height-md,2.25rem)]",
|
|
347
|
-
"icon-sm": "size-[var(--button-height-sm,2rem)]",
|
|
348
|
-
"icon-lg": "size-[var(--button-height-lg,2.5rem)]"
|
|
349
|
-
}
|
|
350
|
-
},
|
|
351
|
-
defaultVariants: {
|
|
352
|
-
variant: "default",
|
|
353
|
-
size: "default"
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
var Pressable = React__namespace.forwardRef(
|
|
357
|
-
({
|
|
358
|
-
children,
|
|
359
|
-
className,
|
|
360
|
-
href,
|
|
361
|
-
onClick,
|
|
362
|
-
variant,
|
|
363
|
-
size,
|
|
364
|
-
asButton = false,
|
|
365
|
-
fallbackComponentType = "span",
|
|
366
|
-
componentType,
|
|
367
|
-
"aria-label": ariaLabel,
|
|
368
|
-
"aria-describedby": ariaDescribedby,
|
|
369
|
-
id,
|
|
370
|
-
...props
|
|
371
|
-
}, ref) => {
|
|
372
|
-
const navigation = useNavigation({ href, onClick });
|
|
373
|
-
const {
|
|
374
|
-
normalizedHref,
|
|
375
|
-
target,
|
|
376
|
-
rel,
|
|
377
|
-
linkType,
|
|
378
|
-
isInternal,
|
|
379
|
-
handleClick
|
|
380
|
-
} = navigation;
|
|
381
|
-
const shouldRenderLink = normalizedHref && linkType !== "none";
|
|
382
|
-
const shouldRenderButton = !shouldRenderLink && onClick;
|
|
383
|
-
const effectiveComponentType = componentType || (shouldRenderLink ? "a" : shouldRenderButton ? "button" : fallbackComponentType);
|
|
384
|
-
const finalComponentType = isInternal && shouldRenderLink ? "a" : effectiveComponentType;
|
|
385
|
-
const shouldApplyButtonStyles = asButton || variant || size;
|
|
386
|
-
const combinedClassName = cn(
|
|
387
|
-
shouldApplyButtonStyles && buttonVariants({ variant, size }),
|
|
388
|
-
className
|
|
389
|
-
);
|
|
390
|
-
const dataProps = Object.fromEntries(
|
|
391
|
-
Object.entries(props).filter(([key]) => key.startsWith("data-"))
|
|
392
|
-
);
|
|
393
|
-
const buttonDataAttributes = shouldApplyButtonStyles ? {
|
|
394
|
-
"data-slot": "button",
|
|
395
|
-
"data-variant": variant ?? "default",
|
|
396
|
-
"data-size": size ?? "default"
|
|
397
|
-
} : {};
|
|
398
|
-
const commonProps = {
|
|
399
|
-
className: combinedClassName,
|
|
400
|
-
onClick: handleClick,
|
|
401
|
-
"aria-label": ariaLabel,
|
|
402
|
-
"aria-describedby": ariaDescribedby,
|
|
403
|
-
id,
|
|
404
|
-
...dataProps,
|
|
405
|
-
...buttonDataAttributes
|
|
406
|
-
};
|
|
407
|
-
if (finalComponentType === "a" && shouldRenderLink) {
|
|
408
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
409
|
-
"a",
|
|
410
|
-
{
|
|
411
|
-
ref,
|
|
412
|
-
href: normalizedHref,
|
|
413
|
-
target,
|
|
414
|
-
rel,
|
|
415
|
-
...commonProps,
|
|
416
|
-
...props,
|
|
417
|
-
children
|
|
418
|
-
}
|
|
419
|
-
);
|
|
420
|
-
}
|
|
421
|
-
if (finalComponentType === "button") {
|
|
422
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
-
"button",
|
|
424
|
-
{
|
|
425
|
-
ref,
|
|
426
|
-
type: props.type || "button",
|
|
427
|
-
...commonProps,
|
|
428
|
-
...props,
|
|
429
|
-
children
|
|
430
|
-
}
|
|
431
|
-
);
|
|
432
|
-
}
|
|
433
|
-
if (finalComponentType === "div") {
|
|
434
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
435
|
-
"div",
|
|
436
|
-
{
|
|
437
|
-
ref,
|
|
438
|
-
...commonProps,
|
|
439
|
-
children
|
|
440
|
-
}
|
|
441
|
-
);
|
|
442
|
-
}
|
|
443
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
444
|
-
"span",
|
|
445
|
-
{
|
|
446
|
-
ref,
|
|
447
|
-
...commonProps,
|
|
448
|
-
children
|
|
449
|
-
}
|
|
450
|
-
);
|
|
451
|
-
}
|
|
452
|
-
);
|
|
453
|
-
Pressable.displayName = "Pressable";
|
|
454
34
|
function Card({ className, ...props }) {
|
|
455
35
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
456
36
|
"div",
|
|
@@ -483,7 +63,7 @@ var maxWidthStyles = {
|
|
|
483
63
|
"4xl": "max-w-[1536px]",
|
|
484
64
|
full: "max-w-full"
|
|
485
65
|
};
|
|
486
|
-
var Container =
|
|
66
|
+
var Container = React4__namespace.default.forwardRef(
|
|
487
67
|
({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
|
|
488
68
|
const Component = as;
|
|
489
69
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -788,7 +368,7 @@ var spacingStyles = {
|
|
|
788
368
|
};
|
|
789
369
|
var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
|
|
790
370
|
var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
|
|
791
|
-
var Section =
|
|
371
|
+
var Section = React4__namespace.default.forwardRef(
|
|
792
372
|
({
|
|
793
373
|
id,
|
|
794
374
|
title,
|
|
@@ -849,6 +429,44 @@ var Section = React__namespace.default.forwardRef(
|
|
|
849
429
|
}
|
|
850
430
|
);
|
|
851
431
|
Section.displayName = "Section";
|
|
432
|
+
function TextInner({ as, className, children, ...props }, ref) {
|
|
433
|
+
const Component = as || "span";
|
|
434
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cn(className), ...props, children });
|
|
435
|
+
}
|
|
436
|
+
var Text = React4__namespace.forwardRef(TextInner);
|
|
437
|
+
Text.displayName = "Text";
|
|
438
|
+
function isContentTextItem(item) {
|
|
439
|
+
return item !== null && typeof item === "object" && !React4__namespace.isValidElement(item) && "_type" in item && item._type === "text";
|
|
440
|
+
}
|
|
441
|
+
var ContentGroup = React4__namespace.forwardRef(
|
|
442
|
+
({ items, className, children, ...props }, ref) => {
|
|
443
|
+
const hasContent = items && items.length > 0;
|
|
444
|
+
if (!hasContent) {
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn(className), ...props, children: [
|
|
448
|
+
items.map((item, idx) => {
|
|
449
|
+
if (isContentTextItem(item)) {
|
|
450
|
+
const { _type, ...textProps } = item;
|
|
451
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text, { ...textProps }, idx);
|
|
452
|
+
}
|
|
453
|
+
const reactNode = item;
|
|
454
|
+
if (React4__namespace.isValidElement(reactNode)) {
|
|
455
|
+
return React4__namespace.cloneElement(reactNode, { key: reactNode.key ?? idx });
|
|
456
|
+
}
|
|
457
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React4__namespace.Fragment, { children: reactNode }, idx);
|
|
458
|
+
}),
|
|
459
|
+
children
|
|
460
|
+
] });
|
|
461
|
+
}
|
|
462
|
+
);
|
|
463
|
+
ContentGroup.displayName = "ContentGroup";
|
|
464
|
+
var DEFAULT_STYLE_RULES = {
|
|
465
|
+
formContainer: "",
|
|
466
|
+
fieldsContainer: "",
|
|
467
|
+
fieldClassName: "",
|
|
468
|
+
formClassName: "space-y-6"
|
|
469
|
+
};
|
|
852
470
|
var DEFAULT_FORM_FIELDS = [
|
|
853
471
|
{
|
|
854
472
|
name: "first_name",
|
|
@@ -895,82 +513,50 @@ var DEFAULT_FORM_FIELDS = [
|
|
|
895
513
|
function ContactRetreat({
|
|
896
514
|
heading,
|
|
897
515
|
description,
|
|
898
|
-
buttonText = "Submit",
|
|
899
|
-
buttonIcon,
|
|
900
|
-
actions,
|
|
901
|
-
actionsSlot,
|
|
902
|
-
formFields = DEFAULT_FORM_FIELDS,
|
|
903
|
-
successMessage = "Thank you! Your message has been sent successfully.",
|
|
904
516
|
className,
|
|
517
|
+
formEngineSetup,
|
|
905
518
|
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
906
519
|
headerClassName,
|
|
907
520
|
headingClassName,
|
|
908
521
|
descriptionClassName,
|
|
909
522
|
cardClassName,
|
|
910
523
|
cardContentClassName,
|
|
911
|
-
|
|
912
|
-
submitClassName,
|
|
913
|
-
successMessageClassName,
|
|
914
|
-
errorMessageClassName,
|
|
915
|
-
background = "white",
|
|
524
|
+
background,
|
|
916
525
|
spacing = "xl",
|
|
917
526
|
pattern,
|
|
918
|
-
patternOpacity = 0.1
|
|
919
|
-
formConfig,
|
|
920
|
-
onSubmit,
|
|
921
|
-
onSuccess,
|
|
922
|
-
onError
|
|
527
|
+
patternOpacity = 0.1
|
|
923
528
|
}) {
|
|
924
|
-
const {
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
onError,
|
|
941
|
-
resetOnSuccess: formConfig?.resetOnSuccess !== false,
|
|
942
|
-
uploadTokens
|
|
943
|
-
});
|
|
944
|
-
const actionsContent = React.useMemo(() => {
|
|
945
|
-
if (actionsSlot) return actionsSlot;
|
|
946
|
-
if (actions && actions.length > 0) {
|
|
947
|
-
return actions.map((action, index) => {
|
|
948
|
-
const {
|
|
949
|
-
label,
|
|
950
|
-
icon,
|
|
951
|
-
iconAfter,
|
|
952
|
-
children,
|
|
953
|
-
className: actionClassName,
|
|
954
|
-
...pressableProps
|
|
955
|
-
} = action;
|
|
956
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
957
|
-
Pressable,
|
|
958
|
-
{
|
|
959
|
-
asButton: true,
|
|
960
|
-
className: actionClassName,
|
|
961
|
-
...pressableProps,
|
|
962
|
-
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
963
|
-
icon,
|
|
964
|
-
label,
|
|
965
|
-
iconAfter
|
|
966
|
-
] })
|
|
967
|
-
},
|
|
968
|
-
index
|
|
969
|
-
);
|
|
970
|
-
});
|
|
529
|
+
const headerItems = React4.useMemo(() => {
|
|
530
|
+
const items = [];
|
|
531
|
+
if (heading) {
|
|
532
|
+
if (typeof heading === "string") {
|
|
533
|
+
items.push({
|
|
534
|
+
_type: "text",
|
|
535
|
+
as: "h2",
|
|
536
|
+
className: cn(
|
|
537
|
+
"mb-3 text-3xl font-bold tracking-tight text-balance",
|
|
538
|
+
headingClassName
|
|
539
|
+
),
|
|
540
|
+
children: heading
|
|
541
|
+
});
|
|
542
|
+
} else {
|
|
543
|
+
items.push(heading);
|
|
544
|
+
}
|
|
971
545
|
}
|
|
972
|
-
|
|
973
|
-
|
|
546
|
+
if (description) {
|
|
547
|
+
if (typeof description === "string") {
|
|
548
|
+
items.push({
|
|
549
|
+
_type: "text",
|
|
550
|
+
as: "p",
|
|
551
|
+
className: cn("leading-relaxed text-balance", descriptionClassName),
|
|
552
|
+
children: description
|
|
553
|
+
});
|
|
554
|
+
} else {
|
|
555
|
+
items.push(description);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return items;
|
|
559
|
+
}, [heading, headingClassName, description, descriptionClassName]);
|
|
974
560
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
975
561
|
Section,
|
|
976
562
|
{
|
|
@@ -981,86 +567,21 @@ function ContactRetreat({
|
|
|
981
567
|
className: cn("py-12", className),
|
|
982
568
|
containerClassName,
|
|
983
569
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-4xl", children: [
|
|
984
|
-
/* @__PURE__ */ jsxRuntime.
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
}
|
|
994
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
|
|
995
|
-
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
996
|
-
"p",
|
|
997
|
-
{
|
|
998
|
-
className: cn(
|
|
999
|
-
"leading-relaxed text-balance",
|
|
1000
|
-
descriptionClassName
|
|
1001
|
-
),
|
|
1002
|
-
children: description
|
|
1003
|
-
}
|
|
1004
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
|
|
1005
|
-
] }),
|
|
1006
|
-
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1007
|
-
forms.Form,
|
|
570
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
571
|
+
ContentGroup,
|
|
572
|
+
{
|
|
573
|
+
items: headerItems,
|
|
574
|
+
className: cn("mb-10 text-center", headerClassName)
|
|
575
|
+
}
|
|
576
|
+
),
|
|
577
|
+
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("mx-auto max-w-xl", cardClassName), children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: cn("p-6 lg:p-8", cardContentClassName), children: formEngineSetup ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
578
|
+
integration.FormEngine,
|
|
1008
579
|
{
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
successMessage
|
|
1013
|
-
},
|
|
1014
|
-
styleConfig: {
|
|
1015
|
-
formClassName: cn("space-y-4", formClassName),
|
|
1016
|
-
successMessageClassName,
|
|
1017
|
-
errorMessageClassName
|
|
1018
|
-
},
|
|
1019
|
-
formConfig: {
|
|
1020
|
-
endpoint: formConfig?.endpoint,
|
|
1021
|
-
method: formMethod,
|
|
1022
|
-
submissionConfig: formConfig?.submissionConfig
|
|
1023
|
-
},
|
|
1024
|
-
onNewSubmission: () => {
|
|
1025
|
-
resetUpload();
|
|
1026
|
-
resetSubmissionState();
|
|
1027
|
-
},
|
|
1028
|
-
children: [
|
|
1029
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-12 gap-6", children: formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1030
|
-
"div",
|
|
1031
|
-
{
|
|
1032
|
-
className: integration.getColumnSpanClass(field.columnSpan),
|
|
1033
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1034
|
-
integration.DynamicFormField,
|
|
1035
|
-
{
|
|
1036
|
-
field,
|
|
1037
|
-
uploadProgress,
|
|
1038
|
-
onFileUpload: uploadFiles,
|
|
1039
|
-
onFileRemove: removeFile,
|
|
1040
|
-
isUploading
|
|
1041
|
-
}
|
|
1042
|
-
)
|
|
1043
|
-
},
|
|
1044
|
-
field.name
|
|
1045
|
-
)) }),
|
|
1046
|
-
actionsSlot || actions && actions.length > 0 ? actionsContent : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1047
|
-
Pressable,
|
|
1048
|
-
{
|
|
1049
|
-
componentType: "button",
|
|
1050
|
-
type: "submit",
|
|
1051
|
-
className: cn("w-full", submitClassName),
|
|
1052
|
-
size: "lg",
|
|
1053
|
-
asButton: true,
|
|
1054
|
-
disabled: form.isSubmitting,
|
|
1055
|
-
children: [
|
|
1056
|
-
buttonIcon,
|
|
1057
|
-
buttonText
|
|
1058
|
-
]
|
|
1059
|
-
}
|
|
1060
|
-
)
|
|
1061
|
-
]
|
|
580
|
+
formEngineSetup,
|
|
581
|
+
defaultFields: DEFAULT_FORM_FIELDS,
|
|
582
|
+
defaultStyleRules: DEFAULT_STYLE_RULES
|
|
1062
583
|
}
|
|
1063
|
-
) }) })
|
|
584
|
+
) : null }) })
|
|
1064
585
|
] })
|
|
1065
586
|
}
|
|
1066
587
|
);
|