@opensite/ui 0.8.1 → 0.8.2

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 (83) hide show
  1. package/dist/carousel-horizontal-cards.cjs +8 -6
  2. package/dist/carousel-horizontal-cards.js +8 -6
  3. package/dist/carousel-image-hero.cjs +85 -160
  4. package/dist/carousel-image-hero.d.cts +1 -5
  5. package/dist/carousel-image-hero.d.ts +1 -5
  6. package/dist/carousel-image-hero.js +85 -160
  7. package/dist/carousel-portfolio-hero.cjs +138 -59
  8. package/dist/carousel-portfolio-hero.js +138 -59
  9. package/dist/carousel-product-feature-showcase.cjs +148 -95
  10. package/dist/carousel-product-feature-showcase.js +148 -95
  11. package/dist/carousel-progress-slider.cjs +13 -9
  12. package/dist/carousel-progress-slider.js +13 -9
  13. package/dist/carousel-scrolling-feature-showcase.cjs +105 -54
  14. package/dist/carousel-scrolling-feature-showcase.js +105 -54
  15. package/dist/feature-accordion-image.cjs +9 -8
  16. package/dist/feature-accordion-image.js +9 -8
  17. package/dist/feature-animated-carousel.cjs +65 -49
  18. package/dist/feature-animated-carousel.js +65 -49
  19. package/dist/feature-badge-grid-six.cjs +20 -17
  20. package/dist/feature-badge-grid-six.js +21 -18
  21. package/dist/feature-bento-image-grid.cjs +12 -8
  22. package/dist/feature-bento-image-grid.js +12 -8
  23. package/dist/feature-bento-utilities.cjs +9 -5
  24. package/dist/feature-bento-utilities.js +9 -5
  25. package/dist/feature-capabilities-grid.cjs +41 -38
  26. package/dist/feature-capabilities-grid.js +41 -38
  27. package/dist/feature-card-grid-linked.cjs +18 -18
  28. package/dist/feature-card-grid-linked.js +19 -19
  29. package/dist/feature-carousel-progress.cjs +3 -3
  30. package/dist/feature-carousel-progress.js +4 -4
  31. package/dist/feature-category-image-cards.cjs +3 -3
  32. package/dist/feature-category-image-cards.js +4 -4
  33. package/dist/feature-checklist-image.cjs +2 -2
  34. package/dist/feature-checklist-image.js +2 -2
  35. package/dist/feature-checklist-three-column.cjs +6 -6
  36. package/dist/feature-checklist-three-column.js +7 -7
  37. package/dist/feature-icon-grid-accent.cjs +2 -2
  38. package/dist/feature-icon-grid-accent.js +2 -2
  39. package/dist/feature-icon-grid-bordered.cjs +29 -31
  40. package/dist/feature-icon-grid-bordered.d.cts +9 -9
  41. package/dist/feature-icon-grid-bordered.d.ts +9 -9
  42. package/dist/feature-icon-grid-bordered.js +30 -32
  43. package/dist/feature-icon-grid-muted.cjs +6 -6
  44. package/dist/feature-icon-grid-muted.d.cts +9 -9
  45. package/dist/feature-icon-grid-muted.d.ts +9 -9
  46. package/dist/feature-icon-grid-muted.js +7 -7
  47. package/dist/feature-icon-tabs-content.cjs +8 -8
  48. package/dist/feature-icon-tabs-content.d.cts +13 -13
  49. package/dist/feature-icon-tabs-content.d.ts +13 -13
  50. package/dist/feature-icon-tabs-content.js +9 -9
  51. package/dist/feature-image-cards-three-column.cjs +26 -27
  52. package/dist/feature-image-cards-three-column.js +27 -28
  53. package/dist/feature-image-overlay-badge.cjs +23 -21
  54. package/dist/feature-image-overlay-badge.js +24 -22
  55. package/dist/feature-integration-cards.cjs +19 -18
  56. package/dist/feature-integration-cards.js +20 -19
  57. package/dist/feature-numbered-cards.cjs +2 -2
  58. package/dist/feature-numbered-cards.js +3 -3
  59. package/dist/feature-pattern-grid-links.cjs +26 -29
  60. package/dist/feature-pattern-grid-links.d.cts +1 -5
  61. package/dist/feature-pattern-grid-links.d.ts +1 -5
  62. package/dist/feature-pattern-grid-links.js +27 -30
  63. package/dist/feature-showcase.cjs +441 -40
  64. package/dist/feature-showcase.d.cts +62 -5
  65. package/dist/feature-showcase.d.ts +62 -5
  66. package/dist/feature-showcase.js +438 -37
  67. package/dist/feature-split-image-reverse.cjs +15 -36
  68. package/dist/feature-split-image-reverse.js +16 -37
  69. package/dist/feature-split-image.cjs +15 -36
  70. package/dist/feature-split-image.js +16 -37
  71. package/dist/feature-stats-highlight.cjs +20 -32
  72. package/dist/feature-stats-highlight.js +21 -33
  73. package/dist/feature-tabbed-content-image.cjs +11 -6
  74. package/dist/feature-tabbed-content-image.js +11 -6
  75. package/dist/feature-three-column-values.cjs +6 -6
  76. package/dist/feature-three-column-values.js +6 -6
  77. package/dist/feature-utility-cards-grid.cjs +17 -15
  78. package/dist/feature-utility-cards-grid.js +18 -16
  79. package/dist/navbar-tabbed-sections.cjs +23 -16
  80. package/dist/navbar-tabbed-sections.js +23 -16
  81. package/dist/registry.cjs +941 -708
  82. package/dist/registry.js +943 -710
  83. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React4 = require('react');
4
+ var React6 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
7
8
  var useEmblaCarousel = require('embla-carousel-react');
8
9
  var classVarianceAuthority = require('class-variance-authority');
9
- var jsxRuntime = require('react/jsx-runtime');
10
10
 
11
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
12
 
@@ -28,13 +28,388 @@ function _interopNamespace(e) {
28
28
  return Object.freeze(n);
29
29
  }
30
30
 
31
- var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
31
+ var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
32
32
  var useEmblaCarousel__default = /*#__PURE__*/_interopDefault(useEmblaCarousel);
33
33
 
34
34
  // components/blocks/features/feature-showcase.tsx
35
35
  function cn(...inputs) {
36
36
  return tailwindMerge.twMerge(clsx.clsx(inputs));
37
37
  }
38
+ var maxWidthStyles = {
39
+ sm: "max-w-screen-sm",
40
+ md: "max-w-screen-md",
41
+ lg: "max-w-screen-lg",
42
+ xl: "max-w-7xl",
43
+ "2xl": "max-w-screen-2xl",
44
+ "4xl": "max-w-[1536px]",
45
+ full: "max-w-full"
46
+ };
47
+ var Container = React6__namespace.default.forwardRef(
48
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
49
+ const Component = as;
50
+ return /* @__PURE__ */ jsxRuntime.jsx(
51
+ Component,
52
+ {
53
+ ref,
54
+ className: cn(
55
+ "mx-auto w-full px-2 sm:px-4 lg:px-8",
56
+ maxWidthStyles[maxWidth],
57
+ className
58
+ ),
59
+ ...props,
60
+ children
61
+ }
62
+ );
63
+ }
64
+ );
65
+ Container.displayName = "Container";
66
+
67
+ // lib/patternSvgs.ts
68
+ var patternSvgs = {
69
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
70
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
71
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
72
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
73
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
74
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
75
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
76
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
77
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
78
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
79
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
80
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
81
+ };
82
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
83
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
84
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
85
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
86
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
87
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
88
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
89
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
90
+ "svg",
91
+ {
92
+ className: "h-full w-full",
93
+ xmlns: "http://www.w3.org/2000/svg",
94
+ style: mask ? {
95
+ maskImage: mask,
96
+ WebkitMaskImage: mask
97
+ } : void 0,
98
+ children: [
99
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
100
+ "pattern",
101
+ {
102
+ id,
103
+ x: "0",
104
+ y: "0",
105
+ width: "100",
106
+ height: "100",
107
+ patternUnits: "userSpaceOnUse",
108
+ children: [
109
+ /* @__PURE__ */ jsxRuntime.jsx(
110
+ "path",
111
+ {
112
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
113
+ stroke: "hsl(var(--muted))",
114
+ strokeWidth: "1",
115
+ fill: "none"
116
+ }
117
+ ),
118
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
119
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
120
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
121
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
122
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
123
+ ]
124
+ }
125
+ ) }),
126
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
127
+ ]
128
+ }
129
+ );
130
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
131
+ "svg",
132
+ {
133
+ className: "h-full w-full",
134
+ xmlns: "http://www.w3.org/2000/svg",
135
+ style: mask ? {
136
+ maskImage: mask,
137
+ WebkitMaskImage: mask
138
+ } : void 0,
139
+ children: [
140
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
141
+ "pattern",
142
+ {
143
+ id,
144
+ x: "0",
145
+ y: "0",
146
+ width: "40",
147
+ height: "40",
148
+ patternUnits: "userSpaceOnUse",
149
+ children: [
150
+ /* @__PURE__ */ jsxRuntime.jsx(
151
+ "path",
152
+ {
153
+ d: "M0 20h40M20 0v40",
154
+ stroke: "hsl(var(--muted))",
155
+ strokeWidth: "0.5",
156
+ fill: "none"
157
+ }
158
+ ),
159
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
160
+ ]
161
+ }
162
+ ) }),
163
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
164
+ ]
165
+ }
166
+ );
167
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
168
+ "div",
169
+ {
170
+ 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)]",
171
+ style: {
172
+ backgroundSize: `${size}px ${size}px`,
173
+ ...mask ? {
174
+ maskImage: mask,
175
+ WebkitMaskImage: mask
176
+ } : {}
177
+ }
178
+ }
179
+ );
180
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
181
+ "div",
182
+ {
183
+ className: "h-full w-full",
184
+ style: {
185
+ 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)",
186
+ ...mask ? {
187
+ maskImage: mask,
188
+ WebkitMaskImage: mask
189
+ } : {}
190
+ }
191
+ }
192
+ );
193
+ 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)";
194
+ var dashedGridPattern = (fadeMask) => {
195
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
196
+ return /* @__PURE__ */ jsxRuntime.jsx(
197
+ "div",
198
+ {
199
+ className: "h-full w-full",
200
+ style: {
201
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
202
+ backgroundSize: "20px 20px",
203
+ backgroundPosition: "0 0, 0 0",
204
+ maskImage: mask,
205
+ WebkitMaskImage: mask,
206
+ maskComposite: "intersect",
207
+ WebkitMaskComposite: "source-in"
208
+ }
209
+ }
210
+ );
211
+ };
212
+ var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
213
+ "div",
214
+ {
215
+ className: cn(
216
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
217
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
218
+ ),
219
+ style: {
220
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
221
+ }
222
+ }
223
+ );
224
+ var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
225
+ "div",
226
+ {
227
+ className: cn(
228
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
229
+ position === "left" ? "-left-1/4" : "-right-1/4"
230
+ ),
231
+ style: {
232
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
233
+ }
234
+ }
235
+ );
236
+ var patternOverlays = {
237
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
238
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
239
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
240
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
241
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
242
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
243
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
244
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
245
+ dashedGridBasic: () => dashedGridPattern(),
246
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
247
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
248
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
249
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
250
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
251
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
252
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
253
+ diagonalCrossBasic: () => diagonalCrossPattern(),
254
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
255
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
256
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
257
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
258
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
259
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
260
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
261
+ gridBasic: () => gridPattern(40),
262
+ gridFadeTop: () => gridPattern(32, maskTop),
263
+ gridFadeBottom: () => gridPattern(32, maskBottom),
264
+ gridFadeCenter: () => gridPattern(40, maskCenter),
265
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
266
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
267
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
268
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
269
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
270
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
271
+ gradientGlowTop: () => gradientGlow("top"),
272
+ gradientGlowBottom: () => gradientGlow("bottom"),
273
+ spotlightLeft: () => spotlight("left"),
274
+ spotlightRight: () => spotlight("right")
275
+ };
276
+ var inlinePatternStyles = {
277
+ radialGradientTop: {
278
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
279
+ },
280
+ radialGradientBottom: {
281
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
282
+ }
283
+ };
284
+ function PatternBackground({
285
+ pattern,
286
+ opacity = 0.08,
287
+ className,
288
+ style
289
+ }) {
290
+ if (!pattern) {
291
+ return null;
292
+ }
293
+ if (pattern in inlinePatternStyles) {
294
+ const inlineStyle = inlinePatternStyles[pattern];
295
+ return /* @__PURE__ */ jsxRuntime.jsx(
296
+ "div",
297
+ {
298
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
299
+ style: { ...inlineStyle, opacity, ...style },
300
+ "aria-hidden": "true"
301
+ }
302
+ );
303
+ }
304
+ if (pattern in patternOverlays) {
305
+ const Overlay = patternOverlays[pattern];
306
+ return /* @__PURE__ */ jsxRuntime.jsx(
307
+ "div",
308
+ {
309
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
310
+ style: { opacity, ...style },
311
+ "aria-hidden": "true",
312
+ children: Overlay()
313
+ }
314
+ );
315
+ }
316
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
317
+ return /* @__PURE__ */ jsxRuntime.jsx(
318
+ "div",
319
+ {
320
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
321
+ style: {
322
+ backgroundImage: `url(${patternUrl})`,
323
+ backgroundRepeat: "repeat",
324
+ backgroundSize: "auto",
325
+ opacity,
326
+ ...style
327
+ },
328
+ "aria-hidden": "true"
329
+ }
330
+ );
331
+ }
332
+ var backgroundStyles = {
333
+ default: "bg-background text-foreground",
334
+ white: "bg-white text-dark",
335
+ gray: "bg-muted/30 text-foreground",
336
+ dark: "bg-foreground text-background",
337
+ transparent: "bg-transparent text-foreground",
338
+ gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
339
+ primary: "bg-primary text-primary-foreground",
340
+ secondary: "bg-secondary text-secondary-foreground",
341
+ muted: "bg-muted text-muted-foreground"
342
+ };
343
+ var spacingStyles = {
344
+ none: "py-0 md:py-0",
345
+ sm: "py-12 md:py-16",
346
+ md: "py-16 md:py-24",
347
+ lg: "py-20 md:py-32",
348
+ xl: "py-24 md:py-40"
349
+ };
350
+ var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
351
+ var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
352
+ var Section = React6__namespace.default.forwardRef(
353
+ ({
354
+ id,
355
+ title,
356
+ subtitle,
357
+ children,
358
+ className,
359
+ style,
360
+ background = "default",
361
+ spacing = "lg",
362
+ pattern,
363
+ patternOpacity,
364
+ patternClassName,
365
+ containerClassName,
366
+ containerMaxWidth = "xl",
367
+ ...props
368
+ }, ref) => {
369
+ const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
370
+ return /* @__PURE__ */ jsxRuntime.jsxs(
371
+ "section",
372
+ {
373
+ ref,
374
+ id,
375
+ className: cn(
376
+ "relative",
377
+ pattern ? "overflow-hidden" : null,
378
+ backgroundStyles[background],
379
+ isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
380
+ className
381
+ ),
382
+ style,
383
+ ...props,
384
+ children: [
385
+ /* @__PURE__ */ jsxRuntime.jsx(
386
+ PatternBackground,
387
+ {
388
+ pattern,
389
+ opacity: effectivePatternOpacity,
390
+ className: patternClassName
391
+ }
392
+ ),
393
+ /* @__PURE__ */ jsxRuntime.jsxs(
394
+ Container,
395
+ {
396
+ maxWidth: containerMaxWidth,
397
+ className: cn("relative z-10", containerClassName),
398
+ children: [
399
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-12 text-center md:mb-16", children: [
400
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider text-primary", children: subtitle }),
401
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
402
+ ] }),
403
+ children
404
+ ]
405
+ }
406
+ )
407
+ ]
408
+ }
409
+ );
410
+ }
411
+ );
412
+ Section.displayName = "Section";
38
413
  function normalizePhoneNumber(input) {
39
414
  const trimmed = input.trim();
40
415
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -110,7 +485,7 @@ function useNavigation({
110
485
  href,
111
486
  onClick
112
487
  } = {}) {
113
- const linkType = React4__namespace.useMemo(() => {
488
+ const linkType = React6__namespace.useMemo(() => {
114
489
  if (!href || href.trim() === "") {
115
490
  return onClick ? "none" : "none";
116
491
  }
@@ -131,7 +506,7 @@ function useNavigation({
131
506
  return "internal";
132
507
  }
133
508
  }, [href, onClick]);
134
- const normalizedHref = React4__namespace.useMemo(() => {
509
+ const normalizedHref = React6__namespace.useMemo(() => {
135
510
  if (!href || href.trim() === "") {
136
511
  return void 0;
137
512
  }
@@ -149,7 +524,7 @@ function useNavigation({
149
524
  return trimmed;
150
525
  }
151
526
  }, [href, linkType]);
152
- const target = React4__namespace.useMemo(() => {
527
+ const target = React6__namespace.useMemo(() => {
153
528
  switch (linkType) {
154
529
  case "external":
155
530
  return "_blank";
@@ -162,7 +537,7 @@ function useNavigation({
162
537
  return void 0;
163
538
  }
164
539
  }, [linkType]);
165
- const rel = React4__namespace.useMemo(() => {
540
+ const rel = React6__namespace.useMemo(() => {
166
541
  if (linkType === "external") {
167
542
  return "noopener noreferrer";
168
543
  }
@@ -171,7 +546,7 @@ function useNavigation({
171
546
  const isExternal = linkType === "external";
172
547
  const isInternal = linkType === "internal";
173
548
  const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
174
- const handleClick = React4__namespace.useCallback(
549
+ const handleClick = React6__namespace.useCallback(
175
550
  (event) => {
176
551
  if (onClick) {
177
552
  try {
@@ -355,7 +730,7 @@ var buttonVariants = classVarianceAuthority.cva(baseStyles, {
355
730
  size: "default"
356
731
  }
357
732
  });
358
- var Pressable = React4__namespace.forwardRef(
733
+ var Pressable = React6__namespace.forwardRef(
359
734
  ({
360
735
  children,
361
736
  className,
@@ -461,10 +836,10 @@ function DynamicIcon({
461
836
  className,
462
837
  alt
463
838
  }) {
464
- const [svgContent, setSvgContent] = React4__namespace.useState(null);
465
- const [isLoading, setIsLoading] = React4__namespace.useState(true);
466
- const [error, setError] = React4__namespace.useState(null);
467
- const { url, iconName } = React4__namespace.useMemo(() => {
839
+ const [svgContent, setSvgContent] = React6__namespace.useState(null);
840
+ const [isLoading, setIsLoading] = React6__namespace.useState(true);
841
+ const [error, setError] = React6__namespace.useState(null);
842
+ const { url, iconName } = React6__namespace.useMemo(() => {
468
843
  const separator = name.includes("/") ? "/" : ":";
469
844
  const [prefix, iconName2] = name.split(separator);
470
845
  const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}`;
@@ -473,7 +848,7 @@ function DynamicIcon({
473
848
  iconName: iconName2
474
849
  };
475
850
  }, [name, size]);
476
- React4__namespace.useEffect(() => {
851
+ React6__namespace.useEffect(() => {
477
852
  let isMounted = true;
478
853
  const fetchSvg = async () => {
479
854
  const cached = svgCache.get(url);
@@ -558,9 +933,9 @@ function processSvgForCurrentColor(svg) {
558
933
  );
559
934
  return processed;
560
935
  }
561
- var CarouselContext = React4__namespace.createContext(null);
936
+ var CarouselContext = React6__namespace.createContext(null);
562
937
  function useCarousel() {
563
- const context = React4__namespace.useContext(CarouselContext);
938
+ const context = React6__namespace.useContext(CarouselContext);
564
939
  if (!context) {
565
940
  throw new Error("useCarousel must be used within a <Carousel />");
566
941
  }
@@ -582,20 +957,20 @@ function Carousel({
582
957
  },
583
958
  plugins
584
959
  );
585
- const [canScrollPrev, setCanScrollPrev] = React4__namespace.useState(false);
586
- const [canScrollNext, setCanScrollNext] = React4__namespace.useState(false);
587
- const onSelect = React4__namespace.useCallback((api2) => {
960
+ const [canScrollPrev, setCanScrollPrev] = React6__namespace.useState(false);
961
+ const [canScrollNext, setCanScrollNext] = React6__namespace.useState(false);
962
+ const onSelect = React6__namespace.useCallback((api2) => {
588
963
  if (!api2) return;
589
964
  setCanScrollPrev(api2.canScrollPrev());
590
965
  setCanScrollNext(api2.canScrollNext());
591
966
  }, []);
592
- const scrollPrev = React4__namespace.useCallback(() => {
967
+ const scrollPrev = React6__namespace.useCallback(() => {
593
968
  api?.scrollPrev();
594
969
  }, [api]);
595
- const scrollNext = React4__namespace.useCallback(() => {
970
+ const scrollNext = React6__namespace.useCallback(() => {
596
971
  api?.scrollNext();
597
972
  }, [api]);
598
- const handleKeyDown = React4__namespace.useCallback(
973
+ const handleKeyDown = React6__namespace.useCallback(
599
974
  (event) => {
600
975
  if (event.key === "ArrowLeft") {
601
976
  event.preventDefault();
@@ -607,11 +982,11 @@ function Carousel({
607
982
  },
608
983
  [scrollPrev, scrollNext]
609
984
  );
610
- React4__namespace.useEffect(() => {
985
+ React6__namespace.useEffect(() => {
611
986
  if (!api || !setApi) return;
612
987
  setApi(api);
613
988
  }, [api, setApi]);
614
- React4__namespace.useEffect(() => {
989
+ React6__namespace.useEffect(() => {
615
990
  if (!api) return;
616
991
  onSelect(api);
617
992
  api.on("reInit", onSelect);
@@ -754,17 +1129,28 @@ function FeatureShowcase({
754
1129
  contentClassName,
755
1130
  mediaClassName,
756
1131
  arrowClassName,
757
- equalizeOnMobile = true,
758
- stretchMediaOnMobile = true
1132
+ equalizeOnMobile,
1133
+ stretchMediaOnMobile,
1134
+ background,
1135
+ spacing,
1136
+ pattern,
1137
+ patternOpacity,
1138
+ patternClassName
759
1139
  }) {
760
- const baseArrowClassName = "bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6";
761
- const [mobileSlideHeight, setMobileSlideHeight] = React4.useState(
1140
+ const baseArrowClassName = React6.useMemo(
1141
+ () => "bottom-4 top-auto size-12 translate-y-0 rounded-full border border-current bg-transparent text-current shadow-sm focus:ring-current focus:ring-offset-2 focus:ring-offset-transparent hover:bg-current/10 md:bottom-6",
1142
+ []
1143
+ );
1144
+ const [mobileSlideHeight, setMobileSlideHeight] = React6.useState(
762
1145
  null
763
1146
  );
764
- const slideRefs = React4.useRef([]);
765
- const mediaWrapperClassName = equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "";
766
- React4.useEffect(() => {
767
- if (!equalizeOnMobile) {
1147
+ const slideRefs = React6.useRef([]);
1148
+ const mediaWrapperClassName = React6.useMemo(
1149
+ () => equalizeOnMobile && stretchMediaOnMobile ? "flex-1 min-h-0 md:flex-none" : "",
1150
+ [equalizeOnMobile, stretchMediaOnMobile]
1151
+ );
1152
+ React6.useEffect(() => {
1153
+ if (!equalizeOnMobile || !items || items.length === 0) {
768
1154
  setMobileSlideHeight(null);
769
1155
  return;
770
1156
  }
@@ -796,10 +1182,10 @@ function FeatureShowcase({
796
1182
  window.removeEventListener("resize", updateHeights);
797
1183
  resizeObserver?.disconnect();
798
1184
  };
799
- }, [equalizeOnMobile, items.length]);
800
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
801
- children,
802
- /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
1185
+ }, [equalizeOnMobile, items]);
1186
+ const carouselContent = React6.useMemo(() => {
1187
+ if (!items || items.length === 0) return null;
1188
+ return /* @__PURE__ */ jsxRuntime.jsxs(Carousel, { className: carouselClassName, children: [
803
1189
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-18 md:pb-24", children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { className: "ease-in", children: items.map((item, itemIndex) => /* @__PURE__ */ jsxRuntime.jsx(CarouselItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(
804
1190
  "div",
805
1191
  {
@@ -812,8 +1198,8 @@ function FeatureShowcase({
812
1198
  slideClassName
813
1199
  ),
814
1200
  children: [
815
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
816
- /* @__PURE__ */ jsxRuntime.jsx(
1201
+ item.content && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", contentClassName), children: item.content }),
1202
+ item.mediaComponent && /* @__PURE__ */ jsxRuntime.jsx(
817
1203
  "div",
818
1204
  {
819
1205
  className: cn(
@@ -839,8 +1225,23 @@ function FeatureShowcase({
839
1225
  className: cn(baseArrowClassName, "right-4 md:right-6", arrowClassName)
840
1226
  }
841
1227
  )
842
- ] })
843
- ] });
1228
+ ] });
1229
+ }, [items, carouselClassName, equalizeOnMobile, mobileSlideHeight, slideClassName, contentClassName, mediaWrapperClassName, mediaClassName, baseArrowClassName, arrowClassName]);
1230
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1231
+ Section,
1232
+ {
1233
+ background,
1234
+ spacing,
1235
+ pattern,
1236
+ patternOpacity,
1237
+ patternClassName,
1238
+ className,
1239
+ children: [
1240
+ children,
1241
+ carouselContent
1242
+ ]
1243
+ }
1244
+ );
844
1245
  }
845
1246
 
846
1247
  exports.FeatureShowcase = FeatureShowcase;