@opensite/ui 2.1.2 → 2.1.3
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/contact-faq.cjs +35 -522
- package/dist/contact-faq.d.cts +2 -10
- package/dist/contact-faq.d.ts +2 -10
- package/dist/contact-faq.js +34 -524
- package/dist/contact-vendor.cjs +33 -535
- package/dist/contact-vendor.js +32 -519
- package/dist/hero-newsletter-minimal.cjs +42 -492
- package/dist/hero-newsletter-minimal.js +44 -494
- package/dist/hero-saas-dashboard-preview.cjs +36 -36
- package/dist/hero-saas-dashboard-preview.js +36 -36
- package/dist/registry.cjs +146 -311
- package/dist/registry.js +147 -312
- package/package.json +2 -2
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var React3 = require('react');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
|
-
var classVarianceAuthority = require('class-variance-authority');
|
|
8
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
var forms = require('@page-speed/forms');
|
|
10
8
|
var integration = require('@page-speed/forms/integration');
|
|
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 React3__namespace = /*#__PURE__*/_interopNamespace(React3);
|
|
31
29
|
|
|
32
30
|
// components/blocks/hero/hero-newsletter-minimal.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
|
var maxWidthStyles = {
|
|
455
35
|
sm: "max-w-screen-sm",
|
|
456
36
|
md: "max-w-screen-md",
|
|
@@ -460,7 +40,7 @@ var maxWidthStyles = {
|
|
|
460
40
|
"4xl": "max-w-[1536px]",
|
|
461
41
|
full: "max-w-full"
|
|
462
42
|
};
|
|
463
|
-
var Container =
|
|
43
|
+
var Container = React3__namespace.default.forwardRef(
|
|
464
44
|
({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
|
|
465
45
|
const Component = as;
|
|
466
46
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -765,7 +345,7 @@ var spacingStyles = {
|
|
|
765
345
|
};
|
|
766
346
|
var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
|
|
767
347
|
var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
|
|
768
|
-
var Section =
|
|
348
|
+
var Section = React3__namespace.default.forwardRef(
|
|
769
349
|
({
|
|
770
350
|
id,
|
|
771
351
|
title,
|
|
@@ -872,18 +452,7 @@ function HeroNewsletterMinimal({
|
|
|
872
452
|
removeFile,
|
|
873
453
|
resetUpload
|
|
874
454
|
} = integration.useFileUpload({ onError });
|
|
875
|
-
const
|
|
876
|
-
formFields,
|
|
877
|
-
formConfig,
|
|
878
|
-
onSubmit,
|
|
879
|
-
onSuccess: (data) => {
|
|
880
|
-
resetUpload();
|
|
881
|
-
onSuccess?.(data);
|
|
882
|
-
},
|
|
883
|
-
onError,
|
|
884
|
-
uploadTokens
|
|
885
|
-
});
|
|
886
|
-
const renderStats = React__namespace.useMemo(() => {
|
|
455
|
+
const renderStats = React3__namespace.useMemo(() => {
|
|
887
456
|
if (statsSlot) return statsSlot;
|
|
888
457
|
if (!stats || stats.length === 0) return null;
|
|
889
458
|
return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", stat.className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
@@ -909,81 +478,62 @@ function HeroNewsletterMinimal({
|
|
|
909
478
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
|
|
910
479
|
] }) }, index));
|
|
911
480
|
}, [statsSlot, stats]);
|
|
912
|
-
const renderForm =
|
|
481
|
+
const renderForm = React3__namespace.useMemo(() => {
|
|
913
482
|
if (formSlot) return formSlot;
|
|
914
483
|
const defaultButtonAction = {
|
|
915
484
|
label: "Subscribe",
|
|
916
|
-
variant: "default"
|
|
917
|
-
className: "h-12"
|
|
485
|
+
variant: "default"
|
|
918
486
|
};
|
|
919
487
|
const action = buttonAction || defaultButtonAction;
|
|
920
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
method: formMethod,
|
|
932
|
-
submissionConfig: formConfig?.submissionConfig,
|
|
933
|
-
formLayout: "button-group",
|
|
934
|
-
buttonGroupSize: "lg",
|
|
935
|
-
submitLabel: action.label,
|
|
936
|
-
submitVariant: action.variant || "default"
|
|
937
|
-
},
|
|
938
|
-
onNewSubmission: () => {
|
|
939
|
-
resetUpload();
|
|
940
|
-
resetSubmissionState();
|
|
941
|
-
},
|
|
942
|
-
children: [
|
|
943
|
-
formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
944
|
-
integration.DynamicFormField,
|
|
945
|
-
{
|
|
946
|
-
field,
|
|
947
|
-
uploadProgress,
|
|
948
|
-
onFileUpload: uploadFiles,
|
|
949
|
-
onFileRemove: removeFile,
|
|
950
|
-
isUploading
|
|
951
|
-
}
|
|
952
|
-
) }, field.name)),
|
|
953
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
954
|
-
Pressable,
|
|
955
|
-
{
|
|
956
|
-
onClick: form.handleSubmit,
|
|
957
|
-
asButton: true,
|
|
958
|
-
variant: action.variant,
|
|
959
|
-
className: cn("h-12", action.className),
|
|
960
|
-
disabled: form.isSubmitting,
|
|
961
|
-
children: [
|
|
488
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
489
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
490
|
+
integration.FormEngine,
|
|
491
|
+
{
|
|
492
|
+
api: formConfig,
|
|
493
|
+
fields: formFields,
|
|
494
|
+
formLayoutSettings: {
|
|
495
|
+
formLayout: "button-group",
|
|
496
|
+
buttonGroupSetup: {
|
|
497
|
+
size: "lg",
|
|
498
|
+
submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
962
499
|
action.label,
|
|
963
500
|
action.iconAfter
|
|
964
|
-
]
|
|
501
|
+
] }),
|
|
502
|
+
submitVariant: action.variant || "default"
|
|
965
503
|
}
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
504
|
+
},
|
|
505
|
+
successMessage,
|
|
506
|
+
onSubmit,
|
|
507
|
+
onSuccess: (data) => {
|
|
508
|
+
resetUpload();
|
|
509
|
+
onSuccess?.(data);
|
|
510
|
+
},
|
|
511
|
+
onError,
|
|
512
|
+
uploadTokens,
|
|
513
|
+
uploadProgress,
|
|
514
|
+
onFileUpload: uploadFiles,
|
|
515
|
+
onFileRemove: removeFile,
|
|
516
|
+
isUploading
|
|
517
|
+
}
|
|
518
|
+
),
|
|
519
|
+
helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
|
|
520
|
+
] });
|
|
971
521
|
}, [
|
|
972
522
|
formSlot,
|
|
973
523
|
formFields,
|
|
974
|
-
form,
|
|
975
524
|
formConfig,
|
|
976
|
-
formMethod,
|
|
977
525
|
buttonAction,
|
|
526
|
+
uploadTokens,
|
|
978
527
|
uploadProgress,
|
|
979
528
|
uploadFiles,
|
|
980
529
|
removeFile,
|
|
981
530
|
isUploading,
|
|
982
|
-
submissionError,
|
|
983
531
|
successMessage,
|
|
532
|
+
onSubmit,
|
|
533
|
+
onSuccess,
|
|
534
|
+
onError,
|
|
984
535
|
helperText,
|
|
985
|
-
resetUpload
|
|
986
|
-
resetSubmissionState
|
|
536
|
+
resetUpload
|
|
987
537
|
]);
|
|
988
538
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
989
539
|
Section,
|