@mdxui/named 6.1.0 → 6.3.0
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/components/index.d.ts +4 -20
- package/dist/components/index.js +101 -109
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +101 -109
- package/dist/index.js.map +1 -1
- package/dist/problem-B2-XszSB.d.ts +22 -0
- package/dist/schemas/index.d.ts +2 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/view/index.d.ts +160 -0
- package/dist/view/index.js +1110 -0
- package/dist/view/index.js.map +1 -0
- package/package.json +20 -1
|
@@ -0,0 +1,1110 @@
|
|
|
1
|
+
// src/view/view.tsx
|
|
2
|
+
import { DialectShell, NeoChrome } from "@mdxui/dialect";
|
|
3
|
+
|
|
4
|
+
// src/components/hero/hero.tsx
|
|
5
|
+
import Image from "next/image";
|
|
6
|
+
import { HiChevronRight } from "react-icons/hi";
|
|
7
|
+
|
|
8
|
+
// src/shared/scroll-reveal/scroll-reveal.tsx
|
|
9
|
+
import { motion } from "motion/react";
|
|
10
|
+
import { jsx } from "react/jsx-runtime";
|
|
11
|
+
var directionVariants = {
|
|
12
|
+
up: {
|
|
13
|
+
hidden: { opacity: 0, y: 50 },
|
|
14
|
+
visible: { opacity: 1, y: 0 }
|
|
15
|
+
},
|
|
16
|
+
down: {
|
|
17
|
+
hidden: { opacity: 0, y: -50 },
|
|
18
|
+
visible: { opacity: 1, y: 0 }
|
|
19
|
+
},
|
|
20
|
+
left: {
|
|
21
|
+
hidden: { opacity: 0, x: -50 },
|
|
22
|
+
visible: { opacity: 1, x: 0 }
|
|
23
|
+
},
|
|
24
|
+
right: {
|
|
25
|
+
hidden: { opacity: 0, x: 50 },
|
|
26
|
+
visible: { opacity: 1, x: 0 }
|
|
27
|
+
},
|
|
28
|
+
none: {
|
|
29
|
+
hidden: { opacity: 0 },
|
|
30
|
+
visible: { opacity: 1 }
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
function ScrollReveal({
|
|
34
|
+
children,
|
|
35
|
+
className,
|
|
36
|
+
delay = 0,
|
|
37
|
+
direction = "up",
|
|
38
|
+
duration = 0.5,
|
|
39
|
+
trigger = "inView",
|
|
40
|
+
once = true,
|
|
41
|
+
margin = "-100px"
|
|
42
|
+
}) {
|
|
43
|
+
if (trigger === "mount") {
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
motion.div,
|
|
46
|
+
{
|
|
47
|
+
initial: "hidden",
|
|
48
|
+
animate: "visible",
|
|
49
|
+
transition: { duration, delay, ease: "easeOut" },
|
|
50
|
+
variants: directionVariants[direction],
|
|
51
|
+
className,
|
|
52
|
+
children
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return /* @__PURE__ */ jsx(
|
|
57
|
+
motion.div,
|
|
58
|
+
{
|
|
59
|
+
initial: "hidden",
|
|
60
|
+
whileInView: "visible",
|
|
61
|
+
viewport: { once, margin },
|
|
62
|
+
transition: { duration, delay, ease: "easeOut" },
|
|
63
|
+
variants: directionVariants[direction],
|
|
64
|
+
className,
|
|
65
|
+
children
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// src/lib/utils.ts
|
|
71
|
+
import { clsx } from "clsx";
|
|
72
|
+
import { twMerge } from "tailwind-merge";
|
|
73
|
+
function cn(...inputs) {
|
|
74
|
+
return twMerge(clsx(inputs));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// src/shared/marquee/marquee.tsx
|
|
78
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
79
|
+
function Marquee({
|
|
80
|
+
className,
|
|
81
|
+
reverse = false,
|
|
82
|
+
pauseOnHover = false,
|
|
83
|
+
children,
|
|
84
|
+
vertical = false,
|
|
85
|
+
repeat = 4,
|
|
86
|
+
...props
|
|
87
|
+
}) {
|
|
88
|
+
return /* @__PURE__ */ jsx2(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
...props,
|
|
92
|
+
className: cn(
|
|
93
|
+
"group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]",
|
|
94
|
+
{
|
|
95
|
+
"flex-row": !vertical,
|
|
96
|
+
"flex-col": vertical
|
|
97
|
+
},
|
|
98
|
+
className
|
|
99
|
+
),
|
|
100
|
+
children: Array(repeat).fill(0).map((_, i) => /* @__PURE__ */ jsx2(
|
|
101
|
+
"div",
|
|
102
|
+
{
|
|
103
|
+
className: cn("flex shrink-0 justify-around [gap:var(--gap)]", {
|
|
104
|
+
"animate-marquee flex-row": !vertical,
|
|
105
|
+
"animate-marquee-vertical flex-col": vertical,
|
|
106
|
+
"group-hover:[animation-play-state:paused]": pauseOnHover,
|
|
107
|
+
"[animation-direction:reverse]": reverse
|
|
108
|
+
}),
|
|
109
|
+
children
|
|
110
|
+
},
|
|
111
|
+
i
|
|
112
|
+
))
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// src/components/hero/hero.tsx
|
|
118
|
+
import { Button } from "@mdxui/primitives";
|
|
119
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
120
|
+
function Hero({
|
|
121
|
+
badgeEmoji = "",
|
|
122
|
+
badgeText = "Meet Priya",
|
|
123
|
+
badgeHref = "#",
|
|
124
|
+
heading = "Your AI Product Manager for GitHub",
|
|
125
|
+
description = "Priya triages issues, plans sprints, and grooms your backlog automatically. You focus on building.",
|
|
126
|
+
ctaText = "Get Started",
|
|
127
|
+
ctaHref = "#pricing",
|
|
128
|
+
ctaVariant = "default",
|
|
129
|
+
rightImageSrc = "/images/hero/hero-main.png",
|
|
130
|
+
rightImageAlt = "Portfolio showcase",
|
|
131
|
+
rightImageSizes = "(max-width: 768px) 100vw, 500px",
|
|
132
|
+
showIconOverlay: _showIconOverlay = true,
|
|
133
|
+
marqueeTitle = "Tools I work with",
|
|
134
|
+
marqueeImages = Array.from({ length: 12 }).map(
|
|
135
|
+
() => "https://zapier-images.imgix.net/storage/services/c63f7c57dc0afb733535a5adccce4d01.png?auto=format&fit=crop&ixlib=react-9.10.0&q=50&w=60&h=60&dpr=2"
|
|
136
|
+
),
|
|
137
|
+
className
|
|
138
|
+
}) {
|
|
139
|
+
return /* @__PURE__ */ jsx3("section", { className: cn("relative py-12 md:py-16 px-6 lg:px-12 bg-background", className), children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto p-0 sm:p-16 rounded-none sm:rounded-3xl md:[background:linear-gradient(180deg,var(--card)_0%,transparent_83.55%)]", children: [
|
|
140
|
+
/* @__PURE__ */ jsxs("div", { className: "grid lg:grid-cols-2 gap-8 lg:gap-16 items-start mb-16 lg:mb-20", children: [
|
|
141
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-6 lg:pt-8", children: [
|
|
142
|
+
/* @__PURE__ */ jsx3(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx3("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
|
|
143
|
+
"a",
|
|
144
|
+
{
|
|
145
|
+
href: badgeHref,
|
|
146
|
+
target: "_blank",
|
|
147
|
+
rel: "noopener noreferrer",
|
|
148
|
+
className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full transition-colors border border-border bg-card",
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ jsx3("span", { className: "text-base", children: badgeEmoji }),
|
|
151
|
+
/* @__PURE__ */ jsx3("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
) }) }),
|
|
155
|
+
/* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx3("h1", { className: "font-normal text-[clamp(56px,6vw,72px)] leading-tight tracking-tight text-foreground", children: heading }) }),
|
|
156
|
+
/* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx3("p", { className: "text-lg leading-relaxed max-w-lg", children: description }) }),
|
|
157
|
+
/* @__PURE__ */ jsx3(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx3("div", { className: "flex flex-col sm:flex-row gap-3 pt-4", children: /* @__PURE__ */ jsx3(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
|
|
158
|
+
ctaText,
|
|
159
|
+
/* @__PURE__ */ jsx3(HiChevronRight, { className: "w-4 h-4" })
|
|
160
|
+
] }) }) }) })
|
|
161
|
+
] }),
|
|
162
|
+
/* @__PURE__ */ jsx3(ScrollReveal, { direction: "right", delay: 0.2, children: /* @__PURE__ */ jsx3("div", { className: "relative flex justify-center lg:justify-end", children: /* @__PURE__ */ jsx3("div", { className: "relative w-full max-w-lg", children: /* @__PURE__ */ jsx3("div", { className: "relative w-full aspect-square", children: /* @__PURE__ */ jsx3(
|
|
163
|
+
Image,
|
|
164
|
+
{
|
|
165
|
+
src: rightImageSrc,
|
|
166
|
+
alt: rightImageAlt,
|
|
167
|
+
fill: true,
|
|
168
|
+
className: "object-cover object-left-center rounded-2xl",
|
|
169
|
+
priority: true,
|
|
170
|
+
sizes: rightImageSizes
|
|
171
|
+
}
|
|
172
|
+
) }) }) }) })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ jsxs(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: [
|
|
175
|
+
/* @__PURE__ */ jsx3("div", { className: "mt-12", children: /* @__PURE__ */ jsx3("p", { className: "text-base text-muted-foreground text-center", children: marqueeTitle }) }),
|
|
176
|
+
/* @__PURE__ */ jsxs("div", { className: "relative mt-4 sm:mt-6", children: [
|
|
177
|
+
/* @__PURE__ */ jsx3(
|
|
178
|
+
"div",
|
|
179
|
+
{
|
|
180
|
+
className: "pointer-events-none absolute inset-y-0 left-0 w-20 sm:w-28 z-10",
|
|
181
|
+
style: { background: "linear-gradient(to right, var(--background), transparent)" }
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
/* @__PURE__ */ jsx3(
|
|
185
|
+
"div",
|
|
186
|
+
{
|
|
187
|
+
className: "pointer-events-none absolute inset-y-0 right-0 w-20 sm:w-28 z-10",
|
|
188
|
+
style: { background: "linear-gradient(to left, var(--background), transparent)" }
|
|
189
|
+
}
|
|
190
|
+
),
|
|
191
|
+
/* @__PURE__ */ jsx3(Marquee, { className: "relative z-0 py-2 [--gap:1.25rem] sm:[--gap:3rem]", children: marqueeImages.map((src, i) => /* @__PURE__ */ jsx3("img", { src, alt: "Placeholder", className: "h-16 w-16 rounded-xl bg-card p-2" }, `${src}-${i}`)) })
|
|
192
|
+
] })
|
|
193
|
+
] })
|
|
194
|
+
] }) });
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// src/components/features/features.tsx
|
|
198
|
+
import { CheckCircle } from "lucide-react";
|
|
199
|
+
|
|
200
|
+
// src/shared/code-window/code-window.tsx
|
|
201
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
202
|
+
function CodeWindow({ code, className }) {
|
|
203
|
+
const highlightCode = (code2) => {
|
|
204
|
+
const lines = code2.split("\n");
|
|
205
|
+
const result = [];
|
|
206
|
+
let prevWasComment = false;
|
|
207
|
+
let prevWasCode = false;
|
|
208
|
+
for (let i = 0; i < lines.length; i++) {
|
|
209
|
+
const line = lines[i];
|
|
210
|
+
const isComment = line.trim().startsWith("//");
|
|
211
|
+
const isEmpty = line.trim() === "";
|
|
212
|
+
const isCode = !isComment && !isEmpty;
|
|
213
|
+
if (isComment && prevWasCode) {
|
|
214
|
+
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-before-${i}`));
|
|
215
|
+
}
|
|
216
|
+
if (prevWasComment && isCode) {
|
|
217
|
+
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, `space-after-${i}`));
|
|
218
|
+
}
|
|
219
|
+
if (isEmpty) {
|
|
220
|
+
result.push(/* @__PURE__ */ jsx4("div", { className: "h-5" }, i));
|
|
221
|
+
prevWasComment = false;
|
|
222
|
+
prevWasCode = false;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (isComment) {
|
|
226
|
+
result.push(
|
|
227
|
+
/* @__PURE__ */ jsx4("div", { className: "text-[#7d8590]", children: line }, i)
|
|
228
|
+
);
|
|
229
|
+
prevWasComment = true;
|
|
230
|
+
prevWasCode = false;
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
let highlighted = line;
|
|
234
|
+
highlighted = highlighted.replace(
|
|
235
|
+
/\$\.(\w+)\.(\w+)/g,
|
|
236
|
+
'<span class="text-[#79c0ff]">$</span>.<span class="text-[#d2a8ff]">$1</span>.<span class="text-[#ffa657]">$2</span>'
|
|
237
|
+
);
|
|
238
|
+
highlighted = highlighted.replace(/(\w+):/g, '<span class="text-[#79c0ff]">$1</span>:');
|
|
239
|
+
highlighted = highlighted.replace(/'([^']*)'/g, `<span class="text-[#a5d6ff]">'$1'</span>`);
|
|
240
|
+
highlighted = highlighted.replace(/\b(\d+)\b/g, '<span class="text-[#79c0ff]">$1</span>');
|
|
241
|
+
result.push(/* @__PURE__ */ jsx4("div", { dangerouslySetInnerHTML: { __html: highlighted } }, i));
|
|
242
|
+
prevWasComment = false;
|
|
243
|
+
prevWasCode = true;
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
};
|
|
247
|
+
return /* @__PURE__ */ jsx4("div", { className: `w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ""}`, children: /* @__PURE__ */ jsx4("div", { className: "flex-1 overflow-auto p-6 lg:p-8", children: /* @__PURE__ */ jsx4("pre", { className: "text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]", children: highlightCode(code) }) }) });
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// src/components/features/features.tsx
|
|
251
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
252
|
+
var defaultFeatures = [
|
|
253
|
+
{
|
|
254
|
+
title: "Automatic Issue Triage",
|
|
255
|
+
description: "Every new issue gets analyzed, labeled, prioritized, and assigned to the right person\u2014automatically in seconds.",
|
|
256
|
+
items: [{ text: "Smart labels based on content" }, { text: "Priority using impact + urgency" }, { text: "Auto-assigned to right person" }],
|
|
257
|
+
code: `// New issue arrives
|
|
258
|
+
$.Priya.triage({
|
|
259
|
+
issue: '#347'
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
// Priya handles everything:
|
|
263
|
+
// \u2192 Reads issue content
|
|
264
|
+
// \u2192 Applies correct labels
|
|
265
|
+
// \u2192 Sets priority level
|
|
266
|
+
// \u2192 Assigns to team member
|
|
267
|
+
// \u2192 Adds to project board`,
|
|
268
|
+
badge: "01"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
title: "Sprint Planning",
|
|
272
|
+
description: "Priya reviews your backlog, calculates what your team can handle, and builds the sprint for you.",
|
|
273
|
+
items: [{ text: "Capacity based on team velocity" }, { text: "Best issues selected automatically" }, { text: "Sprint board ready to go" }],
|
|
274
|
+
code: `// Sprint planning day
|
|
275
|
+
$.Priya.planSprint({
|
|
276
|
+
capacity: 40,
|
|
277
|
+
startDate: 'Monday'
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
// Priya prepares:
|
|
281
|
+
// \u2192 Reviews all backlog items
|
|
282
|
+
// \u2192 Calculates team velocity
|
|
283
|
+
// \u2192 Selects optimal issues
|
|
284
|
+
// \u2192 Organizes sprint board
|
|
285
|
+
// \u2192 Notifies team`,
|
|
286
|
+
badge: "02"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
title: "Backlog Grooming",
|
|
290
|
+
description: "Your backlog stays healthy automatically\u2014prioritized, organized, and actionable.",
|
|
291
|
+
items: [{ text: "Always prioritized correctly" }, { text: "No more zombie issues" }, { text: "Epics become user stories" }],
|
|
292
|
+
code: `// Runs continuously
|
|
293
|
+
$.Priya.groomBacklog({
|
|
294
|
+
framework: 'RICE'
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
// Priya maintains:
|
|
298
|
+
// \u2192 Applies RICE scoring
|
|
299
|
+
// \u2192 Closes stale issues
|
|
300
|
+
// \u2192 Breaks down epics
|
|
301
|
+
// \u2192 Updates priorities
|
|
302
|
+
// \u2192 Tracks dependencies`,
|
|
303
|
+
badge: "03"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
title: "Status Reports",
|
|
307
|
+
description: "Weekly progress reports generated and shared automatically. No more manual updates.",
|
|
308
|
+
items: [{ text: "Automatic progress tracking" }, { text: "Blockers surfaced early" }, { text: "Team stays informed" }],
|
|
309
|
+
code: `// Every Friday
|
|
310
|
+
$.Priya.statusReport({
|
|
311
|
+
period: 'week'
|
|
312
|
+
})
|
|
313
|
+
|
|
314
|
+
// Priya reports:
|
|
315
|
+
// \u2192 Issues closed
|
|
316
|
+
// \u2192 PRs merged
|
|
317
|
+
// \u2192 Sprint progress
|
|
318
|
+
// \u2192 Blockers identified
|
|
319
|
+
// \u2192 Shares with team`,
|
|
320
|
+
badge: "04"
|
|
321
|
+
}
|
|
322
|
+
];
|
|
323
|
+
function Features({ heading = "How It Works", description = "Priya handles the repetitive work so you can focus on what matters. Here's how she automates your entire product workflow.", features = defaultFeatures, className }) {
|
|
324
|
+
return /* @__PURE__ */ jsx5("section", { id: "features", className: cn("flex justify-center items-center pb-0 md:pb-10 bg-background", className), children: /* @__PURE__ */ jsxs2("div", { className: "features-gradient flex flex-col items-center w-full relative overflow-visible rounded-[36px] gap-16 h-min max-w-[1400px] py-10 sm:py-20", children: [
|
|
325
|
+
/* @__PURE__ */ jsx5(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "text-center w-full px-4 md:px-6 space-y-4", children: [
|
|
326
|
+
/* @__PURE__ */ jsx5("h2", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: heading }),
|
|
327
|
+
/* @__PURE__ */ jsx5("p", { className: "text-base md:text-lg text-muted-foreground max-w-2xl mx-auto", children: description })
|
|
328
|
+
] }) }),
|
|
329
|
+
/* @__PURE__ */ jsx5("div", { className: "w-full px-4 lg:px-18 space-y-10", children: features.map((feature, index) => /* @__PURE__ */ jsx5(ScrollReveal, { direction: "up", delay: index * 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "grid md:grid-cols-2 overflow-hidden bg-card w-full rounded-3xl feature-card-shadow opacity-100 border border-border", children: [
|
|
330
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex flex-col px-6 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20", children: [
|
|
331
|
+
/* @__PURE__ */ jsx5("div", { className: "mb-4", children: /* @__PURE__ */ jsx5("span", { className: "inline-flex size-10 items-center justify-center rounded-lg font-mono text-sm font-medium bg-card dark:bg-muted border border-border dark:border-border text-foreground", children: feature.badge }) }),
|
|
332
|
+
/* @__PURE__ */ jsx5("h3", { className: "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl text-foreground", children: feature.title }),
|
|
333
|
+
/* @__PURE__ */ jsx5("div", { className: "mb-8 text-sm sm:mb-10 md:text-base text-muted-foreground", children: feature.description }),
|
|
334
|
+
/* @__PURE__ */ jsx5("ul", { className: "space-y-2 sm:space-y-3", children: feature.items.map((item, itemIndex) => /* @__PURE__ */ jsxs2("li", { className: "flex gap-x-3 items-start", children: [
|
|
335
|
+
/* @__PURE__ */ jsx5(CheckCircle, { className: "mt-1 size-4 shrink-0 text-primary" }),
|
|
336
|
+
/* @__PURE__ */ jsx5("p", { className: "text-sm md:text-base text-foreground", children: item.text })
|
|
337
|
+
] }, itemIndex)) })
|
|
338
|
+
] }),
|
|
339
|
+
/* @__PURE__ */ jsx5("div", { className: "relative order-last md:order-last h-96 md:h-[500px] p-4 md:p-8 lg:p-10", children: /* @__PURE__ */ jsx5(CodeWindow, { code: feature.code }) })
|
|
340
|
+
] }) }, index)) })
|
|
341
|
+
] }) });
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// src/components/pricing/pricing.tsx
|
|
345
|
+
import { Check } from "lucide-react";
|
|
346
|
+
import { Button as Button2 } from "@mdxui/primitives";
|
|
347
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
348
|
+
var defaultFeatures2 = [
|
|
349
|
+
{ text: "Automated backups" },
|
|
350
|
+
{ text: "24/7 support" },
|
|
351
|
+
{ text: "Unlimited projects" },
|
|
352
|
+
{ text: "Unlimited users" },
|
|
353
|
+
{ text: "Custom domain" },
|
|
354
|
+
{ text: "Custom branding" },
|
|
355
|
+
{ text: "Advanced analytics" },
|
|
356
|
+
{ text: "Custom permissions" },
|
|
357
|
+
{ text: "Advanced reports" }
|
|
358
|
+
];
|
|
359
|
+
function Pricing({
|
|
360
|
+
heading = "Simple, transparent pricing",
|
|
361
|
+
subheading = "Start automating your product workflow in minutes. No credit card required to get started.",
|
|
362
|
+
price = "$16",
|
|
363
|
+
priceUnit = "/ month",
|
|
364
|
+
trialText = "With a 7-day free trial",
|
|
365
|
+
ctaText = "Get Started",
|
|
366
|
+
ctaHref = "#contact",
|
|
367
|
+
featuresHeading = "What's included",
|
|
368
|
+
features = defaultFeatures2,
|
|
369
|
+
backgroundColor = "bg-background",
|
|
370
|
+
securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
|
|
371
|
+
className
|
|
372
|
+
}) {
|
|
373
|
+
return /* @__PURE__ */ jsx6("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs3("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
|
|
374
|
+
/* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs3("div", { className: "text-center my-16 sm:my-12", children: [
|
|
375
|
+
/* @__PURE__ */ jsx6("h2", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
|
|
376
|
+
/* @__PURE__ */ jsx6("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
|
|
377
|
+
] }) }),
|
|
378
|
+
/* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs3("div", { className: "bg-card mx-auto flex w-full md:max-w-md lg:max-w-3xl flex-col rounded-3xl border border-border feature-card-shadow p-6 md:p-8 px-6", children: [
|
|
379
|
+
/* @__PURE__ */ jsxs3("div", { className: "text-center", children: [
|
|
380
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex justify-start sm:justify-center items-baseline", children: [
|
|
381
|
+
/* @__PURE__ */ jsx6("span", { className: "text-3xl font-semibold text-foreground", children: price }),
|
|
382
|
+
/* @__PURE__ */ jsx6("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
|
|
383
|
+
] }),
|
|
384
|
+
trialText && /* @__PURE__ */ jsx6("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
|
|
385
|
+
/* @__PURE__ */ jsx6(Button2, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx6("a", { href: ctaHref, children: ctaText }) })
|
|
386
|
+
] }),
|
|
387
|
+
/* @__PURE__ */ jsxs3("div", { className: "mt-8", children: [
|
|
388
|
+
/* @__PURE__ */ jsx6("p", { className: "text-left sm:text-center text-lg font-semibold text-foreground mb-4", children: featuresHeading }),
|
|
389
|
+
/* @__PURE__ */ jsx6("ul", { className: "grid gap-y-3 gap-x-6 md:grid-cols-2 lg:grid-cols-3 ", children: features.map((feature, index) => /* @__PURE__ */ jsxs3("li", { className: "flex items-start text-left", children: [
|
|
390
|
+
/* @__PURE__ */ jsx6(Check, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
391
|
+
/* @__PURE__ */ jsx6("span", { className: "text-foreground text-sm", children: feature.text })
|
|
392
|
+
] }, index)) })
|
|
393
|
+
] })
|
|
394
|
+
] }) }),
|
|
395
|
+
securityNote && /* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx6("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
|
|
396
|
+
/* @__PURE__ */ jsx6("strong", { children: "Your code stays private." }),
|
|
397
|
+
" ",
|
|
398
|
+
securityNote
|
|
399
|
+
] }) }) })
|
|
400
|
+
] }) });
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// src/components/pricing/pricing-tiers.tsx
|
|
404
|
+
import { Check as Check2 } from "lucide-react";
|
|
405
|
+
import Image2 from "next/image";
|
|
406
|
+
import { Button as Button3 } from "@mdxui/primitives";
|
|
407
|
+
import { Fragment, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
408
|
+
var defaultTiers = [
|
|
409
|
+
{
|
|
410
|
+
title: "Business",
|
|
411
|
+
description: "For growing teams that need more power and priority support.",
|
|
412
|
+
price: "$299",
|
|
413
|
+
priceUnit: "/ month",
|
|
414
|
+
ctaText: "Get Started",
|
|
415
|
+
ctaVariant: "primary",
|
|
416
|
+
ctaHref: "#contact",
|
|
417
|
+
features: [
|
|
418
|
+
{ text: "Unlimited repositories" },
|
|
419
|
+
{ text: "Unlimited issues & projects" },
|
|
420
|
+
{ text: "Unlimited team members" },
|
|
421
|
+
{ text: "Priority support" },
|
|
422
|
+
{ text: "Custom workflows" },
|
|
423
|
+
{ text: "Advanced analytics" }
|
|
424
|
+
],
|
|
425
|
+
image: "/images/hero/hero-main.png",
|
|
426
|
+
imageAlt: "Business Plan",
|
|
427
|
+
featured: true
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
title: "Team",
|
|
431
|
+
description: "Perfect for small teams getting started with AI product management.",
|
|
432
|
+
price: "$99",
|
|
433
|
+
priceUnit: "/ month",
|
|
434
|
+
ctaText: "Get Started",
|
|
435
|
+
ctaVariant: "secondary",
|
|
436
|
+
ctaHref: "#contact",
|
|
437
|
+
features: [{ text: "Up to 10 repositories" }, { text: "Unlimited issues & projects" }, { text: "Unlimited team members" }, { text: "Email support" }],
|
|
438
|
+
featured: false
|
|
439
|
+
}
|
|
440
|
+
];
|
|
441
|
+
function PricingTiers({
|
|
442
|
+
heading = "Simple, transparent pricing",
|
|
443
|
+
subheading = "Start automating your product workflow in minutes. No credit card required to get started.",
|
|
444
|
+
tiers = defaultTiers,
|
|
445
|
+
backgroundColor = "bg-background",
|
|
446
|
+
securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
|
|
447
|
+
className
|
|
448
|
+
}) {
|
|
449
|
+
return /* @__PURE__ */ jsx7("section", { id: "pricing", className: cn(`pt-12 md:pt-16 pb-10 sm:pb-20 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs4("div", { className: "max-w-7xl mx-auto p-6 sm:p-16 rounded-none sm:rounded-3xl pricing-gradient", children: [
|
|
450
|
+
/* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs4("div", { className: "text-center my-16 sm:my-12", children: [
|
|
451
|
+
/* @__PURE__ */ jsx7("h2", { className: "font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }),
|
|
452
|
+
/* @__PURE__ */ jsx7("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
|
|
453
|
+
] }) }),
|
|
454
|
+
/* @__PURE__ */ jsx7("ul", { className: "grid gap-6 lg:grid-cols-3 lg:items-stretch", children: tiers.map((tier, index) => /* @__PURE__ */ jsx7("li", { className: tier.featured ? "lg:col-span-2 flex" : "lg:col-span-1 flex", children: /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.2 + index * 0.1, className: "w-full", children: /* @__PURE__ */ jsx7(
|
|
455
|
+
"div",
|
|
456
|
+
{
|
|
457
|
+
className: tier.featured ? "bg-card flex w-full h-full flex-col-reverse rounded-3xl border border-border feature-card-shadow md:flex-row" : "bg-card w-full h-full rounded-3xl border border-border feature-card-shadow p-6 md:p-8",
|
|
458
|
+
children: tier.featured ? /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
459
|
+
tier.image && /* @__PURE__ */ jsx7("div", { className: "hidden xl:block xl:w-1/2 pl-6 md:pl-8 py-6 md:py-8", children: /* @__PURE__ */ jsx7("div", { className: "h-full rounded-lg overflow-hidden relative min-h-96", children: /* @__PURE__ */ jsx7(Image2, { src: tier.image, alt: tier.imageAlt || tier.title, fill: true, className: "object-cover", sizes: "(max-width: 1280px) 0vw, 50vw" }) }) }),
|
|
460
|
+
/* @__PURE__ */ jsxs4("div", { className: "flex flex-col p-6 md:p-8 xl:w-1/2", children: [
|
|
461
|
+
/* @__PURE__ */ jsxs4("div", { className: "flex-1", children: [
|
|
462
|
+
/* @__PURE__ */ jsx7("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
|
|
463
|
+
/* @__PURE__ */ jsx7("p", { className: "text-muted-foreground mt-3", children: tier.description }),
|
|
464
|
+
/* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
|
|
465
|
+
/* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
|
|
466
|
+
/* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
|
|
467
|
+
] }),
|
|
468
|
+
/* @__PURE__ */ jsx7(Button3, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx7("a", { href: tier.ctaHref || "#", children: tier.ctaText }) })
|
|
469
|
+
] }),
|
|
470
|
+
/* @__PURE__ */ jsx7("div", { className: "mt-8", children: /* @__PURE__ */ jsx7("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
|
|
471
|
+
/* @__PURE__ */ jsx7(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
472
|
+
/* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
|
|
473
|
+
] }, featureIndex)) }) })
|
|
474
|
+
] })
|
|
475
|
+
] }) : /* @__PURE__ */ jsx7("div", { className: "flex h-full flex-col", children: /* @__PURE__ */ jsxs4("div", { children: [
|
|
476
|
+
/* @__PURE__ */ jsx7("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
|
|
477
|
+
/* @__PURE__ */ jsx7("p", { className: "text-muted-foreground mt-3", children: tier.description }),
|
|
478
|
+
/* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
|
|
479
|
+
/* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
|
|
480
|
+
/* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
|
|
481
|
+
] }),
|
|
482
|
+
/* @__PURE__ */ jsx7(Button3, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx7("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }),
|
|
483
|
+
/* @__PURE__ */ jsx7("div", { className: "mt-8", children: /* @__PURE__ */ jsx7("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
|
|
484
|
+
/* @__PURE__ */ jsx7(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
485
|
+
/* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
|
|
486
|
+
] }, featureIndex)) }) })
|
|
487
|
+
] }) })
|
|
488
|
+
}
|
|
489
|
+
) }) }, index)) }),
|
|
490
|
+
securityNote && /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.4, children: /* @__PURE__ */ jsx7("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs4("p", { className: "text-sm text-muted-foreground", children: [
|
|
491
|
+
/* @__PURE__ */ jsx7("strong", { children: "Your code stays private." }),
|
|
492
|
+
" ",
|
|
493
|
+
securityNote
|
|
494
|
+
] }) }) })
|
|
495
|
+
] }) });
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// src/components/cta/cta.tsx
|
|
499
|
+
import { HiArrowRight } from "react-icons/hi";
|
|
500
|
+
import { Button as Button4 } from "@mdxui/primitives";
|
|
501
|
+
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
502
|
+
var defaultButtons = [
|
|
503
|
+
{
|
|
504
|
+
text: "Get Started",
|
|
505
|
+
href: "#pricing",
|
|
506
|
+
variant: "primary",
|
|
507
|
+
showArrow: true
|
|
508
|
+
}
|
|
509
|
+
];
|
|
510
|
+
function CTA({ heading = "Ready to Save 15 Hours Per Week?", subheading = "Setup with Github \u2013 takes 5 minutes.", buttons = defaultButtons, backgroundColor: _backgroundColor, className }) {
|
|
511
|
+
const bgClass = "bg-card";
|
|
512
|
+
return /* @__PURE__ */ jsx8("section", { className: cn(`py-20 md:py-32 px-4 md:px-6 ${bgClass}`, className), children: /* @__PURE__ */ jsx8("div", { className: "max-w-3xl mx-auto text-center", children: /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs5("div", { className: "space-y-6", children: [
|
|
513
|
+
/* @__PURE__ */ jsx8("h2", { className: "font-normal text-foreground text-[clamp(32px,5vw,52px)] leading-tight tracking-tight", children: heading }),
|
|
514
|
+
/* @__PURE__ */ jsx8("p", { className: "max-w-2xl mx-auto text-[clamp(16px,2vw,18px)] leading-relaxed text-muted-foreground", children: subheading }),
|
|
515
|
+
/* @__PURE__ */ jsx8("div", { className: "flex flex-col sm:flex-row gap-3 justify-center items-center pt-4", children: buttons.map((button, index) => /* @__PURE__ */ jsx8(Button4, { asChild: true, variant: button.variant === "primary" ? "default" : "secondary", children: /* @__PURE__ */ jsxs5("a", { href: button.href, children: [
|
|
516
|
+
button.text,
|
|
517
|
+
button.showArrow && /* @__PURE__ */ jsx8(HiArrowRight, { className: "w-4 h-4" })
|
|
518
|
+
] }) }, index)) })
|
|
519
|
+
] }) }) }) });
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
// src/components/faq/faq.tsx
|
|
523
|
+
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@mdxui/primitives";
|
|
524
|
+
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
525
|
+
var defaultFaqs = [
|
|
526
|
+
{
|
|
527
|
+
question: "How do I get started?",
|
|
528
|
+
answer: "Choose your plan, connect your GitHub account, and Priya starts working. Setup takes 5 minutes."
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
question: "Does it work with private repos?",
|
|
532
|
+
answer: "Yes, both plans work with private and public repositories."
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
question: "What if it makes a mistake?",
|
|
536
|
+
answer: "You can override any decision. Priya learns from your corrections."
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
question: "Can I switch plans later?",
|
|
540
|
+
answer: "Yes, upgrade or downgrade anytime. Changes take effect immediately."
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
question: "What about Enterprise?",
|
|
544
|
+
answer: "Contact us for custom solutions tailored to your organization's needs, including dedicated support, custom workflows, and enterprise-grade SLAs."
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
question: "Is Priya SOC 2 and HIPAA compliant?",
|
|
548
|
+
answer: "Yes, Priya is SOC 2 Type II certified and HIPAA compliant, ensuring your data is handled with the highest security and privacy standards."
|
|
549
|
+
}
|
|
550
|
+
];
|
|
551
|
+
function FAQ({ heading = "FAQs", faqs = defaultFaqs, backgroundColor = "bg-background", className }) {
|
|
552
|
+
return /* @__PURE__ */ jsx9("section", { id: "faq", className: cn(`py-20 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs6("div", { className: "max-w-4xl mx-auto", children: [
|
|
553
|
+
/* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx9("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsx9("h2", { className: "font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }) }) }),
|
|
554
|
+
/* @__PURE__ */ jsx9(Accordion, { type: "single", collapsible: true, className: "space-y-4", children: faqs.map((faq, index) => /* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.15 + index * 0.05, children: /* @__PURE__ */ jsxs6(AccordionItem, { value: `item-${index}`, className: "rounded-xl px-6 border border-border bg-card shadow-sm", children: [
|
|
555
|
+
/* @__PURE__ */ jsx9(AccordionTrigger, { className: "hover:no-underline py-5 text-base font-medium text-foreground", children: faq.question }),
|
|
556
|
+
/* @__PURE__ */ jsx9(AccordionContent, { className: "pb-5 text-sm text-muted-foreground leading-relaxed", children: faq.answer })
|
|
557
|
+
] }) }, index)) })
|
|
558
|
+
] }) });
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// src/components/problem/problem.tsx
|
|
562
|
+
import { FaInbox, FaCalendarAlt, FaListUl, FaFileAlt, FaRocket, FaProjectDiagram, FaBug, FaLightbulb } from "react-icons/fa";
|
|
563
|
+
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
564
|
+
var defaultWorkflows = [
|
|
565
|
+
{ icon: FaInbox, label: "Issue triage" },
|
|
566
|
+
{ icon: FaCalendarAlt, label: "Sprint planning" },
|
|
567
|
+
{ icon: FaListUl, label: "Backlog grooming" },
|
|
568
|
+
{ icon: FaFileAlt, label: "Status updates" },
|
|
569
|
+
{ icon: FaRocket, label: "Release planning" },
|
|
570
|
+
{ icon: FaProjectDiagram, label: "Dependency tracking" },
|
|
571
|
+
{ icon: FaBug, label: "Bug prioritization" },
|
|
572
|
+
{ icon: FaLightbulb, label: "Feature requests" }
|
|
573
|
+
];
|
|
574
|
+
function Problem({
|
|
575
|
+
heading = "Product managers <strong>spend 15+ hours</strong> per week on busywork",
|
|
576
|
+
workflows = defaultWorkflows,
|
|
577
|
+
subheading = "What if all of that just... ",
|
|
578
|
+
subheadingHighlight = "happened automatically?",
|
|
579
|
+
highlightColor = "bg-primary/20",
|
|
580
|
+
marqueeDuration = "30s",
|
|
581
|
+
marqueeGap = "0.5rem",
|
|
582
|
+
backgroundColor = "bg-background",
|
|
583
|
+
className
|
|
584
|
+
}) {
|
|
585
|
+
return /* @__PURE__ */ jsx10("section", { id: "problem", className: cn(`py-20 md:pb-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsx10("div", { className: "max-w-4xl mx-auto", children: /* @__PURE__ */ jsxs7("div", { className: "text-center space-y-8", children: [
|
|
586
|
+
/* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx10(
|
|
587
|
+
"h2",
|
|
588
|
+
{
|
|
589
|
+
className: "font-normal text-[clamp(36px,4vw,40px)] leading-tight text-foreground",
|
|
590
|
+
dangerouslySetInnerHTML: { __html: heading }
|
|
591
|
+
}
|
|
592
|
+
) }),
|
|
593
|
+
/* @__PURE__ */ jsx10(ScrollReveal, { direction: "none", delay: 0.2, children: /* @__PURE__ */ jsxs7("div", { className: "relative py-6", children: [
|
|
594
|
+
/* @__PURE__ */ jsx10("div", { className: "absolute left-0 top-0 bottom-0 w-32 bg-gradient-to-r from-background to-transparent z-10 pointer-events-none" }),
|
|
595
|
+
/* @__PURE__ */ jsx10("div", { className: "absolute right-0 top-0 bottom-0 w-32 bg-gradient-to-l from-background to-transparent z-10 pointer-events-none" }),
|
|
596
|
+
/* @__PURE__ */ jsx10(
|
|
597
|
+
Marquee,
|
|
598
|
+
{
|
|
599
|
+
className: "[--duration:30s] [--gap:0.5rem]",
|
|
600
|
+
style: {
|
|
601
|
+
"--duration": marqueeDuration,
|
|
602
|
+
"--gap": marqueeGap
|
|
603
|
+
},
|
|
604
|
+
children: workflows.map((workflow, index) => /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2.5 pl-1.5 pr-3.5 py-1.5 bg-card border border-border rounded-full", children: [
|
|
605
|
+
/* @__PURE__ */ jsx10("div", { className: "flex items-center justify-center w-7 h-7 rounded-full bg-background", children: /* @__PURE__ */ jsx10(workflow.icon, { className: "w-3.5 h-3.5 text-foreground" }) }),
|
|
606
|
+
/* @__PURE__ */ jsx10("span", { className: "text-sm text-foreground whitespace-nowrap", children: workflow.label })
|
|
607
|
+
] }, index))
|
|
608
|
+
}
|
|
609
|
+
)
|
|
610
|
+
] }) }),
|
|
611
|
+
/* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx10("div", { className: "pt-2 md:pt-4", children: /* @__PURE__ */ jsxs7("h3", { className: "font-normal text-[clamp(26px,3.5vw,32px)] leading-tight text-foreground", children: [
|
|
612
|
+
subheading,
|
|
613
|
+
/* @__PURE__ */ jsxs7("span", { className: "relative inline-block", children: [
|
|
614
|
+
/* @__PURE__ */ jsx10("span", { className: "relative z-10", children: subheadingHighlight }),
|
|
615
|
+
/* @__PURE__ */ jsx10("span", { className: `absolute bottom-1 left-0 w-full h-3 ${highlightColor} opacity-30 -rotate-1` })
|
|
616
|
+
] })
|
|
617
|
+
] }) }) })
|
|
618
|
+
] }) }) });
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// src/components/contact/contact.tsx
|
|
622
|
+
import { useState } from "react";
|
|
623
|
+
import { Button as Button5, Input, Label, Textarea } from "@mdxui/primitives";
|
|
624
|
+
import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
625
|
+
var defaultFields = [
|
|
626
|
+
{
|
|
627
|
+
id: "name",
|
|
628
|
+
label: "Name",
|
|
629
|
+
type: "text",
|
|
630
|
+
required: true
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
id: "email",
|
|
634
|
+
label: "Company Email",
|
|
635
|
+
type: "email",
|
|
636
|
+
required: true
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
id: "message",
|
|
640
|
+
label: "Message",
|
|
641
|
+
type: "textarea",
|
|
642
|
+
placeholder: "Tell us about your use case, team size, or any other questions you may have.",
|
|
643
|
+
required: true
|
|
644
|
+
}
|
|
645
|
+
];
|
|
646
|
+
function Contact({
|
|
647
|
+
heading = "Get in touch",
|
|
648
|
+
subheading = "Have questions about use cases, pricing, or anything else? Let's chat!",
|
|
649
|
+
fields = defaultFields,
|
|
650
|
+
submitButtonText = "Submit",
|
|
651
|
+
successMessage = "Thanks for reaching out! I'll get back to you within 24 hours.",
|
|
652
|
+
errorMessage = "Hmm, something went wrong. Mind trying again?",
|
|
653
|
+
onSubmit,
|
|
654
|
+
backgroundColor = "bg-background",
|
|
655
|
+
className
|
|
656
|
+
}) {
|
|
657
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
658
|
+
const [formData, setFormData] = useState({});
|
|
659
|
+
const [submitStatus, setSubmitStatus] = useState("idle");
|
|
660
|
+
const handleSubmit = async (e) => {
|
|
661
|
+
e.preventDefault();
|
|
662
|
+
setIsSubmitting(true);
|
|
663
|
+
setSubmitStatus("idle");
|
|
664
|
+
try {
|
|
665
|
+
if (onSubmit) {
|
|
666
|
+
await onSubmit(formData);
|
|
667
|
+
}
|
|
668
|
+
setSubmitStatus("success");
|
|
669
|
+
setFormData({});
|
|
670
|
+
e.target.reset();
|
|
671
|
+
} catch {
|
|
672
|
+
setSubmitStatus("error");
|
|
673
|
+
} finally {
|
|
674
|
+
setIsSubmitting(false);
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
const handleChange = (e) => {
|
|
678
|
+
setFormData((prev) => ({
|
|
679
|
+
...prev,
|
|
680
|
+
[e.target.id]: e.target.value
|
|
681
|
+
}));
|
|
682
|
+
};
|
|
683
|
+
return /* @__PURE__ */ jsx11("section", { className: cn(`relative py-12 md:py-32 px-6 lg:px-12 ${backgroundColor}`, className), children: /* @__PURE__ */ jsxs8("div", { className: "max-w-3xl mx-auto", children: [
|
|
684
|
+
/* @__PURE__ */ jsx11(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs8("div", { className: "mb-14 text-center", children: [
|
|
685
|
+
/* @__PURE__ */ jsx11("h1", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
|
|
686
|
+
/* @__PURE__ */ jsx11("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
|
|
687
|
+
] }) }),
|
|
688
|
+
/* @__PURE__ */ jsx11(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsxs8(
|
|
689
|
+
"form",
|
|
690
|
+
{
|
|
691
|
+
onSubmit: handleSubmit,
|
|
692
|
+
className: "mx-auto flex max-w-lg flex-col gap-6 bg-card p-6 md:p-8 rounded-3xl border border-border feature-card-shadow",
|
|
693
|
+
children: [
|
|
694
|
+
fields.map((field) => /* @__PURE__ */ jsxs8("div", { className: "grid w-full items-center gap-2", children: [
|
|
695
|
+
/* @__PURE__ */ jsxs8(Label, { htmlFor: field.id, className: "text-foreground", children: [
|
|
696
|
+
field.label,
|
|
697
|
+
field.required && /* @__PURE__ */ jsx11("span", { className: "text-destructive ml-1", children: "*" })
|
|
698
|
+
] }),
|
|
699
|
+
field.type === "textarea" ? /* @__PURE__ */ jsx11(Textarea, { id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange, className: "min-h-[120px]" }) : /* @__PURE__ */ jsx11(Input, { type: field.type, id: field.id, placeholder: field.placeholder, required: field.required, onChange: handleChange })
|
|
700
|
+
] }, field.id)),
|
|
701
|
+
/* @__PURE__ */ jsx11(Button5, { type: "submit", className: "w-full", disabled: isSubmitting, children: isSubmitting ? "Submitting..." : submitButtonText }),
|
|
702
|
+
submitStatus === "success" && /* @__PURE__ */ jsx11("p", { className: "text-primary text-sm text-center", children: successMessage }),
|
|
703
|
+
submitStatus === "error" && /* @__PURE__ */ jsx11("p", { className: "text-destructive text-sm text-center", children: errorMessage })
|
|
704
|
+
]
|
|
705
|
+
}
|
|
706
|
+
) })
|
|
707
|
+
] }) });
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// src/components/integration/integration.tsx
|
|
711
|
+
import { forwardRef, useRef, useEffect as useEffect2, useState as useState3 } from "react";
|
|
712
|
+
|
|
713
|
+
// src/shared/animated-beam/animated-beam.tsx
|
|
714
|
+
import { useEffect, useId, useState as useState2 } from "react";
|
|
715
|
+
import { motion as motion2 } from "motion/react";
|
|
716
|
+
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
717
|
+
function AnimatedBeam({
|
|
718
|
+
className,
|
|
719
|
+
containerRef,
|
|
720
|
+
fromRef,
|
|
721
|
+
toRef,
|
|
722
|
+
curvature = 0,
|
|
723
|
+
reverse = false,
|
|
724
|
+
duration = Math.random() * 3 + 4,
|
|
725
|
+
delay = 0,
|
|
726
|
+
pathColor = "gray",
|
|
727
|
+
pathWidth = 2,
|
|
728
|
+
pathOpacity = 0.2,
|
|
729
|
+
gradientStartColor = "#ffaa40",
|
|
730
|
+
gradientStopColor = "#9c40ff",
|
|
731
|
+
startXOffset = 0,
|
|
732
|
+
startYOffset = 0,
|
|
733
|
+
endXOffset = 0,
|
|
734
|
+
endYOffset = 0
|
|
735
|
+
}) {
|
|
736
|
+
const id = useId();
|
|
737
|
+
const [pathD, setPathD] = useState2("");
|
|
738
|
+
const [svgDimensions, setSvgDimensions] = useState2({ width: 0, height: 0 });
|
|
739
|
+
const gradientCoordinates = reverse ? {
|
|
740
|
+
x1: ["90%", "-10%"],
|
|
741
|
+
x2: ["100%", "0%"],
|
|
742
|
+
y1: ["0%", "0%"],
|
|
743
|
+
y2: ["0%", "0%"]
|
|
744
|
+
} : {
|
|
745
|
+
x1: ["10%", "110%"],
|
|
746
|
+
x2: ["0%", "100%"],
|
|
747
|
+
y1: ["0%", "0%"],
|
|
748
|
+
y2: ["0%", "0%"]
|
|
749
|
+
};
|
|
750
|
+
useEffect(() => {
|
|
751
|
+
const updatePath = () => {
|
|
752
|
+
if (containerRef.current && fromRef.current && toRef.current) {
|
|
753
|
+
const containerRect = containerRef.current.getBoundingClientRect();
|
|
754
|
+
const rectA = fromRef.current.getBoundingClientRect();
|
|
755
|
+
const rectB = toRef.current.getBoundingClientRect();
|
|
756
|
+
const svgWidth = containerRect.width;
|
|
757
|
+
const svgHeight = containerRect.height;
|
|
758
|
+
setSvgDimensions({ width: svgWidth, height: svgHeight });
|
|
759
|
+
const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;
|
|
760
|
+
const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
|
|
761
|
+
const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;
|
|
762
|
+
const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
|
|
763
|
+
const controlY = startY - curvature;
|
|
764
|
+
const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;
|
|
765
|
+
setPathD(d);
|
|
766
|
+
}
|
|
767
|
+
};
|
|
768
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
769
|
+
updatePath();
|
|
770
|
+
});
|
|
771
|
+
if (containerRef.current) {
|
|
772
|
+
resizeObserver.observe(containerRef.current);
|
|
773
|
+
}
|
|
774
|
+
updatePath();
|
|
775
|
+
return () => {
|
|
776
|
+
resizeObserver.disconnect();
|
|
777
|
+
};
|
|
778
|
+
}, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);
|
|
779
|
+
return /* @__PURE__ */ jsxs9(
|
|
780
|
+
"svg",
|
|
781
|
+
{
|
|
782
|
+
fill: "none",
|
|
783
|
+
width: svgDimensions.width,
|
|
784
|
+
height: svgDimensions.height,
|
|
785
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
786
|
+
className: cn("pointer-events-none absolute top-0 left-0 transform-gpu stroke-2", className),
|
|
787
|
+
viewBox: `0 0 ${svgDimensions.width} ${svgDimensions.height}`,
|
|
788
|
+
children: [
|
|
789
|
+
/* @__PURE__ */ jsx12("path", { d: pathD, stroke: pathColor, strokeWidth: pathWidth, strokeOpacity: pathOpacity, strokeLinecap: "round" }),
|
|
790
|
+
/* @__PURE__ */ jsx12("path", { d: pathD, strokeWidth: pathWidth, stroke: `url(#${id})`, strokeOpacity: "1", strokeLinecap: "round" }),
|
|
791
|
+
/* @__PURE__ */ jsx12("defs", { children: /* @__PURE__ */ jsxs9(
|
|
792
|
+
motion2.linearGradient,
|
|
793
|
+
{
|
|
794
|
+
className: "transform-gpu",
|
|
795
|
+
id,
|
|
796
|
+
gradientUnits: "userSpaceOnUse",
|
|
797
|
+
initial: {
|
|
798
|
+
x1: "0%",
|
|
799
|
+
x2: "0%",
|
|
800
|
+
y1: "0%",
|
|
801
|
+
y2: "0%"
|
|
802
|
+
},
|
|
803
|
+
animate: {
|
|
804
|
+
x1: gradientCoordinates.x1,
|
|
805
|
+
x2: gradientCoordinates.x2,
|
|
806
|
+
y1: gradientCoordinates.y1,
|
|
807
|
+
y2: gradientCoordinates.y2
|
|
808
|
+
},
|
|
809
|
+
transition: {
|
|
810
|
+
delay,
|
|
811
|
+
duration,
|
|
812
|
+
ease: [0.16, 1, 0.3, 1],
|
|
813
|
+
repeat: Infinity,
|
|
814
|
+
repeatDelay: 0
|
|
815
|
+
},
|
|
816
|
+
children: [
|
|
817
|
+
/* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
|
|
818
|
+
/* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor }),
|
|
819
|
+
/* @__PURE__ */ jsx12("stop", { offset: "32.5%", stopColor: gradientStopColor }),
|
|
820
|
+
/* @__PURE__ */ jsx12("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
|
|
821
|
+
]
|
|
822
|
+
}
|
|
823
|
+
) })
|
|
824
|
+
]
|
|
825
|
+
}
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
// src/shared/grid-pattern/grid-pattern.tsx
|
|
830
|
+
import { useId as useId2 } from "react";
|
|
831
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
832
|
+
function GridPattern({
|
|
833
|
+
width = 40,
|
|
834
|
+
height = 40,
|
|
835
|
+
x = -1,
|
|
836
|
+
y = -1,
|
|
837
|
+
strokeDasharray = "0",
|
|
838
|
+
squares,
|
|
839
|
+
className,
|
|
840
|
+
...props
|
|
841
|
+
}) {
|
|
842
|
+
const id = useId2();
|
|
843
|
+
return /* @__PURE__ */ jsxs10(
|
|
844
|
+
"svg",
|
|
845
|
+
{
|
|
846
|
+
"aria-hidden": "true",
|
|
847
|
+
className: cn("pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20", className),
|
|
848
|
+
...props,
|
|
849
|
+
children: [
|
|
850
|
+
/* @__PURE__ */ jsx13("defs", { children: /* @__PURE__ */ jsx13("pattern", { id, width, height, patternUnits: "userSpaceOnUse", x, y, children: /* @__PURE__ */ jsx13("path", { d: `M.5 ${height}V.5H${width}`, fill: "none", strokeDasharray }) }) }),
|
|
851
|
+
/* @__PURE__ */ jsx13("rect", { width: "100%", height: "100%", strokeWidth: 0, fill: `url(#${id})` }),
|
|
852
|
+
squares && /* @__PURE__ */ jsx13("svg", { x, y, className: "overflow-visible", children: squares.map(([sx, sy]) => /* @__PURE__ */ jsx13("rect", { strokeWidth: "0", width: width - 1, height: height - 1, x: sx * width + 1, y: sy * height + 1 }, `${sx}-${sy}`)) })
|
|
853
|
+
]
|
|
854
|
+
}
|
|
855
|
+
);
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
// src/components/integration/integration.tsx
|
|
859
|
+
import Image3 from "next/image";
|
|
860
|
+
import { Button as Button6 } from "@mdxui/primitives";
|
|
861
|
+
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
862
|
+
var Square = forwardRef(({ className, children }, ref) => {
|
|
863
|
+
return /* @__PURE__ */ jsx14(
|
|
864
|
+
"div",
|
|
865
|
+
{
|
|
866
|
+
ref,
|
|
867
|
+
className: cn("z-10 flex size-16 items-center justify-center rounded-lg bg-card border border-border p-3 integration-square-shadow", className),
|
|
868
|
+
children
|
|
869
|
+
}
|
|
870
|
+
);
|
|
871
|
+
});
|
|
872
|
+
Square.displayName = "Square";
|
|
873
|
+
function Integration({
|
|
874
|
+
title = "Connect in Seconds",
|
|
875
|
+
description = "Just connect your account and get started immediately \u2013 no configuration, no setup, no hassle.",
|
|
876
|
+
buttonText = "Get Started",
|
|
877
|
+
buttonHref = "#pricing",
|
|
878
|
+
leftNode,
|
|
879
|
+
rightNode,
|
|
880
|
+
beamAnimations = [
|
|
881
|
+
{ startYOffset: 10, endYOffset: 10, curvature: -20, duration: 3 },
|
|
882
|
+
{ startYOffset: -10, endYOffset: -10, curvature: 20, duration: 3, reverse: true }
|
|
883
|
+
],
|
|
884
|
+
gridPatternWidth = 30,
|
|
885
|
+
gridPatternHeight = 30,
|
|
886
|
+
maxWidth = "5xl",
|
|
887
|
+
className,
|
|
888
|
+
contentOrder = "left"
|
|
889
|
+
}) {
|
|
890
|
+
const containerRef = useRef(null);
|
|
891
|
+
const leftRef = useRef(null);
|
|
892
|
+
const rightRef = useRef(null);
|
|
893
|
+
const [isDark, setIsDark] = useState3(false);
|
|
894
|
+
useEffect2(() => {
|
|
895
|
+
const checkDarkMode = () => {
|
|
896
|
+
const isDarkMode = document.documentElement.classList.contains("dark") || window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
897
|
+
setIsDark(isDarkMode);
|
|
898
|
+
};
|
|
899
|
+
checkDarkMode();
|
|
900
|
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
901
|
+
const observer = new MutationObserver(checkDarkMode);
|
|
902
|
+
mediaQuery.addEventListener("change", checkDarkMode);
|
|
903
|
+
observer.observe(document.documentElement, {
|
|
904
|
+
attributes: true,
|
|
905
|
+
attributeFilter: ["class"]
|
|
906
|
+
});
|
|
907
|
+
return () => {
|
|
908
|
+
mediaQuery.removeEventListener("change", checkDarkMode);
|
|
909
|
+
observer.disconnect();
|
|
910
|
+
};
|
|
911
|
+
}, []);
|
|
912
|
+
const renderNode = (node, ref) => {
|
|
913
|
+
const squareContent = (() => {
|
|
914
|
+
if (node.type === "image" && typeof node.content === "string") {
|
|
915
|
+
return /* @__PURE__ */ jsx14("div", { className: "relative w-full h-full", children: /* @__PURE__ */ jsx14(Image3, { src: node.content, alt: node.alt || "Integration", fill: true, className: "object-cover rounded-lg" }) });
|
|
916
|
+
}
|
|
917
|
+
if (node.type === "icon" && typeof node.content === "string") {
|
|
918
|
+
return /* @__PURE__ */ jsx14("div", { className: cn("text-foreground", node.className), children: node.content });
|
|
919
|
+
}
|
|
920
|
+
return node.content;
|
|
921
|
+
})();
|
|
922
|
+
return /* @__PURE__ */ jsx14(Square, { ref, className: cn("size-20", node.type === "image" ? "p-0" : "", node.className), children: squareContent });
|
|
923
|
+
};
|
|
924
|
+
const maxWidthClasses = {
|
|
925
|
+
sm: "max-w-sm",
|
|
926
|
+
md: "max-w-md",
|
|
927
|
+
lg: "max-w-lg",
|
|
928
|
+
xl: "max-w-xl",
|
|
929
|
+
"2xl": "max-w-2xl",
|
|
930
|
+
"3xl": "max-w-3xl",
|
|
931
|
+
"4xl": "max-w-4xl",
|
|
932
|
+
"5xl": "max-w-5xl",
|
|
933
|
+
"6xl": "max-w-6xl",
|
|
934
|
+
"7xl": "max-w-7xl"
|
|
935
|
+
};
|
|
936
|
+
const content = /* @__PURE__ */ jsxs11("div", { className: "space-y-6", children: [
|
|
937
|
+
/* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx14("h2", { className: "font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: title }) }),
|
|
938
|
+
/* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx14("p", { className: "text-base text-muted-foreground max-w-lg", children: description }) }),
|
|
939
|
+
buttonText && buttonHref && /* @__PURE__ */ jsx14(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx14(Button6, { asChild: true, variant: "default", children: /* @__PURE__ */ jsx14("a", { href: buttonHref, children: buttonText }) }) })
|
|
940
|
+
] });
|
|
941
|
+
const animation = /* @__PURE__ */ jsx14(ScrollReveal, { direction: contentOrder === "left" ? "right" : "left", delay: 0.2, children: /* @__PURE__ */ jsxs11("div", { className: "relative flex aspect-square max-w-md mx-auto w-full items-center justify-center overflow-hidden rounded-lg", ref: containerRef, children: [
|
|
942
|
+
/* @__PURE__ */ jsx14(
|
|
943
|
+
GridPattern,
|
|
944
|
+
{
|
|
945
|
+
width: gridPatternWidth,
|
|
946
|
+
height: gridPatternHeight,
|
|
947
|
+
className: "opacity-30 mask-[radial-gradient(ellipse_at_center,black_40%,transparent_85%)] dark:mask-[radial-gradient(ellipse_at_center,white_40%,transparent_85%)]"
|
|
948
|
+
}
|
|
949
|
+
),
|
|
950
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex size-full flex-row items-center justify-center gap-20 relative z-10", children: [
|
|
951
|
+
/* @__PURE__ */ jsx14("div", { className: "flex flex-col justify-center", children: renderNode(leftNode, leftRef) }),
|
|
952
|
+
/* @__PURE__ */ jsx14("div", { className: "flex flex-col justify-center", children: renderNode(rightNode, rightRef) })
|
|
953
|
+
] }),
|
|
954
|
+
beamAnimations.map((config, index) => /* @__PURE__ */ jsx14(
|
|
955
|
+
AnimatedBeam,
|
|
956
|
+
{
|
|
957
|
+
containerRef,
|
|
958
|
+
fromRef: leftRef,
|
|
959
|
+
toRef: rightRef,
|
|
960
|
+
startYOffset: config.startYOffset,
|
|
961
|
+
endYOffset: config.endYOffset,
|
|
962
|
+
curvature: config.curvature,
|
|
963
|
+
duration: config.duration,
|
|
964
|
+
reverse: config.reverse,
|
|
965
|
+
pathColor: isDark ? "rgba(255, 255, 255, 0.2)" : "rgba(0, 0, 0, 0.2)"
|
|
966
|
+
},
|
|
967
|
+
index
|
|
968
|
+
))
|
|
969
|
+
] }) });
|
|
970
|
+
return /* @__PURE__ */ jsx14("section", { className: cn("pt-10 sm:pt-0 px-8 lg:px-24 bg-background", className), children: /* @__PURE__ */ jsx14("div", { className: cn(maxWidthClasses[maxWidth], "mx-auto"), children: /* @__PURE__ */ jsx14("div", { className: "grid lg:grid-cols-2 gap-1 items-center", children: contentOrder === "left" ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
|
|
971
|
+
content,
|
|
972
|
+
animation
|
|
973
|
+
] }) : /* @__PURE__ */ jsxs11(Fragment2, { children: [
|
|
974
|
+
animation,
|
|
975
|
+
content
|
|
976
|
+
] }) }) }) });
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
// src/view/mapper.ts
|
|
980
|
+
import {
|
|
981
|
+
FaInbox as FaInbox2,
|
|
982
|
+
FaCalendarAlt as FaCalendarAlt2,
|
|
983
|
+
FaListUl as FaListUl2,
|
|
984
|
+
FaFileAlt as FaFileAlt2,
|
|
985
|
+
FaRocket as FaRocket2,
|
|
986
|
+
FaProjectDiagram as FaProjectDiagram2,
|
|
987
|
+
FaBug as FaBug2,
|
|
988
|
+
FaLightbulb as FaLightbulb2,
|
|
989
|
+
FaRegDotCircle
|
|
990
|
+
} from "react-icons/fa";
|
|
991
|
+
var WORKFLOW_ICONS = {
|
|
992
|
+
inbox: FaInbox2,
|
|
993
|
+
calendar: FaCalendarAlt2,
|
|
994
|
+
list: FaListUl2,
|
|
995
|
+
file: FaFileAlt2,
|
|
996
|
+
rocket: FaRocket2,
|
|
997
|
+
project: FaProjectDiagram2,
|
|
998
|
+
bug: FaBug2,
|
|
999
|
+
lightbulb: FaLightbulb2
|
|
1000
|
+
};
|
|
1001
|
+
function resolveWorkflowIcon(hint) {
|
|
1002
|
+
return WORKFLOW_ICONS[hint] ?? FaRegDotCircle;
|
|
1003
|
+
}
|
|
1004
|
+
function mapWorkflows(workflows) {
|
|
1005
|
+
return workflows.map((w) => ({ icon: resolveWorkflowIcon(w.icon), label: w.label }));
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
// src/view/view.tsx
|
|
1009
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1010
|
+
function NamedAgentView({ content, theme, mode, brandName, hostname }) {
|
|
1011
|
+
const { hero, problem, features, integration, pricing, faq, cta, contact } = content;
|
|
1012
|
+
return /* @__PURE__ */ jsx15(DialectShell, { theme, mode, children: /* @__PURE__ */ jsxs12(
|
|
1013
|
+
NeoChrome,
|
|
1014
|
+
{
|
|
1015
|
+
brandName,
|
|
1016
|
+
hostname,
|
|
1017
|
+
primaryCta: { text: hero.ctaText, url: hero.ctaHref },
|
|
1018
|
+
openInAIPrompt: `Help me decide whether ${brandName} fits my team's workflow`,
|
|
1019
|
+
children: [
|
|
1020
|
+
/* @__PURE__ */ jsx15(
|
|
1021
|
+
Hero,
|
|
1022
|
+
{
|
|
1023
|
+
badgeEmoji: hero.badgeEmoji,
|
|
1024
|
+
badgeText: hero.badgeText,
|
|
1025
|
+
badgeHref: hero.badgeHref,
|
|
1026
|
+
heading: hero.heading,
|
|
1027
|
+
description: hero.description,
|
|
1028
|
+
ctaText: hero.ctaText,
|
|
1029
|
+
ctaHref: hero.ctaHref,
|
|
1030
|
+
rightImageSrc: hero.rightImageSrc,
|
|
1031
|
+
rightImageAlt: hero.rightImageAlt,
|
|
1032
|
+
showIconOverlay: hero.showIconOverlay,
|
|
1033
|
+
marqueeTitle: hero.marqueeTitle,
|
|
1034
|
+
marqueeImages: hero.marqueeImages
|
|
1035
|
+
}
|
|
1036
|
+
),
|
|
1037
|
+
/* @__PURE__ */ jsx15(
|
|
1038
|
+
Problem,
|
|
1039
|
+
{
|
|
1040
|
+
heading: problem.heading,
|
|
1041
|
+
workflows: mapWorkflows(problem.workflows),
|
|
1042
|
+
subheading: problem.subheading,
|
|
1043
|
+
subheadingHighlight: problem.subheadingHighlight
|
|
1044
|
+
}
|
|
1045
|
+
),
|
|
1046
|
+
/* @__PURE__ */ jsx15(
|
|
1047
|
+
Features,
|
|
1048
|
+
{
|
|
1049
|
+
heading: features.heading,
|
|
1050
|
+
description: features.description,
|
|
1051
|
+
features: features.features
|
|
1052
|
+
}
|
|
1053
|
+
),
|
|
1054
|
+
integration && /* @__PURE__ */ jsx15(
|
|
1055
|
+
Integration,
|
|
1056
|
+
{
|
|
1057
|
+
title: integration.title,
|
|
1058
|
+
description: integration.description,
|
|
1059
|
+
buttonText: integration.buttonText,
|
|
1060
|
+
buttonHref: integration.buttonHref,
|
|
1061
|
+
leftNode: integration.leftNode,
|
|
1062
|
+
rightNode: integration.rightNode
|
|
1063
|
+
}
|
|
1064
|
+
),
|
|
1065
|
+
pricing.variant === "single" ? /* @__PURE__ */ jsx15(
|
|
1066
|
+
Pricing,
|
|
1067
|
+
{
|
|
1068
|
+
heading: pricing.heading,
|
|
1069
|
+
subheading: pricing.subheading,
|
|
1070
|
+
price: pricing.price,
|
|
1071
|
+
priceUnit: pricing.priceUnit,
|
|
1072
|
+
trialText: pricing.trialText,
|
|
1073
|
+
ctaText: pricing.ctaText,
|
|
1074
|
+
ctaHref: pricing.ctaHref,
|
|
1075
|
+
featuresHeading: pricing.featuresHeading,
|
|
1076
|
+
features: pricing.features,
|
|
1077
|
+
securityNote: pricing.securityNote
|
|
1078
|
+
}
|
|
1079
|
+
) : /* @__PURE__ */ jsx15(
|
|
1080
|
+
PricingTiers,
|
|
1081
|
+
{
|
|
1082
|
+
heading: pricing.heading,
|
|
1083
|
+
subheading: pricing.subheading,
|
|
1084
|
+
tiers: pricing.tiers,
|
|
1085
|
+
securityNote: pricing.securityNote
|
|
1086
|
+
}
|
|
1087
|
+
),
|
|
1088
|
+
/* @__PURE__ */ jsx15(FAQ, { heading: faq.heading, faqs: faq.faqs }),
|
|
1089
|
+
/* @__PURE__ */ jsx15(CTA, { heading: cta.heading, subheading: cta.subheading, buttons: cta.buttons }),
|
|
1090
|
+
contact && /* @__PURE__ */ jsx15(
|
|
1091
|
+
Contact,
|
|
1092
|
+
{
|
|
1093
|
+
heading: contact.heading,
|
|
1094
|
+
subheading: contact.subheading,
|
|
1095
|
+
fields: contact.fields,
|
|
1096
|
+
submitButtonText: contact.submitButtonText
|
|
1097
|
+
}
|
|
1098
|
+
)
|
|
1099
|
+
]
|
|
1100
|
+
}
|
|
1101
|
+
) });
|
|
1102
|
+
}
|
|
1103
|
+
var view_default = NamedAgentView;
|
|
1104
|
+
export {
|
|
1105
|
+
NamedAgentView,
|
|
1106
|
+
view_default as default,
|
|
1107
|
+
mapWorkflows,
|
|
1108
|
+
resolveWorkflowIcon
|
|
1109
|
+
};
|
|
1110
|
+
//# sourceMappingURL=index.js.map
|