@opensite/ui 2.0.5 → 2.0.7

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 (75) hide show
  1. package/dist/hero-adaptable-product-grid.cjs +11 -8
  2. package/dist/hero-adaptable-product-grid.d.cts +1 -1
  3. package/dist/hero-adaptable-product-grid.d.ts +1 -1
  4. package/dist/hero-adaptable-product-grid.js +11 -8
  5. package/dist/hero-business-operations-mosaic.cjs +542 -22
  6. package/dist/hero-business-operations-mosaic.d.cts +20 -8
  7. package/dist/hero-business-operations-mosaic.d.ts +20 -8
  8. package/dist/hero-business-operations-mosaic.js +542 -19
  9. package/dist/hero-centered-gradient-cta.cjs +3 -3
  10. package/dist/hero-centered-gradient-cta.js +3 -3
  11. package/dist/hero-community-survey-cta.cjs +3 -2
  12. package/dist/hero-community-survey-cta.js +3 -2
  13. package/dist/hero-conversion-video-play.cjs +1 -1
  14. package/dist/hero-conversion-video-play.js +1 -1
  15. package/dist/hero-crm-streamlined.cjs +4 -4
  16. package/dist/hero-crm-streamlined.js +4 -4
  17. package/dist/hero-design-showcase-logos.cjs +4 -1
  18. package/dist/hero-design-showcase-logos.js +4 -1
  19. package/dist/hero-design-system-3d.cjs +1 -1
  20. package/dist/hero-design-system-3d.js +1 -1
  21. package/dist/hero-feature-cards-grid.cjs +2 -2
  22. package/dist/hero-feature-cards-grid.js +2 -2
  23. package/dist/hero-fullscreen-background-image.cjs +4 -3
  24. package/dist/hero-fullscreen-background-image.js +4 -3
  25. package/dist/hero-fullscreen-logo-cta.cjs +7 -5
  26. package/dist/hero-fullscreen-logo-cta.js +7 -5
  27. package/dist/hero-gradient-avatars-rating.cjs +3 -3
  28. package/dist/hero-gradient-avatars-rating.js +3 -3
  29. package/dist/hero-gradient-client-focused.cjs +2 -2
  30. package/dist/hero-gradient-client-focused.js +2 -2
  31. package/dist/hero-grid-pattern-solutions.cjs +2 -2
  32. package/dist/hero-grid-pattern-solutions.d.cts +1 -1
  33. package/dist/hero-grid-pattern-solutions.d.ts +1 -1
  34. package/dist/hero-grid-pattern-solutions.js +2 -2
  35. package/dist/hero-innovation-image-grid.cjs +48 -42
  36. package/dist/hero-innovation-image-grid.js +48 -42
  37. package/dist/hero-mental-health-team.cjs +633 -89
  38. package/dist/hero-mental-health-team.d.cts +26 -6
  39. package/dist/hero-mental-health-team.d.ts +26 -6
  40. package/dist/hero-mental-health-team.js +614 -85
  41. package/dist/hero-minimal-centered-dark.cjs +841 -807
  42. package/dist/hero-minimal-centered-dark.d.cts +1 -1
  43. package/dist/hero-minimal-centered-dark.d.ts +1 -1
  44. package/dist/hero-minimal-centered-dark.js +840 -806
  45. package/dist/hero-presentation-platform-video.cjs +8 -2
  46. package/dist/hero-presentation-platform-video.js +8 -2
  47. package/dist/hero-product-showcase-floating.cjs +715 -612
  48. package/dist/hero-product-showcase-floating.d.cts +5 -1
  49. package/dist/hero-product-showcase-floating.d.ts +5 -1
  50. package/dist/hero-product-showcase-floating.js +712 -609
  51. package/dist/hero-saas-dashboard-preview.cjs +82 -107
  52. package/dist/hero-saas-dashboard-preview.d.cts +1 -1
  53. package/dist/hero-saas-dashboard-preview.d.ts +1 -1
  54. package/dist/hero-saas-dashboard-preview.js +82 -107
  55. package/dist/hero-software-growth-video-dialog.cjs +5 -5
  56. package/dist/hero-software-growth-video-dialog.js +5 -5
  57. package/dist/hero-split-image-newsletter.cjs +41 -32
  58. package/dist/hero-split-image-newsletter.js +41 -32
  59. package/dist/hero-stats-social-proof.cjs +1 -1
  60. package/dist/hero-stats-social-proof.js +1 -1
  61. package/dist/hero-testimonial-image-grid.cjs +2 -2
  62. package/dist/hero-testimonial-image-grid.js +2 -2
  63. package/dist/hero-therapy-testimonial-grid.cjs +682 -638
  64. package/dist/hero-therapy-testimonial-grid.d.cts +5 -1
  65. package/dist/hero-therapy-testimonial-grid.d.ts +5 -1
  66. package/dist/hero-therapy-testimonial-grid.js +671 -627
  67. package/dist/hero-ui-library-showcase.cjs +51 -42
  68. package/dist/hero-ui-library-showcase.js +51 -42
  69. package/dist/hero-video-dialog-gradient.cjs +2 -2
  70. package/dist/hero-video-dialog-gradient.js +2 -2
  71. package/dist/hero-video-overlay-stars.cjs +7 -15
  72. package/dist/hero-video-overlay-stars.js +7 -15
  73. package/dist/registry.cjs +608 -438
  74. package/dist/registry.js +608 -438
  75. 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-therapy-testimonial-grid.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 {
@@ -163,175 +680,33 @@ function useNavigation({
163
680
  !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
164
681
  if (typeof window !== "undefined") {
165
682
  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(
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,
@@ -369,452 +744,142 @@ var Pressable = React.forwardRef(
369
744
  Object.entries(props).filter(([key]) => key.startsWith("data-"))
370
745
  );
371
746
  const buttonDataAttributes = shouldApplyButtonStyles ? {
372
- "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
- }
747
+ "data-slot": "button",
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 HeroTherapyTestimonialGrid({
808
872
  heading,
809
873
  description,
810
874
  actions,
811
875
  actionsSlot,
876
+ actionsClassName,
812
877
  images,
813
878
  imagesSlot,
814
879
  testimonial,
815
880
  testimonialSlot,
816
881
  background,
817
- spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
882
+ spacing = "xl",
818
883
  pattern,
819
884
  patternOpacity,
820
885
  className,
@@ -824,34 +889,6 @@ function HeroTherapyTestimonialGrid({
824
889
  descriptionClassName,
825
890
  optixFlowConfig
826
891
  }) {
827
- const renderActions = useMemo(() => {
828
- if (actionsSlot) return actionsSlot;
829
- if (!actions || actions.length === 0) return null;
830
- return /* @__PURE__ */ jsx("div", { className: "flex flex-col mt-6 md:mt-8 gap-4 sm:flex-row items-center", children: actions.map((action, index) => {
831
- const {
832
- label,
833
- icon,
834
- iconAfter,
835
- children,
836
- className: actionClassName,
837
- ...pressableProps
838
- } = action;
839
- return /* @__PURE__ */ jsx(
840
- Pressable,
841
- {
842
- asButton: true,
843
- className: actionClassName,
844
- ...pressableProps,
845
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
846
- icon,
847
- /* @__PURE__ */ jsx("span", { children: label }),
848
- iconAfter
849
- ] })
850
- },
851
- index
852
- );
853
- }) });
854
- }, [actionsSlot, actions]);
855
892
  const renderTestimonial = useMemo(() => {
856
893
  if (testimonialSlot) return testimonialSlot;
857
894
  if (!testimonial) return null;
@@ -930,12 +967,12 @@ function HeroTherapyTestimonialGrid({
930
967
  patternOpacity,
931
968
  className,
932
969
  containerClassName,
933
- children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
970
+ children: /* @__PURE__ */ jsxs("div", { className: "pt-10 md:pt-0", children: [
934
971
  /* @__PURE__ */ jsxs(
935
972
  "div",
936
973
  {
937
974
  className: cn(
938
- "mx-auto mb-16 flex max-w-[900px] flex-col items-center gap-6",
975
+ "mx-auto mb-8 md:mb-12 flex max-w-[900px] flex-col items-center gap-3",
939
976
  headerClassName
940
977
  ),
941
978
  children: [
@@ -962,13 +999,20 @@ function HeroTherapyTestimonialGrid({
962
999
  "p",
963
1000
  {
964
1001
  className: cn(
965
- "text-center text-lg md:text-xl",
1002
+ "text-center text-lg md:text-xl text-balance",
966
1003
  descriptionClassName
967
1004
  ),
968
1005
  children: description
969
1006
  }
970
1007
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
971
- renderActions
1008
+ /* @__PURE__ */ jsx(
1009
+ BlockActions,
1010
+ {
1011
+ actions,
1012
+ actionsSlot,
1013
+ actionsClassName
1014
+ }
1015
+ )
972
1016
  ]
973
1017
  }
974
1018
  ),