@opensite/ui 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/article-breadcrumb-social.cjs +57 -73
  2. package/dist/article-breadcrumb-social.d.cts +2 -24
  3. package/dist/article-breadcrumb-social.d.ts +2 -24
  4. package/dist/article-breadcrumb-social.js +57 -73
  5. package/dist/article-compact-toc.cjs +1 -1
  6. package/dist/article-compact-toc.js +1 -1
  7. package/dist/article-sidebar-sticky.cjs +73 -26
  8. package/dist/article-sidebar-sticky.js +73 -26
  9. package/dist/blog-horizontal-timeline.cjs +7 -4
  10. package/dist/blog-horizontal-timeline.js +7 -4
  11. package/dist/faq-badge-support.cjs +18 -5
  12. package/dist/faq-badge-support.js +18 -5
  13. package/dist/faq-bordered-badge.cjs +23 -7
  14. package/dist/faq-bordered-badge.js +23 -7
  15. package/dist/faq-card-categories.cjs +20 -4
  16. package/dist/faq-card-categories.js +20 -4
  17. package/dist/faq-categorized-sections.cjs +19 -4
  18. package/dist/faq-categorized-sections.js +19 -4
  19. package/dist/faq-centered-accordion.cjs +18 -5
  20. package/dist/faq-centered-accordion.js +18 -5
  21. package/dist/faq-gradient-categories.cjs +19 -4
  22. package/dist/faq-gradient-categories.js +19 -4
  23. package/dist/faq-icon-benefits.cjs +11 -2
  24. package/dist/faq-icon-benefits.js +11 -2
  25. package/dist/faq-muted-cards.cjs +19 -6
  26. package/dist/faq-muted-cards.js +19 -6
  27. package/dist/faq-numbered-grid.cjs +11 -3
  28. package/dist/faq-numbered-grid.js +11 -3
  29. package/dist/faq-numbered-list.cjs +11 -3
  30. package/dist/faq-numbered-list.js +11 -3
  31. package/dist/faq-profile-sidebar.cjs +57 -20
  32. package/dist/faq-profile-sidebar.js +57 -20
  33. package/dist/faq-rounded-cards.cjs +26 -19
  34. package/dist/faq-rounded-cards.js +26 -19
  35. package/dist/faq-sidebar-navigation.cjs +48 -28
  36. package/dist/faq-sidebar-navigation.js +48 -28
  37. package/dist/faq-simple-accordion.cjs +17 -4
  38. package/dist/faq-simple-accordion.js +17 -4
  39. package/dist/faq-split-help.cjs +25 -6
  40. package/dist/faq-split-help.js +25 -6
  41. package/dist/faq-split-hero.cjs +604 -0
  42. package/dist/faq-split-hero.d.cts +116 -0
  43. package/dist/faq-split-hero.d.ts +116 -0
  44. package/dist/faq-split-hero.js +582 -0
  45. package/dist/faq-static-list.cjs +9 -2
  46. package/dist/faq-static-list.js +9 -2
  47. package/dist/feature-accordion-image.cjs +8 -2
  48. package/dist/feature-accordion-image.js +8 -2
  49. package/dist/feature-badge-grid-six.cjs +1 -1
  50. package/dist/feature-badge-grid-six.js +1 -1
  51. package/dist/feature-card-grid-linked.cjs +92 -22
  52. package/dist/feature-card-grid-linked.js +92 -22
  53. package/dist/feature-carousel-progress.cjs +1 -1
  54. package/dist/feature-carousel-progress.js +1 -1
  55. package/dist/feature-checklist-image.cjs +88 -15
  56. package/dist/feature-checklist-image.js +88 -15
  57. package/dist/feature-checklist-three-column.cjs +1 -1
  58. package/dist/feature-checklist-three-column.js +1 -1
  59. package/dist/feature-icon-grid-accent.cjs +50 -8
  60. package/dist/feature-icon-grid-accent.js +50 -8
  61. package/dist/feature-icon-grid-bordered.cjs +84 -14
  62. package/dist/feature-icon-grid-bordered.js +84 -14
  63. package/dist/feature-icon-tabs-content.cjs +217 -84
  64. package/dist/feature-icon-tabs-content.js +217 -84
  65. package/dist/feature-image-overlay-badge.cjs +106 -33
  66. package/dist/feature-image-overlay-badge.js +106 -33
  67. package/dist/feature-numbered-cards.cjs +154 -35
  68. package/dist/feature-numbered-cards.js +154 -35
  69. package/dist/feature-showcase.cjs +66 -71
  70. package/dist/feature-showcase.d.cts +1 -5
  71. package/dist/feature-showcase.d.ts +1 -5
  72. package/dist/feature-showcase.js +67 -72
  73. package/dist/feature-split-image-reverse.cjs +84 -15
  74. package/dist/feature-split-image-reverse.js +84 -15
  75. package/dist/feature-split-image.cjs +87 -15
  76. package/dist/feature-split-image.js +87 -15
  77. package/dist/feature-stats-highlight.cjs +50 -13
  78. package/dist/feature-stats-highlight.js +50 -13
  79. package/dist/feature-tabbed-content-image.cjs +198 -72
  80. package/dist/feature-tabbed-content-image.js +198 -72
  81. package/dist/feature-three-column-values.cjs +67 -14
  82. package/dist/feature-three-column-values.js +67 -14
  83. package/dist/feature-utility-cards-grid.cjs +83 -36
  84. package/dist/feature-utility-cards-grid.js +83 -36
  85. package/dist/navbar-animated-preview.cjs +8 -2
  86. package/dist/navbar-animated-preview.js +8 -2
  87. package/dist/navbar-centered-menu.cjs +8 -2
  88. package/dist/navbar-centered-menu.js +8 -2
  89. package/dist/navbar-dark-icons.cjs +8 -2
  90. package/dist/navbar-dark-icons.js +8 -2
  91. package/dist/navbar-dropdown-menu.cjs +8 -2
  92. package/dist/navbar-dropdown-menu.js +8 -2
  93. package/dist/navbar-education-platform.cjs +8 -2
  94. package/dist/navbar-education-platform.js +8 -2
  95. package/dist/navbar-enterprise-mega.cjs +8 -2
  96. package/dist/navbar-enterprise-mega.js +8 -2
  97. package/dist/navbar-feature-grid.cjs +8 -2
  98. package/dist/navbar-feature-grid.js +8 -2
  99. package/dist/navbar-multi-column-groups.cjs +8 -2
  100. package/dist/navbar-multi-column-groups.js +8 -2
  101. package/dist/navbar-platform-resources.cjs +8 -2
  102. package/dist/navbar-platform-resources.js +8 -2
  103. package/dist/navbar-sidebar-mobile.cjs +8 -2
  104. package/dist/navbar-sidebar-mobile.js +8 -2
  105. package/dist/registry.cjs +1873 -680
  106. package/dist/registry.js +1873 -680
  107. package/package.json +1 -1
@@ -0,0 +1,604 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var img = require('@page-speed/img');
8
+ var AccordionPrimitive = require('@radix-ui/react-accordion');
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 React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+ var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
31
+
32
+ // components/blocks/faq/faq-split-hero.tsx
33
+ function cn(...inputs) {
34
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
35
+ }
36
+ var svgCache = /* @__PURE__ */ new Map();
37
+ function DynamicIcon({
38
+ name,
39
+ size = 28,
40
+ color,
41
+ className,
42
+ alt
43
+ }) {
44
+ const [svgContent, setSvgContent] = React__namespace.useState(null);
45
+ const [isLoading, setIsLoading] = React__namespace.useState(true);
46
+ const [error, setError] = React__namespace.useState(null);
47
+ const { url, iconName } = React__namespace.useMemo(() => {
48
+ const separator = name.includes("/") ? "/" : ":";
49
+ const [prefix, iconName2] = name.split(separator);
50
+ const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}`;
51
+ return {
52
+ url: baseUrl,
53
+ iconName: iconName2
54
+ };
55
+ }, [name, size]);
56
+ React__namespace.useEffect(() => {
57
+ let isMounted = true;
58
+ const fetchSvg = async () => {
59
+ const cached = svgCache.get(url);
60
+ if (cached) {
61
+ if (isMounted) {
62
+ setSvgContent(cached);
63
+ setIsLoading(false);
64
+ }
65
+ return;
66
+ }
67
+ try {
68
+ setIsLoading(true);
69
+ setError(null);
70
+ const response = await fetch(url);
71
+ if (!response.ok) {
72
+ throw new Error(`Failed to fetch icon: ${response.status}`);
73
+ }
74
+ let svg = await response.text();
75
+ svg = processSvgForCurrentColor(svg);
76
+ svgCache.set(url, svg);
77
+ if (isMounted) {
78
+ setSvgContent(svg);
79
+ setIsLoading(false);
80
+ }
81
+ } catch (err) {
82
+ if (isMounted) {
83
+ setError(err instanceof Error ? err.message : "Failed to load icon");
84
+ setIsLoading(false);
85
+ }
86
+ }
87
+ };
88
+ fetchSvg();
89
+ return () => {
90
+ isMounted = false;
91
+ };
92
+ }, [url]);
93
+ if (isLoading) {
94
+ return /* @__PURE__ */ jsxRuntime.jsx(
95
+ "span",
96
+ {
97
+ className: cn("inline-block", className),
98
+ style: { width: size, height: size },
99
+ "aria-hidden": "true"
100
+ }
101
+ );
102
+ }
103
+ if (error || !svgContent) {
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ "span",
106
+ {
107
+ className: cn("inline-block", className),
108
+ style: { width: size, height: size },
109
+ role: "img",
110
+ "aria-label": alt || iconName
111
+ }
112
+ );
113
+ }
114
+ return /* @__PURE__ */ jsxRuntime.jsx(
115
+ "span",
116
+ {
117
+ className: cn("inline-flex items-center justify-center", className),
118
+ style: {
119
+ width: size,
120
+ height: size,
121
+ color: color || "inherit"
122
+ },
123
+ role: "img",
124
+ "aria-label": alt || iconName,
125
+ dangerouslySetInnerHTML: { __html: svgContent }
126
+ }
127
+ );
128
+ }
129
+ function processSvgForCurrentColor(svg) {
130
+ let processed = svg;
131
+ processed = processed.replace(
132
+ /stroke=["'](#000000|#000|black)["']/gi,
133
+ 'stroke="currentColor"'
134
+ );
135
+ processed = processed.replace(
136
+ /fill=["'](#000000|#000|black)["']/gi,
137
+ 'fill="currentColor"'
138
+ );
139
+ return processed;
140
+ }
141
+ function Accordion({
142
+ ...props
143
+ }) {
144
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Root, { "data-slot": "accordion", ...props });
145
+ }
146
+ function AccordionItem({
147
+ className,
148
+ ...props
149
+ }) {
150
+ return /* @__PURE__ */ jsxRuntime.jsx(
151
+ AccordionPrimitive__namespace.Item,
152
+ {
153
+ "data-slot": "accordion-item",
154
+ className: cn("border-b ", className),
155
+ ...props
156
+ }
157
+ );
158
+ }
159
+ function AccordionTrigger({
160
+ className,
161
+ children,
162
+ ...props
163
+ }) {
164
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs(
165
+ AccordionPrimitive__namespace.Trigger,
166
+ {
167
+ "data-slot": "accordion-trigger",
168
+ className: cn(
169
+ "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
170
+ className
171
+ ),
172
+ ...props,
173
+ children: [
174
+ children,
175
+ /* @__PURE__ */ jsxRuntime.jsx(
176
+ DynamicIcon,
177
+ {
178
+ name: "lucide/chevron-down",
179
+ className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200"
180
+ }
181
+ )
182
+ ]
183
+ }
184
+ ) });
185
+ }
186
+ function AccordionContent({
187
+ className,
188
+ children,
189
+ ...props
190
+ }) {
191
+ return /* @__PURE__ */ jsxRuntime.jsx(
192
+ AccordionPrimitive__namespace.Content,
193
+ {
194
+ "data-slot": "accordion-content",
195
+ className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
196
+ ...props,
197
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pt-0 pb-4", className), children })
198
+ }
199
+ );
200
+ }
201
+
202
+ // lib/patternSvgs.ts
203
+ var patternSvgs = {
204
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
205
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
206
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
207
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
208
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
209
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
210
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
211
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
212
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
213
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
214
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
215
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
216
+ };
217
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
218
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
219
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
220
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
221
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
222
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
223
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
224
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
225
+ "svg",
226
+ {
227
+ className: "h-full w-full",
228
+ xmlns: "http://www.w3.org/2000/svg",
229
+ style: mask ? {
230
+ maskImage: mask,
231
+ WebkitMaskImage: mask
232
+ } : void 0,
233
+ children: [
234
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
235
+ "pattern",
236
+ {
237
+ id,
238
+ x: "0",
239
+ y: "0",
240
+ width: "100",
241
+ height: "100",
242
+ patternUnits: "userSpaceOnUse",
243
+ children: [
244
+ /* @__PURE__ */ jsxRuntime.jsx(
245
+ "path",
246
+ {
247
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
248
+ stroke: "hsl(var(--muted))",
249
+ strokeWidth: "1",
250
+ fill: "none"
251
+ }
252
+ ),
253
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
254
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
255
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
256
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
257
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
258
+ ]
259
+ }
260
+ ) }),
261
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
262
+ ]
263
+ }
264
+ );
265
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
266
+ "svg",
267
+ {
268
+ className: "h-full w-full",
269
+ xmlns: "http://www.w3.org/2000/svg",
270
+ style: mask ? {
271
+ maskImage: mask,
272
+ WebkitMaskImage: mask
273
+ } : void 0,
274
+ children: [
275
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
276
+ "pattern",
277
+ {
278
+ id,
279
+ x: "0",
280
+ y: "0",
281
+ width: "40",
282
+ height: "40",
283
+ patternUnits: "userSpaceOnUse",
284
+ children: [
285
+ /* @__PURE__ */ jsxRuntime.jsx(
286
+ "path",
287
+ {
288
+ d: "M0 20h40M20 0v40",
289
+ stroke: "hsl(var(--muted))",
290
+ strokeWidth: "0.5",
291
+ fill: "none"
292
+ }
293
+ ),
294
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
295
+ ]
296
+ }
297
+ ) }),
298
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
299
+ ]
300
+ }
301
+ );
302
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
303
+ "div",
304
+ {
305
+ 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)]",
306
+ style: {
307
+ backgroundSize: `${size}px ${size}px`,
308
+ ...mask ? {
309
+ maskImage: mask,
310
+ WebkitMaskImage: mask
311
+ } : {}
312
+ }
313
+ }
314
+ );
315
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
316
+ "div",
317
+ {
318
+ className: "h-full w-full",
319
+ style: {
320
+ 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)",
321
+ ...mask ? {
322
+ maskImage: mask,
323
+ WebkitMaskImage: mask
324
+ } : {}
325
+ }
326
+ }
327
+ );
328
+ 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)";
329
+ var dashedGridPattern = (fadeMask) => {
330
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
331
+ return /* @__PURE__ */ jsxRuntime.jsx(
332
+ "div",
333
+ {
334
+ className: "h-full w-full",
335
+ style: {
336
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
337
+ backgroundSize: "20px 20px",
338
+ backgroundPosition: "0 0, 0 0",
339
+ maskImage: mask,
340
+ WebkitMaskImage: mask,
341
+ maskComposite: "intersect",
342
+ WebkitMaskComposite: "source-in"
343
+ }
344
+ }
345
+ );
346
+ };
347
+ var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
348
+ "div",
349
+ {
350
+ className: cn(
351
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
352
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
353
+ ),
354
+ style: {
355
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
356
+ }
357
+ }
358
+ );
359
+ var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
360
+ "div",
361
+ {
362
+ className: cn(
363
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
364
+ position === "left" ? "-left-1/4" : "-right-1/4"
365
+ ),
366
+ style: {
367
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
368
+ }
369
+ }
370
+ );
371
+ var patternOverlays = {
372
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
373
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
374
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
375
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
376
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
377
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
378
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
379
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
380
+ dashedGridBasic: () => dashedGridPattern(),
381
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
382
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
383
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
384
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
385
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
386
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
387
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
388
+ diagonalCrossBasic: () => diagonalCrossPattern(),
389
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
390
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
391
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
392
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
393
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
394
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
395
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
396
+ gridBasic: () => gridPattern(40),
397
+ gridFadeTop: () => gridPattern(32, maskTop),
398
+ gridFadeBottom: () => gridPattern(32, maskBottom),
399
+ gridFadeCenter: () => gridPattern(40, maskCenter),
400
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
401
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
402
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
403
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
404
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
405
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
406
+ gradientGlowTop: () => gradientGlow("top"),
407
+ gradientGlowBottom: () => gradientGlow("bottom"),
408
+ spotlightLeft: () => spotlight("left"),
409
+ spotlightRight: () => spotlight("right")
410
+ };
411
+ var inlinePatternStyles = {
412
+ radialGradientTop: {
413
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
414
+ },
415
+ radialGradientBottom: {
416
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
417
+ }
418
+ };
419
+ function PatternBackground({
420
+ pattern,
421
+ opacity = 0.08,
422
+ className,
423
+ style
424
+ }) {
425
+ if (!pattern) {
426
+ return null;
427
+ }
428
+ if (pattern in inlinePatternStyles) {
429
+ const inlineStyle = inlinePatternStyles[pattern];
430
+ return /* @__PURE__ */ jsxRuntime.jsx(
431
+ "div",
432
+ {
433
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
434
+ style: { ...inlineStyle, opacity, ...style },
435
+ "aria-hidden": "true"
436
+ }
437
+ );
438
+ }
439
+ if (pattern in patternOverlays) {
440
+ const Overlay = patternOverlays[pattern];
441
+ return /* @__PURE__ */ jsxRuntime.jsx(
442
+ "div",
443
+ {
444
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
445
+ style: { opacity, ...style },
446
+ "aria-hidden": "true",
447
+ children: Overlay()
448
+ }
449
+ );
450
+ }
451
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
452
+ return /* @__PURE__ */ jsxRuntime.jsx(
453
+ "div",
454
+ {
455
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
456
+ style: {
457
+ backgroundImage: `url(${patternUrl})`,
458
+ backgroundRepeat: "repeat",
459
+ backgroundSize: "auto",
460
+ opacity,
461
+ ...style
462
+ },
463
+ "aria-hidden": "true"
464
+ }
465
+ );
466
+ }
467
+ function FaqSplitHero({
468
+ heading,
469
+ subheading,
470
+ items,
471
+ itemsSlot,
472
+ imageSlot,
473
+ imageSrc,
474
+ imageAlt,
475
+ background = "dark",
476
+ pattern,
477
+ patternOpacity,
478
+ className,
479
+ contentClassName,
480
+ headerClassName,
481
+ headingClassName,
482
+ subheadingClassName,
483
+ accordionClassName,
484
+ accordionItemClassName,
485
+ accordionTriggerClassName,
486
+ accordionContentClassName,
487
+ imageClassName,
488
+ optixFlowConfig,
489
+ directionConfig = { desktop: "mediaRight", mobile: "mediaTop" }
490
+ }) {
491
+ const bgColorClass = React.useMemo(() => {
492
+ switch (background) {
493
+ case "dark":
494
+ return "bg-gray-900 text-white";
495
+ case "gray":
496
+ return "bg-gray-100 text-gray-900";
497
+ case "white":
498
+ return "bg-white text-gray-900";
499
+ default:
500
+ return "bg-background text-foreground";
501
+ }
502
+ }, [background]);
503
+ const desktopOrder = directionConfig.desktop === "mediaRight" ? "lg:flex-row" : "lg:flex-row-reverse";
504
+ const mobileOrder = directionConfig.mobile === "mediaTop" ? "flex-col" : "flex-col-reverse";
505
+ const itemsContent = React.useMemo(() => {
506
+ if (itemsSlot) return itemsSlot;
507
+ if (!items || items.length === 0) return null;
508
+ return /* @__PURE__ */ jsxRuntime.jsx(
509
+ Accordion,
510
+ {
511
+ type: "single",
512
+ collapsible: true,
513
+ className: cn("w-full", accordionClassName),
514
+ children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
515
+ AccordionItem,
516
+ {
517
+ value: item.id,
518
+ className: cn("border-b border-current/20", accordionItemClassName),
519
+ children: [
520
+ /* @__PURE__ */ jsxRuntime.jsx(
521
+ AccordionTrigger,
522
+ {
523
+ className: cn(
524
+ "py-4 text-left text-base font-medium transition-opacity hover:opacity-70 hover:no-underline lg:text-lg",
525
+ accordionTriggerClassName
526
+ ),
527
+ children: item.question
528
+ }
529
+ ),
530
+ /* @__PURE__ */ jsxRuntime.jsx(
531
+ AccordionContent,
532
+ {
533
+ className: cn("pb-4 opacity-80", accordionContentClassName),
534
+ children: item.answer
535
+ }
536
+ )
537
+ ]
538
+ },
539
+ item.id
540
+ ))
541
+ }
542
+ );
543
+ }, [
544
+ itemsSlot,
545
+ items,
546
+ accordionClassName,
547
+ accordionItemClassName,
548
+ accordionTriggerClassName,
549
+ accordionContentClassName
550
+ ]);
551
+ const contentArea = /* @__PURE__ */ jsxRuntime.jsxs(
552
+ "div",
553
+ {
554
+ className: cn(
555
+ "relative flex w-full items-center lg:w-1/2",
556
+ bgColorClass,
557
+ contentClassName
558
+ ),
559
+ children: [
560
+ pattern && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(PatternBackground, { pattern, opacity: patternOpacity }) }),
561
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 w-full px-8 py-16 sm:px-12 sm:py-20 lg:px-16 lg:py-24 xl:px-24", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-xl space-y-8", children: [
562
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-4", headerClassName), children: [
563
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
564
+ "h2",
565
+ {
566
+ className: cn(
567
+ "text-3xl font-bold leading-tight tracking-tight sm:text-4xl lg:text-5xl",
568
+ headingClassName
569
+ ),
570
+ children: heading
571
+ }
572
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
573
+ subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
574
+ "p",
575
+ {
576
+ className: cn(
577
+ "text-base leading-relaxed opacity-80 sm:text-lg",
578
+ subheadingClassName
579
+ ),
580
+ children: subheading
581
+ }
582
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading }))
583
+ ] }),
584
+ itemsContent
585
+ ] }) })
586
+ ]
587
+ }
588
+ );
589
+ const imageArea = imageSlot ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-64 w-full sm:h-96 lg:h-auto lg:w-1/2", children: imageSlot }) : imageSrc ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-64 w-full sm:h-96 lg:h-auto lg:w-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(
590
+ img.Img,
591
+ {
592
+ src: imageSrc,
593
+ alt: imageAlt || "FAQ section image",
594
+ className: cn("h-full w-full object-cover", imageClassName),
595
+ optixFlowConfig
596
+ }
597
+ ) }) : null;
598
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: cn("relative w-full overflow-hidden", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex min-h-screen", mobileOrder, desktopOrder), children: [
599
+ contentArea,
600
+ imageArea
601
+ ] }) });
602
+ }
603
+
604
+ exports.FaqSplitHero = FaqSplitHero;