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