@opensite/ui 2.0.6 → 2.0.8

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.
Files changed (77) hide show
  1. package/dist/hero-adaptable-product-grid.cjs +1 -1
  2. package/dist/hero-adaptable-product-grid.js +1 -1
  3. package/dist/hero-agency-animated-images.cjs +795 -631
  4. package/dist/hero-agency-animated-images.d.cts +13 -9
  5. package/dist/hero-agency-animated-images.d.ts +13 -9
  6. package/dist/hero-agency-animated-images.js +794 -630
  7. package/dist/hero-business-carousel-dots.cjs +822 -911
  8. package/dist/hero-business-carousel-dots.d.cts +5 -1
  9. package/dist/hero-business-carousel-dots.d.ts +5 -1
  10. package/dist/hero-business-carousel-dots.js +824 -910
  11. package/dist/hero-coming-soon-countdown.cjs +267 -110
  12. package/dist/hero-coming-soon-countdown.d.cts +8 -11
  13. package/dist/hero-coming-soon-countdown.d.ts +8 -11
  14. package/dist/hero-coming-soon-countdown.js +268 -111
  15. package/dist/hero-conversation-intelligence.cjs +673 -639
  16. package/dist/hero-conversation-intelligence.js +663 -629
  17. package/dist/hero-creative-studio-stacked.cjs +899 -861
  18. package/dist/hero-creative-studio-stacked.d.cts +16 -15
  19. package/dist/hero-creative-studio-stacked.d.ts +16 -15
  20. package/dist/hero-creative-studio-stacked.js +897 -859
  21. package/dist/hero-customer-support-layered.cjs +89 -76
  22. package/dist/hero-customer-support-layered.js +89 -76
  23. package/dist/hero-developer-tools-code.cjs +721 -669
  24. package/dist/hero-developer-tools-code.d.cts +5 -1
  25. package/dist/hero-developer-tools-code.d.ts +5 -1
  26. package/dist/hero-developer-tools-code.js +719 -667
  27. package/dist/hero-digital-agency-fullscreen.cjs +722 -680
  28. package/dist/hero-digital-agency-fullscreen.d.cts +4 -20
  29. package/dist/hero-digital-agency-fullscreen.d.ts +4 -20
  30. package/dist/hero-digital-agency-fullscreen.js +722 -680
  31. package/dist/hero-ecommerce-product-showcase.cjs +892 -846
  32. package/dist/hero-ecommerce-product-showcase.js +889 -843
  33. package/dist/hero-enterprise-security.cjs +168 -132
  34. package/dist/hero-enterprise-security.d.cts +12 -19
  35. package/dist/hero-enterprise-security.d.ts +12 -19
  36. package/dist/hero-enterprise-security.js +168 -132
  37. package/dist/hero-event-registration.cjs +39 -39
  38. package/dist/hero-event-registration.js +39 -39
  39. package/dist/hero-fullscreen-background-image.cjs +3 -2
  40. package/dist/hero-fullscreen-background-image.js +3 -2
  41. package/dist/hero-fullscreen-logo-cta.cjs +4 -2
  42. package/dist/hero-fullscreen-logo-cta.js +4 -2
  43. package/dist/hero-innovation-image-grid.cjs +2 -2
  44. package/dist/hero-innovation-image-grid.js +2 -2
  45. package/dist/hero-mental-health-team.cjs +17 -17
  46. package/dist/hero-mental-health-team.d.cts +5 -5
  47. package/dist/hero-mental-health-team.d.ts +5 -5
  48. package/dist/hero-mental-health-team.js +17 -17
  49. package/dist/hero-mobile-app-download.cjs +2 -2
  50. package/dist/hero-mobile-app-download.js +2 -2
  51. package/dist/hero-newsletter-minimal.cjs +97 -57
  52. package/dist/hero-newsletter-minimal.d.cts +5 -1
  53. package/dist/hero-newsletter-minimal.d.ts +5 -1
  54. package/dist/hero-newsletter-minimal.js +97 -57
  55. package/dist/hero-shared-inbox-layered.cjs +522 -42
  56. package/dist/hero-shared-inbox-layered.d.cts +20 -4
  57. package/dist/hero-shared-inbox-layered.d.ts +20 -4
  58. package/dist/hero-shared-inbox-layered.js +505 -40
  59. package/dist/hero-startup-launch-cta.cjs +859 -816
  60. package/dist/hero-startup-launch-cta.d.cts +3 -2
  61. package/dist/hero-startup-launch-cta.d.ts +3 -2
  62. package/dist/hero-startup-launch-cta.js +858 -815
  63. package/dist/hero-therapy-testimonial-grid.cjs +1 -1
  64. package/dist/hero-therapy-testimonial-grid.js +1 -1
  65. package/dist/hero-video-dialog-gradient-BnCFFec0.d.ts +99 -0
  66. package/dist/hero-video-dialog-gradient-Dapebkzu.d.cts +99 -0
  67. package/dist/hero-video-dialog-gradient.cjs +24 -23
  68. package/dist/hero-video-dialog-gradient.d.cts +4 -94
  69. package/dist/hero-video-dialog-gradient.d.ts +4 -94
  70. package/dist/hero-video-dialog-gradient.js +24 -23
  71. package/dist/hero-welcome-asymmetric-images.cjs +652 -617
  72. package/dist/hero-welcome-asymmetric-images.d.cts +5 -1
  73. package/dist/hero-welcome-asymmetric-images.d.ts +5 -1
  74. package/dist/hero-welcome-asymmetric-images.js +651 -616
  75. package/dist/registry.cjs +1111 -848
  76. package/dist/registry.js +1111 -848
  77. package/package.json +1 -1
@@ -1,16 +1,533 @@
1
1
  "use client";
2
- import * as React from 'react';
3
- import React__default, { useMemo } from 'react';
2
+ import * as React3 from 'react';
3
+ import React3__default, { useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
- import { cva } from 'class-variance-authority';
7
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
6
  import { Img } from '@page-speed/img';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+ import { cva } from 'class-variance-authority';
9
9
 
10
10
  // components/blocks/hero/hero-conversation-intelligence.tsx
11
11
  function cn(...inputs) {
12
12
  return twMerge(clsx(inputs));
13
13
  }
14
+ var maxWidthStyles = {
15
+ sm: "max-w-screen-sm",
16
+ md: "max-w-screen-md",
17
+ lg: "max-w-screen-lg",
18
+ xl: "max-w-7xl",
19
+ "2xl": "max-w-screen-2xl",
20
+ "4xl": "max-w-[1536px]",
21
+ full: "max-w-full"
22
+ };
23
+ var Container = React3__default.forwardRef(
24
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
25
+ const Component = as;
26
+ return /* @__PURE__ */ jsx(
27
+ Component,
28
+ {
29
+ ref,
30
+ className: cn(
31
+ "mx-auto w-full px-2 sm:px-4 lg:px-8",
32
+ maxWidthStyles[maxWidth],
33
+ className
34
+ ),
35
+ ...props,
36
+ children
37
+ }
38
+ );
39
+ }
40
+ );
41
+ Container.displayName = "Container";
42
+
43
+ // lib/patternSvgs.ts
44
+ var patternSvgs = {
45
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
46
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
47
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
48
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
49
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
50
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
51
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
52
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
53
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
54
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
55
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
56
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
57
+ };
58
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
59
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
60
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
61
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
62
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
63
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
64
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
65
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxs(
66
+ "svg",
67
+ {
68
+ className: "h-full w-full",
69
+ xmlns: "http://www.w3.org/2000/svg",
70
+ style: mask ? {
71
+ maskImage: mask,
72
+ WebkitMaskImage: mask
73
+ } : void 0,
74
+ children: [
75
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
76
+ "pattern",
77
+ {
78
+ id,
79
+ x: "0",
80
+ y: "0",
81
+ width: "100",
82
+ height: "100",
83
+ patternUnits: "userSpaceOnUse",
84
+ children: [
85
+ /* @__PURE__ */ jsx(
86
+ "path",
87
+ {
88
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
89
+ stroke: "hsl(var(--muted))",
90
+ strokeWidth: "1",
91
+ fill: "none"
92
+ }
93
+ ),
94
+ /* @__PURE__ */ jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
95
+ /* @__PURE__ */ jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
96
+ /* @__PURE__ */ jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
97
+ /* @__PURE__ */ jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
98
+ /* @__PURE__ */ jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
99
+ ]
100
+ }
101
+ ) }),
102
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
103
+ ]
104
+ }
105
+ );
106
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxs(
107
+ "svg",
108
+ {
109
+ className: "h-full w-full",
110
+ xmlns: "http://www.w3.org/2000/svg",
111
+ style: mask ? {
112
+ maskImage: mask,
113
+ WebkitMaskImage: mask
114
+ } : void 0,
115
+ children: [
116
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
117
+ "pattern",
118
+ {
119
+ id,
120
+ x: "0",
121
+ y: "0",
122
+ width: "40",
123
+ height: "40",
124
+ patternUnits: "userSpaceOnUse",
125
+ children: [
126
+ /* @__PURE__ */ jsx(
127
+ "path",
128
+ {
129
+ d: "M0 20h40M20 0v40",
130
+ stroke: "hsl(var(--muted))",
131
+ strokeWidth: "0.5",
132
+ fill: "none"
133
+ }
134
+ ),
135
+ /* @__PURE__ */ jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
136
+ ]
137
+ }
138
+ ) }),
139
+ /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
140
+ ]
141
+ }
142
+ );
143
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsx(
144
+ "div",
145
+ {
146
+ className: "h-full w-full bg-[linear-gradient(to_right,_hsl(var(--muted))_1px,_transparent_1px),linear-gradient(to_bottom,_hsl(var(--muted))_1px,_transparent_1px)]",
147
+ style: {
148
+ backgroundSize: `${size}px ${size}px`,
149
+ ...mask ? {
150
+ maskImage: mask,
151
+ WebkitMaskImage: mask
152
+ } : {}
153
+ }
154
+ }
155
+ );
156
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsx(
157
+ "div",
158
+ {
159
+ className: "h-full w-full",
160
+ style: {
161
+ backgroundImage: "repeating-linear-gradient(45deg, transparent, transparent 32px, hsl(var(--muted)) 32px, hsl(var(--muted)) 33px), repeating-linear-gradient(135deg, transparent, transparent 32px, hsl(var(--muted)) 32px, hsl(var(--muted)) 33px)",
162
+ ...mask ? {
163
+ maskImage: mask,
164
+ WebkitMaskImage: mask
165
+ } : {}
166
+ }
167
+ }
168
+ );
169
+ var dashedGridMaskBase = "repeating-linear-gradient(to right, black 0px, black 3px, transparent 3px, transparent 8px), repeating-linear-gradient(to bottom, black 0px, black 3px, transparent 3px, transparent 8px)";
170
+ var dashedGridPattern = (fadeMask) => {
171
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
172
+ return /* @__PURE__ */ jsx(
173
+ "div",
174
+ {
175
+ className: "h-full w-full",
176
+ style: {
177
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
178
+ backgroundSize: "20px 20px",
179
+ backgroundPosition: "0 0, 0 0",
180
+ maskImage: mask,
181
+ WebkitMaskImage: mask,
182
+ maskComposite: "intersect",
183
+ WebkitMaskComposite: "source-in"
184
+ }
185
+ }
186
+ );
187
+ };
188
+ var gradientGlow = (position) => /* @__PURE__ */ jsx(
189
+ "div",
190
+ {
191
+ className: cn(
192
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
193
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
194
+ ),
195
+ style: {
196
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
197
+ }
198
+ }
199
+ );
200
+ var spotlight = (position) => /* @__PURE__ */ jsx(
201
+ "div",
202
+ {
203
+ className: cn(
204
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
205
+ position === "left" ? "-left-1/4" : "-right-1/4"
206
+ ),
207
+ style: {
208
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
209
+ }
210
+ }
211
+ );
212
+ var patternOverlays = {
213
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
214
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
215
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
216
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
217
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
218
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
219
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
220
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
221
+ dashedGridBasic: () => dashedGridPattern(),
222
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
223
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
224
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
225
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
226
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
227
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
228
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
229
+ diagonalCrossBasic: () => diagonalCrossPattern(),
230
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
231
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
232
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
233
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
234
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
235
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
236
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
237
+ gridBasic: () => gridPattern(40),
238
+ gridFadeTop: () => gridPattern(32, maskTop),
239
+ gridFadeBottom: () => gridPattern(32, maskBottom),
240
+ gridFadeCenter: () => gridPattern(40, maskCenter),
241
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
242
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
243
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
244
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
245
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
246
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
247
+ gradientGlowTop: () => gradientGlow("top"),
248
+ gradientGlowBottom: () => gradientGlow("bottom"),
249
+ spotlightLeft: () => spotlight("left"),
250
+ spotlightRight: () => spotlight("right")
251
+ };
252
+ var inlinePatternStyles = {
253
+ radialGradientTop: {
254
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
255
+ },
256
+ radialGradientBottom: {
257
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
258
+ }
259
+ };
260
+ function PatternBackground({
261
+ pattern,
262
+ opacity = 0.08,
263
+ className,
264
+ style
265
+ }) {
266
+ if (!pattern) {
267
+ return null;
268
+ }
269
+ if (pattern in inlinePatternStyles) {
270
+ const inlineStyle = inlinePatternStyles[pattern];
271
+ return /* @__PURE__ */ jsx(
272
+ "div",
273
+ {
274
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
275
+ style: { ...inlineStyle, opacity, ...style },
276
+ "aria-hidden": "true"
277
+ }
278
+ );
279
+ }
280
+ if (pattern in patternOverlays) {
281
+ const Overlay = patternOverlays[pattern];
282
+ return /* @__PURE__ */ jsx(
283
+ "div",
284
+ {
285
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
286
+ style: { opacity, ...style },
287
+ "aria-hidden": "true",
288
+ children: Overlay()
289
+ }
290
+ );
291
+ }
292
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
293
+ return /* @__PURE__ */ jsx(
294
+ "div",
295
+ {
296
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
297
+ style: {
298
+ backgroundImage: `url(${patternUrl})`,
299
+ backgroundRepeat: "repeat",
300
+ backgroundSize: "auto",
301
+ opacity,
302
+ ...style
303
+ },
304
+ "aria-hidden": "true"
305
+ }
306
+ );
307
+ }
308
+ var backgroundStyles = {
309
+ default: "bg-background text-foreground",
310
+ white: "bg-white text-dark",
311
+ gray: "bg-muted/30 text-foreground",
312
+ dark: "bg-foreground text-background",
313
+ transparent: "bg-transparent text-foreground",
314
+ gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
315
+ primary: "bg-primary text-primary-foreground",
316
+ secondary: "bg-secondary text-secondary-foreground",
317
+ muted: "bg-muted text-muted-foreground"
318
+ };
319
+ var spacingStyles = {
320
+ none: "py-0 md:py-0",
321
+ sm: "py-12 md:py-16",
322
+ md: "py-16 md:py-24",
323
+ lg: "py-20 md:py-32",
324
+ xl: "py-24 md:py-40"
325
+ };
326
+ var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
327
+ var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
328
+ var Section = React3__default.forwardRef(
329
+ ({
330
+ id,
331
+ title,
332
+ subtitle,
333
+ children,
334
+ className,
335
+ style,
336
+ background = "default",
337
+ spacing = "lg",
338
+ pattern,
339
+ patternOpacity,
340
+ patternClassName,
341
+ containerClassName,
342
+ containerMaxWidth = "xl",
343
+ ...props
344
+ }, ref) => {
345
+ const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
346
+ return /* @__PURE__ */ jsxs(
347
+ "section",
348
+ {
349
+ ref,
350
+ id,
351
+ className: cn(
352
+ "relative",
353
+ pattern ? "overflow-hidden" : null,
354
+ backgroundStyles[background],
355
+ isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
356
+ className
357
+ ),
358
+ style,
359
+ ...props,
360
+ children: [
361
+ /* @__PURE__ */ jsx(
362
+ PatternBackground,
363
+ {
364
+ pattern,
365
+ opacity: effectivePatternOpacity,
366
+ className: patternClassName
367
+ }
368
+ ),
369
+ /* @__PURE__ */ jsxs(
370
+ Container,
371
+ {
372
+ maxWidth: containerMaxWidth,
373
+ className: cn("relative z-10", containerClassName),
374
+ children: [
375
+ (title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "mb-6 text-center md:mb-16", children: [
376
+ subtitle && /* @__PURE__ */ jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider", children: subtitle }),
377
+ title && /* @__PURE__ */ jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
378
+ ] }),
379
+ children
380
+ ]
381
+ }
382
+ )
383
+ ]
384
+ }
385
+ );
386
+ }
387
+ );
388
+ Section.displayName = "Section";
389
+ var baseStyles = [
390
+ // Layout
391
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
392
+ // Typography - using CSS variables with sensible defaults
393
+ "font-[var(--button-font-family,inherit)]",
394
+ "font-[var(--button-font-weight,500)]",
395
+ "tracking-[var(--button-letter-spacing,0)]",
396
+ "leading-[var(--button-line-height,1.25)]",
397
+ "[text-transform:var(--button-text-transform,none)]",
398
+ "text-sm",
399
+ // Border radius
400
+ "rounded-[var(--button-radius,var(--radius,0.375rem))]",
401
+ // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)
402
+ "[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]",
403
+ // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows
404
+ "[box-shadow:var(--button-shadow,none)]",
405
+ "hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]",
406
+ // Disabled state
407
+ "disabled:pointer-events-none disabled:opacity-50",
408
+ // SVG handling
409
+ "[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
410
+ // Focus styles
411
+ "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
412
+ // Invalid state
413
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
414
+ ].join(" ");
415
+ var buttonVariants = cva(baseStyles, {
416
+ variants: {
417
+ variant: {
418
+ // Default (Primary) variant - full customization
419
+ default: [
420
+ "bg-[var(--button-default-bg,hsl(var(--primary)))]",
421
+ "text-[var(--button-default-fg,hsl(var(--primary-foreground)))]",
422
+ "border-[length:var(--button-default-border-width,0px)]",
423
+ "border-[color:var(--button-default-border,transparent)]",
424
+ "[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]",
425
+ "hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]",
426
+ "hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]",
427
+ "hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]",
428
+ "hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]"
429
+ ].join(" "),
430
+ // Destructive variant - full customization
431
+ destructive: [
432
+ "bg-[var(--button-destructive-bg,hsl(var(--destructive)))]",
433
+ "text-[var(--button-destructive-fg,white)]",
434
+ "border-[length:var(--button-destructive-border-width,0px)]",
435
+ "border-[color:var(--button-destructive-border,transparent)]",
436
+ "[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]",
437
+ "hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]",
438
+ "hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]",
439
+ "hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]",
440
+ "hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]",
441
+ "focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
442
+ "dark:bg-destructive/60"
443
+ ].join(" "),
444
+ // Outline variant - full customization with proper border handling
445
+ outline: [
446
+ "bg-[var(--button-outline-bg,hsl(var(--background)))]",
447
+ "text-[var(--button-outline-fg,inherit)]",
448
+ "border-[length:var(--button-outline-border-width,1px)]",
449
+ "border-[color:var(--button-outline-border,hsl(var(--border)))]",
450
+ "[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]",
451
+ "hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]",
452
+ "hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]",
453
+ "hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]",
454
+ "hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]",
455
+ "dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
456
+ ].join(" "),
457
+ // Secondary variant - full customization
458
+ secondary: [
459
+ "bg-[var(--button-secondary-bg,hsl(var(--secondary)))]",
460
+ "text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]",
461
+ "border-[length:var(--button-secondary-border-width,0px)]",
462
+ "border-[color:var(--button-secondary-border,transparent)]",
463
+ "[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]",
464
+ "hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]",
465
+ "hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]",
466
+ "hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]",
467
+ "hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]"
468
+ ].join(" "),
469
+ // Ghost variant - full customization
470
+ ghost: [
471
+ "bg-[var(--button-ghost-bg,transparent)]",
472
+ "text-[var(--button-ghost-fg,inherit)]",
473
+ "border-[length:var(--button-ghost-border-width,0px)]",
474
+ "border-[color:var(--button-ghost-border,transparent)]",
475
+ "[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]",
476
+ "hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]",
477
+ "hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]",
478
+ "hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]",
479
+ "hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]",
480
+ "dark:hover:bg-accent/50"
481
+ ].join(" "),
482
+ // Link variant - full customization
483
+ link: [
484
+ "bg-[var(--button-link-bg,transparent)]",
485
+ "text-[var(--button-link-fg,hsl(var(--primary)))]",
486
+ "border-[length:var(--button-link-border-width,0px)]",
487
+ "border-[color:var(--button-link-border,transparent)]",
488
+ "[box-shadow:var(--button-link-shadow,none)]",
489
+ "hover:bg-[var(--button-link-hover-bg,transparent)]",
490
+ "hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]",
491
+ "hover:[box-shadow:var(--button-link-shadow-hover,none)]",
492
+ "underline-offset-4 hover:underline"
493
+ ].join(" ")
494
+ },
495
+ size: {
496
+ default: [
497
+ "h-[var(--button-height-md,2.25rem)]",
498
+ "px-[var(--button-padding-x-md,1rem)]",
499
+ "py-[var(--button-padding-y-md,0.5rem)]",
500
+ "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
501
+ ].join(" "),
502
+ sm: [
503
+ "h-[var(--button-height-sm,2rem)]",
504
+ "px-[var(--button-padding-x-sm,0.75rem)]",
505
+ "py-[var(--button-padding-y-sm,0.25rem)]",
506
+ "gap-1.5",
507
+ "has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]"
508
+ ].join(" "),
509
+ md: [
510
+ "h-[var(--button-height-md,2.25rem)]",
511
+ "px-[var(--button-padding-x-md,1rem)]",
512
+ "py-[var(--button-padding-y-md,0.5rem)]",
513
+ "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
514
+ ].join(" "),
515
+ lg: [
516
+ "h-[var(--button-height-lg,2.5rem)]",
517
+ "px-[var(--button-padding-x-lg,1.5rem)]",
518
+ "py-[var(--button-padding-y-lg,0.5rem)]",
519
+ "has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]"
520
+ ].join(" "),
521
+ icon: "size-[var(--button-height-md,2.25rem)]",
522
+ "icon-sm": "size-[var(--button-height-sm,2rem)]",
523
+ "icon-lg": "size-[var(--button-height-lg,2.5rem)]"
524
+ }
525
+ },
526
+ defaultVariants: {
527
+ variant: "default",
528
+ size: "default"
529
+ }
530
+ });
14
531
  function normalizePhoneNumber(input) {
15
532
  const trimmed = input.trim();
16
533
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -86,7 +603,7 @@ function useNavigation({
86
603
  href,
87
604
  onClick
88
605
  } = {}) {
89
- const linkType = React.useMemo(() => {
606
+ const linkType = React3.useMemo(() => {
90
607
  if (!href || href.trim() === "") {
91
608
  return onClick ? "none" : "none";
92
609
  }
@@ -107,7 +624,7 @@ function useNavigation({
107
624
  return "internal";
108
625
  }
109
626
  }, [href, onClick]);
110
- const normalizedHref = React.useMemo(() => {
627
+ const normalizedHref = React3.useMemo(() => {
111
628
  if (!href || href.trim() === "") {
112
629
  return void 0;
113
630
  }
@@ -125,7 +642,7 @@ function useNavigation({
125
642
  return trimmed;
126
643
  }
127
644
  }, [href, linkType]);
128
- const target = React.useMemo(() => {
645
+ const target = React3.useMemo(() => {
129
646
  switch (linkType) {
130
647
  case "external":
131
648
  return "_blank";
@@ -138,7 +655,7 @@ function useNavigation({
138
655
  return void 0;
139
656
  }
140
657
  }, [linkType]);
141
- const rel = React.useMemo(() => {
658
+ const rel = React3.useMemo(() => {
142
659
  if (linkType === "external") {
143
660
  return "noopener noreferrer";
144
661
  }
@@ -147,7 +664,7 @@ function useNavigation({
147
664
  const isExternal = linkType === "external";
148
665
  const isInternal = linkType === "internal";
149
666
  const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
150
- const handleClick = React.useCallback(
667
+ const handleClick = React3.useCallback(
151
668
  (event) => {
152
669
  if (onClick) {
153
670
  try {
@@ -162,176 +679,34 @@ function useNavigation({
162
679
  if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
163
680
  !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
164
681
  if (typeof window !== "undefined") {
165
- const handler = window.__opensiteNavigationHandler;
166
- if (typeof handler === "function") {
167
- try {
168
- const handled = handler(normalizedHref, event.nativeEvent || event);
169
- if (handled !== false) {
170
- event.preventDefault();
171
- }
172
- } catch (error) {
173
- console.error("Error in navigation handler:", error);
174
- }
175
- }
176
- }
177
- }
178
- },
179
- [onClick, shouldUseRouter, normalizedHref]
180
- );
181
- return {
182
- linkType,
183
- normalizedHref,
184
- target,
185
- rel,
186
- isExternal,
187
- isInternal,
188
- shouldUseRouter,
189
- handleClick
190
- };
191
- }
192
- var baseStyles = [
193
- // Layout
194
- "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
195
- // Typography - using CSS variables with sensible defaults
196
- "font-[var(--button-font-family,inherit)]",
197
- "font-[var(--button-font-weight,500)]",
198
- "tracking-[var(--button-letter-spacing,0)]",
199
- "leading-[var(--button-line-height,1.25)]",
200
- "[text-transform:var(--button-text-transform,none)]",
201
- "text-sm",
202
- // Border radius
203
- "rounded-[var(--button-radius,var(--radius,0.375rem))]",
204
- // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)
205
- "[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]",
206
- // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows
207
- "[box-shadow:var(--button-shadow,none)]",
208
- "hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]",
209
- // Disabled state
210
- "disabled:pointer-events-none disabled:opacity-50",
211
- // SVG handling
212
- "[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
213
- // Focus styles
214
- "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
215
- // Invalid state
216
- "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
217
- ].join(" ");
218
- var buttonVariants = cva(baseStyles, {
219
- variants: {
220
- variant: {
221
- // Default (Primary) variant - full customization
222
- default: [
223
- "bg-[var(--button-default-bg,hsl(var(--primary)))]",
224
- "text-[var(--button-default-fg,hsl(var(--primary-foreground)))]",
225
- "border-[length:var(--button-default-border-width,0px)]",
226
- "border-[color:var(--button-default-border,transparent)]",
227
- "[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]",
228
- "hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]",
229
- "hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]",
230
- "hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]",
231
- "hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]"
232
- ].join(" "),
233
- // Destructive variant - full customization
234
- destructive: [
235
- "bg-[var(--button-destructive-bg,hsl(var(--destructive)))]",
236
- "text-[var(--button-destructive-fg,white)]",
237
- "border-[length:var(--button-destructive-border-width,0px)]",
238
- "border-[color:var(--button-destructive-border,transparent)]",
239
- "[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]",
240
- "hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]",
241
- "hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]",
242
- "hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]",
243
- "hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]",
244
- "focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
245
- "dark:bg-destructive/60"
246
- ].join(" "),
247
- // Outline variant - full customization with proper border handling
248
- outline: [
249
- "bg-[var(--button-outline-bg,hsl(var(--background)))]",
250
- "text-[var(--button-outline-fg,inherit)]",
251
- "border-[length:var(--button-outline-border-width,1px)]",
252
- "border-[color:var(--button-outline-border,hsl(var(--border)))]",
253
- "[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]",
254
- "hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]",
255
- "hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]",
256
- "hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]",
257
- "hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]",
258
- "dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
259
- ].join(" "),
260
- // Secondary variant - full customization
261
- secondary: [
262
- "bg-[var(--button-secondary-bg,hsl(var(--secondary)))]",
263
- "text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]",
264
- "border-[length:var(--button-secondary-border-width,0px)]",
265
- "border-[color:var(--button-secondary-border,transparent)]",
266
- "[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]",
267
- "hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]",
268
- "hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]",
269
- "hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]",
270
- "hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]"
271
- ].join(" "),
272
- // Ghost variant - full customization
273
- ghost: [
274
- "bg-[var(--button-ghost-bg,transparent)]",
275
- "text-[var(--button-ghost-fg,inherit)]",
276
- "border-[length:var(--button-ghost-border-width,0px)]",
277
- "border-[color:var(--button-ghost-border,transparent)]",
278
- "[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]",
279
- "hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]",
280
- "hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]",
281
- "hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]",
282
- "hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]",
283
- "dark:hover:bg-accent/50"
284
- ].join(" "),
285
- // Link variant - full customization
286
- link: [
287
- "bg-[var(--button-link-bg,transparent)]",
288
- "text-[var(--button-link-fg,hsl(var(--primary)))]",
289
- "border-[length:var(--button-link-border-width,0px)]",
290
- "border-[color:var(--button-link-border,transparent)]",
291
- "[box-shadow:var(--button-link-shadow,none)]",
292
- "hover:bg-[var(--button-link-hover-bg,transparent)]",
293
- "hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]",
294
- "hover:[box-shadow:var(--button-link-shadow-hover,none)]",
295
- "underline-offset-4 hover:underline"
296
- ].join(" ")
297
- },
298
- size: {
299
- default: [
300
- "h-[var(--button-height-md,2.25rem)]",
301
- "px-[var(--button-padding-x-md,1rem)]",
302
- "py-[var(--button-padding-y-md,0.5rem)]",
303
- "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
304
- ].join(" "),
305
- sm: [
306
- "h-[var(--button-height-sm,2rem)]",
307
- "px-[var(--button-padding-x-sm,0.75rem)]",
308
- "py-[var(--button-padding-y-sm,0.25rem)]",
309
- "gap-1.5",
310
- "has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]"
311
- ].join(" "),
312
- md: [
313
- "h-[var(--button-height-md,2.25rem)]",
314
- "px-[var(--button-padding-x-md,1rem)]",
315
- "py-[var(--button-padding-y-md,0.5rem)]",
316
- "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
317
- ].join(" "),
318
- lg: [
319
- "h-[var(--button-height-lg,2.5rem)]",
320
- "px-[var(--button-padding-x-lg,1.5rem)]",
321
- "py-[var(--button-padding-y-lg,0.5rem)]",
322
- "has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]"
323
- ].join(" "),
324
- icon: "size-[var(--button-height-md,2.25rem)]",
325
- "icon-sm": "size-[var(--button-height-sm,2rem)]",
326
- "icon-lg": "size-[var(--button-height-lg,2.5rem)]"
327
- }
328
- },
329
- defaultVariants: {
330
- variant: "default",
331
- size: "default"
332
- }
333
- });
334
- var Pressable = React.forwardRef(
682
+ const handler = window.__opensiteNavigationHandler;
683
+ if (typeof handler === "function") {
684
+ try {
685
+ const handled = handler(normalizedHref, event.nativeEvent || event);
686
+ if (handled !== false) {
687
+ event.preventDefault();
688
+ }
689
+ } catch (error) {
690
+ console.error("Error in navigation handler:", error);
691
+ }
692
+ }
693
+ }
694
+ }
695
+ },
696
+ [onClick, shouldUseRouter, normalizedHref]
697
+ );
698
+ return {
699
+ linkType,
700
+ normalizedHref,
701
+ target,
702
+ rel,
703
+ isExternal,
704
+ isInternal,
705
+ shouldUseRouter,
706
+ handleClick
707
+ };
708
+ }
709
+ var Pressable = React3.forwardRef(
335
710
  ({
336
711
  children,
337
712
  className,
@@ -370,440 +745,129 @@ var Pressable = React.forwardRef(
370
745
  );
371
746
  const buttonDataAttributes = shouldApplyButtonStyles ? {
372
747
  "data-slot": "button",
373
- "data-variant": variant ?? "default",
374
- "data-size": size ?? "default"
375
- } : {};
376
- const commonProps = {
377
- className: combinedClassName,
378
- onClick: handleClick,
379
- "aria-label": ariaLabel,
380
- "aria-describedby": ariaDescribedby,
381
- id,
382
- ...dataProps,
383
- ...buttonDataAttributes
384
- };
385
- if (finalComponentType === "a" && shouldRenderLink) {
386
- return /* @__PURE__ */ jsx(
387
- "a",
388
- {
389
- ref,
390
- href: normalizedHref,
391
- target,
392
- rel,
393
- ...commonProps,
394
- ...props,
395
- children
396
- }
397
- );
398
- }
399
- if (finalComponentType === "button") {
400
- return /* @__PURE__ */ jsx(
401
- "button",
402
- {
403
- ref,
404
- type: props.type || "button",
405
- ...commonProps,
406
- ...props,
407
- children
408
- }
409
- );
410
- }
411
- if (finalComponentType === "div") {
412
- return /* @__PURE__ */ jsx(
413
- "div",
414
- {
415
- ref,
416
- ...commonProps,
417
- children
418
- }
419
- );
420
- }
421
- return /* @__PURE__ */ jsx(
422
- "span",
423
- {
424
- ref,
425
- ...commonProps,
426
- children
427
- }
428
- );
429
- }
430
- );
431
- Pressable.displayName = "Pressable";
432
- var maxWidthStyles = {
433
- sm: "max-w-screen-sm",
434
- md: "max-w-screen-md",
435
- lg: "max-w-screen-lg",
436
- xl: "max-w-7xl",
437
- "2xl": "max-w-screen-2xl",
438
- "4xl": "max-w-[1536px]",
439
- full: "max-w-full"
440
- };
441
- var Container = React__default.forwardRef(
442
- ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
443
- const Component = as;
444
- return /* @__PURE__ */ jsx(
445
- Component,
446
- {
447
- ref,
448
- className: cn(
449
- "mx-auto w-full px-2 sm:px-4 lg:px-8",
450
- maxWidthStyles[maxWidth],
451
- className
452
- ),
453
- ...props,
454
- children
455
- }
456
- );
457
- }
458
- );
459
- Container.displayName = "Container";
460
-
461
- // lib/patternSvgs.ts
462
- var patternSvgs = {
463
- squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
464
- grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
465
- noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
466
- dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
467
- dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
468
- dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
469
- circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
470
- waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
471
- crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
472
- architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
473
- tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
474
- p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
475
- };
476
- var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
477
- var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
478
- var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
479
- var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
480
- var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
481
- var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
482
- var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
483
- var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxs(
484
- "svg",
485
- {
486
- className: "h-full w-full",
487
- xmlns: "http://www.w3.org/2000/svg",
488
- style: mask ? {
489
- maskImage: mask,
490
- WebkitMaskImage: mask
491
- } : void 0,
492
- children: [
493
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
494
- "pattern",
495
- {
496
- id,
497
- x: "0",
498
- y: "0",
499
- width: "100",
500
- height: "100",
501
- patternUnits: "userSpaceOnUse",
502
- children: [
503
- /* @__PURE__ */ jsx(
504
- "path",
505
- {
506
- d: "M0 50h40M60 50h40M50 0v40M50 60v40",
507
- stroke: "hsl(var(--muted))",
508
- strokeWidth: "1",
509
- fill: "none"
510
- }
511
- ),
512
- /* @__PURE__ */ jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
513
- /* @__PURE__ */ jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
514
- /* @__PURE__ */ jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
515
- /* @__PURE__ */ jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
516
- /* @__PURE__ */ jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
517
- ]
518
- }
519
- ) }),
520
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
521
- ]
522
- }
523
- );
524
- var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxs(
525
- "svg",
526
- {
527
- className: "h-full w-full",
528
- xmlns: "http://www.w3.org/2000/svg",
529
- style: mask ? {
530
- maskImage: mask,
531
- WebkitMaskImage: mask
532
- } : void 0,
533
- children: [
534
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs(
535
- "pattern",
536
- {
537
- id,
538
- x: "0",
539
- y: "0",
540
- width: "40",
541
- height: "40",
542
- patternUnits: "userSpaceOnUse",
543
- children: [
544
- /* @__PURE__ */ jsx(
545
- "path",
546
- {
547
- d: "M0 20h40M20 0v40",
548
- stroke: "hsl(var(--muted))",
549
- strokeWidth: "0.5",
550
- fill: "none"
551
- }
552
- ),
553
- /* @__PURE__ */ jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
554
- ]
555
- }
556
- ) }),
557
- /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
558
- ]
559
- }
560
- );
561
- var gridPattern = (size, mask) => /* @__PURE__ */ jsx(
562
- "div",
563
- {
564
- className: "h-full w-full bg-[linear-gradient(to_right,_hsl(var(--muted))_1px,_transparent_1px),linear-gradient(to_bottom,_hsl(var(--muted))_1px,_transparent_1px)]",
565
- style: {
566
- backgroundSize: `${size}px ${size}px`,
567
- ...mask ? {
568
- maskImage: mask,
569
- WebkitMaskImage: mask
570
- } : {}
571
- }
572
- }
573
- );
574
- var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsx(
575
- "div",
576
- {
577
- className: "h-full w-full",
578
- style: {
579
- backgroundImage: "repeating-linear-gradient(45deg, transparent, transparent 32px, hsl(var(--muted)) 32px, hsl(var(--muted)) 33px), repeating-linear-gradient(135deg, transparent, transparent 32px, hsl(var(--muted)) 32px, hsl(var(--muted)) 33px)",
580
- ...mask ? {
581
- maskImage: mask,
582
- WebkitMaskImage: mask
583
- } : {}
584
- }
585
- }
586
- );
587
- var dashedGridMaskBase = "repeating-linear-gradient(to right, black 0px, black 3px, transparent 3px, transparent 8px), repeating-linear-gradient(to bottom, black 0px, black 3px, transparent 3px, transparent 8px)";
588
- var dashedGridPattern = (fadeMask) => {
589
- const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
590
- return /* @__PURE__ */ jsx(
591
- "div",
592
- {
593
- className: "h-full w-full",
594
- style: {
595
- backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
596
- backgroundSize: "20px 20px",
597
- backgroundPosition: "0 0, 0 0",
598
- maskImage: mask,
599
- WebkitMaskImage: mask,
600
- maskComposite: "intersect",
601
- WebkitMaskComposite: "source-in"
602
- }
748
+ "data-variant": variant ?? "default",
749
+ "data-size": size ?? "default"
750
+ } : {};
751
+ const commonProps = {
752
+ className: combinedClassName,
753
+ onClick: handleClick,
754
+ "aria-label": ariaLabel,
755
+ "aria-describedby": ariaDescribedby,
756
+ id,
757
+ ...dataProps,
758
+ ...buttonDataAttributes
759
+ };
760
+ if (finalComponentType === "a" && shouldRenderLink) {
761
+ return /* @__PURE__ */ jsx(
762
+ "a",
763
+ {
764
+ ref,
765
+ href: normalizedHref,
766
+ target,
767
+ rel,
768
+ ...commonProps,
769
+ ...props,
770
+ children
771
+ }
772
+ );
603
773
  }
604
- );
605
- };
606
- var gradientGlow = (position) => /* @__PURE__ */ jsx(
607
- "div",
608
- {
609
- className: cn(
610
- "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
611
- position === "top" ? "-top-1/4" : "-bottom-1/4"
612
- ),
613
- style: {
614
- background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
774
+ if (finalComponentType === "button") {
775
+ return /* @__PURE__ */ jsx(
776
+ "button",
777
+ {
778
+ ref,
779
+ type: props.type || "button",
780
+ ...commonProps,
781
+ ...props,
782
+ children
783
+ }
784
+ );
615
785
  }
616
- }
617
- );
618
- var spotlight = (position) => /* @__PURE__ */ jsx(
619
- "div",
620
- {
621
- className: cn(
622
- "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
623
- position === "left" ? "-left-1/4" : "-right-1/4"
624
- ),
625
- style: {
626
- background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
786
+ if (finalComponentType === "div") {
787
+ return /* @__PURE__ */ jsx(
788
+ "div",
789
+ {
790
+ ref,
791
+ ...commonProps,
792
+ children
793
+ }
794
+ );
627
795
  }
628
- }
629
- );
630
- var patternOverlays = {
631
- circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
632
- circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
633
- circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
634
- circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
635
- circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
636
- circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
637
- circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
638
- circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
639
- dashedGridBasic: () => dashedGridPattern(),
640
- dashedGridFadeTop: () => dashedGridPattern(maskTop),
641
- dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
642
- dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
643
- dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
644
- dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
645
- dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
646
- dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
647
- diagonalCrossBasic: () => diagonalCrossPattern(),
648
- diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
649
- diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
650
- diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
651
- diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
652
- diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
653
- diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
654
- diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
655
- gridBasic: () => gridPattern(40),
656
- gridFadeTop: () => gridPattern(32, maskTop),
657
- gridFadeBottom: () => gridPattern(32, maskBottom),
658
- gridFadeCenter: () => gridPattern(40, maskCenter),
659
- gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
660
- gridFadeTopRight: () => gridPattern(32, maskTopRight),
661
- gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
662
- gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
663
- gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
664
- gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
665
- gradientGlowTop: () => gradientGlow("top"),
666
- gradientGlowBottom: () => gradientGlow("bottom"),
667
- spotlightLeft: () => spotlight("left"),
668
- spotlightRight: () => spotlight("right")
669
- };
670
- var inlinePatternStyles = {
671
- radialGradientTop: {
672
- background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
673
- },
674
- radialGradientBottom: {
675
- background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
676
- }
677
- };
678
- function PatternBackground({
679
- pattern,
680
- opacity = 0.08,
681
- className,
682
- style
683
- }) {
684
- if (!pattern) {
685
- return null;
686
- }
687
- if (pattern in inlinePatternStyles) {
688
- const inlineStyle = inlinePatternStyles[pattern];
689
796
  return /* @__PURE__ */ jsx(
690
- "div",
797
+ "span",
691
798
  {
692
- className: cn("pointer-events-none absolute inset-0 z-0", className),
693
- style: { ...inlineStyle, opacity, ...style },
694
- "aria-hidden": "true"
799
+ ref,
800
+ ...commonProps,
801
+ children
695
802
  }
696
803
  );
697
804
  }
698
- if (pattern in patternOverlays) {
699
- const Overlay = patternOverlays[pattern];
805
+ );
806
+ Pressable.displayName = "Pressable";
807
+ var MOBILE_CLASSES = {
808
+ "fit-left": "items-start md:items-center",
809
+ "fit-center": "items-center",
810
+ "fit-right": "items-end md:items-center",
811
+ "full-left": "items-stretch md:items-center",
812
+ "full-center": "items-stretch md:items-center",
813
+ "full-right": "items-stretch md:items-center"
814
+ };
815
+ function BlockActions({
816
+ mobileConfig,
817
+ actionsClassName,
818
+ verticalSpacing = "mt-4 md:mt-8",
819
+ actions,
820
+ actionsSlot
821
+ }) {
822
+ const width = mobileConfig?.width ?? "full";
823
+ const position = mobileConfig?.position ?? "center";
824
+ const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
825
+ if (actionsSlot) {
826
+ return /* @__PURE__ */ jsx("div", { children: actionsSlot });
827
+ } else if (actions && actions?.length > 0) {
700
828
  return /* @__PURE__ */ jsx(
701
829
  "div",
702
830
  {
703
- className: cn("pointer-events-none absolute inset-0 z-0", className),
704
- style: { opacity, ...style },
705
- "aria-hidden": "true",
706
- children: Overlay()
831
+ className: cn(
832
+ "flex flex-col md:flex-row flex-wrap gap-4",
833
+ mobileLayoutClass,
834
+ actionsClassName,
835
+ verticalSpacing
836
+ ),
837
+ children: actions.map((action, index) => /* @__PURE__ */ jsx(ActionComponent, { action }, index))
707
838
  }
708
839
  );
840
+ } else {
841
+ return null;
709
842
  }
710
- const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
843
+ }
844
+ function ActionComponent({ action }) {
845
+ const {
846
+ label,
847
+ icon,
848
+ iconAfter,
849
+ children,
850
+ href,
851
+ onClick,
852
+ className: actionClassName,
853
+ ...pressableProps
854
+ } = action;
711
855
  return /* @__PURE__ */ jsx(
712
- "div",
856
+ Pressable,
713
857
  {
714
- className: cn("pointer-events-none absolute inset-0 z-0", className),
715
- style: {
716
- backgroundImage: `url(${patternUrl})`,
717
- backgroundRepeat: "repeat",
718
- backgroundSize: "auto",
719
- opacity,
720
- ...style
721
- },
722
- "aria-hidden": "true"
858
+ href,
859
+ onClick,
860
+ asButton: action.asButton ?? true,
861
+ className: actionClassName,
862
+ ...pressableProps,
863
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
864
+ icon,
865
+ label,
866
+ iconAfter
867
+ ] })
723
868
  }
724
869
  );
725
870
  }
726
- var backgroundStyles = {
727
- default: "bg-background text-foreground",
728
- white: "bg-white text-dark",
729
- gray: "bg-muted/30 text-foreground",
730
- dark: "bg-foreground text-background",
731
- transparent: "bg-transparent text-foreground",
732
- gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
733
- primary: "bg-primary text-primary-foreground",
734
- secondary: "bg-secondary text-secondary-foreground",
735
- muted: "bg-muted text-muted-foreground"
736
- };
737
- var spacingStyles = {
738
- none: "py-0 md:py-0",
739
- sm: "py-12 md:py-16",
740
- md: "py-16 md:py-24",
741
- lg: "py-20 md:py-32",
742
- xl: "py-24 md:py-40"
743
- };
744
- var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
745
- var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
746
- var Section = React__default.forwardRef(
747
- ({
748
- id,
749
- title,
750
- subtitle,
751
- children,
752
- className,
753
- style,
754
- background = "default",
755
- spacing = "lg",
756
- pattern,
757
- patternOpacity,
758
- patternClassName,
759
- containerClassName,
760
- containerMaxWidth = "xl",
761
- ...props
762
- }, ref) => {
763
- const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
764
- return /* @__PURE__ */ jsxs(
765
- "section",
766
- {
767
- ref,
768
- id,
769
- className: cn(
770
- "relative",
771
- pattern ? "overflow-hidden" : null,
772
- backgroundStyles[background],
773
- isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
774
- className
775
- ),
776
- style,
777
- ...props,
778
- children: [
779
- /* @__PURE__ */ jsx(
780
- PatternBackground,
781
- {
782
- pattern,
783
- opacity: effectivePatternOpacity,
784
- className: patternClassName
785
- }
786
- ),
787
- /* @__PURE__ */ jsxs(
788
- Container,
789
- {
790
- maxWidth: containerMaxWidth,
791
- className: cn("relative z-10", containerClassName),
792
- children: [
793
- (title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "mb-6 text-center md:mb-16", children: [
794
- subtitle && /* @__PURE__ */ jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider", children: subtitle }),
795
- title && /* @__PURE__ */ jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
796
- ] }),
797
- children
798
- ]
799
- }
800
- )
801
- ]
802
- }
803
- );
804
- }
805
- );
806
- Section.displayName = "Section";
807
871
  function HeroConversationIntelligence({
808
872
  headingPrimary,
809
873
  description,
@@ -825,34 +889,6 @@ function HeroConversationIntelligence({
825
889
  imageClassName,
826
890
  optixFlowConfig
827
891
  }) {
828
- const renderActions = useMemo(() => {
829
- if (actionsSlot) return actionsSlot;
830
- if (!actions || actions.length === 0) return null;
831
- return actions.map((action, index) => {
832
- const {
833
- label,
834
- icon,
835
- iconAfter,
836
- children,
837
- className: actionClassName,
838
- ...pressableProps
839
- } = action;
840
- return /* @__PURE__ */ jsx(
841
- Pressable,
842
- {
843
- asButton: true,
844
- className: actionClassName,
845
- ...pressableProps,
846
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
847
- icon,
848
- label,
849
- iconAfter
850
- ] })
851
- },
852
- index
853
- );
854
- });
855
- }, [actionsSlot, actions]);
856
892
  const renderImage = useMemo(() => {
857
893
  if (imageSlot) return imageSlot;
858
894
  if (!image) return null;
@@ -917,14 +953,12 @@ function HeroConversationIntelligence({
917
953
  children: description
918
954
  }
919
955
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
920
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx(
921
- "div",
956
+ /* @__PURE__ */ jsx(
957
+ BlockActions,
922
958
  {
923
- className: cn(
924
- "flex flex-col md:flex-row items-center justify-center gap-4",
925
- actionsClassName
926
- ),
927
- children: renderActions
959
+ actions,
960
+ actionsSlot,
961
+ actionsClassName
928
962
  }
929
963
  )
930
964
  ]