@caffeinebounce/ui 0.62.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/FinancialStatementTable-BNUrdTU4.d.cts +249 -0
  4. package/dist/FinancialStatementTable-BNUrdTU4.d.ts +249 -0
  5. package/dist/NewsletterSignup-BPreFi5W.d.cts +37 -0
  6. package/dist/NewsletterSignup-BPreFi5W.d.ts +37 -0
  7. package/dist/TestimonialsSection-DtPu2OeR.d.ts +736 -0
  8. package/dist/TestimonialsSection-z-yotRfv.d.cts +736 -0
  9. package/dist/UnifiedTableControls-CG299y9h.d.ts +1233 -0
  10. package/dist/UnifiedTableControls-CIjRpNhy.d.cts +1233 -0
  11. package/dist/blog.d.cts +99 -0
  12. package/dist/blog.d.ts +99 -0
  13. package/dist/blog.js +292 -0
  14. package/dist/blog.mjs +279 -0
  15. package/dist/button-BHnoRUkF.d.cts +34 -0
  16. package/dist/button-BHnoRUkF.d.ts +34 -0
  17. package/dist/charts.d.cts +80 -0
  18. package/dist/charts.d.ts +80 -0
  19. package/dist/charts.js +19 -0
  20. package/dist/charts.mjs +2 -0
  21. package/dist/chunk-33JR5SYE.js +44 -0
  22. package/dist/chunk-3NDB4YPC.js +247 -0
  23. package/dist/chunk-5RW4PYZ6.js +1504 -0
  24. package/dist/chunk-5THF4YP6.mjs +155 -0
  25. package/dist/chunk-6BUBNZPG.mjs +164 -0
  26. package/dist/chunk-6DVWMJ3H.mjs +7029 -0
  27. package/dist/chunk-6TGV2DNP.js +120 -0
  28. package/dist/chunk-72JGQ7IJ.mjs +1498 -0
  29. package/dist/chunk-7DHKQODW.mjs +2932 -0
  30. package/dist/chunk-7IKHZKAC.js +160 -0
  31. package/dist/chunk-ADIDI7AJ.js +11 -0
  32. package/dist/chunk-BFWX5GJZ.mjs +940 -0
  33. package/dist/chunk-BMFQG6RA.mjs +5537 -0
  34. package/dist/chunk-C4UT5V3P.js +65 -0
  35. package/dist/chunk-CC4KUIKC.js +2004 -0
  36. package/dist/chunk-D3QXPL47.mjs +1814 -0
  37. package/dist/chunk-DQWHYBV2.js +36 -0
  38. package/dist/chunk-E42B4GSB.js +993 -0
  39. package/dist/chunk-ESZ7CBA2.js +1007 -0
  40. package/dist/chunk-EYJJQVV4.js +111 -0
  41. package/dist/chunk-FRRS2YZH.mjs +129 -0
  42. package/dist/chunk-G5TQWWQA.mjs +37 -0
  43. package/dist/chunk-GAIQJCAZ.js +5612 -0
  44. package/dist/chunk-GMBGWOCR.mjs +48 -0
  45. package/dist/chunk-GUSTCU2W.mjs +105 -0
  46. package/dist/chunk-HBLKVQIQ.mjs +23 -0
  47. package/dist/chunk-HMAMMC72.js +26 -0
  48. package/dist/chunk-IMKLN273.mjs +9 -0
  49. package/dist/chunk-J6OLBSZR.js +250 -0
  50. package/dist/chunk-JAE45W2T.js +28 -0
  51. package/dist/chunk-JORVSG52.js +606 -0
  52. package/dist/chunk-KB7UXIQZ.mjs +984 -0
  53. package/dist/chunk-KGGQ5NZV.js +186 -0
  54. package/dist/chunk-KHCC5UKW.mjs +22 -0
  55. package/dist/chunk-KRRIRS6A.mjs +1945 -0
  56. package/dist/chunk-LQCVRWVF.js +48 -0
  57. package/dist/chunk-MHZXUOGN.mjs +168 -0
  58. package/dist/chunk-MPZFPU4X.js +349 -0
  59. package/dist/chunk-MVYRNJA6.js +74 -0
  60. package/dist/chunk-N6AFNFZR.mjs +565 -0
  61. package/dist/chunk-OFQLWSUR.mjs +214 -0
  62. package/dist/chunk-OLAAXLXY.mjs +219 -0
  63. package/dist/chunk-OZZWDIOY.js +1859 -0
  64. package/dist/chunk-PZRI43EZ.js +111 -0
  65. package/dist/chunk-Q256HRYD.js +176 -0
  66. package/dist/chunk-Q52ZEL62.mjs +223 -0
  67. package/dist/chunk-R26Y7LGJ.js +142 -0
  68. package/dist/chunk-RBUYW6QQ.js +39 -0
  69. package/dist/chunk-RVEFPVZF.mjs +43 -0
  70. package/dist/chunk-SORWLKOK.js +96 -0
  71. package/dist/chunk-STEP6C4C.mjs +33 -0
  72. package/dist/chunk-T5R6HUDG.mjs +22 -0
  73. package/dist/chunk-T6ZBA6VJ.js +7109 -0
  74. package/dist/chunk-UM7WMXIU.js +2995 -0
  75. package/dist/chunk-VBD4Q5LL.mjs +117 -0
  76. package/dist/chunk-WOITB4JL.js +195 -0
  77. package/dist/chunk-YKZEKJMZ.mjs +71 -0
  78. package/dist/chunk-YL7RZRHM.mjs +103 -0
  79. package/dist/chunk-YSLD2HLP.mjs +346 -0
  80. package/dist/chunk-ZFLZA7UP.mjs +140 -0
  81. package/dist/chunk-ZKUIUE7W.mjs +26 -0
  82. package/dist/chunk-ZOA7B32D.js +248 -0
  83. package/dist/data-table.d.cts +46 -0
  84. package/dist/data-table.d.ts +46 -0
  85. package/dist/data-table.js +270 -0
  86. package/dist/data-table.mjs +13 -0
  87. package/dist/editor.d.cts +89 -0
  88. package/dist/editor.d.ts +89 -0
  89. package/dist/editor.js +10 -0
  90. package/dist/editor.mjs +1 -0
  91. package/dist/forms.d.cts +142 -0
  92. package/dist/forms.d.ts +142 -0
  93. package/dist/forms.js +24 -0
  94. package/dist/forms.mjs +11 -0
  95. package/dist/hooks-8ORd7T1A.d.cts +751 -0
  96. package/dist/hooks-B2jU1GVT.d.ts +751 -0
  97. package/dist/hooks.d.cts +6 -0
  98. package/dist/hooks.d.ts +6 -0
  99. package/dist/hooks.js +99 -0
  100. package/dist/hooks.mjs +10 -0
  101. package/dist/index.d.cts +3141 -0
  102. package/dist/index.d.ts +3141 -0
  103. package/dist/index.js +7332 -0
  104. package/dist/index.mjs +5876 -0
  105. package/dist/layouts-DPfDDF53.d.cts +1001 -0
  106. package/dist/layouts-DPfDDF53.d.ts +1001 -0
  107. package/dist/layouts.d.cts +4 -0
  108. package/dist/layouts.d.ts +4 -0
  109. package/dist/layouts.js +100 -0
  110. package/dist/layouts.mjs +11 -0
  111. package/dist/marketing-3d.d.cts +51 -0
  112. package/dist/marketing-3d.d.ts +51 -0
  113. package/dist/marketing-3d.js +553 -0
  114. package/dist/marketing-3d.mjs +526 -0
  115. package/dist/marketing.d.cts +583 -0
  116. package/dist/marketing.d.ts +583 -0
  117. package/dist/marketing.js +299 -0
  118. package/dist/marketing.mjs +10 -0
  119. package/dist/media.d.cts +29 -0
  120. package/dist/media.d.ts +29 -0
  121. package/dist/media.js +189 -0
  122. package/dist/media.mjs +182 -0
  123. package/dist/navigation.d.cts +591 -0
  124. package/dist/navigation.d.ts +591 -0
  125. package/dist/navigation.js +108 -0
  126. package/dist/navigation.mjs +15 -0
  127. package/dist/portal.d.cts +58 -0
  128. package/dist/portal.d.ts +58 -0
  129. package/dist/portal.js +403 -0
  130. package/dist/portal.mjs +395 -0
  131. package/dist/primitives.d.cts +508 -0
  132. package/dist/primitives.d.ts +508 -0
  133. package/dist/primitives.js +295 -0
  134. package/dist/primitives.mjs +14 -0
  135. package/dist/settings.d.cts +216 -0
  136. package/dist/settings.d.ts +216 -0
  137. package/dist/settings.js +34 -0
  138. package/dist/settings.mjs +9 -0
  139. package/dist/shared-Dqn36QHZ.d.cts +4 -0
  140. package/dist/shared-Dqn36QHZ.d.ts +4 -0
  141. package/dist/styles.css +1213 -0
  142. package/package.json +189 -0
  143. package/styles.css +1 -0
@@ -0,0 +1,526 @@
1
+ import { cx, sectionToneClasses, sectionPaddingClasses } from './chunk-T5R6HUDG.mjs';
2
+ import { Button } from './chunk-VBD4Q5LL.mjs';
3
+ import './chunk-MHZXUOGN.mjs';
4
+ import { cn } from './chunk-IMKLN273.mjs';
5
+ import { Canvas, useThree, useFrame } from '@react-three/fiber';
6
+ import React, { useState, useEffect, useRef, useMemo } from 'react';
7
+ import * as THREE from 'three';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+ import { useMotionValue, motion, useMotionTemplate } from 'motion/react';
10
+
11
+ var CanvasRevealEffect = ({
12
+ animationSpeed = 0.4,
13
+ opacities = [0.3, 0.3, 0.3, 0.5, 0.5, 0.5, 0.8, 0.8, 0.8, 1],
14
+ colors = [[0, 255, 255]],
15
+ containerClassName,
16
+ dotSize,
17
+ showGradient = true
18
+ }) => {
19
+ return /* @__PURE__ */ jsxs(
20
+ "div",
21
+ {
22
+ className: cn("h-full relative w-full", containerClassName),
23
+ style: { backgroundColor: "transparent" },
24
+ children: [
25
+ /* @__PURE__ */ jsx("div", { className: "h-full w-full", children: /* @__PURE__ */ jsx(
26
+ DotMatrix,
27
+ {
28
+ colors: colors ?? [[0, 255, 255]],
29
+ dotSize: dotSize ?? 3,
30
+ opacities: opacities ?? [0.3, 0.3, 0.3, 0.5, 0.5, 0.5, 0.8, 0.8, 0.8, 1],
31
+ shader: `
32
+ float animation_speed_factor = ${animationSpeed.toFixed(1)};
33
+ float intro_offset = distance(u_resolution / 2.0 / u_total_size, st2) * 0.01 + (random(st2) * 0.15);
34
+ opacity *= step(intro_offset, u_time * animation_speed_factor);
35
+ opacity *= clamp((1.0 - step(intro_offset + 0.1, u_time * animation_speed_factor)) * 1.25, 1.0, 1.25);
36
+ `,
37
+ center: ["x", "y"]
38
+ }
39
+ ) }),
40
+ showGradient && /* @__PURE__ */ jsx(
41
+ "div",
42
+ {
43
+ className: "absolute inset-0",
44
+ style: {
45
+ background: "linear-gradient(to top, var(--color-card, hsl(var(--card))), transparent 84%)"
46
+ }
47
+ }
48
+ )
49
+ ]
50
+ }
51
+ );
52
+ };
53
+ var DotMatrix = ({
54
+ colors = [[0, 0, 0]],
55
+ opacities = [0.04, 0.04, 0.04, 0.04, 0.04, 0.08, 0.08, 0.08, 0.08, 0.14],
56
+ totalSize = 4,
57
+ dotSize = 2,
58
+ shader = "",
59
+ center = ["x", "y"]
60
+ }) => {
61
+ const uniforms = React.useMemo(() => {
62
+ let colorsArray = [
63
+ colors[0],
64
+ colors[0],
65
+ colors[0],
66
+ colors[0],
67
+ colors[0],
68
+ colors[0]
69
+ ];
70
+ if (colors.length === 2) {
71
+ colorsArray = [
72
+ colors[0],
73
+ colors[0],
74
+ colors[0],
75
+ colors[1],
76
+ colors[1],
77
+ colors[1]
78
+ ];
79
+ } else if (colors.length === 3) {
80
+ colorsArray = [
81
+ colors[0],
82
+ colors[0],
83
+ colors[1],
84
+ colors[1],
85
+ colors[2],
86
+ colors[2]
87
+ ];
88
+ }
89
+ return {
90
+ u_colors: {
91
+ value: colorsArray.map((color) => [
92
+ color[0] / 255,
93
+ color[1] / 255,
94
+ color[2] / 255
95
+ ]),
96
+ type: "uniform3fv"
97
+ },
98
+ u_opacities: {
99
+ value: opacities,
100
+ type: "uniform1fv"
101
+ },
102
+ u_total_size: {
103
+ value: totalSize,
104
+ type: "uniform1f"
105
+ },
106
+ u_dot_size: {
107
+ value: dotSize,
108
+ type: "uniform1f"
109
+ }
110
+ };
111
+ }, [colors, opacities, totalSize, dotSize]);
112
+ return /* @__PURE__ */ jsx(
113
+ Shader,
114
+ {
115
+ source: `
116
+ precision mediump float;
117
+ in vec2 fragCoord;
118
+
119
+ uniform float u_time;
120
+ uniform float u_opacities[10];
121
+ uniform vec3 u_colors[6];
122
+ uniform float u_total_size;
123
+ uniform float u_dot_size;
124
+ uniform vec2 u_resolution;
125
+ out vec4 fragColor;
126
+ float PHI = 1.61803398874989484820459;
127
+ float random(vec2 xy) {
128
+ return fract(tan(distance(xy * PHI, xy) * 0.5) * xy.x);
129
+ }
130
+ float map(float value, float min1, float max1, float min2, float max2) {
131
+ return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
132
+ }
133
+ void main() {
134
+ vec2 st = fragCoord.xy;
135
+ ${center.includes("x") ? "st.x -= abs(floor((mod(u_resolution.x, u_total_size) - u_dot_size) * 0.5));" : ""}
136
+ ${center.includes("y") ? "st.y -= abs(floor((mod(u_resolution.y, u_total_size) - u_dot_size) * 0.5));" : ""}
137
+ float opacity = step(0.0, st.x);
138
+ opacity *= step(0.0, st.y);
139
+
140
+ vec2 st2 = vec2(int(st.x / u_total_size), int(st.y / u_total_size));
141
+
142
+ float frequency = 5.0;
143
+ float show_offset = random(st2);
144
+ float rand = random(st2 * floor((u_time / frequency) + show_offset + frequency) + 1.0);
145
+ opacity *= u_opacities[int(rand * 10.0)];
146
+ opacity *= 1.0 - step(u_dot_size / u_total_size, fract(st.x / u_total_size));
147
+ opacity *= 1.0 - step(u_dot_size / u_total_size, fract(st.y / u_total_size));
148
+
149
+ vec3 color = u_colors[int(show_offset * 6.0)];
150
+
151
+ ${shader}
152
+
153
+ fragColor = vec4(color, opacity);
154
+ fragColor.rgb *= fragColor.a;
155
+ }`,
156
+ uniforms,
157
+ maxFps: 60
158
+ }
159
+ );
160
+ };
161
+ var ShaderMaterial2 = ({
162
+ source,
163
+ uniforms,
164
+ maxFps = 60
165
+ }) => {
166
+ const { size } = useThree();
167
+ const ref = useRef(null);
168
+ let lastFrameTime = 0;
169
+ useFrame((state) => {
170
+ if (!ref.current) return;
171
+ const timestamp = "elapsed" in state ? state.elapsed : state.clock?.getElapsedTime?.() ?? 0;
172
+ if (timestamp - lastFrameTime < 1 / maxFps) {
173
+ return;
174
+ }
175
+ lastFrameTime = timestamp;
176
+ const material2 = ref.current.material;
177
+ const timeLocation = material2.uniforms.u_time;
178
+ timeLocation.value = timestamp;
179
+ });
180
+ const getUniforms = () => {
181
+ const preparedUniforms = {};
182
+ for (const uniformName in uniforms) {
183
+ const uniform = uniforms[uniformName];
184
+ switch (uniform.type) {
185
+ case "uniform1f":
186
+ preparedUniforms[uniformName] = { value: uniform.value, type: "1f" };
187
+ break;
188
+ case "uniform3f":
189
+ preparedUniforms[uniformName] = {
190
+ value: new THREE.Vector3().fromArray(uniform.value),
191
+ type: "3f"
192
+ };
193
+ break;
194
+ case "uniform1fv":
195
+ preparedUniforms[uniformName] = { value: uniform.value, type: "1fv" };
196
+ break;
197
+ case "uniform3fv":
198
+ preparedUniforms[uniformName] = {
199
+ value: uniform.value.map(
200
+ (v) => new THREE.Vector3().fromArray(v)
201
+ ),
202
+ type: "3fv"
203
+ };
204
+ break;
205
+ case "uniform2f":
206
+ preparedUniforms[uniformName] = {
207
+ value: new THREE.Vector2().fromArray(uniform.value),
208
+ type: "2f"
209
+ };
210
+ break;
211
+ default:
212
+ console.error(`Invalid uniform type for '${uniformName}'.`);
213
+ break;
214
+ }
215
+ }
216
+ preparedUniforms["u_time"] = { value: 0, type: "1f" };
217
+ preparedUniforms["u_resolution"] = {
218
+ value: new THREE.Vector2(size.width * 2, size.height * 2)
219
+ };
220
+ return preparedUniforms;
221
+ };
222
+ const material = useMemo(() => {
223
+ const materialObject = new THREE.ShaderMaterial({
224
+ vertexShader: `
225
+ precision mediump float;
226
+ in vec2 coordinates;
227
+ uniform vec2 u_resolution;
228
+ out vec2 fragCoord;
229
+ void main(){
230
+ float x = position.x;
231
+ float y = position.y;
232
+ gl_Position = vec4(x, y, 0.0, 1.0);
233
+ fragCoord = (position.xy + vec2(1.0)) * 0.5 * u_resolution;
234
+ fragCoord.y = u_resolution.y - fragCoord.y;
235
+ }
236
+ `,
237
+ fragmentShader: source,
238
+ uniforms: getUniforms(),
239
+ glslVersion: THREE.GLSL3,
240
+ blending: THREE.CustomBlending,
241
+ blendSrc: THREE.SrcAlphaFactor,
242
+ blendDst: THREE.OneFactor
243
+ });
244
+ return materialObject;
245
+ }, [size.width, size.height, source]);
246
+ return React.createElement(
247
+ "mesh",
248
+ { ref },
249
+ React.createElement("planeGeometry", { args: [2, 2] }),
250
+ React.createElement("primitive", {
251
+ object: material,
252
+ attach: "material"
253
+ })
254
+ );
255
+ };
256
+ var Shader = ({ source, uniforms, maxFps = 60 }) => {
257
+ return /* @__PURE__ */ jsx(
258
+ Canvas,
259
+ {
260
+ className: "absolute inset-0 h-full w-full",
261
+ gl: { alpha: true },
262
+ style: { background: "transparent" },
263
+ children: /* @__PURE__ */ jsx(ShaderMaterial2, { source, uniforms, maxFps })
264
+ }
265
+ );
266
+ };
267
+ var CardSpotlight = ({
268
+ children,
269
+ radius = 350,
270
+ color,
271
+ className,
272
+ ...props
273
+ }) => {
274
+ const mouseX = useMotionValue(0);
275
+ const mouseY = useMotionValue(0);
276
+ const [isDark, setIsDark] = useState(true);
277
+ useEffect(() => {
278
+ const html = document.documentElement;
279
+ const check = () => setIsDark(html.classList.contains("dark"));
280
+ check();
281
+ const obs = new MutationObserver(check);
282
+ obs.observe(html, { attributes: true, attributeFilter: ["class"] });
283
+ return () => obs.disconnect();
284
+ }, []);
285
+ function handleMouseMove({
286
+ currentTarget,
287
+ clientX,
288
+ clientY
289
+ }) {
290
+ const { left, top } = currentTarget.getBoundingClientRect();
291
+ mouseX.set(clientX - left);
292
+ mouseY.set(clientY - top);
293
+ }
294
+ const [isHovering, setIsHovering] = useState(false);
295
+ const handleMouseEnter = () => setIsHovering(true);
296
+ const handleMouseLeave = () => setIsHovering(false);
297
+ const resolvedColor = color ?? (isDark ? "#262626" : "rgba(129,140,248,0.08)");
298
+ const dotColors = isDark ? [
299
+ [59, 130, 246],
300
+ [139, 92, 246]
301
+ ] : [
302
+ [129, 140, 248],
303
+ [165, 148, 249]
304
+ ];
305
+ return (
306
+ // biome-ignore lint/a11y/noStaticElementInteractions: spotlight effect requires mouse tracking on the card container
307
+ /* @__PURE__ */ jsxs(
308
+ "div",
309
+ {
310
+ className: cn("group/spotlight p-10 rounded-md relative", className),
311
+ style: {
312
+ backgroundColor: "var(--color-card, hsl(var(--card)))",
313
+ borderWidth: "1px",
314
+ borderStyle: "solid",
315
+ borderColor: "var(--color-border, hsl(var(--border)))"
316
+ },
317
+ onMouseMove: handleMouseMove,
318
+ onMouseEnter: handleMouseEnter,
319
+ onMouseLeave: handleMouseLeave,
320
+ ...props,
321
+ children: [
322
+ /* @__PURE__ */ jsx(
323
+ motion.div,
324
+ {
325
+ className: "pointer-events-none absolute z-0 -inset-px rounded-md opacity-0 transition duration-300 group-hover/spotlight:opacity-100",
326
+ style: {
327
+ backgroundColor: resolvedColor,
328
+ maskImage: useMotionTemplate`
329
+ radial-gradient(
330
+ ${radius}px circle at ${mouseX}px ${mouseY}px,
331
+ white,
332
+ transparent 80%
333
+ )
334
+ `
335
+ },
336
+ children: isHovering && /* @__PURE__ */ jsx(
337
+ CanvasRevealEffect,
338
+ {
339
+ animationSpeed: 5,
340
+ containerClassName: "bg-transparent absolute inset-0 pointer-events-none",
341
+ colors: dotColors,
342
+ dotSize: 3,
343
+ showGradient: false
344
+ }
345
+ )
346
+ }
347
+ ),
348
+ children
349
+ ]
350
+ }
351
+ )
352
+ );
353
+ };
354
+ function BentoGridSection({
355
+ heading,
356
+ subheading,
357
+ items,
358
+ tone = "muted",
359
+ padding = "lg",
360
+ className,
361
+ containerClassName,
362
+ spotlight = false
363
+ }) {
364
+ return /* @__PURE__ */ jsx(
365
+ "section",
366
+ {
367
+ className: cx(
368
+ sectionToneClasses[tone],
369
+ sectionPaddingClasses[padding],
370
+ className
371
+ ),
372
+ "data-slot": "bento-grid-section",
373
+ children: /* @__PURE__ */ jsxs("div", { className: cx("mx-auto max-w-6xl px-6", containerClassName), children: [
374
+ heading ? /* @__PURE__ */ jsxs("div", { className: "mx-auto mb-10 max-w-2xl text-center", children: [
375
+ /* @__PURE__ */ jsx(
376
+ "h2",
377
+ {
378
+ className: "text-3xl font-semibold tracking-tight md:text-4xl",
379
+ style: {
380
+ color: "var(--color-foreground, hsl(var(--foreground)))"
381
+ },
382
+ children: heading
383
+ }
384
+ ),
385
+ subheading ? /* @__PURE__ */ jsx(
386
+ "p",
387
+ {
388
+ className: "mt-3",
389
+ style: {
390
+ color: "var(--color-foreground, hsl(var(--foreground)))"
391
+ },
392
+ children: subheading
393
+ }
394
+ ) : null
395
+ ] }) : null,
396
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3 auto-rows-[minmax(11rem,auto)]", children: items.map(
397
+ (item) => spotlight ? /* @__PURE__ */ jsx(
398
+ CardSpotlight,
399
+ {
400
+ className: cx(
401
+ "rounded-xl p-0 flex flex-col",
402
+ item.colSpan === 2 && "md:col-span-2",
403
+ item.rowSpan === 2 && "md:row-span-2"
404
+ ),
405
+ children: /* @__PURE__ */ jsxs("div", { className: "relative z-20 flex flex-col flex-1", children: [
406
+ item.illustration ? /* @__PURE__ */ jsx(
407
+ "div",
408
+ {
409
+ className: cx(
410
+ "w-full overflow-hidden",
411
+ item.headerClassName
412
+ ),
413
+ "aria-hidden": "true",
414
+ children: item.illustration
415
+ }
416
+ ) : null,
417
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col p-5", children: [
418
+ item.icon ? /* @__PURE__ */ jsx(
419
+ "div",
420
+ {
421
+ className: "mb-3",
422
+ style: {
423
+ color: "var(--color-foreground, hsl(var(--foreground)))"
424
+ },
425
+ "aria-hidden": "true",
426
+ children: item.icon
427
+ }
428
+ ) : null,
429
+ /* @__PURE__ */ jsx(
430
+ "h3",
431
+ {
432
+ className: "text-lg font-medium",
433
+ style: {
434
+ color: "var(--color-foreground, hsl(var(--foreground)))"
435
+ },
436
+ children: item.title
437
+ }
438
+ ),
439
+ /* @__PURE__ */ jsx(
440
+ "p",
441
+ {
442
+ className: "mt-2 flex-1 text-sm leading-6",
443
+ style: {
444
+ color: "var(--color-foreground, hsl(var(--foreground)))",
445
+ opacity: 0.75
446
+ },
447
+ children: item.description
448
+ }
449
+ ),
450
+ item.cta ? /* @__PURE__ */ jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", size: "sm", children: /* @__PURE__ */ jsx("a", { href: item.cta.href, children: item.cta.label }) }) }) : null
451
+ ] })
452
+ ] })
453
+ },
454
+ item.id
455
+ ) : /* @__PURE__ */ jsxs(
456
+ "article",
457
+ {
458
+ className: cx(
459
+ "overflow-hidden rounded-xl shadow-sm transition-colors flex flex-col",
460
+ item.colSpan === 2 && "md:col-span-2",
461
+ item.rowSpan === 2 && "md:row-span-2"
462
+ ),
463
+ style: {
464
+ backgroundColor: "var(--color-card, hsl(var(--card)))",
465
+ borderWidth: "1px",
466
+ borderStyle: "solid",
467
+ borderColor: "var(--color-border, hsl(var(--border)))"
468
+ },
469
+ children: [
470
+ item.illustration ? /* @__PURE__ */ jsx(
471
+ "div",
472
+ {
473
+ className: cx(
474
+ "w-full overflow-hidden",
475
+ item.headerClassName
476
+ ),
477
+ "aria-hidden": "true",
478
+ children: item.illustration
479
+ }
480
+ ) : null,
481
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col p-5", children: [
482
+ item.icon ? /* @__PURE__ */ jsx(
483
+ "div",
484
+ {
485
+ className: "mb-3",
486
+ style: {
487
+ color: "var(--color-foreground, hsl(var(--foreground)))"
488
+ },
489
+ "aria-hidden": "true",
490
+ children: item.icon
491
+ }
492
+ ) : null,
493
+ /* @__PURE__ */ jsx(
494
+ "h3",
495
+ {
496
+ className: "text-lg font-medium",
497
+ style: {
498
+ color: "var(--color-foreground, hsl(var(--foreground)))"
499
+ },
500
+ children: item.title
501
+ }
502
+ ),
503
+ /* @__PURE__ */ jsx(
504
+ "p",
505
+ {
506
+ className: "mt-2 flex-1 text-sm leading-6",
507
+ style: {
508
+ color: "var(--color-foreground, hsl(var(--foreground)))",
509
+ opacity: 0.75
510
+ },
511
+ children: item.description
512
+ }
513
+ ),
514
+ item.cta ? /* @__PURE__ */ jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", size: "sm", children: /* @__PURE__ */ jsx("a", { href: item.cta.href, children: item.cta.label }) }) }) : null
515
+ ] })
516
+ ]
517
+ },
518
+ item.id
519
+ )
520
+ ) })
521
+ ] })
522
+ }
523
+ );
524
+ }
525
+
526
+ export { BentoGridSection, CanvasRevealEffect, CardSpotlight };