@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.
- package/dist/hero-adaptable-product-grid.cjs +1 -1
- package/dist/hero-adaptable-product-grid.js +1 -1
- package/dist/hero-agency-animated-images.cjs +795 -631
- package/dist/hero-agency-animated-images.d.cts +13 -9
- package/dist/hero-agency-animated-images.d.ts +13 -9
- package/dist/hero-agency-animated-images.js +794 -630
- package/dist/hero-business-carousel-dots.cjs +822 -911
- package/dist/hero-business-carousel-dots.d.cts +5 -1
- package/dist/hero-business-carousel-dots.d.ts +5 -1
- package/dist/hero-business-carousel-dots.js +824 -910
- package/dist/hero-coming-soon-countdown.cjs +267 -110
- package/dist/hero-coming-soon-countdown.d.cts +8 -11
- package/dist/hero-coming-soon-countdown.d.ts +8 -11
- package/dist/hero-coming-soon-countdown.js +268 -111
- package/dist/hero-conversation-intelligence.cjs +673 -639
- package/dist/hero-conversation-intelligence.js +663 -629
- package/dist/hero-creative-studio-stacked.cjs +899 -861
- package/dist/hero-creative-studio-stacked.d.cts +16 -15
- package/dist/hero-creative-studio-stacked.d.ts +16 -15
- package/dist/hero-creative-studio-stacked.js +897 -859
- package/dist/hero-customer-support-layered.cjs +89 -76
- package/dist/hero-customer-support-layered.js +89 -76
- package/dist/hero-developer-tools-code.cjs +721 -669
- package/dist/hero-developer-tools-code.d.cts +5 -1
- package/dist/hero-developer-tools-code.d.ts +5 -1
- package/dist/hero-developer-tools-code.js +719 -667
- package/dist/hero-digital-agency-fullscreen.cjs +722 -680
- package/dist/hero-digital-agency-fullscreen.d.cts +4 -20
- package/dist/hero-digital-agency-fullscreen.d.ts +4 -20
- package/dist/hero-digital-agency-fullscreen.js +722 -680
- package/dist/hero-ecommerce-product-showcase.cjs +892 -846
- package/dist/hero-ecommerce-product-showcase.js +889 -843
- package/dist/hero-enterprise-security.cjs +168 -132
- package/dist/hero-enterprise-security.d.cts +12 -19
- package/dist/hero-enterprise-security.d.ts +12 -19
- package/dist/hero-enterprise-security.js +168 -132
- package/dist/hero-event-registration.cjs +39 -39
- package/dist/hero-event-registration.js +39 -39
- package/dist/hero-fullscreen-background-image.cjs +3 -2
- package/dist/hero-fullscreen-background-image.js +3 -2
- package/dist/hero-fullscreen-logo-cta.cjs +4 -2
- package/dist/hero-fullscreen-logo-cta.js +4 -2
- package/dist/hero-innovation-image-grid.cjs +2 -2
- package/dist/hero-innovation-image-grid.js +2 -2
- package/dist/hero-mental-health-team.cjs +17 -17
- package/dist/hero-mental-health-team.d.cts +5 -5
- package/dist/hero-mental-health-team.d.ts +5 -5
- package/dist/hero-mental-health-team.js +17 -17
- package/dist/hero-mobile-app-download.cjs +2 -2
- package/dist/hero-mobile-app-download.js +2 -2
- package/dist/hero-newsletter-minimal.cjs +97 -57
- package/dist/hero-newsletter-minimal.d.cts +5 -1
- package/dist/hero-newsletter-minimal.d.ts +5 -1
- package/dist/hero-newsletter-minimal.js +97 -57
- package/dist/hero-shared-inbox-layered.cjs +522 -42
- package/dist/hero-shared-inbox-layered.d.cts +20 -4
- package/dist/hero-shared-inbox-layered.d.ts +20 -4
- package/dist/hero-shared-inbox-layered.js +505 -40
- package/dist/hero-startup-launch-cta.cjs +859 -816
- package/dist/hero-startup-launch-cta.d.cts +3 -2
- package/dist/hero-startup-launch-cta.d.ts +3 -2
- package/dist/hero-startup-launch-cta.js +858 -815
- package/dist/hero-therapy-testimonial-grid.cjs +1 -1
- package/dist/hero-therapy-testimonial-grid.js +1 -1
- package/dist/hero-video-dialog-gradient-BnCFFec0.d.ts +99 -0
- package/dist/hero-video-dialog-gradient-Dapebkzu.d.cts +99 -0
- package/dist/hero-video-dialog-gradient.cjs +24 -23
- package/dist/hero-video-dialog-gradient.d.cts +4 -94
- package/dist/hero-video-dialog-gradient.d.ts +4 -94
- package/dist/hero-video-dialog-gradient.js +24 -23
- package/dist/hero-welcome-asymmetric-images.cjs +652 -617
- package/dist/hero-welcome-asymmetric-images.d.cts +5 -1
- package/dist/hero-welcome-asymmetric-images.d.ts +5 -1
- package/dist/hero-welcome-asymmetric-images.js +651 -616
- package/dist/registry.cjs +1111 -848
- package/dist/registry.js +1111 -848
- package/package.json +1 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
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
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
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
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
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
|
-
"
|
|
826
|
+
"span",
|
|
719
827
|
{
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
828
|
+
ref,
|
|
829
|
+
...commonProps,
|
|
830
|
+
children
|
|
723
831
|
}
|
|
724
832
|
);
|
|
725
833
|
}
|
|
726
|
-
|
|
727
|
-
|
|
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(
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
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
|
-
|
|
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
|
-
|
|
885
|
+
Pressable,
|
|
741
886
|
{
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
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
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
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
|
-
|
|
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
|
-
|
|
838
|
-
|
|
839
|
-
|
|
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
|
|
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-
|
|
878
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-end justify-center gap-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
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
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
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
|
);
|