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