@yca-software/yca-react-core 0.0.1
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/README.md +129 -0
- package/dist/admin/index.d.ts +10 -0
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin-BVYdWtEy.d.ts +3 -0
- package/dist/api/index.d.ts +68 -0
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -0
- package/dist/auth/index.d.ts +49 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/chunk-2HJO2ICF.js +339 -0
- package/dist/chunk-2HJO2ICF.js.map +1 -0
- package/dist/chunk-3AYG73DK.js +174 -0
- package/dist/chunk-3AYG73DK.js.map +1 -0
- package/dist/chunk-3SCZ4Z6P.js +26 -0
- package/dist/chunk-3SCZ4Z6P.js.map +1 -0
- package/dist/chunk-3ZLODBRJ.js +21 -0
- package/dist/chunk-3ZLODBRJ.js.map +1 -0
- package/dist/chunk-6LO5O4G6.js +224 -0
- package/dist/chunk-6LO5O4G6.js.map +1 -0
- package/dist/chunk-APZVW5SW.js +75 -0
- package/dist/chunk-APZVW5SW.js.map +1 -0
- package/dist/chunk-EVZBADFR.js +583 -0
- package/dist/chunk-EVZBADFR.js.map +1 -0
- package/dist/chunk-GXWVFQCK.js +52 -0
- package/dist/chunk-GXWVFQCK.js.map +1 -0
- package/dist/chunk-KG4JVAKS.js +13 -0
- package/dist/chunk-KG4JVAKS.js.map +1 -0
- package/dist/chunk-KZH56VPP.js +183 -0
- package/dist/chunk-KZH56VPP.js.map +1 -0
- package/dist/chunk-LP7Q75C6.js +96 -0
- package/dist/chunk-LP7Q75C6.js.map +1 -0
- package/dist/chunk-NL4NAHXG.js +3 -0
- package/dist/chunk-NL4NAHXG.js.map +1 -0
- package/dist/chunk-PLSNCPEC.js +2507 -0
- package/dist/chunk-PLSNCPEC.js.map +1 -0
- package/dist/chunk-QFKVPVFC.js +1391 -0
- package/dist/chunk-QFKVPVFC.js.map +1 -0
- package/dist/chunk-TSXUUD64.js +64 -0
- package/dist/chunk-TSXUUD64.js.map +1 -0
- package/dist/chunk-UCJ76BEC.js +32 -0
- package/dist/chunk-UCJ76BEC.js.map +1 -0
- package/dist/chunk-WFTIYYII.js +3 -0
- package/dist/chunk-WFTIYYII.js.map +1 -0
- package/dist/components/forms/index.d.ts +101 -0
- package/dist/components/forms/index.js +7 -0
- package/dist/components/forms/index.js.map +1 -0
- package/dist/components/marketing/index.d.ts +473 -0
- package/dist/components/marketing/index.js +5 -0
- package/dist/components/marketing/index.js.map +1 -0
- package/dist/components/spa/index.d.ts +275 -0
- package/dist/components/spa/index.js +8 -0
- package/dist/components/spa/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +420 -0
- package/dist/components/ui/index.js +6 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/constants/index.d.ts +2 -0
- package/dist/constants/index.js +4 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/cookies-ZS_QYOR7.d.ts +8 -0
- package/dist/dateRangePickerTranslations-B99F2WQA.d.ts +9 -0
- package/dist/errors/index.d.ts +48 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/forms-VpLvEFob.d.ts +18 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +49 -0
- package/dist/lib/index.js +7 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/pagination-CFqoqiAG.d.ts +10 -0
- package/dist/radix-overlays-BlCr-uem.d.ts +10 -0
- package/dist/styles.css +9 -0
- package/dist/theme/marketing.css +750 -0
- package/dist/theme/tokens.css +115 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types-BuNHOJ1h.d.ts +58 -0
- package/dist/types-CN73TWSY.d.ts +51 -0
- package/dist/useAdminListPage-C4ZTTllP.d.ts +26 -0
- package/package.json +152 -0
|
@@ -0,0 +1,1391 @@
|
|
|
1
|
+
import { Card, CardHeader, CardTitle, CardContent, CardDescription, Button, Input } from './chunk-3AYG73DK.js';
|
|
2
|
+
import { cn } from './chunk-GXWVFQCK.js';
|
|
3
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
import { ArrowUpRight, Mail, Phone, MapPin, ChevronDown, Globe, Menu, X, Check } from 'lucide-react';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
|
|
7
|
+
function BentoFeatures({
|
|
8
|
+
id,
|
|
9
|
+
eyebrow,
|
|
10
|
+
title,
|
|
11
|
+
description,
|
|
12
|
+
cells,
|
|
13
|
+
className
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("ds-mkt-section-soft px-4 py-20 sm:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
16
|
+
(eyebrow || title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-14 text-center", children: [
|
|
17
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold uppercase tracking-wider text-primary", children: eyebrow }),
|
|
18
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
19
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-2xl text-lg text-muted-foreground", children: description })
|
|
20
|
+
] }),
|
|
21
|
+
/* @__PURE__ */ jsx("div", { className: "grid auto-rows-fr grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3 lg:gap-7", children: cells.map((cell) => /* @__PURE__ */ jsxs(
|
|
22
|
+
Card,
|
|
23
|
+
{
|
|
24
|
+
className: cn(
|
|
25
|
+
"ds-mkt-bento-tile flex h-full flex-col rounded-none border-0 bg-transparent p-0 shadow-none",
|
|
26
|
+
cell.className
|
|
27
|
+
),
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsxs(CardHeader, { className: "gap-4 px-6 pb-2 pt-7 sm:px-7", children: [
|
|
30
|
+
cell.icon && /* @__PURE__ */ jsx("div", { className: "ds-mkt-bento-icon-wrap [&_svg]:size-5", children: cell.icon }),
|
|
31
|
+
/* @__PURE__ */ jsx(CardTitle, { className: "text-xl leading-snug", children: cell.title })
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsx(CardContent, { className: "flex-1 px-6 pb-7 pt-0 sm:px-7", children: /* @__PURE__ */ jsx(CardDescription, { className: "text-base leading-relaxed", children: cell.description }) })
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
cell.title
|
|
37
|
+
)) })
|
|
38
|
+
] }) });
|
|
39
|
+
}
|
|
40
|
+
function BlogTeaser({ id, eyebrow, title, description, posts, className }) {
|
|
41
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-20", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
42
|
+
(eyebrow || title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
|
|
43
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-primary", children: eyebrow }),
|
|
44
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
45
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-2xl text-lg text-muted-foreground", children: description })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-8 md:grid-cols-2 lg:grid-cols-3", children: posts.map((post) => /* @__PURE__ */ jsxs(
|
|
48
|
+
"a",
|
|
49
|
+
{
|
|
50
|
+
href: post.href,
|
|
51
|
+
className: cn(
|
|
52
|
+
"group ds-mkt-surface-elevated flex flex-col overflow-hidden rounded-2xl border-0 transition duration-300",
|
|
53
|
+
"hover:-translate-y-1 hover:shadow-2xl"
|
|
54
|
+
),
|
|
55
|
+
children: [
|
|
56
|
+
post.image ? /* @__PURE__ */ jsxs("div", { className: "relative aspect-[16/10] overflow-hidden", children: [
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
"img",
|
|
59
|
+
{
|
|
60
|
+
src: post.image.src,
|
|
61
|
+
alt: post.image.alt,
|
|
62
|
+
className: "h-full w-full object-cover transition duration-500 group-hover:scale-105",
|
|
63
|
+
loading: "lazy"
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-background/80 via-transparent to-transparent opacity-0 transition group-hover:opacity-100" })
|
|
67
|
+
] }) : /* @__PURE__ */ jsx("div", { className: "aspect-[16/10] bg-gradient-to-br from-primary/15 via-muted to-accent/20" }),
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col p-6", children: [
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
"time",
|
|
71
|
+
{
|
|
72
|
+
dateTime: post.date,
|
|
73
|
+
className: "text-xs font-medium uppercase tracking-wide text-muted-foreground",
|
|
74
|
+
children: post.date
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ jsx("h3", { className: "mt-2 text-lg font-semibold leading-snug text-foreground group-hover:text-primary", children: post.title }),
|
|
78
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2 line-clamp-3 flex-1 text-sm text-muted-foreground", children: post.excerpt }),
|
|
79
|
+
/* @__PURE__ */ jsxs("span", { className: "mt-4 inline-flex items-center gap-1 text-sm font-medium text-primary", children: [
|
|
80
|
+
"Read more",
|
|
81
|
+
/* @__PURE__ */ jsx(ArrowUpRight, { className: "size-4 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5" })
|
|
82
|
+
] })
|
|
83
|
+
] })
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
post.href
|
|
87
|
+
)) })
|
|
88
|
+
] }) });
|
|
89
|
+
}
|
|
90
|
+
function ContactSection({
|
|
91
|
+
id,
|
|
92
|
+
eyebrow,
|
|
93
|
+
title,
|
|
94
|
+
description,
|
|
95
|
+
email,
|
|
96
|
+
phone,
|
|
97
|
+
address,
|
|
98
|
+
children,
|
|
99
|
+
className
|
|
100
|
+
}) {
|
|
101
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("ds-mkt-section-soft px-4 py-20", className), children: /* @__PURE__ */ jsx("div", { className: "container mx-auto max-w-6xl", children: /* @__PURE__ */ jsxs("div", { className: "grid gap-12 lg:grid-cols-2 lg:gap-16", children: [
|
|
102
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
103
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-primary", children: eyebrow }),
|
|
104
|
+
/* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
105
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: description }),
|
|
106
|
+
/* @__PURE__ */ jsxs("ul", { className: "mt-10 space-y-6 text-sm", children: [
|
|
107
|
+
email && /* @__PURE__ */ jsxs("li", { className: "flex gap-4", children: [
|
|
108
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm", children: /* @__PURE__ */ jsx(Mail, { className: "size-5", "aria-hidden": true }) }),
|
|
109
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
110
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium text-foreground", children: "Email" }),
|
|
111
|
+
/* @__PURE__ */ jsx(
|
|
112
|
+
"a",
|
|
113
|
+
{
|
|
114
|
+
href: `mailto:${email}`,
|
|
115
|
+
className: "text-muted-foreground underline-offset-4 transition-colors hover:text-foreground hover:underline",
|
|
116
|
+
children: email
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] })
|
|
120
|
+
] }),
|
|
121
|
+
phone && /* @__PURE__ */ jsxs("li", { className: "flex gap-4", children: [
|
|
122
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm", children: /* @__PURE__ */ jsx(Phone, { className: "size-5", "aria-hidden": true }) }),
|
|
123
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
124
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium text-foreground", children: "Phone" }),
|
|
125
|
+
/* @__PURE__ */ jsx(
|
|
126
|
+
"a",
|
|
127
|
+
{
|
|
128
|
+
href: `tel:${phone.replace(/\s/g, "")}`,
|
|
129
|
+
className: "text-muted-foreground underline-offset-4 transition-colors hover:text-foreground hover:underline",
|
|
130
|
+
children: phone
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
] })
|
|
134
|
+
] }),
|
|
135
|
+
address && /* @__PURE__ */ jsxs("li", { className: "flex gap-4", children: [
|
|
136
|
+
/* @__PURE__ */ jsx("span", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary shadow-sm", children: /* @__PURE__ */ jsx(MapPin, { className: "size-5", "aria-hidden": true }) }),
|
|
137
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
138
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium text-foreground", children: "Studio" }),
|
|
139
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground whitespace-pre-line", children: address })
|
|
140
|
+
] })
|
|
141
|
+
] })
|
|
142
|
+
] })
|
|
143
|
+
] }),
|
|
144
|
+
children && /* @__PURE__ */ jsx("div", { className: "ds-mkt-surface-elevated rounded-3xl border-0 p-6 sm:p-8 lg:p-10", children })
|
|
145
|
+
] }) }) });
|
|
146
|
+
}
|
|
147
|
+
function CtaBanner({
|
|
148
|
+
id,
|
|
149
|
+
title,
|
|
150
|
+
description,
|
|
151
|
+
primaryAction,
|
|
152
|
+
secondaryAction,
|
|
153
|
+
variant = "gradient",
|
|
154
|
+
className
|
|
155
|
+
}) {
|
|
156
|
+
const isGradient = variant === "gradient";
|
|
157
|
+
return /* @__PURE__ */ jsx(
|
|
158
|
+
"section",
|
|
159
|
+
{
|
|
160
|
+
id,
|
|
161
|
+
className: cn(
|
|
162
|
+
"px-4 py-20 sm:py-24",
|
|
163
|
+
isGradient && "ds-mkt-cta-shell",
|
|
164
|
+
variant === "solid" && "ds-mkt-cta-solid-shell text-primary-foreground",
|
|
165
|
+
className
|
|
166
|
+
),
|
|
167
|
+
children: /* @__PURE__ */ jsxs(
|
|
168
|
+
"div",
|
|
169
|
+
{
|
|
170
|
+
className: cn(
|
|
171
|
+
"container mx-auto max-w-3xl text-center",
|
|
172
|
+
isGradient && "ds-mkt-cta-panel px-6 py-10 sm:px-12 sm:py-12",
|
|
173
|
+
variant === "solid" && "ds-mkt-cta-solid-panel px-6 py-10 sm:px-12 sm:py-12"
|
|
174
|
+
),
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsx(
|
|
177
|
+
"h2",
|
|
178
|
+
{
|
|
179
|
+
className: cn(
|
|
180
|
+
"text-2xl font-bold tracking-tight sm:text-3xl",
|
|
181
|
+
isGradient && "text-foreground",
|
|
182
|
+
variant === "solid" && "text-primary-foreground"
|
|
183
|
+
),
|
|
184
|
+
children: title
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
description && /* @__PURE__ */ jsx(
|
|
188
|
+
"p",
|
|
189
|
+
{
|
|
190
|
+
className: cn(
|
|
191
|
+
"mx-auto mt-4 max-w-xl text-lg leading-relaxed",
|
|
192
|
+
isGradient && "text-muted-foreground",
|
|
193
|
+
variant === "solid" && "text-primary-foreground/90"
|
|
194
|
+
),
|
|
195
|
+
children: description
|
|
196
|
+
}
|
|
197
|
+
),
|
|
198
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs("div", { className: "mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row sm:gap-5", children: [
|
|
199
|
+
primaryAction && /* @__PURE__ */ jsx(
|
|
200
|
+
Button,
|
|
201
|
+
{
|
|
202
|
+
asChild: true,
|
|
203
|
+
size: "lg",
|
|
204
|
+
variant: variant === "solid" ? "secondary" : "default",
|
|
205
|
+
className: cn(
|
|
206
|
+
"min-h-12 px-8 text-base font-semibold",
|
|
207
|
+
isGradient && "ds-mkt-hero-cta-primary",
|
|
208
|
+
variant === "solid" && "!bg-primary-foreground !text-primary shadow-lg shadow-black/10"
|
|
209
|
+
),
|
|
210
|
+
children: /* @__PURE__ */ jsx("a", { href: primaryAction.href, children: primaryAction.label })
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
secondaryAction && /* @__PURE__ */ jsx(
|
|
214
|
+
Button,
|
|
215
|
+
{
|
|
216
|
+
asChild: true,
|
|
217
|
+
size: "lg",
|
|
218
|
+
variant: "outline",
|
|
219
|
+
className: cn(
|
|
220
|
+
"min-h-12 border-0 px-8 text-base font-semibold shadow-none",
|
|
221
|
+
isGradient && "ds-mkt-hero-cta-secondary bg-transparent hover:bg-transparent",
|
|
222
|
+
variant === "solid" && "border-2 !border-primary-foreground/35 !bg-transparent !text-primary-foreground hover:!bg-primary-foreground/10"
|
|
223
|
+
),
|
|
224
|
+
children: /* @__PURE__ */ jsx("a", { href: secondaryAction.href, children: secondaryAction.label })
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
] })
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
var DEFAULT_PALETTE = "@%#*+=-:.";
|
|
235
|
+
function DefaultCenterMark() {
|
|
236
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", className: "h-7 w-7 text-white", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M12 3 21 19H3L12 3Z" }) });
|
|
237
|
+
}
|
|
238
|
+
function beamIntensity(px, py, ox, oy, cx, cy, beamWidth) {
|
|
239
|
+
const vx = cx - ox;
|
|
240
|
+
const vy = cy - oy;
|
|
241
|
+
const len = Math.hypot(vx, vy) || 1;
|
|
242
|
+
const ux = vx / len;
|
|
243
|
+
const uy = vy / len;
|
|
244
|
+
const wx = px - ox;
|
|
245
|
+
const wy = py - oy;
|
|
246
|
+
const t = wx * ux + wy * uy;
|
|
247
|
+
const clampedT = Math.max(-len * 0.15, Math.min(len * 1.25, t));
|
|
248
|
+
const projX = ox + ux * clampedT;
|
|
249
|
+
const projY = oy + uy * clampedT;
|
|
250
|
+
const dist = Math.hypot(px - projX, py - projY);
|
|
251
|
+
const along = t / len;
|
|
252
|
+
const cone = Math.max(0, 1 - along * 0.35);
|
|
253
|
+
const gauss = Math.exp(-(dist * dist) / (beamWidth * beamWidth * cone * cone + 1e-6));
|
|
254
|
+
const edgeFade = Math.min(1, Math.max(0, 1.12 - along));
|
|
255
|
+
return (gauss * edgeFade * cone) ** 1.35;
|
|
256
|
+
}
|
|
257
|
+
function ErrorSpotlight({
|
|
258
|
+
title = "Something went wrong",
|
|
259
|
+
description,
|
|
260
|
+
centerContent,
|
|
261
|
+
symbolPalette = DEFAULT_PALETTE,
|
|
262
|
+
cellSize = 11,
|
|
263
|
+
className
|
|
264
|
+
}) {
|
|
265
|
+
const wrapRef = React.useRef(null);
|
|
266
|
+
const canvasRef = React.useRef(null);
|
|
267
|
+
const cursorRef = React.useRef({ x: 0.5, y: 0.35 });
|
|
268
|
+
const rafRef = React.useRef(0);
|
|
269
|
+
const palette = React.useMemo(() => {
|
|
270
|
+
const chars = [...symbolPalette.replace(/\s+/g, "")];
|
|
271
|
+
return chars.length > 0 ? chars : [...DEFAULT_PALETTE.replace(/\s+/g, "")];
|
|
272
|
+
}, [symbolPalette]);
|
|
273
|
+
const draw = React.useCallback(() => {
|
|
274
|
+
const canvas = canvasRef.current;
|
|
275
|
+
const section = wrapRef.current;
|
|
276
|
+
if (!canvas || !section) return;
|
|
277
|
+
const dpr = Math.min(2, typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1);
|
|
278
|
+
const w = section.clientWidth;
|
|
279
|
+
const h = section.clientHeight;
|
|
280
|
+
if (w < 1 || h < 1) return;
|
|
281
|
+
canvas.width = Math.floor(w * dpr);
|
|
282
|
+
canvas.height = Math.floor(h * dpr);
|
|
283
|
+
canvas.style.width = `${w}px`;
|
|
284
|
+
canvas.style.height = `${h}px`;
|
|
285
|
+
const ctx = canvas.getContext("2d");
|
|
286
|
+
if (!ctx) return;
|
|
287
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
288
|
+
ctx.fillStyle = "#000000";
|
|
289
|
+
ctx.fillRect(0, 0, w, h);
|
|
290
|
+
const ox = w * 0.5;
|
|
291
|
+
const oy = h - 56;
|
|
292
|
+
const cx = cursorRef.current.x * w;
|
|
293
|
+
const cy = cursorRef.current.y * h;
|
|
294
|
+
const beamW = Math.max(28, Math.min(w, h) * 0.09);
|
|
295
|
+
ctx.textBaseline = "middle";
|
|
296
|
+
ctx.textAlign = "center";
|
|
297
|
+
ctx.font = `${Math.max(8, cellSize - 2)}px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`;
|
|
298
|
+
const step = Math.max(6, cellSize);
|
|
299
|
+
const cutoff = 0.045;
|
|
300
|
+
for (let py = step * 0.5; py < h; py += step) {
|
|
301
|
+
for (let px = step * 0.5; px < w; px += step) {
|
|
302
|
+
const raw = beamIntensity(px, py, ox, oy, cx, cy, beamW);
|
|
303
|
+
if (raw < cutoff) continue;
|
|
304
|
+
const intensity = Math.min(1, (raw - cutoff) / (1 - cutoff));
|
|
305
|
+
const idx = Math.floor((1 - intensity) * (palette.length - 1));
|
|
306
|
+
const ch = palette[Math.max(0, Math.min(palette.length - 1, idx))];
|
|
307
|
+
const alpha = 0.08 + intensity ** 1.15 * 0.92;
|
|
308
|
+
ctx.fillStyle = `rgba(255,255,255,${alpha})`;
|
|
309
|
+
ctx.fillText(ch, px, py);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}, [cellSize, palette]);
|
|
313
|
+
const scheduleDraw = React.useCallback(() => {
|
|
314
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
315
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
316
|
+
rafRef.current = 0;
|
|
317
|
+
draw();
|
|
318
|
+
});
|
|
319
|
+
}, [draw]);
|
|
320
|
+
React.useEffect(() => {
|
|
321
|
+
const section = wrapRef.current;
|
|
322
|
+
if (!section) return;
|
|
323
|
+
const ro = new ResizeObserver(() => scheduleDraw());
|
|
324
|
+
ro.observe(section);
|
|
325
|
+
scheduleDraw();
|
|
326
|
+
return () => {
|
|
327
|
+
ro.disconnect();
|
|
328
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
329
|
+
};
|
|
330
|
+
}, [scheduleDraw]);
|
|
331
|
+
const onPointerMove = (event) => {
|
|
332
|
+
const el = event.currentTarget;
|
|
333
|
+
const rect = el.getBoundingClientRect();
|
|
334
|
+
cursorRef.current = {
|
|
335
|
+
x: (event.clientX - rect.left) / rect.width,
|
|
336
|
+
y: (event.clientY - rect.top) / rect.height
|
|
337
|
+
};
|
|
338
|
+
scheduleDraw();
|
|
339
|
+
};
|
|
340
|
+
return /* @__PURE__ */ jsxs(
|
|
341
|
+
"section",
|
|
342
|
+
{
|
|
343
|
+
ref: wrapRef,
|
|
344
|
+
className: cn(
|
|
345
|
+
"relative isolate min-h-screen w-full cursor-crosshair overflow-hidden bg-black text-white",
|
|
346
|
+
className
|
|
347
|
+
),
|
|
348
|
+
onPointerMove,
|
|
349
|
+
children: [
|
|
350
|
+
/* @__PURE__ */ jsx(
|
|
351
|
+
"canvas",
|
|
352
|
+
{
|
|
353
|
+
ref: canvasRef,
|
|
354
|
+
"aria-hidden": "true",
|
|
355
|
+
className: "pointer-events-none absolute inset-0 h-full w-full"
|
|
356
|
+
}
|
|
357
|
+
),
|
|
358
|
+
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-x-0 top-[38%] flex justify-center px-6 text-center", children: /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
359
|
+
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-semibold tracking-tight text-white/90 md:text-4xl", children: title }),
|
|
360
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto max-w-xl text-sm text-white/55 md:text-base", children: description })
|
|
361
|
+
] }) }),
|
|
362
|
+
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-end justify-center pb-14", children: /* @__PURE__ */ jsx("div", { className: "relative flex flex-col items-center", children: /* @__PURE__ */ jsx("div", { className: "grid place-items-center rounded-full border border-white/20 bg-black/40 p-2.5 backdrop-blur-[2px]", children: centerContent ?? /* @__PURE__ */ jsx(DefaultCenterMark, {}) }) }) })
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
function FaqSection({ id, eyebrow, title, description, items, className }) {
|
|
368
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-20", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-3xl", children: [
|
|
369
|
+
(eyebrow || title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
|
|
370
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-primary", children: eyebrow }),
|
|
371
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
372
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-xl text-lg text-muted-foreground", children: description })
|
|
373
|
+
] }),
|
|
374
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: items.map((item) => /* @__PURE__ */ jsxs(
|
|
375
|
+
"details",
|
|
376
|
+
{
|
|
377
|
+
className: "group ds-mkt-surface-elevated rounded-2xl border-0 px-6 py-2 transition-colors open:bg-card/80",
|
|
378
|
+
children: [
|
|
379
|
+
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium text-foreground [&::-webkit-details-marker]:hidden", children: [
|
|
380
|
+
item.question,
|
|
381
|
+
/* @__PURE__ */ jsx(
|
|
382
|
+
ChevronDown,
|
|
383
|
+
{
|
|
384
|
+
className: "size-5 shrink-0 text-muted-foreground transition-transform duration-300 group-open:rotate-180",
|
|
385
|
+
"aria-hidden": true
|
|
386
|
+
}
|
|
387
|
+
)
|
|
388
|
+
] }),
|
|
389
|
+
/* @__PURE__ */ jsx("div", { className: "border-t border-border/40 pb-4 pt-0 text-muted-foreground leading-relaxed", children: item.answer })
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
item.question
|
|
393
|
+
)) })
|
|
394
|
+
] }) });
|
|
395
|
+
}
|
|
396
|
+
function FeatureMedia({
|
|
397
|
+
id,
|
|
398
|
+
title,
|
|
399
|
+
description,
|
|
400
|
+
eyebrow,
|
|
401
|
+
image,
|
|
402
|
+
media,
|
|
403
|
+
imagePosition = "left",
|
|
404
|
+
className
|
|
405
|
+
}) {
|
|
406
|
+
const mediaBlock = media ?? (image ? /* @__PURE__ */ jsx(
|
|
407
|
+
"img",
|
|
408
|
+
{
|
|
409
|
+
src: image.src,
|
|
410
|
+
alt: image.alt,
|
|
411
|
+
className: cn(
|
|
412
|
+
"h-full w-full object-cover transition-transform duration-500 hover:scale-[1.02]",
|
|
413
|
+
image.className
|
|
414
|
+
),
|
|
415
|
+
width: 640,
|
|
416
|
+
height: 480,
|
|
417
|
+
loading: "lazy",
|
|
418
|
+
decoding: "async"
|
|
419
|
+
}
|
|
420
|
+
) : null);
|
|
421
|
+
const textBlock = /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center space-y-4", children: [
|
|
422
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-primary", children: eyebrow }),
|
|
423
|
+
/* @__PURE__ */ jsx("h3", { className: "text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
|
|
424
|
+
/* @__PURE__ */ jsx("p", { className: "text-lg text-muted-foreground", children: description })
|
|
425
|
+
] });
|
|
426
|
+
const isLeft = imagePosition === "left";
|
|
427
|
+
return /* @__PURE__ */ jsx(
|
|
428
|
+
"div",
|
|
429
|
+
{
|
|
430
|
+
id,
|
|
431
|
+
className: cn("grid items-center gap-10 py-12 md:gap-16 md:py-16 lg:grid-cols-2", className),
|
|
432
|
+
children: isLeft ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
433
|
+
mediaBlock && /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame w-full lg:order-none", children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden bg-muted/30", children: /* @__PURE__ */ jsx("div", { className: "absolute inset-0 [&_img]:h-full [&_img]:w-full [&_img]:object-cover", children: mediaBlock }) }) }),
|
|
434
|
+
textBlock
|
|
435
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
436
|
+
textBlock,
|
|
437
|
+
mediaBlock && /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame w-full", children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden bg-muted/30", children: /* @__PURE__ */ jsx("div", { className: "absolute inset-0 [&_img]:h-full [&_img]:w-full [&_img]:object-cover", children: mediaBlock }) }) })
|
|
438
|
+
] })
|
|
439
|
+
}
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
function Footer({ logo, description, contact, links, attribution, className }) {
|
|
443
|
+
return /* @__PURE__ */ jsx(
|
|
444
|
+
"footer",
|
|
445
|
+
{
|
|
446
|
+
className: cn(
|
|
447
|
+
"ds-mkt-footer-depth w-full border-t border-border/60 text-foreground",
|
|
448
|
+
className
|
|
449
|
+
),
|
|
450
|
+
children: /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-7xl px-4 py-12 sm:px-6 lg:px-8", children: [
|
|
451
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-10 md:grid-cols-3", children: [
|
|
452
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
453
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx("span", { className: "text-lg font-extrabold tracking-tight text-foreground", children: logo }) : logo }),
|
|
454
|
+
description && /* @__PURE__ */ jsx("p", { className: "max-w-xs text-sm leading-relaxed text-muted-foreground", children: description })
|
|
455
|
+
] }),
|
|
456
|
+
links && links.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
457
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: "Navigation" }),
|
|
458
|
+
/* @__PURE__ */ jsx("ul", { className: "space-y-2 text-sm text-muted-foreground", children: links.map((link) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
459
|
+
"a",
|
|
460
|
+
{
|
|
461
|
+
href: link.href,
|
|
462
|
+
className: "inline-flex min-h-[24px] items-center py-0.5 pl-0 hover:text-foreground transition-colors",
|
|
463
|
+
children: link.label
|
|
464
|
+
}
|
|
465
|
+
) }, link.href)) })
|
|
466
|
+
] }),
|
|
467
|
+
contact && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
468
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: "Contact" }),
|
|
469
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2 text-sm text-muted-foreground", children: [
|
|
470
|
+
contact.address && /* @__PURE__ */ jsx("p", { className: "leading-relaxed", children: contact.address }),
|
|
471
|
+
contact.phone && /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(
|
|
472
|
+
"a",
|
|
473
|
+
{
|
|
474
|
+
href: `tel:${contact.phone}`,
|
|
475
|
+
className: "hover:text-foreground transition-colors",
|
|
476
|
+
children: contact.phone
|
|
477
|
+
}
|
|
478
|
+
) }),
|
|
479
|
+
contact.email && /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(
|
|
480
|
+
"a",
|
|
481
|
+
{
|
|
482
|
+
href: `mailto:${contact.email}`,
|
|
483
|
+
className: "inline-flex min-h-[24px] items-center hover:text-foreground transition-colors",
|
|
484
|
+
children: contact.email
|
|
485
|
+
}
|
|
486
|
+
) })
|
|
487
|
+
] })
|
|
488
|
+
] })
|
|
489
|
+
] }),
|
|
490
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-10 border-t border-border pt-8 text-center text-sm text-muted-foreground", children: [
|
|
491
|
+
/* @__PURE__ */ jsxs("p", { children: [
|
|
492
|
+
"\xA9 ",
|
|
493
|
+
(/* @__PURE__ */ new Date()).getFullYear(),
|
|
494
|
+
" All rights reserved."
|
|
495
|
+
] }),
|
|
496
|
+
attribution && /* @__PURE__ */ jsx("p", { className: "mt-2 text-xs text-muted-foreground/90", children: attribution })
|
|
497
|
+
] })
|
|
498
|
+
] })
|
|
499
|
+
}
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
function Hero({
|
|
503
|
+
id,
|
|
504
|
+
subtitle,
|
|
505
|
+
title,
|
|
506
|
+
description,
|
|
507
|
+
primaryAction,
|
|
508
|
+
secondaryAction,
|
|
509
|
+
className
|
|
510
|
+
}) {
|
|
511
|
+
return /* @__PURE__ */ jsx(
|
|
512
|
+
"section",
|
|
513
|
+
{
|
|
514
|
+
id,
|
|
515
|
+
className: cn(
|
|
516
|
+
"ds-mkt-hero-mesh flex min-h-[80vh] flex-col items-center justify-center px-4 py-20 text-center",
|
|
517
|
+
className
|
|
518
|
+
),
|
|
519
|
+
children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-4xl space-y-6", children: [
|
|
520
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "text-lg font-medium text-muted-foreground", children: subtitle }),
|
|
521
|
+
/* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold tracking-tight sm:text-5xl md:text-6xl lg:text-7xl", children: title }),
|
|
522
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto max-w-2xl text-lg text-muted-foreground sm:text-xl", children: description }),
|
|
523
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4 sm:flex-row", children: [
|
|
524
|
+
primaryAction && /* @__PURE__ */ jsx(
|
|
525
|
+
Button,
|
|
526
|
+
{
|
|
527
|
+
asChild: true,
|
|
528
|
+
size: "lg",
|
|
529
|
+
className: "ds-mkt-hero-cta-primary min-h-12 px-8 text-base font-semibold",
|
|
530
|
+
children: /* @__PURE__ */ jsx("a", { href: primaryAction.href, children: primaryAction.label })
|
|
531
|
+
}
|
|
532
|
+
),
|
|
533
|
+
secondaryAction && /* @__PURE__ */ jsx(
|
|
534
|
+
Button,
|
|
535
|
+
{
|
|
536
|
+
asChild: true,
|
|
537
|
+
variant: "outline",
|
|
538
|
+
size: "lg",
|
|
539
|
+
className: "ds-mkt-hero-cta-secondary min-h-12 border-0 px-8 text-base font-semibold bg-transparent shadow-none hover:bg-transparent",
|
|
540
|
+
children: /* @__PURE__ */ jsx("a", { href: secondaryAction.href, children: secondaryAction.label })
|
|
541
|
+
}
|
|
542
|
+
)
|
|
543
|
+
] })
|
|
544
|
+
] })
|
|
545
|
+
}
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
function HeroSplit({
|
|
549
|
+
id,
|
|
550
|
+
subtitle,
|
|
551
|
+
title,
|
|
552
|
+
description,
|
|
553
|
+
primaryAction,
|
|
554
|
+
secondaryAction,
|
|
555
|
+
image,
|
|
556
|
+
media,
|
|
557
|
+
decorative = true,
|
|
558
|
+
className
|
|
559
|
+
}) {
|
|
560
|
+
const mediaContent = media ?? (image ? /* @__PURE__ */ jsx(
|
|
561
|
+
"img",
|
|
562
|
+
{
|
|
563
|
+
src: image.src,
|
|
564
|
+
alt: image.alt,
|
|
565
|
+
className: cn(
|
|
566
|
+
"absolute inset-0 h-full w-full object-cover",
|
|
567
|
+
decorative && "ds-mkt-media-float",
|
|
568
|
+
image.className
|
|
569
|
+
),
|
|
570
|
+
width: 800,
|
|
571
|
+
height: 600,
|
|
572
|
+
loading: "eager",
|
|
573
|
+
decoding: "async"
|
|
574
|
+
}
|
|
575
|
+
) : null);
|
|
576
|
+
return /* @__PURE__ */ jsx(
|
|
577
|
+
"section",
|
|
578
|
+
{
|
|
579
|
+
id,
|
|
580
|
+
className: cn(
|
|
581
|
+
"relative overflow-hidden px-4 py-16 sm:py-24 lg:py-28",
|
|
582
|
+
decorative && "ds-mkt-gradient-bg ds-mkt-hero-split-stage",
|
|
583
|
+
className
|
|
584
|
+
),
|
|
585
|
+
children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-hero-split-content container mx-auto max-w-7xl", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-16", children: [
|
|
586
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-6 text-center lg:text-left", children: [
|
|
587
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-muted-foreground", children: subtitle }),
|
|
588
|
+
/* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl", children: title }),
|
|
589
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto max-w-xl text-lg text-muted-foreground lg:mx-0", children: description }),
|
|
590
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center gap-4 sm:flex-row lg:justify-start", children: [
|
|
591
|
+
primaryAction && /* @__PURE__ */ jsx(
|
|
592
|
+
Button,
|
|
593
|
+
{
|
|
594
|
+
asChild: true,
|
|
595
|
+
size: "lg",
|
|
596
|
+
className: "ds-mkt-hero-cta-primary min-h-12 px-8 text-base font-semibold",
|
|
597
|
+
children: /* @__PURE__ */ jsx("a", { href: primaryAction.href, children: primaryAction.label })
|
|
598
|
+
}
|
|
599
|
+
),
|
|
600
|
+
secondaryAction && /* @__PURE__ */ jsx(
|
|
601
|
+
Button,
|
|
602
|
+
{
|
|
603
|
+
asChild: true,
|
|
604
|
+
variant: "outline",
|
|
605
|
+
size: "lg",
|
|
606
|
+
className: "ds-mkt-hero-cta-secondary min-h-12 border-0 px-8 text-base font-semibold bg-transparent shadow-none hover:bg-transparent",
|
|
607
|
+
children: /* @__PURE__ */ jsx("a", { href: secondaryAction.href, children: secondaryAction.label })
|
|
608
|
+
}
|
|
609
|
+
)
|
|
610
|
+
] })
|
|
611
|
+
] }),
|
|
612
|
+
mediaContent && /* @__PURE__ */ jsx(
|
|
613
|
+
"div",
|
|
614
|
+
{
|
|
615
|
+
className: cn(
|
|
616
|
+
"relative mx-auto w-full max-w-lg lg:max-w-none",
|
|
617
|
+
decorative && "ds-mkt-fade-up"
|
|
618
|
+
),
|
|
619
|
+
children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame", children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame-inner relative aspect-[4/3] w-full overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "absolute inset-0 [&_iframe]:h-full [&_iframe]:w-full [&_iframe]:border-0 [&_video]:h-full [&_video]:w-full [&_video]:object-cover", children: mediaContent }) }) })
|
|
620
|
+
}
|
|
621
|
+
)
|
|
622
|
+
] }) })
|
|
623
|
+
}
|
|
624
|
+
);
|
|
625
|
+
}
|
|
626
|
+
function LogoCloud({ id, title, logos, className }) {
|
|
627
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("border-y border-border/40 bg-muted/15 px-4 py-14", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
628
|
+
title && /* @__PURE__ */ jsx("p", { className: "mb-10 text-center text-sm font-medium text-muted-foreground", children: title }),
|
|
629
|
+
/* @__PURE__ */ jsx("div", { className: "ds-mkt-logo-rail flex flex-wrap items-center justify-center gap-x-10 gap-y-8 px-8 py-10 md:gap-x-14", children: logos.map((logo) => {
|
|
630
|
+
const img = /* @__PURE__ */ jsx(
|
|
631
|
+
"img",
|
|
632
|
+
{
|
|
633
|
+
src: logo.src,
|
|
634
|
+
alt: logo.alt,
|
|
635
|
+
className: "h-8 w-auto max-w-[120px] object-contain opacity-60 grayscale transition-opacity hover:opacity-100 md:h-9",
|
|
636
|
+
loading: "lazy",
|
|
637
|
+
decoding: "async"
|
|
638
|
+
}
|
|
639
|
+
);
|
|
640
|
+
return /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: logo.href ? /* @__PURE__ */ jsx(
|
|
641
|
+
"a",
|
|
642
|
+
{
|
|
643
|
+
href: logo.href,
|
|
644
|
+
className: "inline-flex focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded",
|
|
645
|
+
rel: "noopener noreferrer",
|
|
646
|
+
target: "_blank",
|
|
647
|
+
children: img
|
|
648
|
+
}
|
|
649
|
+
) : img }, `${logo.src}-${logo.alt}`);
|
|
650
|
+
}) })
|
|
651
|
+
] }) });
|
|
652
|
+
}
|
|
653
|
+
function Navigation({
|
|
654
|
+
logo,
|
|
655
|
+
logoHref,
|
|
656
|
+
links,
|
|
657
|
+
cta,
|
|
658
|
+
languageSwitcher,
|
|
659
|
+
className
|
|
660
|
+
}) {
|
|
661
|
+
const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false);
|
|
662
|
+
const [languageMenuOpen, setLanguageMenuOpen] = React.useState(false);
|
|
663
|
+
const languageMenuRef = React.useRef(null);
|
|
664
|
+
React.useEffect(() => {
|
|
665
|
+
const handlePointerDown = (event) => {
|
|
666
|
+
if (!languageMenuRef.current) return;
|
|
667
|
+
const target = event.target;
|
|
668
|
+
if (!languageMenuRef.current.contains(target)) {
|
|
669
|
+
setLanguageMenuOpen(false);
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
const handleEscape = (event) => {
|
|
673
|
+
if (event.key === "Escape") {
|
|
674
|
+
setLanguageMenuOpen(false);
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
678
|
+
document.addEventListener("keydown", handleEscape);
|
|
679
|
+
return () => {
|
|
680
|
+
document.removeEventListener("pointerdown", handlePointerDown);
|
|
681
|
+
document.removeEventListener("keydown", handleEscape);
|
|
682
|
+
};
|
|
683
|
+
}, []);
|
|
684
|
+
React.useEffect(() => {
|
|
685
|
+
const previousOverflow = document.body.style.overflow;
|
|
686
|
+
document.body.style.overflow = mobileMenuOpen ? "hidden" : "";
|
|
687
|
+
return () => {
|
|
688
|
+
document.body.style.overflow = previousOverflow;
|
|
689
|
+
};
|
|
690
|
+
}, [mobileMenuOpen]);
|
|
691
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
692
|
+
/* @__PURE__ */ jsx(
|
|
693
|
+
"nav",
|
|
694
|
+
{
|
|
695
|
+
className: cn(
|
|
696
|
+
"fixed top-0 left-0 right-0 z-50 w-full border-b border-border/60 bg-background/90 shadow-[0_8px_30px_-12px_color-mix(in_oklch,var(--foreground)_12%,transparent)] backdrop-blur-md supports-backdrop-filter:bg-background/55",
|
|
697
|
+
className
|
|
698
|
+
),
|
|
699
|
+
children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex h-16 w-full max-w-full items-center justify-between gap-8 px-4 sm:px-6 lg:px-8", children: [
|
|
700
|
+
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: typeof logo === "string" ? logoHref ? /* @__PURE__ */ jsx(
|
|
701
|
+
"a",
|
|
702
|
+
{
|
|
703
|
+
href: logoHref,
|
|
704
|
+
"aria-label": "Go to top",
|
|
705
|
+
className: "text-xl font-bold tracking-tight text-foreground sm:text-2xl",
|
|
706
|
+
children: logo
|
|
707
|
+
}
|
|
708
|
+
) : /* @__PURE__ */ jsx("span", { className: "text-xl font-bold tracking-tight text-foreground sm:text-2xl", children: logo }) : logo }),
|
|
709
|
+
/* @__PURE__ */ jsx("div", { className: "hidden flex-1 items-center justify-center gap-6 md:flex", children: links.map((link) => /* @__PURE__ */ jsx(
|
|
710
|
+
"a",
|
|
711
|
+
{
|
|
712
|
+
href: link.href,
|
|
713
|
+
className: "text-sm font-medium text-muted-foreground transition-colors hover:text-foreground",
|
|
714
|
+
children: link.label
|
|
715
|
+
},
|
|
716
|
+
link.href
|
|
717
|
+
)) }),
|
|
718
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [
|
|
719
|
+
languageSwitcher && /* @__PURE__ */ jsxs("div", { className: "relative", ref: languageMenuRef, children: [
|
|
720
|
+
/* @__PURE__ */ jsx(
|
|
721
|
+
Button,
|
|
722
|
+
{
|
|
723
|
+
type: "button",
|
|
724
|
+
variant: "outline",
|
|
725
|
+
size: "icon",
|
|
726
|
+
className: "size-9 border-border/60 bg-background/80 backdrop-blur-sm",
|
|
727
|
+
onClick: () => setLanguageMenuOpen((open) => !open),
|
|
728
|
+
"aria-label": languageSwitcher.ariaLabel ?? "Select language",
|
|
729
|
+
"aria-expanded": languageMenuOpen,
|
|
730
|
+
"aria-haspopup": "menu",
|
|
731
|
+
children: /* @__PURE__ */ jsx(Globe, { className: "h-4 w-4" })
|
|
732
|
+
}
|
|
733
|
+
),
|
|
734
|
+
/* @__PURE__ */ jsx(
|
|
735
|
+
"div",
|
|
736
|
+
{
|
|
737
|
+
role: "menu",
|
|
738
|
+
"aria-label": languageSwitcher.ariaLabel,
|
|
739
|
+
className: cn(
|
|
740
|
+
"absolute right-0 top-full z-120 mt-2 flex min-w-36 flex-col gap-1 rounded-md border border-border bg-popover p-1 shadow-md",
|
|
741
|
+
languageMenuOpen ? "flex" : "hidden"
|
|
742
|
+
),
|
|
743
|
+
children: languageSwitcher.options.map((option) => {
|
|
744
|
+
const isActive = option.code === languageSwitcher.currentCode;
|
|
745
|
+
return /* @__PURE__ */ jsx(
|
|
746
|
+
"a",
|
|
747
|
+
{
|
|
748
|
+
href: option.href,
|
|
749
|
+
role: "menuitem",
|
|
750
|
+
className: cn(
|
|
751
|
+
"block w-full rounded-sm px-2 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
752
|
+
isActive && "bg-accent/80 font-semibold text-foreground"
|
|
753
|
+
),
|
|
754
|
+
onClick: () => setLanguageMenuOpen(false),
|
|
755
|
+
children: option.label
|
|
756
|
+
},
|
|
757
|
+
option.code
|
|
758
|
+
);
|
|
759
|
+
})
|
|
760
|
+
}
|
|
761
|
+
)
|
|
762
|
+
] }),
|
|
763
|
+
cta && /* @__PURE__ */ jsx("div", { className: "hidden md:flex", children: /* @__PURE__ */ jsx(Button, { asChild: true, variant: "default", size: "sm", className: "ds-mkt-btn-primary", children: /* @__PURE__ */ jsx("a", { href: cta.href, children: cta.label }) }) }),
|
|
764
|
+
/* @__PURE__ */ jsx(
|
|
765
|
+
Button,
|
|
766
|
+
{
|
|
767
|
+
type: "button",
|
|
768
|
+
variant: "ghost",
|
|
769
|
+
size: "icon",
|
|
770
|
+
className: "md:hidden min-h-[44px] min-w-[44px]",
|
|
771
|
+
onClick: () => setMobileMenuOpen(true),
|
|
772
|
+
"aria-label": "Open menu",
|
|
773
|
+
"aria-expanded": mobileMenuOpen,
|
|
774
|
+
children: /* @__PURE__ */ jsx(Menu, { className: "h-5 w-5" })
|
|
775
|
+
}
|
|
776
|
+
)
|
|
777
|
+
] })
|
|
778
|
+
] })
|
|
779
|
+
}
|
|
780
|
+
),
|
|
781
|
+
/* @__PURE__ */ jsxs(
|
|
782
|
+
"div",
|
|
783
|
+
{
|
|
784
|
+
role: "dialog",
|
|
785
|
+
"aria-modal": "true",
|
|
786
|
+
"aria-label": "Menu",
|
|
787
|
+
className: cn(
|
|
788
|
+
"fixed inset-0 top-0 z-100 md:hidden",
|
|
789
|
+
mobileMenuOpen ? "pointer-events-auto" : "pointer-events-none"
|
|
790
|
+
),
|
|
791
|
+
children: [
|
|
792
|
+
/* @__PURE__ */ jsx(
|
|
793
|
+
"div",
|
|
794
|
+
{
|
|
795
|
+
className: cn(
|
|
796
|
+
"fixed inset-0 bg-foreground/20 backdrop-blur-sm transition-opacity duration-300",
|
|
797
|
+
mobileMenuOpen ? "opacity-100" : "opacity-0"
|
|
798
|
+
),
|
|
799
|
+
onClick: () => setMobileMenuOpen(false),
|
|
800
|
+
"aria-hidden": "true"
|
|
801
|
+
}
|
|
802
|
+
),
|
|
803
|
+
/* @__PURE__ */ jsxs(
|
|
804
|
+
"div",
|
|
805
|
+
{
|
|
806
|
+
className: cn(
|
|
807
|
+
"fixed inset-y-0 right-0 top-0 z-101 flex h-full w-[min(320px,85vw)] max-w-full flex-col shadow-2xl transition-transform duration-300 ease-out",
|
|
808
|
+
"bg-[linear-gradient(180deg,hsl(0_0%_100%)_0%,hsl(199_50%_97%)_50%,hsl(199_60%_94%)_100%)]",
|
|
809
|
+
mobileMenuOpen ? "translate-x-0" : "translate-x-full"
|
|
810
|
+
),
|
|
811
|
+
children: [
|
|
812
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-16 shrink-0 items-center justify-between border-b border-border/60 px-5", children: [
|
|
813
|
+
/* @__PURE__ */ jsx("div", { onClick: () => setMobileMenuOpen(false), children: typeof logo === "string" ? logoHref ? /* @__PURE__ */ jsx(
|
|
814
|
+
"a",
|
|
815
|
+
{
|
|
816
|
+
href: logoHref,
|
|
817
|
+
"aria-label": "Go to top",
|
|
818
|
+
className: "text-xl font-bold tracking-tight text-foreground",
|
|
819
|
+
children: logo
|
|
820
|
+
}
|
|
821
|
+
) : /* @__PURE__ */ jsx("span", { className: "text-xl font-bold tracking-tight text-foreground", children: logo }) : logo }),
|
|
822
|
+
/* @__PURE__ */ jsx(
|
|
823
|
+
Button,
|
|
824
|
+
{
|
|
825
|
+
type: "button",
|
|
826
|
+
variant: "ghost",
|
|
827
|
+
size: "icon",
|
|
828
|
+
className: "min-h-[44px] min-w-[44px] rounded-full text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
829
|
+
onClick: () => setMobileMenuOpen(false),
|
|
830
|
+
"aria-label": "Close menu",
|
|
831
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
|
|
832
|
+
}
|
|
833
|
+
)
|
|
834
|
+
] }),
|
|
835
|
+
/* @__PURE__ */ jsxs("nav", { className: "flex flex-1 flex-col gap-0.5 overflow-y-auto px-4 py-5", children: [
|
|
836
|
+
links.map((link) => /* @__PURE__ */ jsx(
|
|
837
|
+
"a",
|
|
838
|
+
{
|
|
839
|
+
href: link.href,
|
|
840
|
+
className: "rounded-lg px-4 py-3.5 text-base font-medium text-foreground transition-colors hover:bg-muted hover:text-primary",
|
|
841
|
+
onClick: () => setMobileMenuOpen(false),
|
|
842
|
+
children: link.label
|
|
843
|
+
},
|
|
844
|
+
link.href
|
|
845
|
+
)),
|
|
846
|
+
cta && /* @__PURE__ */ jsx("div", { className: "mt-6 px-4", children: /* @__PURE__ */ jsx(
|
|
847
|
+
Button,
|
|
848
|
+
{
|
|
849
|
+
asChild: true,
|
|
850
|
+
variant: "default",
|
|
851
|
+
className: "ds-mkt-btn-primary w-full min-h-[48px]",
|
|
852
|
+
size: "lg",
|
|
853
|
+
children: /* @__PURE__ */ jsx("a", { href: cta.href, onClick: () => setMobileMenuOpen(false), children: cta.label })
|
|
854
|
+
}
|
|
855
|
+
) })
|
|
856
|
+
] })
|
|
857
|
+
]
|
|
858
|
+
}
|
|
859
|
+
)
|
|
860
|
+
]
|
|
861
|
+
}
|
|
862
|
+
)
|
|
863
|
+
] });
|
|
864
|
+
}
|
|
865
|
+
function Newsletter({
|
|
866
|
+
id,
|
|
867
|
+
title,
|
|
868
|
+
description,
|
|
869
|
+
placeholder = "you@company.com",
|
|
870
|
+
buttonLabel = "Subscribe",
|
|
871
|
+
formAction,
|
|
872
|
+
formMethod = "post",
|
|
873
|
+
inputName = "email",
|
|
874
|
+
children,
|
|
875
|
+
className
|
|
876
|
+
}) {
|
|
877
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-16", className), children: /* @__PURE__ */ jsx("div", { className: "container mx-auto max-w-2xl", children: /* @__PURE__ */ jsxs(
|
|
878
|
+
"div",
|
|
879
|
+
{
|
|
880
|
+
className: cn(
|
|
881
|
+
"ds-mkt-surface-elevated overflow-hidden rounded-3xl p-8 sm:p-10",
|
|
882
|
+
"bg-gradient-to-br from-card via-card to-primary/5"
|
|
883
|
+
),
|
|
884
|
+
children: [
|
|
885
|
+
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
886
|
+
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
|
|
887
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-3 text-muted-foreground", children: description })
|
|
888
|
+
] }),
|
|
889
|
+
/* @__PURE__ */ jsx("div", { className: "mt-8", children: children ? children : formAction ? /* @__PURE__ */ jsxs(
|
|
890
|
+
"form",
|
|
891
|
+
{
|
|
892
|
+
action: formAction,
|
|
893
|
+
method: formMethod,
|
|
894
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-stretch",
|
|
895
|
+
children: [
|
|
896
|
+
/* @__PURE__ */ jsx(
|
|
897
|
+
Input,
|
|
898
|
+
{
|
|
899
|
+
type: "email",
|
|
900
|
+
name: inputName,
|
|
901
|
+
required: true,
|
|
902
|
+
placeholder,
|
|
903
|
+
autoComplete: "email",
|
|
904
|
+
className: "h-11 flex-1 border-border/60 bg-background/80 shadow-inner"
|
|
905
|
+
}
|
|
906
|
+
),
|
|
907
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", size: "lg", className: "ds-mkt-btn-primary shrink-0 sm:px-8", children: buttonLabel })
|
|
908
|
+
]
|
|
909
|
+
}
|
|
910
|
+
) : /* @__PURE__ */ jsx("p", { className: "text-center text-sm text-muted-foreground", children: "Provide a formAction URL or custom children to wire email capture." }) })
|
|
911
|
+
]
|
|
912
|
+
}
|
|
913
|
+
) }) });
|
|
914
|
+
}
|
|
915
|
+
function tierUsesBillingToggle(t) {
|
|
916
|
+
return t.priceMonthly != null && t.priceAnnual != null;
|
|
917
|
+
}
|
|
918
|
+
function resolveTierPrice(tier, interval) {
|
|
919
|
+
if (tierUsesBillingToggle(tier)) {
|
|
920
|
+
return interval === "annual" ? {
|
|
921
|
+
amount: tier.priceAnnual,
|
|
922
|
+
period: tier.periodAnnual ?? "/year"
|
|
923
|
+
} : {
|
|
924
|
+
amount: tier.priceMonthly,
|
|
925
|
+
period: tier.periodMonthly ?? "/mo"
|
|
926
|
+
};
|
|
927
|
+
}
|
|
928
|
+
return { amount: tier.price, period: tier.period };
|
|
929
|
+
}
|
|
930
|
+
function PricingSection({
|
|
931
|
+
id,
|
|
932
|
+
eyebrow,
|
|
933
|
+
title,
|
|
934
|
+
description,
|
|
935
|
+
tiers,
|
|
936
|
+
comparisonRows,
|
|
937
|
+
annualDiscountPercent = 15,
|
|
938
|
+
className
|
|
939
|
+
}) {
|
|
940
|
+
const showBillingToggle = tiers.some(tierUsesBillingToggle);
|
|
941
|
+
const [interval, setInterval] = React.useState("monthly");
|
|
942
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("ds-mkt-section-soft px-4 py-20 sm:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
943
|
+
(eyebrow || title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center sm:mb-14", children: [
|
|
944
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold uppercase tracking-wider text-primary", children: eyebrow }),
|
|
945
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
946
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-2xl text-lg text-muted-foreground", children: description })
|
|
947
|
+
] }),
|
|
948
|
+
showBillingToggle && /* @__PURE__ */ jsxs("div", { className: "mb-10 flex flex-col items-center gap-3", children: [
|
|
949
|
+
/* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-1 rounded-full border border-border/80 bg-background/80 p-1 shadow-sm backdrop-blur-sm", children: [
|
|
950
|
+
/* @__PURE__ */ jsx(
|
|
951
|
+
"button",
|
|
952
|
+
{
|
|
953
|
+
type: "button",
|
|
954
|
+
className: cn(
|
|
955
|
+
"cursor-pointer rounded-full px-4 py-2 text-sm font-medium transition-colors",
|
|
956
|
+
interval === "monthly" ? "bg-primary text-primary-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
|
|
957
|
+
),
|
|
958
|
+
onClick: () => setInterval("monthly"),
|
|
959
|
+
children: "Monthly"
|
|
960
|
+
}
|
|
961
|
+
),
|
|
962
|
+
/* @__PURE__ */ jsx("span", { className: "hidden h-4 w-px bg-border sm:block", "aria-hidden": true }),
|
|
963
|
+
/* @__PURE__ */ jsx(
|
|
964
|
+
"button",
|
|
965
|
+
{
|
|
966
|
+
type: "button",
|
|
967
|
+
className: cn(
|
|
968
|
+
"cursor-pointer rounded-full px-4 py-2 text-sm font-medium transition-colors",
|
|
969
|
+
interval === "annual" ? "bg-primary text-primary-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
|
|
970
|
+
),
|
|
971
|
+
onClick: () => setInterval("annual"),
|
|
972
|
+
children: "Annual"
|
|
973
|
+
}
|
|
974
|
+
)
|
|
975
|
+
] }),
|
|
976
|
+
annualDiscountPercent > 0 && /* @__PURE__ */ jsxs("div", { className: "rounded-full border border-primary/35 bg-primary/10 px-4 py-1.5 text-sm font-semibold text-primary", children: [
|
|
977
|
+
"Save ",
|
|
978
|
+
annualDiscountPercent,
|
|
979
|
+
"% on annual billing"
|
|
980
|
+
] })
|
|
981
|
+
] }),
|
|
982
|
+
/* @__PURE__ */ jsx(
|
|
983
|
+
"div",
|
|
984
|
+
{
|
|
985
|
+
className: cn(
|
|
986
|
+
"grid gap-6 lg:gap-8",
|
|
987
|
+
tiers.length === 2 && "md:grid-cols-2",
|
|
988
|
+
tiers.length >= 3 && "md:grid-cols-2 lg:grid-cols-3"
|
|
989
|
+
),
|
|
990
|
+
children: tiers.map((tier) => {
|
|
991
|
+
const { amount, period } = resolveTierPrice(tier, interval);
|
|
992
|
+
return /* @__PURE__ */ jsxs(
|
|
993
|
+
"div",
|
|
994
|
+
{
|
|
995
|
+
className: cn(
|
|
996
|
+
"ds-mkt-pricing-tier relative flex flex-col overflow-hidden rounded-2xl border border-border/50 bg-gradient-to-b from-card to-muted/25 p-8 shadow-lg transition duration-300",
|
|
997
|
+
tier.highlighted && "z-[1] border-primary/35 shadow-xl ring-2 ring-primary/40 ring-offset-2 ring-offset-background lg:scale-[1.02]"
|
|
998
|
+
),
|
|
999
|
+
children: [
|
|
1000
|
+
tier.highlighted && /* @__PURE__ */ jsx("span", { className: "absolute -top-px left-1/2 -translate-x-1/2 rounded-b-lg bg-primary px-4 py-1 text-xs font-semibold text-primary-foreground shadow-md", children: "Popular" }),
|
|
1001
|
+
/* @__PURE__ */ jsxs("div", { className: "min-h-[3.25rem]", children: [
|
|
1002
|
+
/* @__PURE__ */ jsx("h3", { className: "text-xl font-bold tracking-tight", children: tier.name }),
|
|
1003
|
+
tier.badge && /* @__PURE__ */ jsx("span", { className: "mt-2 inline-block rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-medium text-primary", children: tier.badge })
|
|
1004
|
+
] }),
|
|
1005
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-5", children: [
|
|
1006
|
+
tier.originalPrice && /* @__PURE__ */ jsx("div", { className: "mb-1 text-sm font-medium text-muted-foreground line-through", children: tier.originalPrice }),
|
|
1007
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-1.5", children: [
|
|
1008
|
+
/* @__PURE__ */ jsx("span", { className: "text-4xl font-bold tracking-tight text-foreground", children: amount }),
|
|
1009
|
+
period && /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: period })
|
|
1010
|
+
] })
|
|
1011
|
+
] }),
|
|
1012
|
+
tier.description && /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm leading-relaxed text-muted-foreground", children: tier.description }),
|
|
1013
|
+
/* @__PURE__ */ jsx("ul", { className: "mt-8 flex flex-1 flex-col gap-3 text-sm", children: tier.features.map((f) => /* @__PURE__ */ jsxs("li", { className: "flex gap-3", children: [
|
|
1014
|
+
/* @__PURE__ */ jsx("span", { className: "mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-primary/12 text-primary", children: /* @__PURE__ */ jsx(Check, { className: "size-3.5", "aria-hidden": true }) }),
|
|
1015
|
+
/* @__PURE__ */ jsx("span", { className: "leading-snug", children: f })
|
|
1016
|
+
] }, f)) }),
|
|
1017
|
+
/* @__PURE__ */ jsx(
|
|
1018
|
+
Button,
|
|
1019
|
+
{
|
|
1020
|
+
asChild: true,
|
|
1021
|
+
className: cn(
|
|
1022
|
+
"mt-10 w-full",
|
|
1023
|
+
tier.highlighted ? "ds-mkt-hero-cta-primary min-h-11 font-semibold" : "ds-mkt-btn-secondary min-h-11 font-semibold"
|
|
1024
|
+
),
|
|
1025
|
+
size: "lg",
|
|
1026
|
+
variant: tier.highlighted ? "default" : "outline",
|
|
1027
|
+
children: /* @__PURE__ */ jsx("a", { href: tier.cta.href, children: tier.cta.label })
|
|
1028
|
+
}
|
|
1029
|
+
)
|
|
1030
|
+
]
|
|
1031
|
+
},
|
|
1032
|
+
tier.name
|
|
1033
|
+
);
|
|
1034
|
+
})
|
|
1035
|
+
}
|
|
1036
|
+
),
|
|
1037
|
+
comparisonRows && comparisonRows.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-16 overflow-x-auto sm:mt-20", children: /* @__PURE__ */ jsxs("div", { className: "ds-mkt-pricing-table min-w-[640px] overflow-hidden rounded-xl border border-border/60 bg-card/50 shadow-sm", children: [
|
|
1038
|
+
/* @__PURE__ */ jsxs(
|
|
1039
|
+
"div",
|
|
1040
|
+
{
|
|
1041
|
+
className: "grid border-b border-border/60 bg-muted/50 text-sm font-medium",
|
|
1042
|
+
style: {
|
|
1043
|
+
gridTemplateColumns: `minmax(10rem,2fr) repeat(${tiers.length}, minmax(0,1fr))`
|
|
1044
|
+
},
|
|
1045
|
+
children: [
|
|
1046
|
+
/* @__PURE__ */ jsx("div", { className: "px-4 py-3 text-left text-muted-foreground", children: "\xA0" }),
|
|
1047
|
+
tiers.map((t) => /* @__PURE__ */ jsx(
|
|
1048
|
+
"div",
|
|
1049
|
+
{
|
|
1050
|
+
className: "border-l border-border/40 px-3 py-3 text-center sm:px-4",
|
|
1051
|
+
children: t.name
|
|
1052
|
+
},
|
|
1053
|
+
t.name
|
|
1054
|
+
))
|
|
1055
|
+
]
|
|
1056
|
+
}
|
|
1057
|
+
),
|
|
1058
|
+
comparisonRows.map((row) => /* @__PURE__ */ jsxs(
|
|
1059
|
+
"div",
|
|
1060
|
+
{
|
|
1061
|
+
className: "grid border-t border-border/50 text-sm",
|
|
1062
|
+
style: {
|
|
1063
|
+
gridTemplateColumns: `minmax(10rem,2fr) repeat(${tiers.length}, minmax(0,1fr))`
|
|
1064
|
+
},
|
|
1065
|
+
children: [
|
|
1066
|
+
/* @__PURE__ */ jsx("div", { className: "px-4 py-3 text-left leading-snug text-foreground", children: row.label }),
|
|
1067
|
+
tiers.map((_, i) => {
|
|
1068
|
+
const cell = row.values[i];
|
|
1069
|
+
return /* @__PURE__ */ jsx(
|
|
1070
|
+
"div",
|
|
1071
|
+
{
|
|
1072
|
+
className: "flex items-center justify-center border-l border-border/40 px-3 py-3 sm:px-4",
|
|
1073
|
+
children: cell === void 0 ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\u2014" }) : typeof cell === "string" ? /* @__PURE__ */ jsx("span", { className: "text-center text-muted-foreground", children: cell }) : cell ? /* @__PURE__ */ jsx(Check, { className: "size-4 shrink-0 text-primary", "aria-label": "Included" }) : /* @__PURE__ */ jsx(
|
|
1074
|
+
"span",
|
|
1075
|
+
{
|
|
1076
|
+
className: "inline-block size-1.5 rounded-full bg-muted-foreground/35",
|
|
1077
|
+
"aria-label": "Not included"
|
|
1078
|
+
}
|
|
1079
|
+
)
|
|
1080
|
+
},
|
|
1081
|
+
`${row.label}-${i}`
|
|
1082
|
+
);
|
|
1083
|
+
})
|
|
1084
|
+
]
|
|
1085
|
+
},
|
|
1086
|
+
row.label
|
|
1087
|
+
))
|
|
1088
|
+
] }) })
|
|
1089
|
+
] }) });
|
|
1090
|
+
}
|
|
1091
|
+
function ProjectLaunches({
|
|
1092
|
+
id = "projects",
|
|
1093
|
+
eyebrow,
|
|
1094
|
+
title,
|
|
1095
|
+
liveLabel,
|
|
1096
|
+
comingSoonLabel,
|
|
1097
|
+
projects,
|
|
1098
|
+
className
|
|
1099
|
+
}) {
|
|
1100
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-20 sm:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
1101
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-10 text-center sm:mb-12", children: [
|
|
1102
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold uppercase tracking-wider text-primary", children: eyebrow }),
|
|
1103
|
+
/* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title })
|
|
1104
|
+
] }),
|
|
1105
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-5 md:grid-cols-2 lg:grid-cols-3 lg:gap-6", children: projects.map((project) => /* @__PURE__ */ jsxs(
|
|
1106
|
+
"a",
|
|
1107
|
+
{
|
|
1108
|
+
href: project.href,
|
|
1109
|
+
className: "ds-mkt-surface-elevated group flex flex-col rounded-2xl border-0 p-6 transition duration-300 hover:-translate-y-1 hover:shadow-lg",
|
|
1110
|
+
children: [
|
|
1111
|
+
/* @__PURE__ */ jsx(
|
|
1112
|
+
"div",
|
|
1113
|
+
{
|
|
1114
|
+
className: cn(
|
|
1115
|
+
"mb-4 inline-flex w-fit rounded-full px-2.5 py-1 text-xs font-semibold uppercase tracking-wide",
|
|
1116
|
+
project.status === "live" ? "bg-primary/12 text-primary" : "bg-muted text-muted-foreground"
|
|
1117
|
+
),
|
|
1118
|
+
children: project.status === "live" ? liveLabel : comingSoonLabel
|
|
1119
|
+
}
|
|
1120
|
+
),
|
|
1121
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-foreground group-hover:text-primary", children: project.name }),
|
|
1122
|
+
/* @__PURE__ */ jsx("p", { className: "mt-2 flex-1 text-sm leading-relaxed text-muted-foreground", children: project.description })
|
|
1123
|
+
]
|
|
1124
|
+
},
|
|
1125
|
+
project.name
|
|
1126
|
+
)) })
|
|
1127
|
+
] }) });
|
|
1128
|
+
}
|
|
1129
|
+
function PromoBanner({
|
|
1130
|
+
children,
|
|
1131
|
+
href,
|
|
1132
|
+
linkLabel = "Learn more",
|
|
1133
|
+
dismissible = false,
|
|
1134
|
+
className
|
|
1135
|
+
}) {
|
|
1136
|
+
const [open, setOpen] = React.useState(true);
|
|
1137
|
+
if (!open) return null;
|
|
1138
|
+
return /* @__PURE__ */ jsx(
|
|
1139
|
+
"div",
|
|
1140
|
+
{
|
|
1141
|
+
className: cn(
|
|
1142
|
+
"relative z-[60] w-full border-b border-primary/20",
|
|
1143
|
+
"bg-gradient-to-r from-primary/90 via-primary to-primary/85",
|
|
1144
|
+
"text-primary-foreground shadow-md shadow-primary/25",
|
|
1145
|
+
className
|
|
1146
|
+
),
|
|
1147
|
+
children: /* @__PURE__ */ jsxs(
|
|
1148
|
+
"div",
|
|
1149
|
+
{
|
|
1150
|
+
className: cn(
|
|
1151
|
+
"mx-auto flex max-w-7xl flex-col items-center justify-center gap-3 px-4 py-3 sm:flex-row sm:gap-6 sm:px-6",
|
|
1152
|
+
dismissible && "pr-12 sm:pr-14"
|
|
1153
|
+
),
|
|
1154
|
+
children: [
|
|
1155
|
+
/* @__PURE__ */ jsx("p", { className: "text-center text-sm font-medium sm:text-base", children }),
|
|
1156
|
+
href && /* @__PURE__ */ jsx(
|
|
1157
|
+
"a",
|
|
1158
|
+
{
|
|
1159
|
+
href,
|
|
1160
|
+
className: "shrink-0 rounded-md bg-primary-foreground/15 px-3 py-1.5 text-sm font-semibold underline-offset-4 transition hover:bg-primary-foreground/25 hover:underline",
|
|
1161
|
+
children: linkLabel
|
|
1162
|
+
}
|
|
1163
|
+
),
|
|
1164
|
+
dismissible && /* @__PURE__ */ jsx(
|
|
1165
|
+
Button,
|
|
1166
|
+
{
|
|
1167
|
+
type: "button",
|
|
1168
|
+
variant: "ghost",
|
|
1169
|
+
size: "icon",
|
|
1170
|
+
className: "absolute right-2 top-1/2 h-9 w-9 -translate-y-1/2 text-primary-foreground hover:bg-primary-foreground/15",
|
|
1171
|
+
onClick: () => setOpen(false),
|
|
1172
|
+
"aria-label": "Dismiss",
|
|
1173
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-4" })
|
|
1174
|
+
}
|
|
1175
|
+
)
|
|
1176
|
+
]
|
|
1177
|
+
}
|
|
1178
|
+
)
|
|
1179
|
+
}
|
|
1180
|
+
);
|
|
1181
|
+
}
|
|
1182
|
+
function Section({
|
|
1183
|
+
id,
|
|
1184
|
+
title,
|
|
1185
|
+
subtitle,
|
|
1186
|
+
description,
|
|
1187
|
+
children,
|
|
1188
|
+
variant = "default",
|
|
1189
|
+
className
|
|
1190
|
+
}) {
|
|
1191
|
+
return /* @__PURE__ */ jsx(
|
|
1192
|
+
"section",
|
|
1193
|
+
{
|
|
1194
|
+
id,
|
|
1195
|
+
className: cn(
|
|
1196
|
+
"px-4 py-20",
|
|
1197
|
+
variant === "soft" && "ds-mkt-section-soft",
|
|
1198
|
+
variant === "spotlight" && "ds-mkt-section-spotlight",
|
|
1199
|
+
className
|
|
1200
|
+
),
|
|
1201
|
+
children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto", children: [
|
|
1202
|
+
(title || subtitle || description) && /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
|
|
1203
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-muted-foreground", children: subtitle }),
|
|
1204
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
1205
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-2xl text-lg text-muted-foreground", children: description })
|
|
1206
|
+
] }),
|
|
1207
|
+
children
|
|
1208
|
+
] })
|
|
1209
|
+
}
|
|
1210
|
+
);
|
|
1211
|
+
}
|
|
1212
|
+
function ServiceCard({ title, description, icon, className }) {
|
|
1213
|
+
return /* @__PURE__ */ jsxs(
|
|
1214
|
+
Card,
|
|
1215
|
+
{
|
|
1216
|
+
className: cn(
|
|
1217
|
+
"h-full border-0 bg-transparent shadow-none",
|
|
1218
|
+
"ds-mkt-surface-elevated transition duration-300 hover:-translate-y-1",
|
|
1219
|
+
className
|
|
1220
|
+
),
|
|
1221
|
+
children: [
|
|
1222
|
+
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
1223
|
+
icon && /* @__PURE__ */ jsx("div", { className: "mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary", children: icon }),
|
|
1224
|
+
/* @__PURE__ */ jsx(CardTitle, { children: title })
|
|
1225
|
+
] }),
|
|
1226
|
+
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(CardDescription, { className: "text-base", children: description }) })
|
|
1227
|
+
]
|
|
1228
|
+
}
|
|
1229
|
+
);
|
|
1230
|
+
}
|
|
1231
|
+
function StatsStrip({ id, stats, className }) {
|
|
1232
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-16", className), children: /* @__PURE__ */ jsx("div", { className: "container mx-auto max-w-6xl", children: /* @__PURE__ */ jsx("dl", { className: "grid grid-cols-2 gap-8 md:grid-cols-4 md:gap-12", children: stats.map((stat) => /* @__PURE__ */ jsxs("div", { className: "text-center ds-mkt-stat-pop", children: [
|
|
1233
|
+
/* @__PURE__ */ jsx("dt", { className: "ds-mkt-stat-value text-3xl font-bold tracking-tight sm:text-4xl", children: stat.value }),
|
|
1234
|
+
/* @__PURE__ */ jsx("dd", { className: "mt-2 text-sm text-muted-foreground", children: stat.label })
|
|
1235
|
+
] }, stat.label)) }) }) });
|
|
1236
|
+
}
|
|
1237
|
+
function TeamGrid({ id, eyebrow, title, description, members, className }) {
|
|
1238
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("ds-mkt-section-spotlight px-4 py-20", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-6xl", children: [
|
|
1239
|
+
(eyebrow || title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-14 text-center", children: [
|
|
1240
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-primary", children: eyebrow }),
|
|
1241
|
+
title && /* @__PURE__ */ jsx("h2", { className: "mt-2 text-3xl font-bold tracking-tight sm:text-4xl", children: title }),
|
|
1242
|
+
description && /* @__PURE__ */ jsx("p", { className: "mx-auto mt-4 max-w-2xl text-lg text-muted-foreground", children: description })
|
|
1243
|
+
] }),
|
|
1244
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-8 sm:grid-cols-2 lg:grid-cols-3 lg:gap-10", children: members.map((m) => {
|
|
1245
|
+
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1246
|
+
/* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame w-full", children: /* @__PURE__ */ jsx("div", { className: "ds-mkt-media-frame-inner relative aspect-[4/5] w-full overflow-hidden bg-muted", children: m.image ? /* @__PURE__ */ jsx(
|
|
1247
|
+
"img",
|
|
1248
|
+
{
|
|
1249
|
+
src: m.image.src,
|
|
1250
|
+
alt: m.image.alt,
|
|
1251
|
+
className: "absolute inset-0 h-full w-full object-cover",
|
|
1252
|
+
loading: "lazy"
|
|
1253
|
+
}
|
|
1254
|
+
) : /* @__PURE__ */ jsx("div", { className: "flex h-full min-h-[200px] w-full items-center justify-center bg-gradient-to-br from-primary/20 to-muted text-4xl font-bold text-muted-foreground", children: m.name.slice(0, 1) }) }) }),
|
|
1255
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-5 text-center", children: [
|
|
1256
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-foreground", children: m.name }),
|
|
1257
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: m.role })
|
|
1258
|
+
] })
|
|
1259
|
+
] });
|
|
1260
|
+
return /* @__PURE__ */ jsx(
|
|
1261
|
+
"div",
|
|
1262
|
+
{
|
|
1263
|
+
className: "ds-mkt-surface-elevated rounded-2xl border-0 p-5 transition duration-300 hover:-translate-y-1",
|
|
1264
|
+
children: m.href ? /* @__PURE__ */ jsx(
|
|
1265
|
+
"a",
|
|
1266
|
+
{
|
|
1267
|
+
href: m.href,
|
|
1268
|
+
className: "block focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-xl",
|
|
1269
|
+
children: body
|
|
1270
|
+
}
|
|
1271
|
+
) : body
|
|
1272
|
+
},
|
|
1273
|
+
`${m.name}-${m.role}`
|
|
1274
|
+
);
|
|
1275
|
+
}) })
|
|
1276
|
+
] }) });
|
|
1277
|
+
}
|
|
1278
|
+
function Testimonial({
|
|
1279
|
+
id,
|
|
1280
|
+
quote,
|
|
1281
|
+
attribution,
|
|
1282
|
+
role,
|
|
1283
|
+
avatar,
|
|
1284
|
+
logo,
|
|
1285
|
+
className
|
|
1286
|
+
}) {
|
|
1287
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-16", className), children: /* @__PURE__ */ jsx("div", { className: "container mx-auto max-w-3xl", children: /* @__PURE__ */ jsxs("div", { className: "ds-mkt-glass-panel px-8 py-12 text-center sm:px-12 sm:py-14", children: [
|
|
1288
|
+
logo && /* @__PURE__ */ jsx("div", { className: "mb-8 flex justify-center", children: /* @__PURE__ */ jsx(
|
|
1289
|
+
"img",
|
|
1290
|
+
{
|
|
1291
|
+
src: logo.src,
|
|
1292
|
+
alt: logo.alt,
|
|
1293
|
+
className: "h-8 w-auto object-contain opacity-90",
|
|
1294
|
+
loading: "lazy"
|
|
1295
|
+
}
|
|
1296
|
+
) }),
|
|
1297
|
+
/* @__PURE__ */ jsxs("blockquote", { className: "text-xl font-medium leading-relaxed text-foreground sm:text-2xl", children: [
|
|
1298
|
+
"\u201C",
|
|
1299
|
+
quote,
|
|
1300
|
+
"\u201D"
|
|
1301
|
+
] }),
|
|
1302
|
+
/* @__PURE__ */ jsxs("footer", { className: "mt-8 flex flex-col items-center gap-3 sm:flex-row sm:justify-center", children: [
|
|
1303
|
+
avatar && /* @__PURE__ */ jsx(
|
|
1304
|
+
"img",
|
|
1305
|
+
{
|
|
1306
|
+
src: avatar.src,
|
|
1307
|
+
alt: avatar.alt,
|
|
1308
|
+
className: "h-12 w-12 rounded-full border-2 border-primary/20 object-cover shadow-md",
|
|
1309
|
+
width: 48,
|
|
1310
|
+
height: 48,
|
|
1311
|
+
loading: "lazy"
|
|
1312
|
+
}
|
|
1313
|
+
),
|
|
1314
|
+
/* @__PURE__ */ jsxs("div", { className: "text-left sm:text-center", children: [
|
|
1315
|
+
/* @__PURE__ */ jsx("cite", { className: "not-italic font-semibold text-foreground", children: attribution }),
|
|
1316
|
+
role && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: role })
|
|
1317
|
+
] })
|
|
1318
|
+
] })
|
|
1319
|
+
] }) }) });
|
|
1320
|
+
}
|
|
1321
|
+
function TrustBadges({ id, title, items, className }) {
|
|
1322
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-10", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-5xl", children: [
|
|
1323
|
+
title && /* @__PURE__ */ jsx("p", { className: "mb-6 text-center text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: title }),
|
|
1324
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-center gap-3", children: items.map((item) => /* @__PURE__ */ jsxs(
|
|
1325
|
+
"div",
|
|
1326
|
+
{
|
|
1327
|
+
className: cn(
|
|
1328
|
+
"inline-flex items-center gap-2 rounded-full border border-border/60",
|
|
1329
|
+
"bg-gradient-to-b from-card to-muted/30 px-4 py-2 text-sm font-medium text-foreground shadow-sm",
|
|
1330
|
+
"ring-1 ring-border/40 transition hover:border-primary/30 hover:shadow-md"
|
|
1331
|
+
),
|
|
1332
|
+
children: [
|
|
1333
|
+
item.icon && /* @__PURE__ */ jsx("span", { className: "text-primary [&_svg]:size-4", children: item.icon }),
|
|
1334
|
+
item.label
|
|
1335
|
+
]
|
|
1336
|
+
},
|
|
1337
|
+
item.label
|
|
1338
|
+
)) })
|
|
1339
|
+
] }) });
|
|
1340
|
+
}
|
|
1341
|
+
function VideoShowcase({
|
|
1342
|
+
id,
|
|
1343
|
+
title,
|
|
1344
|
+
description,
|
|
1345
|
+
embedUrl,
|
|
1346
|
+
video,
|
|
1347
|
+
titleAttr = "Video",
|
|
1348
|
+
className
|
|
1349
|
+
}) {
|
|
1350
|
+
return /* @__PURE__ */ jsx("section", { id, className: cn("px-4 py-12", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto max-w-5xl", children: [
|
|
1351
|
+
(title || description) && /* @__PURE__ */ jsxs("div", { className: "mb-8 text-center", children: [
|
|
1352
|
+
title && /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
|
|
1353
|
+
description && /* @__PURE__ */ jsx("p", { className: "mt-3 text-lg text-muted-foreground", children: description })
|
|
1354
|
+
] }),
|
|
1355
|
+
/* @__PURE__ */ jsx(
|
|
1356
|
+
"div",
|
|
1357
|
+
{
|
|
1358
|
+
className: cn(
|
|
1359
|
+
"relative aspect-video w-full overflow-hidden rounded-xl border border-border/60 bg-muted/40 shadow-lg",
|
|
1360
|
+
"ds-mkt-video-glow"
|
|
1361
|
+
),
|
|
1362
|
+
children: embedUrl ? /* @__PURE__ */ jsx(
|
|
1363
|
+
"iframe",
|
|
1364
|
+
{
|
|
1365
|
+
title: titleAttr,
|
|
1366
|
+
src: embedUrl,
|
|
1367
|
+
className: "absolute inset-0 h-full w-full",
|
|
1368
|
+
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
|
|
1369
|
+
allowFullScreen: true
|
|
1370
|
+
}
|
|
1371
|
+
) : video ? /* @__PURE__ */ jsx(
|
|
1372
|
+
"video",
|
|
1373
|
+
{
|
|
1374
|
+
className: "absolute inset-0 h-full w-full object-cover",
|
|
1375
|
+
controls: video.controls ?? true,
|
|
1376
|
+
playsInline: video.playsInline ?? true,
|
|
1377
|
+
loop: video.loop,
|
|
1378
|
+
muted: video.muted,
|
|
1379
|
+
poster: video.poster,
|
|
1380
|
+
preload: "metadata",
|
|
1381
|
+
children: /* @__PURE__ */ jsx("source", { src: video.src })
|
|
1382
|
+
}
|
|
1383
|
+
) : null
|
|
1384
|
+
}
|
|
1385
|
+
)
|
|
1386
|
+
] }) });
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
export { BentoFeatures, BlogTeaser, ContactSection, CtaBanner, ErrorSpotlight, FaqSection, FeatureMedia, Footer, Hero, HeroSplit, LogoCloud, Navigation, Newsletter, PricingSection, ProjectLaunches, PromoBanner, Section, ServiceCard, StatsStrip, TeamGrid, Testimonial, TrustBadges, VideoShowcase };
|
|
1390
|
+
//# sourceMappingURL=chunk-QFKVPVFC.js.map
|
|
1391
|
+
//# sourceMappingURL=chunk-QFKVPVFC.js.map
|