@opensite/ui 2.7.4 → 2.7.6

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