@opensite/ui 0.7.0 → 0.7.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 (71) hide show
  1. package/dist/blog-cards-read-time.cjs +1 -1
  2. package/dist/blog-cards-read-time.js +1 -1
  3. package/dist/blog-cards-tagline-cta.cjs +1 -1
  4. package/dist/blog-cards-tagline-cta.js +1 -1
  5. package/dist/blog-category-overlay.cjs +1 -1
  6. package/dist/blog-category-overlay.js +1 -1
  7. package/dist/blog-featured-popular.cjs +1 -1
  8. package/dist/blog-featured-popular.js +1 -1
  9. package/dist/blog-grid-author-cards.cjs +1 -1
  10. package/dist/blog-grid-author-cards.js +1 -1
  11. package/dist/blog-grid-nine-posts.cjs +1 -1
  12. package/dist/blog-grid-nine-posts.js +1 -1
  13. package/dist/blog-horizontal-cards.cjs +1 -1
  14. package/dist/blog-horizontal-cards.js +1 -1
  15. package/dist/blog-tech-insights.cjs +54 -45
  16. package/dist/blog-tech-insights.js +54 -45
  17. package/dist/carousel-animated-sections.cjs +1224 -0
  18. package/dist/carousel-animated-sections.d.cts +154 -0
  19. package/dist/carousel-animated-sections.d.ts +154 -0
  20. package/dist/carousel-animated-sections.js +1203 -0
  21. package/dist/carousel-auto-progress-slides.cjs +1156 -0
  22. package/dist/carousel-auto-progress-slides.d.cts +122 -0
  23. package/dist/carousel-auto-progress-slides.d.ts +122 -0
  24. package/dist/carousel-auto-progress-slides.js +1135 -0
  25. package/dist/carousel-autoplay-progress.cjs +1141 -0
  26. package/dist/carousel-autoplay-progress.d.cts +119 -0
  27. package/dist/carousel-autoplay-progress.d.ts +119 -0
  28. package/dist/carousel-autoplay-progress.js +1116 -0
  29. package/dist/carousel-feature-badge.cjs +1216 -0
  30. package/dist/carousel-feature-badge.d.cts +99 -0
  31. package/dist/carousel-feature-badge.d.ts +99 -0
  32. package/dist/carousel-feature-badge.js +1192 -0
  33. package/dist/carousel-fullscreen-scroll-fx.cjs +526 -0
  34. package/dist/carousel-fullscreen-scroll-fx.d.cts +122 -0
  35. package/dist/carousel-fullscreen-scroll-fx.d.ts +122 -0
  36. package/dist/carousel-fullscreen-scroll-fx.js +505 -0
  37. package/dist/carousel-gallery-thumbnails.cjs +1059 -0
  38. package/dist/carousel-gallery-thumbnails.d.cts +122 -0
  39. package/dist/carousel-gallery-thumbnails.d.ts +122 -0
  40. package/dist/carousel-gallery-thumbnails.js +1038 -0
  41. package/dist/carousel-horizontal-cards.cjs +1083 -0
  42. package/dist/carousel-horizontal-cards.d.cts +126 -0
  43. package/dist/carousel-horizontal-cards.d.ts +126 -0
  44. package/dist/carousel-horizontal-cards.js +1062 -0
  45. package/dist/carousel-image-hero.cjs +1075 -0
  46. package/dist/carousel-image-hero.d.cts +116 -0
  47. package/dist/carousel-image-hero.d.ts +116 -0
  48. package/dist/carousel-image-hero.js +1054 -0
  49. package/dist/carousel-multi-step-showcase.cjs +1146 -0
  50. package/dist/carousel-multi-step-showcase.d.cts +142 -0
  51. package/dist/carousel-multi-step-showcase.d.ts +142 -0
  52. package/dist/carousel-multi-step-showcase.js +1125 -0
  53. package/dist/carousel-portfolio-hero.cjs +1063 -0
  54. package/dist/carousel-portfolio-hero.d.cts +134 -0
  55. package/dist/carousel-portfolio-hero.d.ts +134 -0
  56. package/dist/carousel-portfolio-hero.js +1042 -0
  57. package/dist/carousel-product-feature-showcase.cjs +1127 -0
  58. package/dist/carousel-product-feature-showcase.d.cts +161 -0
  59. package/dist/carousel-product-feature-showcase.d.ts +161 -0
  60. package/dist/carousel-product-feature-showcase.js +1106 -0
  61. package/dist/carousel-progress-slider.cjs +597 -0
  62. package/dist/carousel-progress-slider.d.cts +122 -0
  63. package/dist/carousel-progress-slider.d.ts +122 -0
  64. package/dist/carousel-progress-slider.js +576 -0
  65. package/dist/carousel-scrolling-feature-showcase.cjs +530 -0
  66. package/dist/carousel-scrolling-feature-showcase.d.cts +126 -0
  67. package/dist/carousel-scrolling-feature-showcase.d.ts +126 -0
  68. package/dist/carousel-scrolling-feature-showcase.js +509 -0
  69. package/dist/registry.cjs +349 -238
  70. package/dist/registry.js +349 -238
  71. package/package.json +3 -2
@@ -0,0 +1,526 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React3 = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var img = require('@page-speed/img');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
29
+
30
+ // components/blocks/carousel/carousel-fullscreen-scroll-fx.tsx
31
+ function cn(...inputs) {
32
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ }
34
+ var maxWidthStyles = {
35
+ sm: "max-w-screen-sm",
36
+ md: "max-w-screen-md",
37
+ lg: "max-w-screen-lg",
38
+ xl: "max-w-7xl",
39
+ "2xl": "max-w-screen-2xl",
40
+ "4xl": "max-w-[1536px]",
41
+ full: "max-w-full"
42
+ };
43
+ var Container = React3__namespace.default.forwardRef(
44
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
45
+ const Component = as;
46
+ return /* @__PURE__ */ jsxRuntime.jsx(
47
+ Component,
48
+ {
49
+ ref,
50
+ className: cn(
51
+ "mx-auto w-full px-2 sm:px-4 lg:px-8",
52
+ maxWidthStyles[maxWidth],
53
+ className
54
+ ),
55
+ ...props,
56
+ children
57
+ }
58
+ );
59
+ }
60
+ );
61
+ Container.displayName = "Container";
62
+
63
+ // lib/patternSvgs.ts
64
+ var patternSvgs = {
65
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
66
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
67
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
68
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
69
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
70
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
71
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
72
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
73
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
74
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
75
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
76
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
77
+ };
78
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
79
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
80
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
81
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
82
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
83
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
84
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
85
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
86
+ "svg",
87
+ {
88
+ className: "h-full w-full",
89
+ xmlns: "http://www.w3.org/2000/svg",
90
+ style: mask ? {
91
+ maskImage: mask,
92
+ WebkitMaskImage: mask
93
+ } : void 0,
94
+ children: [
95
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
96
+ "pattern",
97
+ {
98
+ id,
99
+ x: "0",
100
+ y: "0",
101
+ width: "100",
102
+ height: "100",
103
+ patternUnits: "userSpaceOnUse",
104
+ children: [
105
+ /* @__PURE__ */ jsxRuntime.jsx(
106
+ "path",
107
+ {
108
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
109
+ stroke: "hsl(var(--muted))",
110
+ strokeWidth: "1",
111
+ fill: "none"
112
+ }
113
+ ),
114
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
115
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
116
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
117
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
118
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
119
+ ]
120
+ }
121
+ ) }),
122
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
123
+ ]
124
+ }
125
+ );
126
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
127
+ "svg",
128
+ {
129
+ className: "h-full w-full",
130
+ xmlns: "http://www.w3.org/2000/svg",
131
+ style: mask ? {
132
+ maskImage: mask,
133
+ WebkitMaskImage: mask
134
+ } : void 0,
135
+ children: [
136
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
137
+ "pattern",
138
+ {
139
+ id,
140
+ x: "0",
141
+ y: "0",
142
+ width: "40",
143
+ height: "40",
144
+ patternUnits: "userSpaceOnUse",
145
+ children: [
146
+ /* @__PURE__ */ jsxRuntime.jsx(
147
+ "path",
148
+ {
149
+ d: "M0 20h40M20 0v40",
150
+ stroke: "hsl(var(--muted))",
151
+ strokeWidth: "0.5",
152
+ fill: "none"
153
+ }
154
+ ),
155
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
156
+ ]
157
+ }
158
+ ) }),
159
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
160
+ ]
161
+ }
162
+ );
163
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
164
+ "div",
165
+ {
166
+ 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)]",
167
+ style: {
168
+ backgroundSize: `${size}px ${size}px`,
169
+ ...mask ? {
170
+ maskImage: mask,
171
+ WebkitMaskImage: mask
172
+ } : {}
173
+ }
174
+ }
175
+ );
176
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
177
+ "div",
178
+ {
179
+ className: "h-full w-full",
180
+ style: {
181
+ 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)",
182
+ ...mask ? {
183
+ maskImage: mask,
184
+ WebkitMaskImage: mask
185
+ } : {}
186
+ }
187
+ }
188
+ );
189
+ 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)";
190
+ var dashedGridPattern = (fadeMask) => {
191
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
192
+ return /* @__PURE__ */ jsxRuntime.jsx(
193
+ "div",
194
+ {
195
+ className: "h-full w-full",
196
+ style: {
197
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
198
+ backgroundSize: "20px 20px",
199
+ backgroundPosition: "0 0, 0 0",
200
+ maskImage: mask,
201
+ WebkitMaskImage: mask,
202
+ maskComposite: "intersect",
203
+ WebkitMaskComposite: "source-in"
204
+ }
205
+ }
206
+ );
207
+ };
208
+ var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
209
+ "div",
210
+ {
211
+ className: cn(
212
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
213
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
214
+ ),
215
+ style: {
216
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
217
+ }
218
+ }
219
+ );
220
+ var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
221
+ "div",
222
+ {
223
+ className: cn(
224
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
225
+ position === "left" ? "-left-1/4" : "-right-1/4"
226
+ ),
227
+ style: {
228
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
229
+ }
230
+ }
231
+ );
232
+ var patternOverlays = {
233
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
234
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
235
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
236
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
237
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
238
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
239
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
240
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
241
+ dashedGridBasic: () => dashedGridPattern(),
242
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
243
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
244
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
245
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
246
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
247
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
248
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
249
+ diagonalCrossBasic: () => diagonalCrossPattern(),
250
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
251
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
252
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
253
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
254
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
255
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
256
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
257
+ gridBasic: () => gridPattern(40),
258
+ gridFadeTop: () => gridPattern(32, maskTop),
259
+ gridFadeBottom: () => gridPattern(32, maskBottom),
260
+ gridFadeCenter: () => gridPattern(40, maskCenter),
261
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
262
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
263
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
264
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
265
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
266
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
267
+ gradientGlowTop: () => gradientGlow("top"),
268
+ gradientGlowBottom: () => gradientGlow("bottom"),
269
+ spotlightLeft: () => spotlight("left"),
270
+ spotlightRight: () => spotlight("right")
271
+ };
272
+ var inlinePatternStyles = {
273
+ radialGradientTop: {
274
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
275
+ },
276
+ radialGradientBottom: {
277
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
278
+ }
279
+ };
280
+ function PatternBackground({
281
+ pattern,
282
+ opacity = 0.08,
283
+ className,
284
+ style
285
+ }) {
286
+ if (!pattern) {
287
+ return null;
288
+ }
289
+ if (pattern in inlinePatternStyles) {
290
+ const inlineStyle = inlinePatternStyles[pattern];
291
+ return /* @__PURE__ */ jsxRuntime.jsx(
292
+ "div",
293
+ {
294
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
295
+ style: { ...inlineStyle, opacity, ...style },
296
+ "aria-hidden": "true"
297
+ }
298
+ );
299
+ }
300
+ if (pattern in patternOverlays) {
301
+ const Overlay = patternOverlays[pattern];
302
+ return /* @__PURE__ */ jsxRuntime.jsx(
303
+ "div",
304
+ {
305
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
306
+ style: { opacity, ...style },
307
+ "aria-hidden": "true",
308
+ children: Overlay()
309
+ }
310
+ );
311
+ }
312
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
313
+ return /* @__PURE__ */ jsxRuntime.jsx(
314
+ "div",
315
+ {
316
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
317
+ style: {
318
+ backgroundImage: `url(${patternUrl})`,
319
+ backgroundRepeat: "repeat",
320
+ backgroundSize: "auto",
321
+ opacity,
322
+ ...style
323
+ },
324
+ "aria-hidden": "true"
325
+ }
326
+ );
327
+ }
328
+ var backgroundStyles = {
329
+ default: "bg-background text-foreground",
330
+ white: "bg-white text-dark",
331
+ gray: "bg-muted/30 text-foreground",
332
+ dark: "bg-foreground text-background",
333
+ transparent: "bg-transparent text-foreground",
334
+ gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
335
+ primary: "bg-primary text-primary-foreground",
336
+ secondary: "bg-secondary text-secondary-foreground",
337
+ muted: "bg-muted text-muted-foreground"
338
+ };
339
+ var spacingStyles = {
340
+ none: "py-0 md:py-0",
341
+ sm: "py-12 md:py-16",
342
+ md: "py-16 md:py-24",
343
+ lg: "py-20 md:py-32",
344
+ xl: "py-24 md:py-40"
345
+ };
346
+ var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
347
+ var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
348
+ var Section = React3__namespace.default.forwardRef(
349
+ ({
350
+ id,
351
+ title,
352
+ subtitle,
353
+ children,
354
+ className,
355
+ style,
356
+ background = "default",
357
+ spacing = "lg",
358
+ pattern,
359
+ patternOpacity,
360
+ patternClassName,
361
+ containerClassName,
362
+ containerMaxWidth = "xl",
363
+ ...props
364
+ }, ref) => {
365
+ const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
366
+ return /* @__PURE__ */ jsxRuntime.jsxs(
367
+ "section",
368
+ {
369
+ ref,
370
+ id,
371
+ className: cn(
372
+ "relative",
373
+ pattern ? "overflow-hidden" : null,
374
+ backgroundStyles[background],
375
+ isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
376
+ className
377
+ ),
378
+ style,
379
+ ...props,
380
+ children: [
381
+ /* @__PURE__ */ jsxRuntime.jsx(
382
+ PatternBackground,
383
+ {
384
+ pattern,
385
+ opacity: effectivePatternOpacity,
386
+ className: patternClassName
387
+ }
388
+ ),
389
+ /* @__PURE__ */ jsxRuntime.jsxs(
390
+ Container,
391
+ {
392
+ maxWidth: containerMaxWidth,
393
+ className: cn("relative z-10", containerClassName),
394
+ children: [
395
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-12 text-center md:mb-16", children: [
396
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider text-primary", children: subtitle }),
397
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
398
+ ] }),
399
+ children
400
+ ]
401
+ }
402
+ )
403
+ ]
404
+ }
405
+ );
406
+ }
407
+ );
408
+ Section.displayName = "Section";
409
+ function CarouselFullscreenScrollFx({
410
+ slides,
411
+ slidesSlot,
412
+ className,
413
+ navigationClassName,
414
+ contentClassName,
415
+ subtitleClassName,
416
+ titleClassName,
417
+ descriptionClassName,
418
+ scrollIndicatorClassName,
419
+ counterClassName,
420
+ optixFlowConfig,
421
+ background = "white",
422
+ spacing = "xl",
423
+ pattern,
424
+ patternOpacity
425
+ }) {
426
+ const containerRef = React3__namespace.useRef(null);
427
+ const [activeIndex, setActiveIndex] = React3__namespace.useState(0);
428
+ React3__namespace.useEffect(() => {
429
+ const observers = [];
430
+ slides?.forEach((slide, index) => {
431
+ const element = document.getElementById(`fullscreen-${slide.id}`);
432
+ if (element) {
433
+ const observer = new IntersectionObserver(
434
+ (entries) => {
435
+ entries.forEach((entry) => {
436
+ if (entry.isIntersecting && entry.intersectionRatio > 0.5) {
437
+ setActiveIndex(index);
438
+ }
439
+ });
440
+ },
441
+ { threshold: 0.5 }
442
+ );
443
+ observer.observe(element);
444
+ observers.push(observer);
445
+ }
446
+ });
447
+ return () => {
448
+ observers.forEach((observer) => observer.disconnect());
449
+ };
450
+ }, [slides]);
451
+ return /* @__PURE__ */ jsxRuntime.jsxs(
452
+ Section,
453
+ {
454
+ ref: containerRef,
455
+ background,
456
+ spacing,
457
+ className: cn(className),
458
+ pattern,
459
+ patternOpacity,
460
+ children: [
461
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("fixed right-6 top-1/2 z-50 hidden -translate-y-1/2 flex-col gap-3 lg:flex", navigationClassName), children: slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsx(
462
+ "button",
463
+ {
464
+ onClick: () => {
465
+ const element = document.getElementById(`fullscreen-${slide.id}`);
466
+ element?.scrollIntoView({ behavior: "smooth" });
467
+ },
468
+ className: cn(
469
+ "h-3 w-3 rounded-full border-2 transition-all",
470
+ activeIndex === index ? "scale-125 border-white bg-white" : "border-white/50 bg-transparent hover:border-white"
471
+ ),
472
+ "aria-label": `Go to ${typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`}`
473
+ },
474
+ slide.id
475
+ )) }),
476
+ slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsxs(
477
+ "div",
478
+ {
479
+ id: `fullscreen-${slide.id}`,
480
+ className: cn("relative flex h-screen w-full items-center justify-center overflow-hidden", slide.className),
481
+ children: [
482
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0", children: [
483
+ /* @__PURE__ */ jsxRuntime.jsx(
484
+ img.Img,
485
+ {
486
+ src: slide.image,
487
+ alt: typeof slide.title === "string" ? slide.title : `Slide ${index + 1}`,
488
+ className: cn("h-full w-full object-cover", slide.imageClassName),
489
+ optixFlowConfig
490
+ }
491
+ ),
492
+ /* @__PURE__ */ jsxRuntime.jsx(
493
+ "div",
494
+ {
495
+ className: "absolute inset-0",
496
+ style: {
497
+ backgroundColor: slide.overlayColor || "rgba(0, 0, 0, 0.5)"
498
+ }
499
+ }
500
+ )
501
+ ] }),
502
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative z-10 mx-auto max-w-4xl px-6 text-center text-white", contentClassName), children: [
503
+ slide.subtitle && (typeof slide.subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 text-sm font-medium uppercase tracking-widest text-white/70", subtitleClassName), children: slide.subtitle }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subtitleClassName, children: slide.subtitle })),
504
+ slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("mb-6 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", titleClassName), children: slide.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: slide.title })),
505
+ slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mx-auto max-w-2xl text-lg text-white/80 md:text-xl", descriptionClassName), children: slide.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: slide.description })),
506
+ index < (slides?.length ?? 0) - 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("absolute bottom-8 left-1/2 -translate-x-1/2", scrollIndicatorClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2", children: [
507
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs uppercase tracking-widest text-white/50", children: "Scroll" }),
508
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-px animate-pulse bg-gradient-to-b from-white/50 to-transparent" })
509
+ ] }) })
510
+ ] }),
511
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("absolute bottom-8 right-8 text-sm text-white/50", counterClassName), children: [
512
+ String(index + 1).padStart(2, "0"),
513
+ " /",
514
+ " ",
515
+ String(slides?.length ?? 0).padStart(2, "0")
516
+ ] })
517
+ ]
518
+ },
519
+ slide.id
520
+ ))
521
+ ]
522
+ }
523
+ );
524
+ }
525
+
526
+ exports.CarouselFullscreenScrollFx = CarouselFullscreenScrollFx;
@@ -0,0 +1,122 @@
1
+ import * as React from 'react';
2
+ import { P as PatternName } from './pattern-background-a7gKHzHy.cjs';
3
+ import { f as SectionBackground, g as SectionSpacing } from './community-initiatives-Sm_ZSgyv.cjs';
4
+ import { O as OptixFlowConfig } from './blocks-Cohq4eio.cjs';
5
+ import 'react/jsx-runtime';
6
+ import 'class-variance-authority';
7
+ import './button-variants-lRElsmTc.cjs';
8
+ import 'class-variance-authority/types';
9
+
10
+ /**
11
+ * CarouselFullscreenScrollFx
12
+ *
13
+ * A GSAP-powered fullscreen carousel with scroll-triggered animations,
14
+ * pinned sections, and smooth parallax effects. Features immersive
15
+ * full-viewport slides with overlay content and navigation indicators.
16
+ *
17
+ * Use cases:
18
+ * - Immersive storytelling experiences
19
+ * - Portfolio showcases with dramatic transitions
20
+ * - Product launches with cinematic presentations
21
+ * - Brand story pages with scroll-driven narratives
22
+ */
23
+
24
+ interface FullscreenSlide {
25
+ /**
26
+ * Unique identifier for the slide
27
+ */
28
+ id: string;
29
+ /**
30
+ * Slide title
31
+ */
32
+ title?: React.ReactNode;
33
+ /**
34
+ * Slide subtitle/eyebrow text
35
+ */
36
+ subtitle?: React.ReactNode;
37
+ /**
38
+ * Slide description
39
+ */
40
+ description?: React.ReactNode;
41
+ /**
42
+ * Image source URL
43
+ */
44
+ image: string;
45
+ /**
46
+ * Overlay color (rgba format)
47
+ */
48
+ overlayColor?: string;
49
+ /**
50
+ * Additional CSS classes for the slide
51
+ */
52
+ className?: string;
53
+ /**
54
+ * Additional CSS classes for the image
55
+ */
56
+ imageClassName?: string;
57
+ }
58
+ interface CarouselFullscreenScrollFxProps {
59
+ /**
60
+ * Array of fullscreen slides
61
+ */
62
+ slides?: FullscreenSlide[];
63
+ /**
64
+ * Custom slot for rendering slides (overrides slides array)
65
+ */
66
+ slidesSlot?: React.ReactNode;
67
+ /**
68
+ * Additional CSS classes for the section
69
+ */
70
+ className?: string;
71
+ /**
72
+ * Additional CSS classes for the navigation dots
73
+ */
74
+ navigationClassName?: string;
75
+ /**
76
+ * Additional CSS classes for the content area
77
+ */
78
+ contentClassName?: string;
79
+ /**
80
+ * Additional CSS classes for the subtitle
81
+ */
82
+ subtitleClassName?: string;
83
+ /**
84
+ * Additional CSS classes for the title
85
+ */
86
+ titleClassName?: string;
87
+ /**
88
+ * Additional CSS classes for the description
89
+ */
90
+ descriptionClassName?: string;
91
+ /**
92
+ * Additional CSS classes for the scroll indicator
93
+ */
94
+ scrollIndicatorClassName?: string;
95
+ /**
96
+ * Additional CSS classes for the slide counter
97
+ */
98
+ counterClassName?: string;
99
+ /**
100
+ * OptixFlow image optimization configuration
101
+ */
102
+ optixFlowConfig?: OptixFlowConfig;
103
+ /**
104
+ * Background style for the section
105
+ */
106
+ background?: SectionBackground;
107
+ /**
108
+ * Vertical spacing for the section
109
+ */
110
+ spacing?: SectionSpacing;
111
+ /**
112
+ * Optional background pattern name or URL
113
+ */
114
+ pattern?: PatternName | undefined;
115
+ /**
116
+ * Pattern overlay opacity (0-1)
117
+ */
118
+ patternOpacity?: number;
119
+ }
120
+ declare function CarouselFullscreenScrollFx({ slides, slidesSlot, className, navigationClassName, contentClassName, subtitleClassName, titleClassName, descriptionClassName, scrollIndicatorClassName, counterClassName, optixFlowConfig, background, spacing, pattern, patternOpacity, }: CarouselFullscreenScrollFxProps): React.JSX.Element;
121
+
122
+ export { CarouselFullscreenScrollFx, type CarouselFullscreenScrollFxProps, type FullscreenSlide };