@mdxui/named 7.0.0 → 8.1.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 +3 -1
- package/dist/components/index.js +240 -198
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +242 -345
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.js +2 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/shared/index.d.ts +46 -35
- package/dist/shared/index.js +99 -208
- package/dist/shared/index.js.map +1 -1
- package/dist/styles.css +809 -13
- package/dist/view/index.d.ts +12 -4
- package/dist/view/index.js +1528 -217
- package/dist/view/index.js.map +1 -1
- package/package.json +7 -6
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/components/hero/hero.tsx
|
|
1
|
+
// src/templates/studio/components/hero/hero.tsx
|
|
2
2
|
import Image from "next/image";
|
|
3
3
|
import { HiChevronRight } from "react-icons/hi";
|
|
4
4
|
|
|
@@ -70,6 +70,26 @@ import { twMerge } from "tailwind-merge";
|
|
|
70
70
|
function cn(...inputs) {
|
|
71
71
|
return twMerge(clsx(inputs));
|
|
72
72
|
}
|
|
73
|
+
var isRenderableSrc = (s) => /^(https?:)?\/\//i.test(s.trim()) || /^data:image\//i.test(s.trim());
|
|
74
|
+
var BRAND_LABELS = {
|
|
75
|
+
github: "GitHub",
|
|
76
|
+
gitlab: "GitLab",
|
|
77
|
+
linkedin: "LinkedIn",
|
|
78
|
+
youtube: "YouTube",
|
|
79
|
+
whatsapp: "WhatsApp",
|
|
80
|
+
hubspot: "HubSpot",
|
|
81
|
+
quickbooks: "QuickBooks",
|
|
82
|
+
typescript: "TypeScript",
|
|
83
|
+
javascript: "JavaScript",
|
|
84
|
+
postgresql: "PostgreSQL",
|
|
85
|
+
mongodb: "MongoDB",
|
|
86
|
+
graphql: "GraphQL",
|
|
87
|
+
openai: "OpenAI"
|
|
88
|
+
};
|
|
89
|
+
var brandLabel = (s) => {
|
|
90
|
+
const t = s.trim();
|
|
91
|
+
return BRAND_LABELS[t.toLowerCase()] ?? t.charAt(0).toUpperCase() + t.slice(1);
|
|
92
|
+
};
|
|
73
93
|
|
|
74
94
|
// src/shared/marquee/marquee.tsx
|
|
75
95
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
@@ -111,29 +131,41 @@ function Marquee({
|
|
|
111
131
|
);
|
|
112
132
|
}
|
|
113
133
|
|
|
114
|
-
// src/
|
|
115
|
-
import
|
|
116
|
-
import { jsx as jsx3
|
|
117
|
-
var
|
|
118
|
-
var
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
quickbooks: "QuickBooks",
|
|
126
|
-
typescript: "TypeScript",
|
|
127
|
-
javascript: "JavaScript",
|
|
128
|
-
postgresql: "PostgreSQL",
|
|
129
|
-
mongodb: "MongoDB",
|
|
130
|
-
graphql: "GraphQL",
|
|
131
|
-
openai: "OpenAI"
|
|
134
|
+
// src/templates/studio/ui/button/button.tsx
|
|
135
|
+
import * as React from "react";
|
|
136
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
137
|
+
var baseClasses = "inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--color-ring) disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer";
|
|
138
|
+
var variantClasses = {
|
|
139
|
+
default: "btn-gradient-dark text-(--color-btn-primary-fg) shadow-md hover:shadow-lg rounded-full",
|
|
140
|
+
secondary: "bg-(--color-surface-raised) text-(--color-fg) border border-(--color-border) shadow-sm hover:shadow-md rounded-full",
|
|
141
|
+
outline: "border border-(--color-border) bg-transparent text-(--color-fg) hover:bg-(--color-hover) rounded-full",
|
|
142
|
+
ghost: "text-(--color-fg) hover:bg-(--color-hover) rounded-full",
|
|
143
|
+
link: "text-(--color-fg) underline-offset-4 hover:underline",
|
|
144
|
+
accent: "bg-(--color-accent-strong) text-(--color-accent-fg) shadow-md hover:opacity-90 hover:shadow-lg rounded-full"
|
|
132
145
|
};
|
|
133
|
-
var
|
|
134
|
-
|
|
135
|
-
|
|
146
|
+
var sizeClasses = {
|
|
147
|
+
default: "h-12 px-6 py-3 text-base",
|
|
148
|
+
sm: "h-10 px-4 py-2 text-sm",
|
|
149
|
+
lg: "h-14 px-8 py-4 text-lg",
|
|
150
|
+
icon: "h-12 w-12"
|
|
136
151
|
};
|
|
152
|
+
var Button = React.forwardRef(
|
|
153
|
+
({ className, variant = "default", size = "default", asChild = false, children, ...props }, ref) => {
|
|
154
|
+
const classes = cn(baseClasses, variantClasses[variant], sizeClasses[size], className);
|
|
155
|
+
if (asChild && React.isValidElement(children)) {
|
|
156
|
+
const child = children;
|
|
157
|
+
return React.cloneElement(child, {
|
|
158
|
+
...props,
|
|
159
|
+
className: cn(classes, child.props.className)
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return /* @__PURE__ */ jsx3("button", { ref, className: classes, ...props, children });
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
Button.displayName = "Button";
|
|
166
|
+
|
|
167
|
+
// src/templates/studio/components/hero/hero.tsx
|
|
168
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
137
169
|
function Hero({
|
|
138
170
|
badgeEmoji = "",
|
|
139
171
|
badgeText = "Meet Priya",
|
|
@@ -159,10 +191,10 @@ function Hero({
|
|
|
159
191
|
className
|
|
160
192
|
}) {
|
|
161
193
|
const hasHeroImage = !!rightImageSrc && isRenderableSrc(rightImageSrc);
|
|
162
|
-
return /* @__PURE__ */
|
|
194
|
+
return /* @__PURE__ */ jsx4("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: [
|
|
163
195
|
/* @__PURE__ */ jsxs("div", { className: cn("grid gap-8 lg:gap-16 items-start mb-16 lg:mb-20", hasHeroImage && "lg:grid-cols-2"), children: [
|
|
164
196
|
/* @__PURE__ */ jsxs("div", { className: "space-y-6 lg:pt-8", children: [
|
|
165
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "down", delay: 0.1, children: /* @__PURE__ */ jsx4("div", { className: "inline-block", children: /* @__PURE__ */ jsxs(
|
|
166
198
|
"a",
|
|
167
199
|
{
|
|
168
200
|
href: badgeHref,
|
|
@@ -170,19 +202,19 @@ function Hero({
|
|
|
170
202
|
rel: "noopener noreferrer",
|
|
171
203
|
className: "inline-flex items-center gap-2.5 px-4 py-2 rounded-full transition-colors border border-border bg-card",
|
|
172
204
|
children: [
|
|
173
|
-
/* @__PURE__ */
|
|
174
|
-
/* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ jsx4("span", { className: "text-base", children: badgeEmoji }),
|
|
206
|
+
/* @__PURE__ */ jsx4("p", { className: "font-normal text-sm tracking-wide leading-snug text-foreground uppercase", children: badgeText })
|
|
175
207
|
]
|
|
176
208
|
}
|
|
177
209
|
) }) }),
|
|
178
|
-
/* @__PURE__ */
|
|
179
|
-
/* @__PURE__ */
|
|
180
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.2, children: /* @__PURE__ */ jsx4("h1", { className: "font-halant font-normal text-[clamp(56px,6vw,72px)] leading-tight tracking-tight text-foreground", children: heading }) }),
|
|
211
|
+
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx4("p", { className: "text-lg leading-relaxed max-w-lg", children: description }) }),
|
|
212
|
+
/* @__PURE__ */ jsx4(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: /* @__PURE__ */ jsx4("div", { className: "flex flex-col sm:flex-row gap-3 pt-4", children: /* @__PURE__ */ jsx4(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsxs("a", { href: ctaHref, children: [
|
|
181
213
|
ctaText,
|
|
182
|
-
/* @__PURE__ */
|
|
214
|
+
/* @__PURE__ */ jsx4(HiChevronRight, { className: "w-4 h-4" })
|
|
183
215
|
] }) }) }) })
|
|
184
216
|
] }),
|
|
185
|
-
hasHeroImage && /* @__PURE__ */
|
|
217
|
+
hasHeroImage && /* @__PURE__ */ jsx4(ScrollReveal, { direction: "right", delay: 0.2, children: /* @__PURE__ */ jsx4("div", { className: "relative flex justify-center lg:justify-end", children: /* @__PURE__ */ jsx4("div", { className: "relative w-full max-w-lg", children: /* @__PURE__ */ jsx4("div", { className: "relative w-full aspect-square", children: /* @__PURE__ */ jsx4(
|
|
186
218
|
Image,
|
|
187
219
|
{
|
|
188
220
|
src: rightImageSrc,
|
|
@@ -196,24 +228,24 @@ function Hero({
|
|
|
196
228
|
) }) }) }) })
|
|
197
229
|
] }),
|
|
198
230
|
/* @__PURE__ */ jsxs(ScrollReveal, { direction: "up", delay: 0.4, trigger: "mount", children: [
|
|
199
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ jsx4("div", { className: "mt-12", children: /* @__PURE__ */ jsx4("p", { className: "text-base text-muted-foreground text-center", children: marqueeTitle }) }),
|
|
200
232
|
/* @__PURE__ */ jsxs("div", { className: "relative mt-4 sm:mt-6", children: [
|
|
201
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ jsx4(
|
|
202
234
|
"div",
|
|
203
235
|
{
|
|
204
236
|
className: "pointer-events-none absolute inset-y-0 left-0 w-20 sm:w-28 z-10",
|
|
205
237
|
style: { background: "linear-gradient(to right, var(--background), transparent)" }
|
|
206
238
|
}
|
|
207
239
|
),
|
|
208
|
-
/* @__PURE__ */
|
|
240
|
+
/* @__PURE__ */ jsx4(
|
|
209
241
|
"div",
|
|
210
242
|
{
|
|
211
243
|
className: "pointer-events-none absolute inset-y-0 right-0 w-20 sm:w-28 z-10",
|
|
212
244
|
style: { background: "linear-gradient(to left, var(--background), transparent)" }
|
|
213
245
|
}
|
|
214
246
|
),
|
|
215
|
-
/* @__PURE__ */
|
|
216
|
-
(src, i) => isRenderableSrc(src) ? /* @__PURE__ */
|
|
247
|
+
/* @__PURE__ */ jsx4(Marquee, { className: "relative z-0 py-2 [--gap:1.25rem] sm:[--gap:3rem]", children: marqueeImages.map(
|
|
248
|
+
(src, i) => isRenderableSrc(src) ? /* @__PURE__ */ jsx4(
|
|
217
249
|
"img",
|
|
218
250
|
{
|
|
219
251
|
src,
|
|
@@ -221,7 +253,7 @@ function Hero({
|
|
|
221
253
|
className: "h-16 w-16 rounded-xl bg-card p-2 object-contain"
|
|
222
254
|
},
|
|
223
255
|
`${src}-${i}`
|
|
224
|
-
) : /* @__PURE__ */
|
|
256
|
+
) : /* @__PURE__ */ jsx4(
|
|
225
257
|
"span",
|
|
226
258
|
{
|
|
227
259
|
className: "flex h-16 items-center whitespace-nowrap rounded-xl bg-card px-4 text-sm font-semibold tracking-tight text-foreground/70",
|
|
@@ -235,61 +267,43 @@ function Hero({
|
|
|
235
267
|
] }) });
|
|
236
268
|
}
|
|
237
269
|
|
|
238
|
-
// src/components/features/features.tsx
|
|
270
|
+
// src/templates/studio/components/features/features.tsx
|
|
239
271
|
import { CheckCircle } from "lucide-react";
|
|
240
272
|
|
|
241
273
|
// src/shared/code-window/code-window.tsx
|
|
242
|
-
import {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
prevWasCode = false;
|
|
272
|
-
continue;
|
|
273
|
-
}
|
|
274
|
-
let highlighted = line;
|
|
275
|
-
highlighted = highlighted.replace(
|
|
276
|
-
/\$\.(\w+)\.(\w+)/g,
|
|
277
|
-
'<span class="text-[#79c0ff]">$</span>.<span class="text-[#d2a8ff]">$1</span>.<span class="text-[#ffa657]">$2</span>'
|
|
278
|
-
);
|
|
279
|
-
highlighted = highlighted.replace(/(\w+):/g, '<span class="text-[#79c0ff]">$1</span>:');
|
|
280
|
-
highlighted = highlighted.replace(/'([^']*)'/g, `<span class="text-[#a5d6ff]">'$1'</span>`);
|
|
281
|
-
highlighted = highlighted.replace(/\b(\d+)\b/g, '<span class="text-[#79c0ff]">$1</span>');
|
|
282
|
-
result.push(/* @__PURE__ */ jsx4("div", { dangerouslySetInnerHTML: { __html: highlighted } }, i));
|
|
283
|
-
prevWasComment = false;
|
|
284
|
-
prevWasCode = true;
|
|
285
|
-
}
|
|
286
|
-
return result;
|
|
287
|
-
};
|
|
288
|
-
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) }) }) });
|
|
274
|
+
import { useEffect, useState } from "react";
|
|
275
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
276
|
+
function CodeWindow({
|
|
277
|
+
code,
|
|
278
|
+
language = "typescript",
|
|
279
|
+
themes = "github-dark-default",
|
|
280
|
+
className
|
|
281
|
+
}) {
|
|
282
|
+
const [html, setHtml] = useState(null);
|
|
283
|
+
const themesKey = typeof themes === "string" ? themes : `${themes.light}/${themes.dark}`;
|
|
284
|
+
useEffect(() => {
|
|
285
|
+
let alive = true;
|
|
286
|
+
import("shiki").then(
|
|
287
|
+
({ codeToHtml }) => codeToHtml(
|
|
288
|
+
code,
|
|
289
|
+
typeof themes === "string" ? { lang: language, theme: themes } : { lang: language, themes, defaultColor: "light" }
|
|
290
|
+
)
|
|
291
|
+
).then((out) => {
|
|
292
|
+
if (alive) setHtml(out);
|
|
293
|
+
}).catch(() => {
|
|
294
|
+
});
|
|
295
|
+
return () => {
|
|
296
|
+
alive = false;
|
|
297
|
+
};
|
|
298
|
+
}, [code, language, themesKey]);
|
|
299
|
+
return /* @__PURE__ */ jsx5("div", { className: cn("w-full h-full overflow-auto font-mono", className), children: html ? (
|
|
300
|
+
// biome-ignore lint/security/noDangerouslySetInnerHtml: shiki output; input is escaped by shiki
|
|
301
|
+
/* @__PURE__ */ jsx5("div", { dangerouslySetInnerHTML: { __html: html } })
|
|
302
|
+
) : /* @__PURE__ */ jsx5("pre", { className: "m-0 whitespace-pre", children: /* @__PURE__ */ jsx5("code", { children: code }) }) });
|
|
289
303
|
}
|
|
290
304
|
|
|
291
|
-
// src/components/features/features.tsx
|
|
292
|
-
import { jsx as
|
|
305
|
+
// src/templates/studio/components/features/features.tsx
|
|
306
|
+
import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
293
307
|
var defaultFeatures = [
|
|
294
308
|
{
|
|
295
309
|
title: "Automatic Issue Triage",
|
|
@@ -362,30 +376,37 @@ $.Priya.statusReport({
|
|
|
362
376
|
}
|
|
363
377
|
];
|
|
364
378
|
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 }) {
|
|
365
|
-
return /* @__PURE__ */
|
|
366
|
-
/* @__PURE__ */
|
|
367
|
-
/* @__PURE__ */
|
|
368
|
-
/* @__PURE__ */
|
|
379
|
+
return /* @__PURE__ */ jsx6("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 gap-16 h-min max-w-[1400px] py-10 sm:py-20", style: { borderRadius: "var(--radius-section, 36px)" }, children: [
|
|
380
|
+
/* @__PURE__ */ jsx6(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs2("div", { className: "text-center w-full px-4 md:px-6 space-y-4", children: [
|
|
381
|
+
/* @__PURE__ */ jsx6("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground", children: heading }),
|
|
382
|
+
/* @__PURE__ */ jsx6("p", { className: "text-base md:text-lg text-muted-foreground max-w-2xl mx-auto", children: description })
|
|
369
383
|
] }) }),
|
|
370
|
-
/* @__PURE__ */
|
|
384
|
+
/* @__PURE__ */ jsx6("div", { className: "w-full px-4 lg:px-18 space-y-10", children: features.map((feature, index) => /* @__PURE__ */ jsx6(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: [
|
|
371
385
|
/* @__PURE__ */ jsxs2("div", { className: "flex flex-col px-4 py-8 lg:px-8 lg:py-12 xl:px-12 xl:py-20", children: [
|
|
372
|
-
/* @__PURE__ */
|
|
373
|
-
/* @__PURE__ */
|
|
374
|
-
/* @__PURE__ */
|
|
375
|
-
/* @__PURE__ */
|
|
376
|
-
/* @__PURE__ */
|
|
377
|
-
/* @__PURE__ */
|
|
386
|
+
/* @__PURE__ */ jsx6("div", { className: "mb-4", children: /* @__PURE__ */ jsx6("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 }) }),
|
|
387
|
+
/* @__PURE__ */ jsx6("h3", { className: "mb-3 text-2xl font-medium sm:mb-5 md:text-3xl text-foreground", children: feature.title }),
|
|
388
|
+
/* @__PURE__ */ jsx6("div", { className: "mb-8 text-sm sm:mb-10 md:text-base text-muted-foreground", children: feature.description }),
|
|
389
|
+
/* @__PURE__ */ jsx6("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: [
|
|
390
|
+
/* @__PURE__ */ jsx6(CheckCircle, { className: "mt-1 size-4 shrink-0 text-primary" }),
|
|
391
|
+
/* @__PURE__ */ jsx6("p", { className: "text-sm md:text-base text-foreground", children: item.text })
|
|
378
392
|
] }, itemIndex)) })
|
|
379
393
|
] }),
|
|
380
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ jsx6("div", { className: "relative order-last md:order-last h-96 md:h-[500px] p-4 md:p-8 lg:p-10", children: /* @__PURE__ */ jsx6(
|
|
395
|
+
CodeWindow,
|
|
396
|
+
{
|
|
397
|
+
code: feature.code,
|
|
398
|
+
language: feature.language,
|
|
399
|
+
themes: "github-dark-default",
|
|
400
|
+
className: "bg-[#0d1117] rounded-lg p-6 lg:p-8 text-sm leading-relaxed text-[#e6edf3]"
|
|
401
|
+
}
|
|
402
|
+
) })
|
|
381
403
|
] }) }, index)) })
|
|
382
404
|
] }) });
|
|
383
405
|
}
|
|
384
406
|
|
|
385
|
-
// src/components/pricing/pricing.tsx
|
|
407
|
+
// src/templates/studio/components/pricing/pricing.tsx
|
|
386
408
|
import { Check } from "lucide-react";
|
|
387
|
-
import {
|
|
388
|
-
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
409
|
+
import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
389
410
|
var defaultFeatures2 = [
|
|
390
411
|
{ text: "Automated backups" },
|
|
391
412
|
{ text: "24/7 support" },
|
|
@@ -411,41 +432,40 @@ function Pricing({
|
|
|
411
432
|
securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
|
|
412
433
|
className
|
|
413
434
|
}) {
|
|
414
|
-
return /* @__PURE__ */
|
|
415
|
-
/* @__PURE__ */
|
|
416
|
-
/* @__PURE__ */
|
|
417
|
-
/* @__PURE__ */
|
|
435
|
+
return /* @__PURE__ */ jsx7("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: [
|
|
436
|
+
/* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs3("div", { className: "text-center my-16 sm:my-12", children: [
|
|
437
|
+
/* @__PURE__ */ jsx7("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,40px)] leading-tight text-foreground mb-4", children: heading }),
|
|
438
|
+
/* @__PURE__ */ jsx7("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
|
|
418
439
|
] }) }),
|
|
419
|
-
/* @__PURE__ */
|
|
440
|
+
/* @__PURE__ */ jsx7(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: [
|
|
420
441
|
/* @__PURE__ */ jsxs3("div", { className: "text-center", children: [
|
|
421
442
|
/* @__PURE__ */ jsxs3("div", { className: "flex justify-start sm:justify-center items-baseline", children: [
|
|
422
|
-
/* @__PURE__ */
|
|
423
|
-
/* @__PURE__ */
|
|
443
|
+
/* @__PURE__ */ jsx7("span", { className: "text-3xl font-semibold text-foreground", children: price }),
|
|
444
|
+
/* @__PURE__ */ jsx7("span", { className: "text-muted-foreground ml-2 text-sm", children: priceUnit })
|
|
424
445
|
] }),
|
|
425
|
-
trialText && /* @__PURE__ */
|
|
426
|
-
/* @__PURE__ */
|
|
446
|
+
trialText && /* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-muted-foreground mt-3 text-sm", children: trialText }),
|
|
447
|
+
/* @__PURE__ */ jsx7(Button, { asChild: true, variant: "default", className: "mt-5 w-full md:w-64", children: /* @__PURE__ */ jsx7("a", { href: ctaHref, children: ctaText }) })
|
|
427
448
|
] }),
|
|
428
449
|
/* @__PURE__ */ jsxs3("div", { className: "mt-8", children: [
|
|
429
|
-
/* @__PURE__ */
|
|
430
|
-
/* @__PURE__ */
|
|
431
|
-
/* @__PURE__ */
|
|
432
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ jsx7("p", { className: "text-left sm:text-center text-lg font-semibold text-foreground mb-4", children: featuresHeading }),
|
|
451
|
+
/* @__PURE__ */ jsx7("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: [
|
|
452
|
+
/* @__PURE__ */ jsx7(Check, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
453
|
+
/* @__PURE__ */ jsx7("span", { className: "text-foreground text-sm", children: feature.text })
|
|
433
454
|
] }, index)) })
|
|
434
455
|
] })
|
|
435
456
|
] }) }),
|
|
436
|
-
securityNote && /* @__PURE__ */
|
|
437
|
-
/* @__PURE__ */
|
|
457
|
+
securityNote && /* @__PURE__ */ jsx7(ScrollReveal, { direction: "up", delay: 0.3, children: /* @__PURE__ */ jsx7("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
|
|
458
|
+
/* @__PURE__ */ jsx7("strong", { children: "Your code stays private." }),
|
|
438
459
|
" ",
|
|
439
460
|
securityNote
|
|
440
461
|
] }) }) })
|
|
441
462
|
] }) });
|
|
442
463
|
}
|
|
443
464
|
|
|
444
|
-
// src/components/pricing/pricing-tiers.tsx
|
|
465
|
+
// src/templates/studio/components/pricing/pricing-tiers.tsx
|
|
445
466
|
import { Check as Check2 } from "lucide-react";
|
|
446
467
|
import Image2 from "next/image";
|
|
447
|
-
import {
|
|
448
|
-
import { Fragment, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
468
|
+
import { Fragment, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
449
469
|
var defaultTiers = [
|
|
450
470
|
{
|
|
451
471
|
title: "Business",
|
|
@@ -487,59 +507,58 @@ function PricingTiers({
|
|
|
487
507
|
securityNote = "Priya only accesses GitHub Issues and Projects\u2014she cannot read your code or secrets.",
|
|
488
508
|
className
|
|
489
509
|
}) {
|
|
490
|
-
return /* @__PURE__ */
|
|
491
|
-
/* @__PURE__ */
|
|
492
|
-
/* @__PURE__ */
|
|
493
|
-
/* @__PURE__ */
|
|
510
|
+
return /* @__PURE__ */ jsx8("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: [
|
|
511
|
+
/* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs4("div", { className: "text-center my-16 sm:my-12", children: [
|
|
512
|
+
/* @__PURE__ */ jsx8("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }),
|
|
513
|
+
/* @__PURE__ */ jsx8("p", { className: "text-base text-muted-foreground max-w-2xl mx-auto", children: subheading })
|
|
494
514
|
] }) }),
|
|
495
|
-
/* @__PURE__ */
|
|
515
|
+
/* @__PURE__ */ jsx8("ul", { className: "grid gap-6 lg:grid-cols-3 lg:items-stretch", children: tiers.map((tier, index) => /* @__PURE__ */ jsx8("li", { className: tier.featured ? "lg:col-span-2 flex" : "lg:col-span-1 flex", children: /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.2 + index * 0.1, className: "w-full", children: /* @__PURE__ */ jsx8(
|
|
496
516
|
"div",
|
|
497
517
|
{
|
|
498
518
|
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",
|
|
499
519
|
children: tier.featured ? /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
500
|
-
tier.image && /* @__PURE__ */
|
|
501
|
-
/* @__PURE__ */ jsxs4("div", { className: "flex flex-col p-6 md:p-8 xl:w-1/2", children: [
|
|
520
|
+
tier.image && isRenderableSrc(tier.image) && /* @__PURE__ */ jsx8("div", { className: "hidden xl:block xl:w-1/2 pl-6 md:pl-8 py-6 md:py-8", children: /* @__PURE__ */ jsx8("div", { className: "h-full rounded-lg overflow-hidden relative min-h-96", children: /* @__PURE__ */ jsx8(Image2, { src: tier.image, alt: tier.imageAlt || tier.title, fill: true, className: "object-cover", sizes: "(max-width: 1280px) 0vw, 50vw" }) }) }),
|
|
521
|
+
/* @__PURE__ */ jsxs4("div", { className: cn("flex flex-col p-6 md:p-8", tier.image && isRenderableSrc(tier.image) && "xl:w-1/2"), children: [
|
|
502
522
|
/* @__PURE__ */ jsxs4("div", { className: "flex-1", children: [
|
|
503
|
-
/* @__PURE__ */
|
|
504
|
-
/* @__PURE__ */
|
|
523
|
+
/* @__PURE__ */ jsx8("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
|
|
524
|
+
/* @__PURE__ */ jsx8("p", { className: "text-muted-foreground mt-3", children: tier.description }),
|
|
505
525
|
/* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
|
|
506
|
-
/* @__PURE__ */
|
|
507
|
-
/* @__PURE__ */
|
|
526
|
+
/* @__PURE__ */ jsx8("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
|
|
527
|
+
/* @__PURE__ */ jsx8("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
|
|
508
528
|
] }),
|
|
509
|
-
/* @__PURE__ */
|
|
529
|
+
/* @__PURE__ */ jsx8(Button, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx8("a", { href: tier.ctaHref || "#", children: tier.ctaText }) })
|
|
510
530
|
] }),
|
|
511
|
-
/* @__PURE__ */
|
|
512
|
-
/* @__PURE__ */
|
|
513
|
-
/* @__PURE__ */
|
|
531
|
+
/* @__PURE__ */ jsx8("div", { className: "mt-8", children: /* @__PURE__ */ jsx8("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
|
|
532
|
+
/* @__PURE__ */ jsx8(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
533
|
+
/* @__PURE__ */ jsx8("span", { className: "text-foreground text-sm", children: feature.text })
|
|
514
534
|
] }, featureIndex)) }) })
|
|
515
535
|
] })
|
|
516
|
-
] }) : /* @__PURE__ */
|
|
517
|
-
/* @__PURE__ */
|
|
518
|
-
/* @__PURE__ */
|
|
536
|
+
] }) : /* @__PURE__ */ jsx8("div", { className: "flex h-full flex-col", children: /* @__PURE__ */ jsxs4("div", { children: [
|
|
537
|
+
/* @__PURE__ */ jsx8("p", { className: "text-lg font-semibold text-foreground", children: tier.title }),
|
|
538
|
+
/* @__PURE__ */ jsx8("p", { className: "text-muted-foreground mt-3", children: tier.description }),
|
|
519
539
|
/* @__PURE__ */ jsxs4("div", { className: "mt-6 flex items-baseline", children: [
|
|
520
|
-
/* @__PURE__ */
|
|
521
|
-
/* @__PURE__ */
|
|
540
|
+
/* @__PURE__ */ jsx8("span", { className: "text-3xl font-semibold text-foreground", children: tier.price }),
|
|
541
|
+
/* @__PURE__ */ jsx8("span", { className: "text-muted-foreground ml-2 text-sm", children: tier.priceUnit })
|
|
522
542
|
] }),
|
|
523
|
-
/* @__PURE__ */
|
|
524
|
-
/* @__PURE__ */
|
|
525
|
-
/* @__PURE__ */
|
|
526
|
-
/* @__PURE__ */
|
|
543
|
+
/* @__PURE__ */ jsx8(Button, { asChild: true, variant: tier.ctaVariant === "primary" ? "default" : "secondary", className: "mt-5 w-full sm:w-auto", children: /* @__PURE__ */ jsx8("a", { href: tier.ctaHref || "#", children: tier.ctaText }) }),
|
|
544
|
+
/* @__PURE__ */ jsx8("div", { className: "mt-8", children: /* @__PURE__ */ jsx8("ul", { className: "space-y-2", children: tier.features.map((feature, featureIndex) => /* @__PURE__ */ jsxs4("li", { className: "flex items-start", children: [
|
|
545
|
+
/* @__PURE__ */ jsx8(Check2, { className: "text-primary mr-2 size-4 shrink-0" }),
|
|
546
|
+
/* @__PURE__ */ jsx8("span", { className: "text-foreground text-sm", children: feature.text })
|
|
527
547
|
] }, featureIndex)) }) })
|
|
528
548
|
] }) })
|
|
529
549
|
}
|
|
530
550
|
) }) }, index)) }),
|
|
531
|
-
securityNote && /* @__PURE__ */
|
|
532
|
-
/* @__PURE__ */
|
|
551
|
+
securityNote && /* @__PURE__ */ jsx8(ScrollReveal, { direction: "up", delay: 0.4, children: /* @__PURE__ */ jsx8("div", { className: "text-center mt-8", children: /* @__PURE__ */ jsxs4("p", { className: "text-sm text-muted-foreground", children: [
|
|
552
|
+
/* @__PURE__ */ jsx8("strong", { children: "Your code stays private." }),
|
|
533
553
|
" ",
|
|
534
554
|
securityNote
|
|
535
555
|
] }) }) })
|
|
536
556
|
] }) });
|
|
537
557
|
}
|
|
538
558
|
|
|
539
|
-
// src/components/cta/cta.tsx
|
|
559
|
+
// src/templates/studio/components/cta/cta.tsx
|
|
540
560
|
import { HiArrowRight } from "react-icons/hi";
|
|
541
|
-
import {
|
|
542
|
-
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
561
|
+
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
543
562
|
var defaultButtons = [
|
|
544
563
|
{
|
|
545
564
|
text: "Get Started",
|
|
@@ -550,19 +569,19 @@ var defaultButtons = [
|
|
|
550
569
|
];
|
|
551
570
|
function CTA({ heading = "Ready to Save 15 Hours Per Week?", subheading = "Setup with Github \u2013 takes 5 minutes.", buttons = defaultButtons, backgroundColor: _backgroundColor, className }) {
|
|
552
571
|
const bgClass = "bg-card";
|
|
553
|
-
return /* @__PURE__ */
|
|
554
|
-
/* @__PURE__ */
|
|
555
|
-
/* @__PURE__ */
|
|
556
|
-
/* @__PURE__ */
|
|
572
|
+
return /* @__PURE__ */ jsx9("section", { className: cn(`py-20 md:py-32 px-4 md:px-6 ${bgClass}`, className), children: /* @__PURE__ */ jsx9("div", { className: "max-w-3xl mx-auto text-center", children: /* @__PURE__ */ jsx9(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsxs5("div", { className: "space-y-6", children: [
|
|
573
|
+
/* @__PURE__ */ jsx9("h2", { className: "font-halant font-normal text-foreground text-[clamp(32px,5vw,52px)] leading-tight tracking-tight", children: heading }),
|
|
574
|
+
/* @__PURE__ */ jsx9("p", { className: "max-w-2xl mx-auto text-[clamp(16px,2vw,18px)] leading-relaxed text-muted-foreground", children: subheading }),
|
|
575
|
+
/* @__PURE__ */ jsx9("div", { className: "flex flex-col sm:flex-row gap-3 justify-center items-center pt-4", children: buttons.map((button, index) => /* @__PURE__ */ jsx9(Button, { asChild: true, variant: button.variant === "primary" ? "default" : "secondary", children: /* @__PURE__ */ jsxs5("a", { href: button.href, children: [
|
|
557
576
|
button.text,
|
|
558
|
-
button.showArrow && /* @__PURE__ */
|
|
577
|
+
button.showArrow && /* @__PURE__ */ jsx9(HiArrowRight, { className: "w-4 h-4" })
|
|
559
578
|
] }) }, index)) })
|
|
560
579
|
] }) }) }) });
|
|
561
580
|
}
|
|
562
581
|
|
|
563
|
-
// src/components/faq/faq.tsx
|
|
582
|
+
// src/templates/studio/components/faq/faq.tsx
|
|
564
583
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@mdxui/primitives";
|
|
565
|
-
import { jsx as
|
|
584
|
+
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
566
585
|
var defaultFaqs = [
|
|
567
586
|
{
|
|
568
587
|
question: "How do I get started?",
|
|
@@ -590,22 +609,21 @@ var defaultFaqs = [
|
|
|
590
609
|
}
|
|
591
610
|
];
|
|
592
611
|
function FAQ({ heading = "FAQs", faqs = defaultFaqs, backgroundColor = "bg-background", className }) {
|
|
593
|
-
return /* @__PURE__ */
|
|
594
|
-
/* @__PURE__ */
|
|
595
|
-
/* @__PURE__ */
|
|
596
|
-
/* @__PURE__ */
|
|
597
|
-
/* @__PURE__ */
|
|
612
|
+
return /* @__PURE__ */ jsx10("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: [
|
|
613
|
+
/* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.1, children: /* @__PURE__ */ jsx10("div", { className: "text-center mb-12", children: /* @__PURE__ */ jsx10("h2", { className: "font-halant font-normal text-[clamp(32px,4vw,52px)] leading-tight text-foreground mb-4", children: heading }) }) }),
|
|
614
|
+
/* @__PURE__ */ jsx10(Accordion, { type: "single", collapsible: true, className: "space-y-4", children: faqs.map((faq, index) => /* @__PURE__ */ jsx10(ScrollReveal, { direction: "up", delay: 0.15 + index * 0.05, children: /* @__PURE__ */ jsxs6(AccordionItem, { value: `item-${index}`, className: "rounded-xl px-4 sm:px-6 border border-border bg-card shadow-sm", children: [
|
|
615
|
+
/* @__PURE__ */ jsx10(AccordionTrigger, { className: "hover:no-underline py-5 text-base font-medium text-foreground", children: faq.question }),
|
|
616
|
+
/* @__PURE__ */ jsx10(AccordionContent, { className: "pb-5 text-sm text-foreground/70 leading-relaxed", children: faq.answer })
|
|
598
617
|
] }) }, index)) })
|
|
599
618
|
] }) });
|
|
600
619
|
}
|
|
601
620
|
|
|
602
|
-
// src/components/navigation/navigation.tsx
|
|
603
|
-
import { useState, useEffect } from "react";
|
|
621
|
+
// src/templates/studio/components/navigation/navigation.tsx
|
|
622
|
+
import { useState as useState2, useEffect as useEffect2 } from "react";
|
|
604
623
|
import Link from "next/link";
|
|
605
624
|
import { Menu, X } from "lucide-react";
|
|
606
625
|
import { motion as motion2, AnimatePresence } from "motion/react";
|
|
607
|
-
import {
|
|
608
|
-
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
626
|
+
import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
609
627
|
function Navigation({
|
|
610
628
|
logo = "Priya",
|
|
611
629
|
logoHref = "/",
|
|
@@ -622,9 +640,9 @@ function Navigation({
|
|
|
622
640
|
sticky = true,
|
|
623
641
|
showScrollEffect = true
|
|
624
642
|
}) {
|
|
625
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
626
|
-
const [isScrolled, setIsScrolled] =
|
|
627
|
-
|
|
643
|
+
const [mobileMenuOpen, setMobileMenuOpen] = useState2(false);
|
|
644
|
+
const [isScrolled, setIsScrolled] = useState2(false);
|
|
645
|
+
useEffect2(() => {
|
|
628
646
|
if (!showScrollEffect) return;
|
|
629
647
|
const handleScroll = () => {
|
|
630
648
|
setIsScrolled(window.scrollY > 10);
|
|
@@ -645,7 +663,7 @@ function Navigation({
|
|
|
645
663
|
"7xl": "max-w-7xl",
|
|
646
664
|
full: "max-w-full"
|
|
647
665
|
}[maxWidth];
|
|
648
|
-
return /* @__PURE__ */
|
|
666
|
+
return /* @__PURE__ */ jsx11(
|
|
649
667
|
"nav",
|
|
650
668
|
{
|
|
651
669
|
className: cn(
|
|
@@ -656,12 +674,12 @@ function Navigation({
|
|
|
656
674
|
),
|
|
657
675
|
children: /* @__PURE__ */ jsxs7("div", { className: cn(maxWidthClass, "mx-auto px-6 lg:px-12 py-4"), children: [
|
|
658
676
|
/* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between", children: [
|
|
659
|
-
/* @__PURE__ */
|
|
660
|
-
links && links.length > 0 && /* @__PURE__ */
|
|
661
|
-
ctaText && ctaHref && /* @__PURE__ */
|
|
662
|
-
/* @__PURE__ */
|
|
677
|
+
/* @__PURE__ */ jsx11("div", { className: "flex items-center", children: /* @__PURE__ */ jsx11(Link, { href: logoHref, className: "flex items-center", children: typeof logo === "string" ? /* @__PURE__ */ jsx11("span", { className: "text-3xl font-base text-foreground font-halant", children: logo }) : logo }) }),
|
|
678
|
+
links && links.length > 0 && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center gap-8", children: links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "text-sm text-foreground hover:opacity-60 transition-opacity", children: link.label }, link.href)) }),
|
|
679
|
+
ctaText && ctaHref && /* @__PURE__ */ jsx11("div", { className: "hidden lg:flex items-center", children: /* @__PURE__ */ jsx11(Button, { asChild: true, variant: ctaVariant, children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) }) }),
|
|
680
|
+
/* @__PURE__ */ jsx11("button", { className: "lg:hidden p-2 text-foreground", onClick: () => setMobileMenuOpen(!mobileMenuOpen), "aria-label": "Toggle menu", children: mobileMenuOpen ? /* @__PURE__ */ jsx11(X, { className: "w-6 h-6" }) : /* @__PURE__ */ jsx11(Menu, { className: "w-6 h-6" }) })
|
|
663
681
|
] }),
|
|
664
|
-
/* @__PURE__ */
|
|
682
|
+
/* @__PURE__ */ jsx11(AnimatePresence, { children: mobileMenuOpen && /* @__PURE__ */ jsx11(
|
|
665
683
|
motion2.div,
|
|
666
684
|
{
|
|
667
685
|
initial: { opacity: 0, height: 0 },
|
|
@@ -669,9 +687,9 @@ function Navigation({
|
|
|
669
687
|
exit: { opacity: 0, height: 0 },
|
|
670
688
|
transition: { duration: 0.3, ease: "easeInOut" },
|
|
671
689
|
className: "lg:hidden overflow-hidden",
|
|
672
|
-
children: /* @__PURE__ */
|
|
673
|
-
links.map((link) => /* @__PURE__ */
|
|
674
|
-
ctaText && ctaHref && /* @__PURE__ */
|
|
690
|
+
children: /* @__PURE__ */ jsx11("div", { className: "mt-4 py-4 rounded-xl bg-card", children: /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-4 px-6", children: [
|
|
691
|
+
links.map((link) => /* @__PURE__ */ jsx11("a", { href: link.href, className: "py-2 text-foreground hover:opacity-70 transition-colors", onClick: () => setMobileMenuOpen(false), children: link.label }, link.href)),
|
|
692
|
+
ctaText && ctaHref && /* @__PURE__ */ jsx11(Button, { asChild: true, variant: ctaVariant, className: "mt-2", onClick: () => setMobileMenuOpen(false), children: /* @__PURE__ */ jsx11("a", { href: ctaHref, children: ctaText }) })
|
|
675
693
|
] }) })
|
|
676
694
|
}
|
|
677
695
|
) })
|
|
@@ -680,20 +698,44 @@ function Navigation({
|
|
|
680
698
|
);
|
|
681
699
|
}
|
|
682
700
|
|
|
683
|
-
// src/components/footer/footer.tsx
|
|
701
|
+
// src/templates/studio/components/footer/footer.tsx
|
|
684
702
|
import Link2 from "next/link";
|
|
685
703
|
import { FaGithub, FaXTwitter } from "react-icons/fa6";
|
|
686
704
|
import { SiNpm } from "react-icons/si";
|
|
687
705
|
import { FaArrowRight } from "react-icons/fa6";
|
|
688
|
-
|
|
689
|
-
|
|
706
|
+
|
|
707
|
+
// src/templates/studio/ui/input/input.tsx
|
|
708
|
+
import * as React2 from "react";
|
|
709
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
710
|
+
var Input = React2.forwardRef(
|
|
711
|
+
({ className, type, ...props }, ref) => {
|
|
712
|
+
return /* @__PURE__ */ jsx12(
|
|
713
|
+
"input",
|
|
714
|
+
{
|
|
715
|
+
type,
|
|
716
|
+
className: cn(
|
|
717
|
+
"flex h-11 w-full rounded-md border border-(--color-border) bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-(--color-fg) placeholder:text-(--color-fg-muted) focus-visible:outline-none focus-visible:border-(--color-border-strong) focus-visible:ring-1 focus-visible:ring-(--color-ring) disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
718
|
+
className
|
|
719
|
+
),
|
|
720
|
+
ref,
|
|
721
|
+
...props
|
|
722
|
+
}
|
|
723
|
+
);
|
|
724
|
+
}
|
|
725
|
+
);
|
|
726
|
+
Input.displayName = "Input";
|
|
727
|
+
|
|
728
|
+
// src/templates/studio/components/footer/footer.tsx
|
|
729
|
+
import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
690
730
|
function Footer({
|
|
691
731
|
logo = "Priya",
|
|
692
732
|
description = "Your AI Product Manager for GitHub. Automate issue triage, sprint planning, and backlog grooming.",
|
|
693
733
|
socialLinks = [
|
|
694
734
|
{ href: "https://github.com", icon: FaGithub, label: "GitHub" },
|
|
695
735
|
{ href: "https://npmjs.com", icon: SiNpm, label: "npm" },
|
|
696
|
-
|
|
736
|
+
// X always points at the .do brand account (do-design-agency HARD rule);
|
|
737
|
+
// GitHub/npm stay product-specific overrides.
|
|
738
|
+
{ href: "https://x.com/dotdo_ai", icon: FaXTwitter, label: "X (Twitter)" }
|
|
697
739
|
],
|
|
698
740
|
quickLinks = [
|
|
699
741
|
{ href: "/#pricing", label: "Pricing" },
|
|
@@ -716,213 +758,68 @@ function Footer({
|
|
|
716
758
|
}
|
|
717
759
|
form.reset();
|
|
718
760
|
};
|
|
719
|
-
return /* @__PURE__ */
|
|
761
|
+
return /* @__PURE__ */ jsx13("footer", { className: cn("py-16 px-6 lg:px-12 bg-[#111011] text-white", className), children: /* @__PURE__ */ jsxs8("div", { className: "max-w-7xl mx-auto", children: [
|
|
720
762
|
/* @__PURE__ */ jsxs8("div", { className: "grid md:grid-cols-5 gap-12 mb-12", children: [
|
|
721
763
|
/* @__PURE__ */ jsxs8("div", { className: "md:col-span-2", children: [
|
|
722
|
-
/* @__PURE__ */
|
|
723
|
-
/* @__PURE__ */
|
|
724
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ jsx13(Link2, { href: "/", className: "inline-block mb-4", children: /* @__PURE__ */ jsx13("div", { className: "text-3xl font-base text-white font-halant", children: logo }) }),
|
|
765
|
+
/* @__PURE__ */ jsx13("p", { className: "max-w-md text-sm leading-relaxed text-white/70 mb-6", children: description }),
|
|
766
|
+
/* @__PURE__ */ jsx13("div", { className: "flex items-center gap-4", children: socialLinks.map((link) => {
|
|
725
767
|
const Icon = link.icon;
|
|
726
|
-
return /* @__PURE__ */
|
|
768
|
+
return /* @__PURE__ */ jsx13(
|
|
727
769
|
Link2,
|
|
728
770
|
{
|
|
729
771
|
href: link.href,
|
|
730
772
|
target: "_blank",
|
|
731
773
|
rel: "noopener noreferrer",
|
|
732
|
-
className: "text-
|
|
774
|
+
className: "text-white/70 transition-colors hover:text-white",
|
|
733
775
|
"aria-label": link.label,
|
|
734
|
-
children: /* @__PURE__ */
|
|
776
|
+
children: /* @__PURE__ */ jsx13(Icon, { className: "w-5 h-5" })
|
|
735
777
|
},
|
|
736
778
|
link.label
|
|
737
779
|
);
|
|
738
780
|
}) })
|
|
739
781
|
] }),
|
|
740
782
|
/* @__PURE__ */ jsxs8("div", { children: [
|
|
741
|
-
/* @__PURE__ */
|
|
742
|
-
/* @__PURE__ */
|
|
783
|
+
/* @__PURE__ */ jsx13("h3", { className: "font-semibold text-base mb-4 text-white", children: "Quick Links" }),
|
|
784
|
+
/* @__PURE__ */ jsx13("ul", { className: "space-y-2", children: quickLinks.map((link) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsx13(Link2, { href: link.href, className: "text-sm text-white/70 transition-colors hover:text-white", children: link.label }) }, link.label)) })
|
|
743
785
|
] }),
|
|
744
|
-
/* @__PURE__ */
|
|
745
|
-
/* @__PURE__ */
|
|
786
|
+
/* @__PURE__ */ jsx13("div", { className: "w-full md:col-span-2 md:flex md:flex-col md:items-end", children: /* @__PURE__ */ jsxs8("div", { className: "w-full md:max-w-sm", children: [
|
|
787
|
+
/* @__PURE__ */ jsx13("h3", { className: "font-semibold text-base mb-4 text-white", children: contactTitle }),
|
|
746
788
|
/* @__PURE__ */ jsxs8("form", { onSubmit: handleEmailSubmit, className: "relative", children: [
|
|
747
|
-
/* @__PURE__ */
|
|
789
|
+
/* @__PURE__ */ jsx13(
|
|
748
790
|
Input,
|
|
749
791
|
{
|
|
750
792
|
type: "email",
|
|
751
793
|
name: "email",
|
|
752
794
|
placeholder: emailPlaceholder,
|
|
753
795
|
required: true,
|
|
754
|
-
className: "w-full bg-
|
|
796
|
+
className: "w-full bg-white/10 border-white/20 text-white placeholder:text-white/50 pr-12"
|
|
755
797
|
}
|
|
756
798
|
),
|
|
757
|
-
/* @__PURE__ */
|
|
799
|
+
/* @__PURE__ */ jsx13(
|
|
758
800
|
"button",
|
|
759
801
|
{
|
|
760
802
|
type: "submit",
|
|
761
|
-
className: "absolute right-1 top-1/2 -translate-y-1/2 bg-
|
|
803
|
+
className: "absolute right-1 top-1/2 -translate-y-1/2 bg-white text-gray-900 hover:bg-white/90 active:bg-[#111011] active:text-white px-3 py-3 rounded-md transition-colors",
|
|
762
804
|
"aria-label": "Submit email",
|
|
763
|
-
children: /* @__PURE__ */
|
|
805
|
+
children: /* @__PURE__ */ jsx13(FaArrowRight, { className: "w-3 h-3" })
|
|
764
806
|
}
|
|
765
807
|
)
|
|
766
808
|
] })
|
|
767
809
|
] }) })
|
|
768
810
|
] }),
|
|
769
|
-
/* @__PURE__ */
|
|
811
|
+
/* @__PURE__ */ jsx13("div", { className: "border-t border-white/10 pt-8", children: /* @__PURE__ */ jsx13("div", { className: "flex flex-col md:flex-row justify-between items-center gap-4", children: /* @__PURE__ */ jsx13("p", { className: "text-sm text-white/60", children: copyrightText }) }) })
|
|
770
812
|
] }) });
|
|
771
813
|
}
|
|
772
|
-
|
|
773
|
-
// src/shared/animated-beam/animated-beam.tsx
|
|
774
|
-
import { useEffect as useEffect2, useId, useState as useState2 } from "react";
|
|
775
|
-
import { motion as motion3 } from "motion/react";
|
|
776
|
-
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
777
|
-
function AnimatedBeam({
|
|
778
|
-
className,
|
|
779
|
-
containerRef,
|
|
780
|
-
fromRef,
|
|
781
|
-
toRef,
|
|
782
|
-
curvature = 0,
|
|
783
|
-
reverse = false,
|
|
784
|
-
duration = Math.random() * 3 + 4,
|
|
785
|
-
delay = 0,
|
|
786
|
-
pathColor = "gray",
|
|
787
|
-
pathWidth = 2,
|
|
788
|
-
pathOpacity = 0.2,
|
|
789
|
-
gradientStartColor = "#ffaa40",
|
|
790
|
-
gradientStopColor = "#9c40ff",
|
|
791
|
-
startXOffset = 0,
|
|
792
|
-
startYOffset = 0,
|
|
793
|
-
endXOffset = 0,
|
|
794
|
-
endYOffset = 0
|
|
795
|
-
}) {
|
|
796
|
-
const id = useId();
|
|
797
|
-
const [pathD, setPathD] = useState2("");
|
|
798
|
-
const [svgDimensions, setSvgDimensions] = useState2({ width: 0, height: 0 });
|
|
799
|
-
const gradientCoordinates = reverse ? {
|
|
800
|
-
x1: ["90%", "-10%"],
|
|
801
|
-
x2: ["100%", "0%"],
|
|
802
|
-
y1: ["0%", "0%"],
|
|
803
|
-
y2: ["0%", "0%"]
|
|
804
|
-
} : {
|
|
805
|
-
x1: ["10%", "110%"],
|
|
806
|
-
x2: ["0%", "100%"],
|
|
807
|
-
y1: ["0%", "0%"],
|
|
808
|
-
y2: ["0%", "0%"]
|
|
809
|
-
};
|
|
810
|
-
useEffect2(() => {
|
|
811
|
-
const updatePath = () => {
|
|
812
|
-
if (containerRef.current && fromRef.current && toRef.current) {
|
|
813
|
-
const containerRect = containerRef.current.getBoundingClientRect();
|
|
814
|
-
const rectA = fromRef.current.getBoundingClientRect();
|
|
815
|
-
const rectB = toRef.current.getBoundingClientRect();
|
|
816
|
-
const svgWidth = containerRect.width;
|
|
817
|
-
const svgHeight = containerRect.height;
|
|
818
|
-
setSvgDimensions({ width: svgWidth, height: svgHeight });
|
|
819
|
-
const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;
|
|
820
|
-
const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
|
|
821
|
-
const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;
|
|
822
|
-
const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
|
|
823
|
-
const controlY = startY - curvature;
|
|
824
|
-
const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;
|
|
825
|
-
setPathD(d);
|
|
826
|
-
}
|
|
827
|
-
};
|
|
828
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
829
|
-
updatePath();
|
|
830
|
-
});
|
|
831
|
-
if (containerRef.current) {
|
|
832
|
-
resizeObserver.observe(containerRef.current);
|
|
833
|
-
}
|
|
834
|
-
updatePath();
|
|
835
|
-
return () => {
|
|
836
|
-
resizeObserver.disconnect();
|
|
837
|
-
};
|
|
838
|
-
}, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);
|
|
839
|
-
return /* @__PURE__ */ jsxs9(
|
|
840
|
-
"svg",
|
|
841
|
-
{
|
|
842
|
-
fill: "none",
|
|
843
|
-
width: svgDimensions.width,
|
|
844
|
-
height: svgDimensions.height,
|
|
845
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
846
|
-
className: cn("pointer-events-none absolute top-0 left-0 transform-gpu stroke-2", className),
|
|
847
|
-
viewBox: `0 0 ${svgDimensions.width} ${svgDimensions.height}`,
|
|
848
|
-
children: [
|
|
849
|
-
/* @__PURE__ */ jsx12("path", { d: pathD, stroke: pathColor, strokeWidth: pathWidth, strokeOpacity: pathOpacity, strokeLinecap: "round" }),
|
|
850
|
-
/* @__PURE__ */ jsx12("path", { d: pathD, strokeWidth: pathWidth, stroke: `url(#${id})`, strokeOpacity: "1", strokeLinecap: "round" }),
|
|
851
|
-
/* @__PURE__ */ jsx12("defs", { children: /* @__PURE__ */ jsxs9(
|
|
852
|
-
motion3.linearGradient,
|
|
853
|
-
{
|
|
854
|
-
className: "transform-gpu",
|
|
855
|
-
id,
|
|
856
|
-
gradientUnits: "userSpaceOnUse",
|
|
857
|
-
initial: {
|
|
858
|
-
x1: "0%",
|
|
859
|
-
x2: "0%",
|
|
860
|
-
y1: "0%",
|
|
861
|
-
y2: "0%"
|
|
862
|
-
},
|
|
863
|
-
animate: {
|
|
864
|
-
x1: gradientCoordinates.x1,
|
|
865
|
-
x2: gradientCoordinates.x2,
|
|
866
|
-
y1: gradientCoordinates.y1,
|
|
867
|
-
y2: gradientCoordinates.y2
|
|
868
|
-
},
|
|
869
|
-
transition: {
|
|
870
|
-
delay,
|
|
871
|
-
duration,
|
|
872
|
-
ease: [0.16, 1, 0.3, 1],
|
|
873
|
-
repeat: Infinity,
|
|
874
|
-
repeatDelay: 0
|
|
875
|
-
},
|
|
876
|
-
children: [
|
|
877
|
-
/* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor, stopOpacity: "0" }),
|
|
878
|
-
/* @__PURE__ */ jsx12("stop", { stopColor: gradientStartColor }),
|
|
879
|
-
/* @__PURE__ */ jsx12("stop", { offset: "32.5%", stopColor: gradientStopColor }),
|
|
880
|
-
/* @__PURE__ */ jsx12("stop", { offset: "100%", stopColor: gradientStopColor, stopOpacity: "0" })
|
|
881
|
-
]
|
|
882
|
-
}
|
|
883
|
-
) })
|
|
884
|
-
]
|
|
885
|
-
}
|
|
886
|
-
);
|
|
887
|
-
}
|
|
888
|
-
|
|
889
|
-
// src/shared/grid-pattern/grid-pattern.tsx
|
|
890
|
-
import { useId as useId2 } from "react";
|
|
891
|
-
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
892
|
-
function GridPattern({
|
|
893
|
-
width = 40,
|
|
894
|
-
height = 40,
|
|
895
|
-
x = -1,
|
|
896
|
-
y = -1,
|
|
897
|
-
strokeDasharray = "0",
|
|
898
|
-
squares,
|
|
899
|
-
className,
|
|
900
|
-
...props
|
|
901
|
-
}) {
|
|
902
|
-
const id = useId2();
|
|
903
|
-
return /* @__PURE__ */ jsxs10(
|
|
904
|
-
"svg",
|
|
905
|
-
{
|
|
906
|
-
"aria-hidden": "true",
|
|
907
|
-
className: cn("pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20", className),
|
|
908
|
-
...props,
|
|
909
|
-
children: [
|
|
910
|
-
/* @__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 }) }) }),
|
|
911
|
-
/* @__PURE__ */ jsx13("rect", { width: "100%", height: "100%", strokeWidth: 0, fill: `url(#${id})` }),
|
|
912
|
-
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}`)) })
|
|
913
|
-
]
|
|
914
|
-
}
|
|
915
|
-
);
|
|
916
|
-
}
|
|
917
814
|
export {
|
|
918
|
-
|
|
815
|
+
Button,
|
|
919
816
|
CTA,
|
|
920
817
|
CodeWindow,
|
|
921
818
|
FAQ,
|
|
922
819
|
Features,
|
|
923
820
|
Footer,
|
|
924
|
-
GridPattern,
|
|
925
821
|
Hero,
|
|
822
|
+
Input,
|
|
926
823
|
Marquee,
|
|
927
824
|
Navigation,
|
|
928
825
|
Pricing,
|