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