@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,597 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React3 = require('react');
5
+ var framerMotion = require('framer-motion');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var img = require('@page-speed/img');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
30
+
31
+ // components/blocks/carousel/carousel-progress-slider.tsx
32
+ function cn(...inputs) {
33
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
34
+ }
35
+ var maxWidthStyles = {
36
+ sm: "max-w-screen-sm",
37
+ md: "max-w-screen-md",
38
+ lg: "max-w-screen-lg",
39
+ xl: "max-w-7xl",
40
+ "2xl": "max-w-screen-2xl",
41
+ "4xl": "max-w-[1536px]",
42
+ full: "max-w-full"
43
+ };
44
+ var Container = React3__namespace.default.forwardRef(
45
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
46
+ const Component = as;
47
+ return /* @__PURE__ */ jsxRuntime.jsx(
48
+ Component,
49
+ {
50
+ ref,
51
+ className: cn(
52
+ "mx-auto w-full px-2 sm:px-4 lg:px-8",
53
+ maxWidthStyles[maxWidth],
54
+ className
55
+ ),
56
+ ...props,
57
+ children
58
+ }
59
+ );
60
+ }
61
+ );
62
+ Container.displayName = "Container";
63
+
64
+ // lib/patternSvgs.ts
65
+ var patternSvgs = {
66
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
67
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
68
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
69
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
70
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
71
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
72
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
73
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
74
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
75
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
76
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
77
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
78
+ };
79
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
80
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
81
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
82
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
83
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
84
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
85
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
86
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
87
+ "svg",
88
+ {
89
+ className: "h-full w-full",
90
+ xmlns: "http://www.w3.org/2000/svg",
91
+ style: mask ? {
92
+ maskImage: mask,
93
+ WebkitMaskImage: mask
94
+ } : void 0,
95
+ children: [
96
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
97
+ "pattern",
98
+ {
99
+ id,
100
+ x: "0",
101
+ y: "0",
102
+ width: "100",
103
+ height: "100",
104
+ patternUnits: "userSpaceOnUse",
105
+ children: [
106
+ /* @__PURE__ */ jsxRuntime.jsx(
107
+ "path",
108
+ {
109
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
110
+ stroke: "hsl(var(--muted))",
111
+ strokeWidth: "1",
112
+ fill: "none"
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
116
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
117
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
118
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
119
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
120
+ ]
121
+ }
122
+ ) }),
123
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
124
+ ]
125
+ }
126
+ );
127
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
128
+ "svg",
129
+ {
130
+ className: "h-full w-full",
131
+ xmlns: "http://www.w3.org/2000/svg",
132
+ style: mask ? {
133
+ maskImage: mask,
134
+ WebkitMaskImage: mask
135
+ } : void 0,
136
+ children: [
137
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
138
+ "pattern",
139
+ {
140
+ id,
141
+ x: "0",
142
+ y: "0",
143
+ width: "40",
144
+ height: "40",
145
+ patternUnits: "userSpaceOnUse",
146
+ children: [
147
+ /* @__PURE__ */ jsxRuntime.jsx(
148
+ "path",
149
+ {
150
+ d: "M0 20h40M20 0v40",
151
+ stroke: "hsl(var(--muted))",
152
+ strokeWidth: "0.5",
153
+ fill: "none"
154
+ }
155
+ ),
156
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
157
+ ]
158
+ }
159
+ ) }),
160
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
161
+ ]
162
+ }
163
+ );
164
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
165
+ "div",
166
+ {
167
+ 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)]",
168
+ style: {
169
+ backgroundSize: `${size}px ${size}px`,
170
+ ...mask ? {
171
+ maskImage: mask,
172
+ WebkitMaskImage: mask
173
+ } : {}
174
+ }
175
+ }
176
+ );
177
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
178
+ "div",
179
+ {
180
+ className: "h-full w-full",
181
+ style: {
182
+ 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)",
183
+ ...mask ? {
184
+ maskImage: mask,
185
+ WebkitMaskImage: mask
186
+ } : {}
187
+ }
188
+ }
189
+ );
190
+ 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)";
191
+ var dashedGridPattern = (fadeMask) => {
192
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
193
+ return /* @__PURE__ */ jsxRuntime.jsx(
194
+ "div",
195
+ {
196
+ className: "h-full w-full",
197
+ style: {
198
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
199
+ backgroundSize: "20px 20px",
200
+ backgroundPosition: "0 0, 0 0",
201
+ maskImage: mask,
202
+ WebkitMaskImage: mask,
203
+ maskComposite: "intersect",
204
+ WebkitMaskComposite: "source-in"
205
+ }
206
+ }
207
+ );
208
+ };
209
+ var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
210
+ "div",
211
+ {
212
+ className: cn(
213
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
214
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
215
+ ),
216
+ style: {
217
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
218
+ }
219
+ }
220
+ );
221
+ var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
222
+ "div",
223
+ {
224
+ className: cn(
225
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
226
+ position === "left" ? "-left-1/4" : "-right-1/4"
227
+ ),
228
+ style: {
229
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
230
+ }
231
+ }
232
+ );
233
+ var patternOverlays = {
234
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
235
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
236
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
237
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
238
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
239
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
240
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
241
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
242
+ dashedGridBasic: () => dashedGridPattern(),
243
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
244
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
245
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
246
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
247
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
248
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
249
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
250
+ diagonalCrossBasic: () => diagonalCrossPattern(),
251
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
252
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
253
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
254
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
255
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
256
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
257
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
258
+ gridBasic: () => gridPattern(40),
259
+ gridFadeTop: () => gridPattern(32, maskTop),
260
+ gridFadeBottom: () => gridPattern(32, maskBottom),
261
+ gridFadeCenter: () => gridPattern(40, maskCenter),
262
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
263
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
264
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
265
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
266
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
267
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
268
+ gradientGlowTop: () => gradientGlow("top"),
269
+ gradientGlowBottom: () => gradientGlow("bottom"),
270
+ spotlightLeft: () => spotlight("left"),
271
+ spotlightRight: () => spotlight("right")
272
+ };
273
+ var inlinePatternStyles = {
274
+ radialGradientTop: {
275
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
276
+ },
277
+ radialGradientBottom: {
278
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
279
+ }
280
+ };
281
+ function PatternBackground({
282
+ pattern,
283
+ opacity = 0.08,
284
+ className,
285
+ style
286
+ }) {
287
+ if (!pattern) {
288
+ return null;
289
+ }
290
+ if (pattern in inlinePatternStyles) {
291
+ const inlineStyle = inlinePatternStyles[pattern];
292
+ return /* @__PURE__ */ jsxRuntime.jsx(
293
+ "div",
294
+ {
295
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
296
+ style: { ...inlineStyle, opacity, ...style },
297
+ "aria-hidden": "true"
298
+ }
299
+ );
300
+ }
301
+ if (pattern in patternOverlays) {
302
+ const Overlay = patternOverlays[pattern];
303
+ return /* @__PURE__ */ jsxRuntime.jsx(
304
+ "div",
305
+ {
306
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
307
+ style: { opacity, ...style },
308
+ "aria-hidden": "true",
309
+ children: Overlay()
310
+ }
311
+ );
312
+ }
313
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
314
+ return /* @__PURE__ */ jsxRuntime.jsx(
315
+ "div",
316
+ {
317
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
318
+ style: {
319
+ backgroundImage: `url(${patternUrl})`,
320
+ backgroundRepeat: "repeat",
321
+ backgroundSize: "auto",
322
+ opacity,
323
+ ...style
324
+ },
325
+ "aria-hidden": "true"
326
+ }
327
+ );
328
+ }
329
+ var backgroundStyles = {
330
+ default: "bg-background text-foreground",
331
+ white: "bg-white text-dark",
332
+ gray: "bg-muted/30 text-foreground",
333
+ dark: "bg-foreground text-background",
334
+ transparent: "bg-transparent text-foreground",
335
+ gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
336
+ primary: "bg-primary text-primary-foreground",
337
+ secondary: "bg-secondary text-secondary-foreground",
338
+ muted: "bg-muted text-muted-foreground"
339
+ };
340
+ var spacingStyles = {
341
+ none: "py-0 md:py-0",
342
+ sm: "py-12 md:py-16",
343
+ md: "py-16 md:py-24",
344
+ lg: "py-20 md:py-32",
345
+ xl: "py-24 md:py-40"
346
+ };
347
+ var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
348
+ var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
349
+ var Section = React3__namespace.default.forwardRef(
350
+ ({
351
+ id,
352
+ title,
353
+ subtitle,
354
+ children,
355
+ className,
356
+ style,
357
+ background = "default",
358
+ spacing = "lg",
359
+ pattern,
360
+ patternOpacity,
361
+ patternClassName,
362
+ containerClassName,
363
+ containerMaxWidth = "xl",
364
+ ...props
365
+ }, ref) => {
366
+ const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
367
+ return /* @__PURE__ */ jsxRuntime.jsxs(
368
+ "section",
369
+ {
370
+ ref,
371
+ id,
372
+ className: cn(
373
+ "relative",
374
+ pattern ? "overflow-hidden" : null,
375
+ backgroundStyles[background],
376
+ isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
377
+ className
378
+ ),
379
+ style,
380
+ ...props,
381
+ children: [
382
+ /* @__PURE__ */ jsxRuntime.jsx(
383
+ PatternBackground,
384
+ {
385
+ pattern,
386
+ opacity: effectivePatternOpacity,
387
+ className: patternClassName
388
+ }
389
+ ),
390
+ /* @__PURE__ */ jsxRuntime.jsxs(
391
+ Container,
392
+ {
393
+ maxWidth: containerMaxWidth,
394
+ className: cn("relative z-10", containerClassName),
395
+ children: [
396
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-12 text-center md:mb-16", children: [
397
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider text-primary", children: subtitle }),
398
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
399
+ ] }),
400
+ children
401
+ ]
402
+ }
403
+ )
404
+ ]
405
+ }
406
+ );
407
+ }
408
+ );
409
+ Section.displayName = "Section";
410
+ var ProgressSliderContext = React3__namespace.createContext(void 0);
411
+ function useProgressSliderContext() {
412
+ const context = React3__namespace.useContext(ProgressSliderContext);
413
+ if (!context) {
414
+ throw new Error(
415
+ "useProgressSliderContext must be used within a ProgressSlider"
416
+ );
417
+ }
418
+ return context;
419
+ }
420
+ function SliderBtn({
421
+ children,
422
+ value,
423
+ className,
424
+ progressBarClass
425
+ }) {
426
+ const { active, progress, handleButtonClick, vertical } = useProgressSliderContext();
427
+ return /* @__PURE__ */ jsxRuntime.jsxs(
428
+ "button",
429
+ {
430
+ className: cn(
431
+ "relative",
432
+ active === value ? "opacity-100" : "opacity-50",
433
+ className
434
+ ),
435
+ onClick: () => handleButtonClick(value),
436
+ children: [
437
+ children,
438
+ /* @__PURE__ */ jsxRuntime.jsx(
439
+ "div",
440
+ {
441
+ className: "absolute inset-0 -z-10 max-h-full max-w-full overflow-hidden",
442
+ role: "progressbar",
443
+ "aria-valuenow": active === value ? progress : 0,
444
+ children: /* @__PURE__ */ jsxRuntime.jsx(
445
+ "span",
446
+ {
447
+ className: cn("absolute left-0", progressBarClass),
448
+ style: {
449
+ [vertical ? "height" : "width"]: active === value ? `${progress}%` : "0%"
450
+ }
451
+ }
452
+ )
453
+ }
454
+ )
455
+ ]
456
+ }
457
+ );
458
+ }
459
+ function SliderWrapper({ children, value, className }) {
460
+ const { active } = useProgressSliderContext();
461
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "popLayout", children: active === value && /* @__PURE__ */ jsxRuntime.jsx(
462
+ framerMotion.motion.div,
463
+ {
464
+ initial: { opacity: 0 },
465
+ animate: { opacity: 1 },
466
+ exit: { opacity: 0 },
467
+ className: cn("", className),
468
+ children
469
+ },
470
+ value
471
+ ) });
472
+ }
473
+ function CarouselProgressSlider({
474
+ slides,
475
+ slidesSlot,
476
+ duration = 5e3,
477
+ fastDuration = 400,
478
+ vertical = false,
479
+ className,
480
+ containerClassName,
481
+ contentClassName,
482
+ imageClassName,
483
+ navigationClassName,
484
+ buttonClassName,
485
+ progressBarClassName,
486
+ optixFlowConfig,
487
+ background = "white",
488
+ spacing = "xl",
489
+ pattern,
490
+ patternOpacity
491
+ }) {
492
+ const [active, setActive] = React3__namespace.useState(slides?.[0]?.id ?? "");
493
+ const [progress, setProgress] = React3__namespace.useState(0);
494
+ const [isFastForward, setIsFastForward] = React3__namespace.useState(false);
495
+ const frame = React3__namespace.useRef(0);
496
+ const firstFrameTime = React3__namespace.useRef(performance.now());
497
+ const targetValue = React3__namespace.useRef(null);
498
+ const sliderValues = React3__namespace.useMemo(
499
+ () => slides?.map((slide) => slide.id),
500
+ [slides]
501
+ );
502
+ React3__namespace.useEffect(() => {
503
+ if ((sliderValues?.length ?? 0) > 0) {
504
+ firstFrameTime.current = performance.now();
505
+ frame.current = requestAnimationFrame(animate);
506
+ }
507
+ return () => {
508
+ cancelAnimationFrame(frame.current);
509
+ };
510
+ }, [sliderValues, active, isFastForward]);
511
+ const animate = (now) => {
512
+ const currentDuration = isFastForward ? fastDuration : duration;
513
+ const elapsedTime = now - firstFrameTime.current;
514
+ const timeFraction = elapsedTime / currentDuration;
515
+ if (timeFraction <= 1) {
516
+ setProgress(
517
+ isFastForward ? progress + (100 - progress) * timeFraction : timeFraction * 100
518
+ );
519
+ frame.current = requestAnimationFrame(animate);
520
+ } else {
521
+ if (isFastForward) {
522
+ setIsFastForward(false);
523
+ if (targetValue.current !== null) {
524
+ setActive(targetValue.current);
525
+ targetValue.current = null;
526
+ }
527
+ } else {
528
+ const currentIndex = sliderValues?.indexOf(active) ?? -1;
529
+ const nextIndex = (currentIndex + 1) % (sliderValues?.length ?? 1);
530
+ const nextValue = sliderValues?.[nextIndex];
531
+ if (nextValue) setActive(nextValue);
532
+ }
533
+ setProgress(0);
534
+ firstFrameTime.current = performance.now();
535
+ }
536
+ };
537
+ const handleButtonClick = (value) => {
538
+ if (value !== active) {
539
+ const elapsedTime = performance.now() - firstFrameTime.current;
540
+ const currentProgress = elapsedTime / duration * 100;
541
+ setProgress(currentProgress);
542
+ targetValue.current = value;
543
+ setIsFastForward(true);
544
+ firstFrameTime.current = performance.now();
545
+ }
546
+ };
547
+ return /* @__PURE__ */ jsxRuntime.jsx(
548
+ ProgressSliderContext.Provider,
549
+ {
550
+ value: { active, progress, handleButtonClick, vertical },
551
+ children: /* @__PURE__ */ jsxRuntime.jsx(
552
+ Section,
553
+ {
554
+ background,
555
+ spacing,
556
+ className: cn(className),
557
+ pattern,
558
+ patternOpacity,
559
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container mx-auto px-4", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-8 lg:grid-cols-2", contentClassName), children: [
560
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative min-h-[300px]", imageClassName), children: slidesSlot ? slidesSlot : slides?.map((slide) => /* @__PURE__ */ jsxRuntime.jsx(
561
+ SliderWrapper,
562
+ {
563
+ value: slide.id,
564
+ className: cn("absolute inset-0", slide.className),
565
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
566
+ img.Img,
567
+ {
568
+ src: slide.image,
569
+ alt: typeof slide.title === "string" ? slide.title : `Slide ${slide.id}`,
570
+ className: cn("h-full w-full object-cover", slide.imageClassName),
571
+ optixFlowConfig
572
+ }
573
+ ) })
574
+ },
575
+ slide.id
576
+ )) }),
577
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col justify-center gap-4", navigationClassName), children: slides?.map((slide) => /* @__PURE__ */ jsxRuntime.jsxs(
578
+ SliderBtn,
579
+ {
580
+ value: slide.id,
581
+ className: cn("rounded-lg border p-4 text-left transition-colors hover:bg-muted", buttonClassName),
582
+ progressBarClass: cn("bottom-0 h-1 bg-primary", progressBarClassName),
583
+ children: [
584
+ slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold", children: slide.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: slide.title })),
585
+ slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: slide.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1", children: slide.description }))
586
+ ]
587
+ },
588
+ slide.id
589
+ )) })
590
+ ] }) })
591
+ }
592
+ )
593
+ }
594
+ );
595
+ }
596
+
597
+ exports.CarouselProgressSlider = CarouselProgressSlider;