@opensite/ui 2.0.6 → 2.0.8

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 (77) hide show
  1. package/dist/hero-adaptable-product-grid.cjs +1 -1
  2. package/dist/hero-adaptable-product-grid.js +1 -1
  3. package/dist/hero-agency-animated-images.cjs +795 -631
  4. package/dist/hero-agency-animated-images.d.cts +13 -9
  5. package/dist/hero-agency-animated-images.d.ts +13 -9
  6. package/dist/hero-agency-animated-images.js +794 -630
  7. package/dist/hero-business-carousel-dots.cjs +822 -911
  8. package/dist/hero-business-carousel-dots.d.cts +5 -1
  9. package/dist/hero-business-carousel-dots.d.ts +5 -1
  10. package/dist/hero-business-carousel-dots.js +824 -910
  11. package/dist/hero-coming-soon-countdown.cjs +267 -110
  12. package/dist/hero-coming-soon-countdown.d.cts +8 -11
  13. package/dist/hero-coming-soon-countdown.d.ts +8 -11
  14. package/dist/hero-coming-soon-countdown.js +268 -111
  15. package/dist/hero-conversation-intelligence.cjs +673 -639
  16. package/dist/hero-conversation-intelligence.js +663 -629
  17. package/dist/hero-creative-studio-stacked.cjs +899 -861
  18. package/dist/hero-creative-studio-stacked.d.cts +16 -15
  19. package/dist/hero-creative-studio-stacked.d.ts +16 -15
  20. package/dist/hero-creative-studio-stacked.js +897 -859
  21. package/dist/hero-customer-support-layered.cjs +89 -76
  22. package/dist/hero-customer-support-layered.js +89 -76
  23. package/dist/hero-developer-tools-code.cjs +721 -669
  24. package/dist/hero-developer-tools-code.d.cts +5 -1
  25. package/dist/hero-developer-tools-code.d.ts +5 -1
  26. package/dist/hero-developer-tools-code.js +719 -667
  27. package/dist/hero-digital-agency-fullscreen.cjs +722 -680
  28. package/dist/hero-digital-agency-fullscreen.d.cts +4 -20
  29. package/dist/hero-digital-agency-fullscreen.d.ts +4 -20
  30. package/dist/hero-digital-agency-fullscreen.js +722 -680
  31. package/dist/hero-ecommerce-product-showcase.cjs +892 -846
  32. package/dist/hero-ecommerce-product-showcase.js +889 -843
  33. package/dist/hero-enterprise-security.cjs +168 -132
  34. package/dist/hero-enterprise-security.d.cts +12 -19
  35. package/dist/hero-enterprise-security.d.ts +12 -19
  36. package/dist/hero-enterprise-security.js +168 -132
  37. package/dist/hero-event-registration.cjs +39 -39
  38. package/dist/hero-event-registration.js +39 -39
  39. package/dist/hero-fullscreen-background-image.cjs +3 -2
  40. package/dist/hero-fullscreen-background-image.js +3 -2
  41. package/dist/hero-fullscreen-logo-cta.cjs +4 -2
  42. package/dist/hero-fullscreen-logo-cta.js +4 -2
  43. package/dist/hero-innovation-image-grid.cjs +2 -2
  44. package/dist/hero-innovation-image-grid.js +2 -2
  45. package/dist/hero-mental-health-team.cjs +17 -17
  46. package/dist/hero-mental-health-team.d.cts +5 -5
  47. package/dist/hero-mental-health-team.d.ts +5 -5
  48. package/dist/hero-mental-health-team.js +17 -17
  49. package/dist/hero-mobile-app-download.cjs +2 -2
  50. package/dist/hero-mobile-app-download.js +2 -2
  51. package/dist/hero-newsletter-minimal.cjs +97 -57
  52. package/dist/hero-newsletter-minimal.d.cts +5 -1
  53. package/dist/hero-newsletter-minimal.d.ts +5 -1
  54. package/dist/hero-newsletter-minimal.js +97 -57
  55. package/dist/hero-shared-inbox-layered.cjs +522 -42
  56. package/dist/hero-shared-inbox-layered.d.cts +20 -4
  57. package/dist/hero-shared-inbox-layered.d.ts +20 -4
  58. package/dist/hero-shared-inbox-layered.js +505 -40
  59. package/dist/hero-startup-launch-cta.cjs +859 -816
  60. package/dist/hero-startup-launch-cta.d.cts +3 -2
  61. package/dist/hero-startup-launch-cta.d.ts +3 -2
  62. package/dist/hero-startup-launch-cta.js +858 -815
  63. package/dist/hero-therapy-testimonial-grid.cjs +1 -1
  64. package/dist/hero-therapy-testimonial-grid.js +1 -1
  65. package/dist/hero-video-dialog-gradient-BnCFFec0.d.ts +99 -0
  66. package/dist/hero-video-dialog-gradient-Dapebkzu.d.cts +99 -0
  67. package/dist/hero-video-dialog-gradient.cjs +24 -23
  68. package/dist/hero-video-dialog-gradient.d.cts +4 -94
  69. package/dist/hero-video-dialog-gradient.d.ts +4 -94
  70. package/dist/hero-video-dialog-gradient.js +24 -23
  71. package/dist/hero-welcome-asymmetric-images.cjs +652 -617
  72. package/dist/hero-welcome-asymmetric-images.d.cts +5 -1
  73. package/dist/hero-welcome-asymmetric-images.d.ts +5 -1
  74. package/dist/hero-welcome-asymmetric-images.js +651 -616
  75. package/dist/registry.cjs +1111 -848
  76. package/dist/registry.js +1111 -848
  77. package/package.json +1 -1
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React = require('react');
4
+ var React3 = require('react');
5
+ var framerMotion = require('framer-motion');
5
6
  var clsx = require('clsx');
6
7
  var tailwindMerge = require('tailwind-merge');
7
- var classVarianceAuthority = require('class-variance-authority');
8
- var jsxRuntime = require('react/jsx-runtime');
9
8
  var img = require('@page-speed/img');
10
9
  var AspectRatioPrimitive = require('@radix-ui/react-aspect-ratio');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+ var classVarianceAuthority = require('class-variance-authority');
11
12
 
12
13
  function _interopNamespace(e) {
13
14
  if (e && e.__esModule) return e;
@@ -27,191 +28,393 @@ function _interopNamespace(e) {
27
28
  return Object.freeze(n);
28
29
  }
29
30
 
30
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
31
32
  var AspectRatioPrimitive__namespace = /*#__PURE__*/_interopNamespace(AspectRatioPrimitive);
32
33
 
33
34
  // components/blocks/hero/hero-agency-animated-images.tsx
34
35
  function cn(...inputs) {
35
36
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
37
  }
37
- function normalizePhoneNumber(input) {
38
- const trimmed = input.trim();
39
- if (trimmed.toLowerCase().startsWith("tel:")) {
40
- return trimmed;
41
- }
42
- const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
43
- if (match) {
44
- const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
45
- const extension = match[3];
46
- const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
47
- const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
48
- return `tel:${withExtension}`;
49
- }
50
- const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
51
- return `tel:${cleaned}`;
52
- }
53
- function normalizeEmail(input) {
54
- const trimmed = input.trim();
55
- if (trimmed.toLowerCase().startsWith("mailto:")) {
56
- return trimmed;
57
- }
58
- return `mailto:${trimmed}`;
59
- }
60
- function isEmail(input) {
61
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
62
- return emailRegex.test(input.trim());
63
- }
64
- function isPhoneNumber(input) {
65
- const trimmed = input.trim();
66
- if (trimmed.toLowerCase().startsWith("tel:")) {
67
- return true;
68
- }
69
- const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
70
- return phoneRegex.test(trimmed);
38
+ function AspectRatio({
39
+ ...props
40
+ }) {
41
+ return /* @__PURE__ */ jsxRuntime.jsx(AspectRatioPrimitive__namespace.Root, { "data-slot": "aspect-ratio", ...props });
71
42
  }
72
- function isInternalUrl(href) {
73
- if (typeof window === "undefined") {
74
- return href.startsWith("/") && !href.startsWith("//");
75
- }
76
- const trimmed = href.trim();
77
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
78
- return true;
79
- }
80
- try {
81
- const url = new URL(trimmed, window.location.href);
82
- const currentOrigin = window.location.origin;
83
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
84
- return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
85
- } catch {
86
- return false;
43
+ var maxWidthStyles = {
44
+ sm: "max-w-screen-sm",
45
+ md: "max-w-screen-md",
46
+ lg: "max-w-screen-lg",
47
+ xl: "max-w-7xl",
48
+ "2xl": "max-w-screen-2xl",
49
+ "4xl": "max-w-[1536px]",
50
+ full: "max-w-full"
51
+ };
52
+ var Container = React3__namespace.default.forwardRef(
53
+ ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
54
+ const Component = as;
55
+ return /* @__PURE__ */ jsxRuntime.jsx(
56
+ Component,
57
+ {
58
+ ref,
59
+ className: cn(
60
+ "mx-auto w-full px-2 sm:px-4 lg:px-8",
61
+ maxWidthStyles[maxWidth],
62
+ className
63
+ ),
64
+ ...props,
65
+ children
66
+ }
67
+ );
87
68
  }
88
- }
89
- function toRelativePath(href) {
90
- if (typeof window === "undefined") {
91
- return href;
69
+ );
70
+ Container.displayName = "Container";
71
+
72
+ // lib/patternSvgs.ts
73
+ var patternSvgs = {
74
+ squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
75
+ grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
76
+ noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
77
+ dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
78
+ dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
79
+ dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
80
+ circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
81
+ waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
82
+ crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
83
+ architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
84
+ tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
85
+ p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
86
+ };
87
+ var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
88
+ var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
89
+ var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
90
+ var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
91
+ var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
92
+ var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
93
+ var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
94
+ var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
95
+ "svg",
96
+ {
97
+ className: "h-full w-full",
98
+ xmlns: "http://www.w3.org/2000/svg",
99
+ style: mask ? {
100
+ maskImage: mask,
101
+ WebkitMaskImage: mask
102
+ } : void 0,
103
+ children: [
104
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
105
+ "pattern",
106
+ {
107
+ id,
108
+ x: "0",
109
+ y: "0",
110
+ width: "100",
111
+ height: "100",
112
+ patternUnits: "userSpaceOnUse",
113
+ children: [
114
+ /* @__PURE__ */ jsxRuntime.jsx(
115
+ "path",
116
+ {
117
+ d: "M0 50h40M60 50h40M50 0v40M50 60v40",
118
+ stroke: "hsl(var(--muted))",
119
+ strokeWidth: "1",
120
+ fill: "none"
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
124
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
125
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
126
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
127
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
128
+ ]
129
+ }
130
+ ) }),
131
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
132
+ ]
92
133
  }
93
- const trimmed = href.trim();
94
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
95
- return trimmed;
134
+ );
135
+ var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
136
+ "svg",
137
+ {
138
+ className: "h-full w-full",
139
+ xmlns: "http://www.w3.org/2000/svg",
140
+ style: mask ? {
141
+ maskImage: mask,
142
+ WebkitMaskImage: mask
143
+ } : void 0,
144
+ children: [
145
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
146
+ "pattern",
147
+ {
148
+ id,
149
+ x: "0",
150
+ y: "0",
151
+ width: "40",
152
+ height: "40",
153
+ patternUnits: "userSpaceOnUse",
154
+ children: [
155
+ /* @__PURE__ */ jsxRuntime.jsx(
156
+ "path",
157
+ {
158
+ d: "M0 20h40M20 0v40",
159
+ stroke: "hsl(var(--muted))",
160
+ strokeWidth: "0.5",
161
+ fill: "none"
162
+ }
163
+ ),
164
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
165
+ ]
166
+ }
167
+ ) }),
168
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
169
+ ]
96
170
  }
97
- try {
98
- const url = new URL(trimmed, window.location.href);
99
- const currentOrigin = window.location.origin;
100
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
101
- if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
102
- return url.pathname + url.search + url.hash;
171
+ );
172
+ var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
173
+ "div",
174
+ {
175
+ 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)]",
176
+ style: {
177
+ backgroundSize: `${size}px ${size}px`,
178
+ ...mask ? {
179
+ maskImage: mask,
180
+ WebkitMaskImage: mask
181
+ } : {}
103
182
  }
104
- } catch {
105
183
  }
106
- return trimmed;
107
- }
108
- function useNavigation({
109
- href,
110
- onClick
111
- } = {}) {
112
- const linkType = React__namespace.useMemo(() => {
113
- if (!href || href.trim() === "") {
114
- return onClick ? "none" : "none";
115
- }
116
- const trimmed = href.trim();
117
- if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
118
- return "mailto";
119
- }
120
- if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
121
- return "tel";
122
- }
123
- if (isInternalUrl(trimmed)) {
124
- return "internal";
125
- }
126
- try {
127
- new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
128
- return "external";
129
- } catch {
130
- return "internal";
131
- }
132
- }, [href, onClick]);
133
- const normalizedHref = React__namespace.useMemo(() => {
134
- if (!href || href.trim() === "") {
135
- return void 0;
184
+ );
185
+ var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
186
+ "div",
187
+ {
188
+ className: "h-full w-full",
189
+ style: {
190
+ 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)",
191
+ ...mask ? {
192
+ maskImage: mask,
193
+ WebkitMaskImage: mask
194
+ } : {}
136
195
  }
137
- const trimmed = href.trim();
138
- switch (linkType) {
139
- case "tel":
140
- return normalizePhoneNumber(trimmed);
141
- case "mailto":
142
- return normalizeEmail(trimmed);
143
- case "internal":
144
- return toRelativePath(trimmed);
145
- case "external":
146
- return trimmed;
147
- default:
148
- return trimmed;
196
+ }
197
+ );
198
+ 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)";
199
+ var dashedGridPattern = (fadeMask) => {
200
+ const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
201
+ return /* @__PURE__ */ jsxRuntime.jsx(
202
+ "div",
203
+ {
204
+ className: "h-full w-full",
205
+ style: {
206
+ backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
207
+ backgroundSize: "20px 20px",
208
+ backgroundPosition: "0 0, 0 0",
209
+ maskImage: mask,
210
+ WebkitMaskImage: mask,
211
+ maskComposite: "intersect",
212
+ WebkitMaskComposite: "source-in"
213
+ }
149
214
  }
150
- }, [href, linkType]);
151
- const target = React__namespace.useMemo(() => {
152
- switch (linkType) {
153
- case "external":
154
- return "_blank";
155
- case "internal":
156
- return "_self";
157
- case "mailto":
158
- case "tel":
159
- return void 0;
160
- default:
161
- return void 0;
215
+ );
216
+ };
217
+ var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
218
+ "div",
219
+ {
220
+ className: cn(
221
+ "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
222
+ position === "top" ? "-top-1/4" : "-bottom-1/4"
223
+ ),
224
+ style: {
225
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
162
226
  }
163
- }, [linkType]);
164
- const rel = React__namespace.useMemo(() => {
165
- if (linkType === "external") {
166
- return "noopener noreferrer";
227
+ }
228
+ );
229
+ var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
230
+ "div",
231
+ {
232
+ className: cn(
233
+ "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
234
+ position === "left" ? "-left-1/4" : "-right-1/4"
235
+ ),
236
+ style: {
237
+ background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
167
238
  }
168
- return void 0;
169
- }, [linkType]);
170
- const isExternal = linkType === "external";
171
- const isInternal = linkType === "internal";
172
- const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
173
- const handleClick = React__namespace.useCallback(
174
- (event) => {
175
- if (onClick) {
176
- try {
177
- onClick(event);
178
- } catch (error) {
179
- console.error("Error in user onClick handler:", error);
180
- }
181
- }
182
- if (event.defaultPrevented) {
183
- return;
239
+ }
240
+ );
241
+ var patternOverlays = {
242
+ circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
243
+ circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
244
+ circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
245
+ circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
246
+ circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
247
+ circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
248
+ circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
249
+ circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
250
+ dashedGridBasic: () => dashedGridPattern(),
251
+ dashedGridFadeTop: () => dashedGridPattern(maskTop),
252
+ dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
253
+ dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
254
+ dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
255
+ dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
256
+ dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
257
+ dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
258
+ diagonalCrossBasic: () => diagonalCrossPattern(),
259
+ diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
260
+ diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
261
+ diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
262
+ diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
263
+ diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
264
+ diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
265
+ diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
266
+ gridBasic: () => gridPattern(40),
267
+ gridFadeTop: () => gridPattern(32, maskTop),
268
+ gridFadeBottom: () => gridPattern(32, maskBottom),
269
+ gridFadeCenter: () => gridPattern(40, maskCenter),
270
+ gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
271
+ gridFadeTopRight: () => gridPattern(32, maskTopRight),
272
+ gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
273
+ gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
274
+ gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
275
+ gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
276
+ gradientGlowTop: () => gradientGlow("top"),
277
+ gradientGlowBottom: () => gradientGlow("bottom"),
278
+ spotlightLeft: () => spotlight("left"),
279
+ spotlightRight: () => spotlight("right")
280
+ };
281
+ var inlinePatternStyles = {
282
+ radialGradientTop: {
283
+ background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
284
+ },
285
+ radialGradientBottom: {
286
+ background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
287
+ }
288
+ };
289
+ function PatternBackground({
290
+ pattern,
291
+ opacity = 0.08,
292
+ className,
293
+ style
294
+ }) {
295
+ if (!pattern) {
296
+ return null;
297
+ }
298
+ if (pattern in inlinePatternStyles) {
299
+ const inlineStyle = inlinePatternStyles[pattern];
300
+ return /* @__PURE__ */ jsxRuntime.jsx(
301
+ "div",
302
+ {
303
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
304
+ style: { ...inlineStyle, opacity, ...style },
305
+ "aria-hidden": "true"
184
306
  }
185
- if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
186
- !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
187
- if (typeof window !== "undefined") {
188
- const handler = window.__opensiteNavigationHandler;
189
- if (typeof handler === "function") {
190
- try {
191
- const handled = handler(normalizedHref, event.nativeEvent || event);
192
- if (handled !== false) {
193
- event.preventDefault();
194
- }
195
- } catch (error) {
196
- console.error("Error in navigation handler:", error);
197
- }
198
- }
199
- }
307
+ );
308
+ }
309
+ if (pattern in patternOverlays) {
310
+ const Overlay = patternOverlays[pattern];
311
+ return /* @__PURE__ */ jsxRuntime.jsx(
312
+ "div",
313
+ {
314
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
315
+ style: { opacity, ...style },
316
+ "aria-hidden": "true",
317
+ children: Overlay()
200
318
  }
201
- },
202
- [onClick, shouldUseRouter, normalizedHref]
319
+ );
320
+ }
321
+ const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
322
+ return /* @__PURE__ */ jsxRuntime.jsx(
323
+ "div",
324
+ {
325
+ className: cn("pointer-events-none absolute inset-0 z-0", className),
326
+ style: {
327
+ backgroundImage: `url(${patternUrl})`,
328
+ backgroundRepeat: "repeat",
329
+ backgroundSize: "auto",
330
+ opacity,
331
+ ...style
332
+ },
333
+ "aria-hidden": "true"
334
+ }
203
335
  );
204
- return {
205
- linkType,
206
- normalizedHref,
207
- target,
208
- rel,
209
- isExternal,
210
- isInternal,
211
- shouldUseRouter,
212
- handleClick
213
- };
214
336
  }
337
+ var backgroundStyles = {
338
+ default: "bg-background text-foreground",
339
+ white: "bg-white text-dark",
340
+ gray: "bg-muted/30 text-foreground",
341
+ dark: "bg-foreground text-background",
342
+ transparent: "bg-transparent text-foreground",
343
+ gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
344
+ primary: "bg-primary text-primary-foreground",
345
+ secondary: "bg-secondary text-secondary-foreground",
346
+ muted: "bg-muted text-muted-foreground"
347
+ };
348
+ var spacingStyles = {
349
+ none: "py-0 md:py-0",
350
+ sm: "py-12 md:py-16",
351
+ md: "py-16 md:py-24",
352
+ lg: "py-20 md:py-32",
353
+ xl: "py-24 md:py-40"
354
+ };
355
+ var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
356
+ var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
357
+ var Section = React3__namespace.default.forwardRef(
358
+ ({
359
+ id,
360
+ title,
361
+ subtitle,
362
+ children,
363
+ className,
364
+ style,
365
+ background = "default",
366
+ spacing = "lg",
367
+ pattern,
368
+ patternOpacity,
369
+ patternClassName,
370
+ containerClassName,
371
+ containerMaxWidth = "xl",
372
+ ...props
373
+ }, ref) => {
374
+ const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
375
+ return /* @__PURE__ */ jsxRuntime.jsxs(
376
+ "section",
377
+ {
378
+ ref,
379
+ id,
380
+ className: cn(
381
+ "relative",
382
+ pattern ? "overflow-hidden" : null,
383
+ backgroundStyles[background],
384
+ isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
385
+ className
386
+ ),
387
+ style,
388
+ ...props,
389
+ children: [
390
+ /* @__PURE__ */ jsxRuntime.jsx(
391
+ PatternBackground,
392
+ {
393
+ pattern,
394
+ opacity: effectivePatternOpacity,
395
+ className: patternClassName
396
+ }
397
+ ),
398
+ /* @__PURE__ */ jsxRuntime.jsxs(
399
+ Container,
400
+ {
401
+ maxWidth: containerMaxWidth,
402
+ className: cn("relative z-10", containerClassName),
403
+ children: [
404
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 text-center md:mb-16", children: [
405
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider", children: subtitle }),
406
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
407
+ ] }),
408
+ children
409
+ ]
410
+ }
411
+ )
412
+ ]
413
+ }
414
+ );
415
+ }
416
+ );
417
+ Section.displayName = "Section";
215
418
  var baseStyles = [
216
419
  // Layout
217
420
  "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
@@ -354,7 +557,185 @@ var buttonVariants = classVarianceAuthority.cva(baseStyles, {
354
557
  size: "default"
355
558
  }
356
559
  });
357
- var Pressable = React__namespace.forwardRef(
560
+ function normalizePhoneNumber(input) {
561
+ const trimmed = input.trim();
562
+ if (trimmed.toLowerCase().startsWith("tel:")) {
563
+ return trimmed;
564
+ }
565
+ const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
566
+ if (match) {
567
+ const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
568
+ const extension = match[3];
569
+ const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
570
+ const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
571
+ return `tel:${withExtension}`;
572
+ }
573
+ const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
574
+ return `tel:${cleaned}`;
575
+ }
576
+ function normalizeEmail(input) {
577
+ const trimmed = input.trim();
578
+ if (trimmed.toLowerCase().startsWith("mailto:")) {
579
+ return trimmed;
580
+ }
581
+ return `mailto:${trimmed}`;
582
+ }
583
+ function isEmail(input) {
584
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
585
+ return emailRegex.test(input.trim());
586
+ }
587
+ function isPhoneNumber(input) {
588
+ const trimmed = input.trim();
589
+ if (trimmed.toLowerCase().startsWith("tel:")) {
590
+ return true;
591
+ }
592
+ const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
593
+ return phoneRegex.test(trimmed);
594
+ }
595
+ function isInternalUrl(href) {
596
+ if (typeof window === "undefined") {
597
+ return href.startsWith("/") && !href.startsWith("//");
598
+ }
599
+ const trimmed = href.trim();
600
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
601
+ return true;
602
+ }
603
+ try {
604
+ const url = new URL(trimmed, window.location.href);
605
+ const currentOrigin = window.location.origin;
606
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
607
+ return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
608
+ } catch {
609
+ return false;
610
+ }
611
+ }
612
+ function toRelativePath(href) {
613
+ if (typeof window === "undefined") {
614
+ return href;
615
+ }
616
+ const trimmed = href.trim();
617
+ if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
618
+ return trimmed;
619
+ }
620
+ try {
621
+ const url = new URL(trimmed, window.location.href);
622
+ const currentOrigin = window.location.origin;
623
+ const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
624
+ if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
625
+ return url.pathname + url.search + url.hash;
626
+ }
627
+ } catch {
628
+ }
629
+ return trimmed;
630
+ }
631
+ function useNavigation({
632
+ href,
633
+ onClick
634
+ } = {}) {
635
+ const linkType = React3__namespace.useMemo(() => {
636
+ if (!href || href.trim() === "") {
637
+ return onClick ? "none" : "none";
638
+ }
639
+ const trimmed = href.trim();
640
+ if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
641
+ return "mailto";
642
+ }
643
+ if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
644
+ return "tel";
645
+ }
646
+ if (isInternalUrl(trimmed)) {
647
+ return "internal";
648
+ }
649
+ try {
650
+ new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
651
+ return "external";
652
+ } catch {
653
+ return "internal";
654
+ }
655
+ }, [href, onClick]);
656
+ const normalizedHref = React3__namespace.useMemo(() => {
657
+ if (!href || href.trim() === "") {
658
+ return void 0;
659
+ }
660
+ const trimmed = href.trim();
661
+ switch (linkType) {
662
+ case "tel":
663
+ return normalizePhoneNumber(trimmed);
664
+ case "mailto":
665
+ return normalizeEmail(trimmed);
666
+ case "internal":
667
+ return toRelativePath(trimmed);
668
+ case "external":
669
+ return trimmed;
670
+ default:
671
+ return trimmed;
672
+ }
673
+ }, [href, linkType]);
674
+ const target = React3__namespace.useMemo(() => {
675
+ switch (linkType) {
676
+ case "external":
677
+ return "_blank";
678
+ case "internal":
679
+ return "_self";
680
+ case "mailto":
681
+ case "tel":
682
+ return void 0;
683
+ default:
684
+ return void 0;
685
+ }
686
+ }, [linkType]);
687
+ const rel = React3__namespace.useMemo(() => {
688
+ if (linkType === "external") {
689
+ return "noopener noreferrer";
690
+ }
691
+ return void 0;
692
+ }, [linkType]);
693
+ const isExternal = linkType === "external";
694
+ const isInternal = linkType === "internal";
695
+ const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
696
+ const handleClick = React3__namespace.useCallback(
697
+ (event) => {
698
+ if (onClick) {
699
+ try {
700
+ onClick(event);
701
+ } catch (error) {
702
+ console.error("Error in user onClick handler:", error);
703
+ }
704
+ }
705
+ if (event.defaultPrevented) {
706
+ return;
707
+ }
708
+ if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
709
+ !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
710
+ if (typeof window !== "undefined") {
711
+ const handler = window.__opensiteNavigationHandler;
712
+ if (typeof handler === "function") {
713
+ try {
714
+ const handled = handler(normalizedHref, event.nativeEvent || event);
715
+ if (handled !== false) {
716
+ event.preventDefault();
717
+ }
718
+ } catch (error) {
719
+ console.error("Error in navigation handler:", error);
720
+ }
721
+ }
722
+ }
723
+ }
724
+ },
725
+ [onClick, shouldUseRouter, normalizedHref]
726
+ );
727
+ return {
728
+ linkType,
729
+ normalizedHref,
730
+ target,
731
+ rel,
732
+ isExternal,
733
+ isInternal,
734
+ shouldUseRouter,
735
+ handleClick
736
+ };
737
+ }
738
+ var Pressable = React3__namespace.forwardRef(
358
739
  ({
359
740
  children,
360
741
  className,
@@ -401,498 +782,237 @@ var Pressable = React__namespace.forwardRef(
401
782
  onClick: handleClick,
402
783
  "aria-label": ariaLabel,
403
784
  "aria-describedby": ariaDescribedby,
404
- id,
405
- ...dataProps,
406
- ...buttonDataAttributes
407
- };
408
- if (finalComponentType === "a" && shouldRenderLink) {
409
- return /* @__PURE__ */ jsxRuntime.jsx(
410
- "a",
411
- {
412
- ref,
413
- href: normalizedHref,
414
- target,
415
- rel,
416
- ...commonProps,
417
- ...props,
418
- children
419
- }
420
- );
421
- }
422
- if (finalComponentType === "button") {
423
- return /* @__PURE__ */ jsxRuntime.jsx(
424
- "button",
425
- {
426
- ref,
427
- type: props.type || "button",
428
- ...commonProps,
429
- ...props,
430
- children
431
- }
432
- );
433
- }
434
- if (finalComponentType === "div") {
435
- return /* @__PURE__ */ jsxRuntime.jsx(
436
- "div",
437
- {
438
- ref,
439
- ...commonProps,
440
- children
441
- }
442
- );
443
- }
444
- return /* @__PURE__ */ jsxRuntime.jsx(
445
- "span",
446
- {
447
- ref,
448
- ...commonProps,
449
- children
450
- }
451
- );
452
- }
453
- );
454
- Pressable.displayName = "Pressable";
455
- function AspectRatio({
456
- ...props
457
- }) {
458
- return /* @__PURE__ */ jsxRuntime.jsx(AspectRatioPrimitive__namespace.Root, { "data-slot": "aspect-ratio", ...props });
459
- }
460
- var maxWidthStyles = {
461
- sm: "max-w-screen-sm",
462
- md: "max-w-screen-md",
463
- lg: "max-w-screen-lg",
464
- xl: "max-w-7xl",
465
- "2xl": "max-w-screen-2xl",
466
- "4xl": "max-w-[1536px]",
467
- full: "max-w-full"
468
- };
469
- var Container = React__namespace.default.forwardRef(
470
- ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
471
- const Component = as;
472
- return /* @__PURE__ */ jsxRuntime.jsx(
473
- Component,
474
- {
475
- ref,
476
- className: cn(
477
- "mx-auto w-full px-2 sm:px-4 lg:px-8",
478
- maxWidthStyles[maxWidth],
479
- className
480
- ),
481
- ...props,
482
- children
483
- }
484
- );
485
- }
486
- );
487
- Container.displayName = "Container";
488
-
489
- // lib/patternSvgs.ts
490
- var patternSvgs = {
491
- squareAltGrid: "https://cdn.ing/assets/files/record/286187/4gpn0yq2ptra8iwlvmwwv860ggwv",
492
- grid1: "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
493
- noise: "https://cdn.ing/assets/i/r/286188/zrqcp9hynh3j7p2laihwzfbujgrl/noise.png",
494
- dots: "https://cdn.ing/assets/files/record/286198/yfsjx9thvtxzhl2qtshxyhkrm524",
495
- dotPattern: "https://cdn.ing/assets/files/record/286192/7ig0cku8aqbboiza8nuk6hw0nnsr",
496
- dotPattern2: "https://cdn.ing/assets/files/record/286189/arez6gd2s7isn9i1o6c7sexdq7bl",
497
- circles: "https://cdn.ing/assets/files/record/286190/gtmia3sncjtzetdshc20zf1d3c17",
498
- waves: "https://cdn.ing/assets/files/record/286191/mqlb33fzxz9cdth1bx7if0wmpkp1",
499
- crossPattern: "https://cdn.ing/assets/files/record/286193/9yfqwdbnqaipbp7fsb3wbzzmq472",
500
- architect: "https://cdn.ing/assets/files/record/286194/vgs88ugpvyhxu13wqgy0acvae6re",
501
- tinyCheckers: "https://cdn.ing/assets/files/record/286195/65efaknsw8kcpf9o3c2gybytsl5b",
502
- p6: "https://cdn.ing/assets/i/r/286196/6kl0rqnd6mjk8j7e525fo8fo0vkc/p6.webp"
503
- };
504
- var maskTop = "radial-gradient(ellipse 70% 60% at 50% 0%, #000 60%, transparent 100%)";
505
- var maskBottom = "radial-gradient(ellipse 100% 80% at 50% 100%, #000 50%, transparent 90%)";
506
- var maskCenter = "radial-gradient(ellipse 60% 60% at 50% 50%, #000 30%, transparent 70%)";
507
- var maskTopLeft = "radial-gradient(ellipse 80% 80% at 0% 0%, #000 50%, transparent 90%)";
508
- var maskTopRight = "radial-gradient(ellipse 80% 80% at 100% 0%, #000 50%, transparent 90%)";
509
- var maskBottomLeft = "radial-gradient(ellipse 80% 80% at 0% 100%, #000 50%, transparent 90%)";
510
- var maskBottomRight = "radial-gradient(ellipse 80% 80% at 100% 100%, #000 50%, transparent 90%)";
511
- var circuitBoardPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
512
- "svg",
513
- {
514
- className: "h-full w-full",
515
- xmlns: "http://www.w3.org/2000/svg",
516
- style: mask ? {
517
- maskImage: mask,
518
- WebkitMaskImage: mask
519
- } : void 0,
520
- children: [
521
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
522
- "pattern",
523
- {
524
- id,
525
- x: "0",
526
- y: "0",
527
- width: "100",
528
- height: "100",
529
- patternUnits: "userSpaceOnUse",
530
- children: [
531
- /* @__PURE__ */ jsxRuntime.jsx(
532
- "path",
533
- {
534
- d: "M0 50h40M60 50h40M50 0v40M50 60v40",
535
- stroke: "hsl(var(--muted))",
536
- strokeWidth: "1",
537
- fill: "none"
538
- }
539
- ),
540
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "3", fill: "hsl(var(--muted))" }),
541
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "0", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
542
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "100", cy: "50", r: "2", fill: "hsl(var(--muted))" }),
543
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "0", r: "2", fill: "hsl(var(--muted))" }),
544
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "50", cy: "100", r: "2", fill: "hsl(var(--muted))" })
545
- ]
546
- }
547
- ) }),
548
- /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
549
- ]
550
- }
551
- );
552
- var gridDotsPattern = (id, mask) => /* @__PURE__ */ jsxRuntime.jsxs(
553
- "svg",
554
- {
555
- className: "h-full w-full",
556
- xmlns: "http://www.w3.org/2000/svg",
557
- style: mask ? {
558
- maskImage: mask,
559
- WebkitMaskImage: mask
560
- } : void 0,
561
- children: [
562
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs(
563
- "pattern",
564
- {
565
- id,
566
- x: "0",
567
- y: "0",
568
- width: "40",
569
- height: "40",
570
- patternUnits: "userSpaceOnUse",
571
- children: [
572
- /* @__PURE__ */ jsxRuntime.jsx(
573
- "path",
574
- {
575
- d: "M0 20h40M20 0v40",
576
- stroke: "hsl(var(--muted))",
577
- strokeWidth: "0.5",
578
- fill: "none"
579
- }
580
- ),
581
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "20", cy: "20", r: "2", fill: "hsl(var(--muted))" })
582
- ]
583
- }
584
- ) }),
585
- /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "100%", height: "100%", fill: `url(#${id})` })
586
- ]
587
- }
588
- );
589
- var gridPattern = (size, mask) => /* @__PURE__ */ jsxRuntime.jsx(
590
- "div",
591
- {
592
- 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)]",
593
- style: {
594
- backgroundSize: `${size}px ${size}px`,
595
- ...mask ? {
596
- maskImage: mask,
597
- WebkitMaskImage: mask
598
- } : {}
599
- }
600
- }
601
- );
602
- var diagonalCrossPattern = (mask) => /* @__PURE__ */ jsxRuntime.jsx(
603
- "div",
604
- {
605
- className: "h-full w-full",
606
- style: {
607
- 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)",
608
- ...mask ? {
609
- maskImage: mask,
610
- WebkitMaskImage: mask
611
- } : {}
612
- }
613
- }
614
- );
615
- 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)";
616
- var dashedGridPattern = (fadeMask) => {
617
- const mask = fadeMask ? `${dashedGridMaskBase}, ${fadeMask}` : dashedGridMaskBase;
618
- return /* @__PURE__ */ jsxRuntime.jsx(
619
- "div",
620
- {
621
- className: "h-full w-full",
622
- style: {
623
- backgroundImage: "linear-gradient(to right, hsl(var(--muted)) 1px, transparent 1px), linear-gradient(to bottom, hsl(var(--muted)) 1px, transparent 1px)",
624
- backgroundSize: "20px 20px",
625
- backgroundPosition: "0 0, 0 0",
626
- maskImage: mask,
627
- WebkitMaskImage: mask,
628
- maskComposite: "intersect",
629
- WebkitMaskComposite: "source-in"
630
- }
785
+ id,
786
+ ...dataProps,
787
+ ...buttonDataAttributes
788
+ };
789
+ if (finalComponentType === "a" && shouldRenderLink) {
790
+ return /* @__PURE__ */ jsxRuntime.jsx(
791
+ "a",
792
+ {
793
+ ref,
794
+ href: normalizedHref,
795
+ target,
796
+ rel,
797
+ ...commonProps,
798
+ ...props,
799
+ children
800
+ }
801
+ );
631
802
  }
632
- );
633
- };
634
- var gradientGlow = (position) => /* @__PURE__ */ jsxRuntime.jsx(
635
- "div",
636
- {
637
- className: cn(
638
- "pointer-events-none absolute left-1/2 z-0 aspect-square w-3/4 -translate-x-1/2 rounded-full opacity-50 blur-3xl",
639
- position === "top" ? "-top-1/4" : "-bottom-1/4"
640
- ),
641
- style: {
642
- background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
803
+ if (finalComponentType === "button") {
804
+ return /* @__PURE__ */ jsxRuntime.jsx(
805
+ "button",
806
+ {
807
+ ref,
808
+ type: props.type || "button",
809
+ ...commonProps,
810
+ ...props,
811
+ children
812
+ }
813
+ );
643
814
  }
644
- }
645
- );
646
- var spotlight = (position) => /* @__PURE__ */ jsxRuntime.jsx(
647
- "div",
648
- {
649
- className: cn(
650
- "pointer-events-none absolute top-1/2 z-0 aspect-square w-3/4 -translate-y-1/2 rounded-full opacity-40 blur-3xl",
651
- position === "left" ? "-left-1/4" : "-right-1/4"
652
- ),
653
- style: {
654
- background: "radial-gradient(circle, hsl(var(--primary)) 0%, transparent 70%)"
815
+ if (finalComponentType === "div") {
816
+ return /* @__PURE__ */ jsxRuntime.jsx(
817
+ "div",
818
+ {
819
+ ref,
820
+ ...commonProps,
821
+ children
822
+ }
823
+ );
655
824
  }
656
- }
657
- );
658
- var patternOverlays = {
659
- circuitBoardBasic: () => circuitBoardPattern("circuit-board-basic"),
660
- circuitBoardFadeTop: () => circuitBoardPattern("circuit-board-fade-top", maskTop),
661
- circuitBoardFadeBottom: () => circuitBoardPattern("circuit-board-fade-bottom", maskBottom),
662
- circuitBoardFadeCenter: () => circuitBoardPattern("circuit-board-fade-center", maskCenter),
663
- circuitBoardFadeTopLeft: () => circuitBoardPattern("circuit-board-fade-top-left", maskTopLeft),
664
- circuitBoardFadeTopRight: () => circuitBoardPattern("circuit-board-fade-top-right", maskTopRight),
665
- circuitBoardFadeBottomLeft: () => circuitBoardPattern("circuit-board-fade-bottom-left", maskBottomLeft),
666
- circuitBoardFadeBottomRight: () => circuitBoardPattern("circuit-board-fade-bottom-right", maskBottomRight),
667
- dashedGridBasic: () => dashedGridPattern(),
668
- dashedGridFadeTop: () => dashedGridPattern(maskTop),
669
- dashedGridFadeBottom: () => dashedGridPattern(maskBottom),
670
- dashedGridFadeCenter: () => dashedGridPattern(maskCenter),
671
- dashedGridFadeTopLeft: () => dashedGridPattern(maskTopLeft),
672
- dashedGridFadeTopRight: () => dashedGridPattern(maskTopRight),
673
- dashedGridFadeBottomLeft: () => dashedGridPattern(maskBottomLeft),
674
- dashedGridFadeBottomRight: () => dashedGridPattern(maskBottomRight),
675
- diagonalCrossBasic: () => diagonalCrossPattern(),
676
- diagonalCrossFadeTop: () => diagonalCrossPattern(maskTop),
677
- diagonalCrossFadeBottom: () => diagonalCrossPattern(maskBottom),
678
- diagonalCrossFadeCenter: () => diagonalCrossPattern(maskCenter),
679
- diagonalCrossFadeTopLeft: () => diagonalCrossPattern(maskTopLeft),
680
- diagonalCrossFadeTopRight: () => diagonalCrossPattern(maskTopRight),
681
- diagonalCrossFadeBottomLeft: () => diagonalCrossPattern(maskBottomLeft),
682
- diagonalCrossFadeBottomRight: () => diagonalCrossPattern(maskBottomRight),
683
- gridBasic: () => gridPattern(40),
684
- gridFadeTop: () => gridPattern(32, maskTop),
685
- gridFadeBottom: () => gridPattern(32, maskBottom),
686
- gridFadeCenter: () => gridPattern(40, maskCenter),
687
- gridFadeTopLeft: () => gridPattern(32, maskTopLeft),
688
- gridFadeTopRight: () => gridPattern(32, maskTopRight),
689
- gridFadeBottomLeft: () => gridPattern(32, maskBottomLeft),
690
- gridFadeBottomRight: () => gridPattern(32, maskBottomRight),
691
- gridDotsBasic: () => gridDotsPattern("grid-dots-basic"),
692
- gridDotsFadeCenter: () => gridDotsPattern("grid-dots-fade-center", maskCenter),
693
- gradientGlowTop: () => gradientGlow("top"),
694
- gradientGlowBottom: () => gradientGlow("bottom"),
695
- spotlightLeft: () => spotlight("left"),
696
- spotlightRight: () => spotlight("right")
697
- };
698
- var inlinePatternStyles = {
699
- radialGradientTop: {
700
- background: "radial-gradient(125% 125% at 50% 10%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
701
- },
702
- radialGradientBottom: {
703
- background: "radial-gradient(125% 125% at 50% 90%, hsl(var(--background)) 40%, hsl(var(--primary)) 100%)"
704
- }
705
- };
706
- function PatternBackground({
707
- pattern,
708
- opacity = 0.08,
709
- className,
710
- style
711
- }) {
712
- if (!pattern) {
713
- return null;
714
- }
715
- if (pattern in inlinePatternStyles) {
716
- const inlineStyle = inlinePatternStyles[pattern];
717
825
  return /* @__PURE__ */ jsxRuntime.jsx(
718
- "div",
826
+ "span",
719
827
  {
720
- className: cn("pointer-events-none absolute inset-0 z-0", className),
721
- style: { ...inlineStyle, opacity, ...style },
722
- "aria-hidden": "true"
828
+ ref,
829
+ ...commonProps,
830
+ children
723
831
  }
724
832
  );
725
833
  }
726
- if (pattern in patternOverlays) {
727
- const Overlay = patternOverlays[pattern];
834
+ );
835
+ Pressable.displayName = "Pressable";
836
+ var MOBILE_CLASSES = {
837
+ "fit-left": "items-start md:items-center",
838
+ "fit-center": "items-center",
839
+ "fit-right": "items-end md:items-center",
840
+ "full-left": "items-stretch md:items-center",
841
+ "full-center": "items-stretch md:items-center",
842
+ "full-right": "items-stretch md:items-center"
843
+ };
844
+ function BlockActions({
845
+ mobileConfig,
846
+ actionsClassName,
847
+ verticalSpacing = "mt-4 md:mt-8",
848
+ actions,
849
+ actionsSlot
850
+ }) {
851
+ const width = mobileConfig?.width ?? "full";
852
+ const position = mobileConfig?.position ?? "center";
853
+ const mobileLayoutClass = MOBILE_CLASSES[`${width}-${position}`];
854
+ if (actionsSlot) {
855
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: actionsSlot });
856
+ } else if (actions && actions?.length > 0) {
728
857
  return /* @__PURE__ */ jsxRuntime.jsx(
729
858
  "div",
730
859
  {
731
- className: cn("pointer-events-none absolute inset-0 z-0", className),
732
- style: { opacity, ...style },
733
- "aria-hidden": "true",
734
- children: Overlay()
860
+ className: cn(
861
+ "flex flex-col md:flex-row flex-wrap gap-4",
862
+ mobileLayoutClass,
863
+ actionsClassName,
864
+ verticalSpacing
865
+ ),
866
+ children: actions.map((action, index) => /* @__PURE__ */ jsxRuntime.jsx(ActionComponent, { action }, index))
735
867
  }
736
868
  );
869
+ } else {
870
+ return null;
737
871
  }
738
- const patternUrl = pattern in patternSvgs ? patternSvgs[pattern] : pattern;
872
+ }
873
+ function ActionComponent({ action }) {
874
+ const {
875
+ label,
876
+ icon,
877
+ iconAfter,
878
+ children,
879
+ href,
880
+ onClick,
881
+ className: actionClassName,
882
+ ...pressableProps
883
+ } = action;
739
884
  return /* @__PURE__ */ jsxRuntime.jsx(
740
- "div",
885
+ Pressable,
741
886
  {
742
- className: cn("pointer-events-none absolute inset-0 z-0", className),
743
- style: {
744
- backgroundImage: `url(${patternUrl})`,
745
- backgroundRepeat: "repeat",
746
- backgroundSize: "auto",
747
- opacity,
748
- ...style
749
- },
750
- "aria-hidden": "true"
887
+ href,
888
+ onClick,
889
+ asButton: action.asButton ?? true,
890
+ className: actionClassName,
891
+ ...pressableProps,
892
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
893
+ icon,
894
+ label,
895
+ iconAfter
896
+ ] })
751
897
  }
752
898
  );
753
899
  }
754
- var backgroundStyles = {
755
- default: "bg-background text-foreground",
756
- white: "bg-white text-dark",
757
- gray: "bg-muted/30 text-foreground",
758
- dark: "bg-foreground text-background",
759
- transparent: "bg-transparent text-foreground",
760
- gradient: "bg-linear-to-br from-primary via-primary/90 to-foreground text-primary-foreground",
761
- primary: "bg-primary text-primary-foreground",
762
- secondary: "bg-secondary text-secondary-foreground",
763
- muted: "bg-muted text-muted-foreground"
764
- };
765
- var spacingStyles = {
766
- none: "py-0 md:py-0",
767
- sm: "py-12 md:py-16",
768
- md: "py-16 md:py-24",
769
- lg: "py-20 md:py-32",
770
- xl: "py-24 md:py-40"
771
- };
772
- var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
773
- var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
774
- var Section = React__namespace.default.forwardRef(
775
- ({
776
- id,
777
- title,
778
- subtitle,
779
- children,
780
- className,
781
- style,
782
- background = "default",
783
- spacing = "lg",
784
- pattern,
785
- patternOpacity,
786
- patternClassName,
787
- containerClassName,
788
- containerMaxWidth = "xl",
789
- ...props
790
- }, ref) => {
791
- const effectivePatternOpacity = patternOpacity !== void 0 ? patternOpacity : pattern ? 1 : 0;
792
- return /* @__PURE__ */ jsxRuntime.jsxs(
793
- "section",
794
- {
795
- ref,
796
- id,
797
- className: cn(
798
- "relative",
799
- pattern ? "overflow-hidden" : null,
800
- backgroundStyles[background],
801
- isPredefinedSpacing(spacing) ? spacingStyles[spacing] : spacing,
802
- className
803
- ),
804
- style,
805
- ...props,
806
- children: [
807
- /* @__PURE__ */ jsxRuntime.jsx(
808
- PatternBackground,
809
- {
810
- pattern,
811
- opacity: effectivePatternOpacity,
812
- className: patternClassName
813
- }
814
- ),
815
- /* @__PURE__ */ jsxRuntime.jsxs(
816
- Container,
817
- {
818
- maxWidth: containerMaxWidth,
819
- className: cn("relative z-10", containerClassName),
820
- children: [
821
- (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 text-center md:mb-16", children: [
822
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-sm font-semibold uppercase tracking-wider", children: subtitle }),
823
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: title })
824
- ] }),
825
- children
826
- ]
827
- }
828
- )
829
- ]
830
- }
831
- );
900
+ var imageAnimationVariants = [
901
+ // Top-left: slides in from left + up
902
+ {
903
+ hidden: { opacity: 0, x: -40, y: -30, scale: 0.92 },
904
+ visible: { opacity: 1, x: 0, y: 0, scale: 1 }
905
+ },
906
+ // Bottom-left: slides in from left + down
907
+ {
908
+ hidden: { opacity: 0, x: -30, y: 40, scale: 0.92 },
909
+ visible: { opacity: 1, x: 0, y: 0, scale: 1 }
910
+ },
911
+ // Top-right: slides in from right + up
912
+ {
913
+ hidden: { opacity: 0, x: 40, y: -30, scale: 0.92 },
914
+ visible: { opacity: 1, x: 0, y: 0, scale: 1 }
915
+ },
916
+ // Bottom-right: slides in from right + down
917
+ {
918
+ hidden: { opacity: 0, x: 30, y: 40, scale: 0.92 },
919
+ visible: { opacity: 1, x: 0, y: 0, scale: 1 }
832
920
  }
833
- );
834
- Section.displayName = "Section";
921
+ ];
922
+ var staggerDelays = [0, 0.15, 0.1, 0.25];
923
+ var imageTransition = {
924
+ type: "spring",
925
+ stiffness: 80,
926
+ damping: 20,
927
+ mass: 0.8
928
+ };
835
929
  function HeroAgencyAnimatedImages({
836
930
  heading,
837
- subheading,
838
- action,
839
- actionSlot,
931
+ description,
932
+ descriptionClassName,
933
+ actions,
934
+ actionsSlot,
935
+ actionsClassName,
840
936
  images,
841
937
  imagesSlot,
842
938
  background,
843
- spacing,
939
+ spacing = "xl",
940
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
844
941
  pattern,
845
942
  patternOpacity,
846
943
  className,
847
- containerClassName,
848
944
  contentClassName,
849
945
  headingClassName,
850
- subheadingClassName,
851
946
  imagesContainerClassName,
852
947
  optixFlowConfig
853
948
  }) {
854
- const renderAction = React.useMemo(() => {
855
- if (actionSlot) return actionSlot;
856
- if (!action) return null;
857
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
858
- return /* @__PURE__ */ jsxRuntime.jsx(
859
- Pressable,
860
- {
861
- asButton: true,
862
- className: actionClassName,
863
- ...pressableProps,
864
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
865
- icon,
866
- label,
867
- iconAfter
868
- ] })
869
- }
870
- );
871
- }, [actionSlot, action]);
872
- const renderImages = React.useMemo(() => {
949
+ const renderImages = React3.useMemo(() => {
873
950
  if (imagesSlot) return imagesSlot;
874
951
  if (!images || images.length === 0) return null;
875
952
  const leftImages = images.slice(0, 2);
876
953
  const rightImages = images.slice(2, 4);
877
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-2 items-center justify-center gap-4", children: [
878
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-end justify-center gap-4", children: leftImages.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
879
- img.Img,
880
- {
881
- src: image.src,
882
- alt: image.alt,
883
- className: cn("block h-full w-full object-cover object-center", image.className),
884
- optixFlowConfig
885
- }
886
- ) }, index)) }),
887
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start justify-center gap-4", children: rightImages.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
888
- img.Img,
889
- {
890
- src: image.src,
891
- alt: image.alt,
892
- className: cn("block h-full w-full object-cover object-center", image.className),
893
- optixFlowConfig
894
- }
895
- ) }, index)) })
954
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-2 items-center justify-center gap-5", children: [
955
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-end justify-center gap-5 pt-8", children: leftImages.map((image, index) => {
956
+ const variant = imageAnimationVariants[index];
957
+ const delay = staggerDelays[index];
958
+ return /* @__PURE__ */ jsxRuntime.jsxs(
959
+ framerMotion.motion.div,
960
+ {
961
+ initial: variant.hidden,
962
+ whileInView: variant.visible,
963
+ viewport: { once: true, amount: 0.3 },
964
+ transition: { ...imageTransition, delay },
965
+ className: "group relative overflow-hidden rounded-xl shadow-lg",
966
+ children: [
967
+ /* @__PURE__ */ jsxRuntime.jsx(
968
+ img.Img,
969
+ {
970
+ src: image.src,
971
+ alt: image.alt,
972
+ className: cn(
973
+ "block h-full w-full object-cover object-center transition-transform duration-500 ease-out group-hover:scale-105",
974
+ image.className
975
+ ),
976
+ optixFlowConfig
977
+ }
978
+ ),
979
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 rounded-xl ring-1 ring-inset ring-foreground/5 transition-all duration-500 group-hover:ring-foreground/10" })
980
+ ]
981
+ },
982
+ index
983
+ );
984
+ }) }),
985
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start justify-center gap-5 pb-8", children: rightImages.map((image, index) => {
986
+ const globalIndex = index + 2;
987
+ const variant = imageAnimationVariants[globalIndex];
988
+ const delay = staggerDelays[globalIndex];
989
+ return /* @__PURE__ */ jsxRuntime.jsxs(
990
+ framerMotion.motion.div,
991
+ {
992
+ initial: variant.hidden,
993
+ whileInView: variant.visible,
994
+ viewport: { once: true, amount: 0.3 },
995
+ transition: { ...imageTransition, delay },
996
+ className: "group relative overflow-hidden rounded-xl shadow-lg",
997
+ children: [
998
+ /* @__PURE__ */ jsxRuntime.jsx(
999
+ img.Img,
1000
+ {
1001
+ src: image.src,
1002
+ alt: image.alt,
1003
+ className: cn(
1004
+ "block h-full w-full object-cover object-center transition-transform duration-500 ease-out group-hover:scale-105",
1005
+ image.className
1006
+ ),
1007
+ optixFlowConfig
1008
+ }
1009
+ ),
1010
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 rounded-xl ring-1 ring-inset ring-foreground/5 transition-all duration-500 group-hover:ring-foreground/10" })
1011
+ ]
1012
+ },
1013
+ index
1014
+ );
1015
+ }) })
896
1016
  ] });
897
1017
  }, [imagesSlot, images, optixFlowConfig]);
898
1018
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -903,13 +1023,57 @@ function HeroAgencyAnimatedImages({
903
1023
  pattern,
904
1024
  patternOpacity,
905
1025
  className,
906
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container max-w-444", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
907
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full max-w-125 flex-col gap-8 md:gap-14 lg:max-w-full", contentClassName), children: [
908
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("font-serif text-5xl md:text-6xl lg:text-7xl xl:text-[5rem]", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
909
- subheading && (typeof subheading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("font-montserrat text-2xl leading-snug lg:text-3xl xl:text-4xl", subheadingClassName), children: subheading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: subheadingClassName, children: subheading })),
910
- renderAction
911
- ] }),
912
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto w-full max-w-211.5 lg:mx-0", imagesContainerClassName), children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.049627792 / 1, children: renderImages }) })
1026
+ containerClassName,
1027
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
1028
+ /* @__PURE__ */ jsxRuntime.jsxs(
1029
+ "div",
1030
+ {
1031
+ className: cn(
1032
+ "flex w-full max-w-125 flex-col gap-8 md:gap-14 lg:max-w-full",
1033
+ contentClassName
1034
+ ),
1035
+ children: [
1036
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1037
+ "h1",
1038
+ {
1039
+ className: cn(
1040
+ "text-5xl md:text-6xl lg:text-7xl xl:text-[5rem] text-left text-pretty",
1041
+ headingClassName
1042
+ ),
1043
+ children: heading
1044
+ }
1045
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
1046
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1047
+ "p",
1048
+ {
1049
+ className: cn(
1050
+ "text-left text-lg md:text-xl text-balance",
1051
+ descriptionClassName
1052
+ ),
1053
+ children: description
1054
+ }
1055
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1056
+ /* @__PURE__ */ jsxRuntime.jsx(
1057
+ BlockActions,
1058
+ {
1059
+ actions,
1060
+ actionsSlot,
1061
+ actionsClassName
1062
+ }
1063
+ )
1064
+ ]
1065
+ }
1066
+ ),
1067
+ /* @__PURE__ */ jsxRuntime.jsx(
1068
+ "div",
1069
+ {
1070
+ className: cn(
1071
+ "mx-auto w-full max-w-211.5 lg:mx-0",
1072
+ imagesContainerClassName
1073
+ ),
1074
+ children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.049627792 / 1, children: renderImages })
1075
+ }
1076
+ )
913
1077
  ] }) })
914
1078
  }
915
1079
  );