@nextworks/blocks-templates 0.2.0-alpha.12 → 0.2.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/templates/aiworkflow/PresetThemeVars.d.ts +1 -6
- package/dist/templates/aiworkflow/PresetThemeVars.d.ts.map +1 -1
- package/dist/templates/aiworkflow/PresetThemeVars.jsx +1 -7
- package/dist/templates/aiworkflow/components/CTA.jsx +9 -9
- package/dist/templates/aiworkflow/components/Contact.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Contact.jsx +10 -10
- package/dist/templates/aiworkflow/components/FAQ.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/FAQ.jsx +18 -18
- package/dist/templates/aiworkflow/components/FeatureMockups.d.ts +5 -0
- package/dist/templates/aiworkflow/components/FeatureMockups.d.ts.map +1 -0
- package/dist/templates/aiworkflow/components/FeatureMockups.jsx +442 -0
- package/dist/templates/aiworkflow/components/Features.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Features.jsx +16 -14
- package/dist/templates/aiworkflow/components/Footer.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Footer.jsx +13 -9
- package/dist/templates/aiworkflow/components/Hero.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Hero.jsx +664 -416
- package/dist/templates/aiworkflow/components/Navbar.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Navbar.jsx +13 -14
- package/dist/templates/aiworkflow/components/Pricing.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Pricing.jsx +25 -21
- package/dist/templates/aiworkflow/components/ProcessTimeline.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/ProcessTimeline.jsx +15 -15
- package/dist/templates/aiworkflow/components/Testimonials.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/Testimonials.jsx +14 -10
- package/dist/templates/aiworkflow/components/TrustBadges.d.ts.map +1 -1
- package/dist/templates/aiworkflow/components/TrustBadges.jsx +14 -12
- package/dist/templates/aiworkflow/themes/animation.d.ts +7 -0
- package/dist/templates/aiworkflow/themes/animation.d.ts.map +1 -0
- package/dist/templates/aiworkflow/themes/animation.jsx +9 -0
- package/dist/templates/aiworkflow/themes/default.d.ts +7 -0
- package/dist/templates/aiworkflow/themes/default.d.ts.map +1 -0
- package/dist/templates/aiworkflow/themes/default.jsx +9 -0
- package/dist/templates/aiworkflow/themes/test.d.ts +7 -0
- package/dist/templates/aiworkflow/themes/test.d.ts.map +1 -0
- package/dist/templates/aiworkflow/themes/test.jsx +39 -0
- package/dist/templates/gallery/PresetThemeVars.d.ts.map +1 -1
- package/dist/templates/gallery/PresetThemeVars.jsx +2 -0
- package/dist/templates/gallery/page.d.ts.map +1 -1
- package/dist/templates/gallery/page.jsx +381 -34
- package/package.json +3 -3
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
// AUTO-GENERATED from cli/kits/blocks by scripts/sync-kit-to-packages.mjs
|
|
2
|
+
// Do not edit this file directly. Edit the kit source instead.
|
|
3
|
+
"use client";
|
|
4
|
+
function WindowFrame({ title, eyebrow, rightLabel, children, }) {
|
|
5
|
+
return (<div className="aspect-[16/10] w-full overflow-hidden rounded-[22px] border border-white/10 bg-[#050505] text-white shadow-[0_20px_60px_rgba(0,0,0,0.45)]">
|
|
6
|
+
<div className="flex h-full flex-col bg-[radial-gradient(circle_at_top,rgba(255,255,255,0.06),transparent_34%),linear-gradient(180deg,#0a0a0a_0%,#050505_100%)]">
|
|
7
|
+
<div className="flex items-center justify-between border-b border-white/10 px-4 py-3">
|
|
8
|
+
<div className="flex items-center gap-3">
|
|
9
|
+
<div className="grid h-8 w-8 place-items-center rounded-lg border border-white/10 bg-white/5">
|
|
10
|
+
<div className="grid grid-cols-2 gap-[3px]">
|
|
11
|
+
<span className="h-1 w-1 rounded-full bg-white/90"/>
|
|
12
|
+
<span className="h-1 w-1 rounded-full bg-white/35"/>
|
|
13
|
+
<span className="h-1 w-1 rounded-full bg-white/35"/>
|
|
14
|
+
<span className="h-1 w-1 rounded-full bg-white/90"/>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div>
|
|
19
|
+
<div className="flex items-center gap-2">
|
|
20
|
+
<p className="text-[12px] font-semibold tracking-wide text-white/95">
|
|
21
|
+
{title}
|
|
22
|
+
</p>
|
|
23
|
+
{eyebrow ? (<span className="rounded-full border border-white/10 bg-white/5 px-2 py-0.5 text-[9px] uppercase tracking-[0.22em] text-white/45">
|
|
24
|
+
{eyebrow}
|
|
25
|
+
</span>) : null}
|
|
26
|
+
</div>
|
|
27
|
+
<p className="mt-0.5 text-[9px] uppercase tracking-[0.24em] text-white/35">
|
|
28
|
+
Session · live repo
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
{rightLabel ? (<div className="flex items-center gap-2 text-[9px] uppercase tracking-[0.24em] text-white/40">
|
|
34
|
+
<span>{rightLabel}</span>
|
|
35
|
+
<span className="inline-flex items-center gap-1 rounded-full border border-white/10 bg-white/5 px-2 py-1 text-white/65">
|
|
36
|
+
<span className="h-1.5 w-1.5 rounded-full bg-cyan-300"/>
|
|
37
|
+
active
|
|
38
|
+
</span>
|
|
39
|
+
</div>) : null}
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div className="flex-1">{children}</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>);
|
|
45
|
+
}
|
|
46
|
+
function SectionLabel({ children }) {
|
|
47
|
+
return (<p className="mb-3 text-[9px] font-medium uppercase tracking-[0.24em] text-white/30">
|
|
48
|
+
{children}
|
|
49
|
+
</p>);
|
|
50
|
+
}
|
|
51
|
+
function CodeLine({ number, text, active = false, }) {
|
|
52
|
+
return (<div className={`grid grid-cols-[22px_1fr] gap-3 px-4 py-1.5 text-[10px] ${active ? "bg-cyan-300/10" : ""}`}>
|
|
53
|
+
<span className="text-right font-mono text-white/28">{number}</span>
|
|
54
|
+
<span className="font-mono text-white/78">{text}</span>
|
|
55
|
+
</div>);
|
|
56
|
+
}
|
|
57
|
+
export function TaskToCodeMockup() {
|
|
58
|
+
return (<WindowFrame title="Agent workspace" eyebrow="Session 03" rightLabel="Repo apps/web">
|
|
59
|
+
<div className="grid h-full grid-cols-[1.1fr_1.4fr_1.8fr_72px]">
|
|
60
|
+
<div className="border-r border-white/10 p-3">
|
|
61
|
+
<SectionLabel>Task navigator</SectionLabel>
|
|
62
|
+
|
|
63
|
+
<div className="space-y-2.5">
|
|
64
|
+
{[
|
|
65
|
+
{
|
|
66
|
+
index: "1",
|
|
67
|
+
title: "Fix auth flow",
|
|
68
|
+
body: "Preserve intended destination after the OAuth callback.",
|
|
69
|
+
active: true,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
index: "2",
|
|
73
|
+
title: "Refactor pricing page",
|
|
74
|
+
body: "Extract repeated pricing sections into reusable blocks.",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
index: "3",
|
|
78
|
+
title: "Ship command palette",
|
|
79
|
+
body: "Add global search, shortcuts, and action routing.",
|
|
80
|
+
},
|
|
81
|
+
].map((item) => (<div key={item.index} className={`rounded-xl border p-3 ${item.active
|
|
82
|
+
? "border-cyan-300/50 bg-white/[0.04] shadow-[inset_2px_0_0_0_rgba(103,232,249,0.95)]"
|
|
83
|
+
: "border-white/8 bg-white/[0.025]"}`}>
|
|
84
|
+
<div className="mb-2 flex items-center justify-between">
|
|
85
|
+
<div className="flex items-center gap-2">
|
|
86
|
+
<span className="grid h-5 w-5 place-items-center rounded-full border border-white/10 text-[9px] text-white/65">
|
|
87
|
+
{item.index}
|
|
88
|
+
</span>
|
|
89
|
+
<p className="text-[11px] font-semibold text-white/90">
|
|
90
|
+
{item.title}
|
|
91
|
+
</p>
|
|
92
|
+
</div>
|
|
93
|
+
<span className="text-[8px] uppercase tracking-[0.22em] text-white/30">
|
|
94
|
+
{item.active ? "open" : "queued"}
|
|
95
|
+
</span>
|
|
96
|
+
</div>
|
|
97
|
+
<p className="text-[10px] leading-4 text-white/45">
|
|
98
|
+
{item.body}
|
|
99
|
+
</p>
|
|
100
|
+
</div>))}
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div className="border-r border-white/10 p-3">
|
|
105
|
+
<SectionLabel>Session focus · fix auth flow</SectionLabel>
|
|
106
|
+
|
|
107
|
+
<div className="space-y-2">
|
|
108
|
+
<div className="rounded-xl border border-white/10 bg-white/[0.03] p-3">
|
|
109
|
+
<div className="mb-2 flex items-center justify-between">
|
|
110
|
+
<span className="text-[8px] uppercase tracking-[0.22em] text-white/28">
|
|
111
|
+
edit
|
|
112
|
+
</span>
|
|
113
|
+
<span className="rounded-full border border-white/10 bg-white/5 px-2 py-0.5 text-[8px] uppercase tracking-[0.22em] text-white/45">
|
|
114
|
+
safe patch
|
|
115
|
+
</span>
|
|
116
|
+
</div>
|
|
117
|
+
<p className="text-[10px] leading-4 text-white/82">
|
|
118
|
+
Guard empty return paths and preserve intended destination.
|
|
119
|
+
</p>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div className="rounded-xl border border-white/10 bg-white/[0.03] p-3">
|
|
123
|
+
<span className="text-[8px] uppercase tracking-[0.22em] text-white/28">
|
|
124
|
+
task
|
|
125
|
+
</span>
|
|
126
|
+
<p className="mt-2 text-[10px] leading-4 text-white/62">
|
|
127
|
+
Fix the OAuth callback redirect so the app preserves the
|
|
128
|
+
intended destination after sign-in.
|
|
129
|
+
</p>
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<div className="space-y-1.5 pt-1 text-[10px] text-white/38">
|
|
133
|
+
<p>Read app/auth/callback/page.tsx</p>
|
|
134
|
+
<p>Read lib/auth/normalize-return.ts</p>
|
|
135
|
+
<p>Drafting change set</p>
|
|
136
|
+
<div className="mt-3 flex items-center gap-2 text-white/58">
|
|
137
|
+
<span className="h-1.5 w-1.5 rounded-full bg-cyan-300"/>
|
|
138
|
+
Running
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<div className="border-r border-white/10 py-3">
|
|
145
|
+
<SectionLabel>
|
|
146
|
+
<span className="px-4">Patch preview</span>
|
|
147
|
+
</SectionLabel>
|
|
148
|
+
|
|
149
|
+
<div className="space-y-[1px]">
|
|
150
|
+
<CodeLine number="38" text="const safeReturnTo ="/>
|
|
151
|
+
<CodeLine number="39" text="normalizeReturnTo(searchParams.get('returnTo'))"/>
|
|
152
|
+
<CodeLine number="40" text="const shouldTrackRedirect = safeReturnTo !== null" active/>
|
|
153
|
+
<CodeLine number="41" text="const fallbackDestination = '/dashboard'" active/>
|
|
154
|
+
<CodeLine number="42" text="const destination = safeReturnTo ?? '/dashboard'"/>
|
|
155
|
+
<div className="px-4 pt-3 text-[10px] text-white/32">
|
|
156
|
+
<span className="text-cyan-300">●</span> Applying change.
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div className="p-3">
|
|
162
|
+
<div className="space-y-2">
|
|
163
|
+
{[
|
|
164
|
+
["Files", "2"],
|
|
165
|
+
["Edits", "12"],
|
|
166
|
+
["Checks", "3/2"],
|
|
167
|
+
].map(([label, value]) => (<div key={label} className="rounded-xl border border-white/10 bg-white/[0.035] px-3 py-3 text-center">
|
|
168
|
+
<p className="text-[8px] uppercase tracking-[0.22em] text-white/28">
|
|
169
|
+
{label}
|
|
170
|
+
</p>
|
|
171
|
+
<p className="mt-1 text-[13px] font-semibold text-white/88">
|
|
172
|
+
{value}
|
|
173
|
+
</p>
|
|
174
|
+
</div>))}
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</WindowFrame>);
|
|
179
|
+
}
|
|
180
|
+
export function TranscriptDiffMockup() {
|
|
181
|
+
return (<WindowFrame title="Live transcript" eyebrow="Dual pane" rightLabel="Diff linked">
|
|
182
|
+
<div className="grid h-full grid-cols-[1.05fr_1.4fr]">
|
|
183
|
+
<div className="border-r border-white/10 p-3">
|
|
184
|
+
<SectionLabel>Transcript</SectionLabel>
|
|
185
|
+
|
|
186
|
+
<div className="space-y-3">
|
|
187
|
+
{[
|
|
188
|
+
{
|
|
189
|
+
who: "U",
|
|
190
|
+
text: "Can you fix the callback so users return to the page they started from?",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
who: "A",
|
|
194
|
+
text: "Reading the auth flow and tracing redirect handling now.",
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
who: "A",
|
|
198
|
+
text: "Found the issue: the fallback path replaces the intended return target when the param is missing or malformed.",
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
who: "A",
|
|
202
|
+
text: "Drafting a guarded patch and running checks.",
|
|
203
|
+
},
|
|
204
|
+
].map((msg, i) => (<div key={i} className="flex items-start gap-2.5">
|
|
205
|
+
<div className={`grid h-6 w-6 shrink-0 place-items-center rounded-full text-[9px] font-semibold ${msg.who === "A"
|
|
206
|
+
? "bg-white/10 text-white/85"
|
|
207
|
+
: "bg-cyan-300/15 text-cyan-200"}`}>
|
|
208
|
+
{msg.who}
|
|
209
|
+
</div>
|
|
210
|
+
<div className="max-w-[92%] rounded-2xl border border-white/10 bg-white/[0.035] px-3 py-2">
|
|
211
|
+
<p className="text-[10px] leading-4 text-white/78">
|
|
212
|
+
{msg.text}
|
|
213
|
+
</p>
|
|
214
|
+
</div>
|
|
215
|
+
</div>))}
|
|
216
|
+
|
|
217
|
+
<div className="pt-1">
|
|
218
|
+
<div className="mb-1 flex items-center justify-between text-[8px] uppercase tracking-[0.22em] text-white/28">
|
|
219
|
+
<span>Agent activity</span>
|
|
220
|
+
<span>independent scroll</span>
|
|
221
|
+
</div>
|
|
222
|
+
<div className="h-1.5 overflow-hidden rounded-full bg-white/8">
|
|
223
|
+
<div className="h-full w-[62%] rounded-full bg-cyan-300/85"/>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
<div className="grid grid-rows-[auto_1fr]">
|
|
230
|
+
<div className="border-b border-white/10 px-4 py-3">
|
|
231
|
+
<div className="flex items-center justify-between">
|
|
232
|
+
<div>
|
|
233
|
+
<SectionLabel>Live diff</SectionLabel>
|
|
234
|
+
</div>
|
|
235
|
+
<div className="flex items-center gap-2 text-[8px] uppercase tracking-[0.22em] text-white/35">
|
|
236
|
+
<span>app/auth/callback/page.tsx</span>
|
|
237
|
+
<span className="rounded-full border border-white/10 bg-white/5 px-2 py-1 text-white/55">
|
|
238
|
+
+8 / -2
|
|
239
|
+
</span>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
<div className="grid grid-cols-2">
|
|
245
|
+
<div className="border-r border-white/10 py-3">
|
|
246
|
+
<div className="px-4 pb-2 text-[9px] uppercase tracking-[0.22em] text-white/25">
|
|
247
|
+
Before
|
|
248
|
+
</div>
|
|
249
|
+
<div className="space-y-[1px]">
|
|
250
|
+
<CodeLine number="18" text="const destination = '/dashboard'"/>
|
|
251
|
+
<CodeLine number="19" text=""/>
|
|
252
|
+
<CodeLine number="20" text="if (user) {"/>
|
|
253
|
+
<CodeLine number="21" text=" redirect(destination)"/>
|
|
254
|
+
<CodeLine number="22" text="}"/>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
<div className="py-3">
|
|
259
|
+
<div className="px-4 pb-2 text-[9px] uppercase tracking-[0.22em] text-white/25">
|
|
260
|
+
After
|
|
261
|
+
</div>
|
|
262
|
+
<div className="space-y-[1px]">
|
|
263
|
+
<CodeLine number="18" text="const safeReturnTo = normalizeReturnTo(...)" active/>
|
|
264
|
+
<CodeLine number="19" text="const destination = safeReturnTo ?? '/dashboard'" active/>
|
|
265
|
+
<CodeLine number="20" text=""/>
|
|
266
|
+
<CodeLine number="21" text="if (user) {"/>
|
|
267
|
+
<CodeLine number="22" text=" redirect(destination)"/>
|
|
268
|
+
</div>
|
|
269
|
+
|
|
270
|
+
<div className="px-4 pt-4">
|
|
271
|
+
<div className="rounded-2xl border border-white/10 bg-white/[0.03] p-3">
|
|
272
|
+
<div className="mb-2 flex items-center justify-between">
|
|
273
|
+
<p className="text-[10px] font-semibold text-white/82">
|
|
274
|
+
Checks running
|
|
275
|
+
</p>
|
|
276
|
+
<span className="text-[8px] uppercase tracking-[0.22em] text-white/35">
|
|
277
|
+
2 passed · 1 in progress
|
|
278
|
+
</span>
|
|
279
|
+
</div>
|
|
280
|
+
<div className="grid grid-cols-3 gap-2">
|
|
281
|
+
{["Typecheck", "Lint", "Route test"].map((item, i) => (<div key={item} className="rounded-xl border border-white/10 bg-black/20 px-2 py-2 text-center">
|
|
282
|
+
<p className="text-[9px] text-white/65">{item}</p>
|
|
283
|
+
<p className="mt-1 text-[9px] font-medium text-white/85">
|
|
284
|
+
{i < 2 ? "Passed" : "Running"}
|
|
285
|
+
</p>
|
|
286
|
+
</div>))}
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
</div>
|
|
294
|
+
</WindowFrame>);
|
|
295
|
+
}
|
|
296
|
+
export function ReviewQueueMockup() {
|
|
297
|
+
return (<WindowFrame title="Review queue" eyebrow="Human gate" rightLabel="Patch summary">
|
|
298
|
+
<div className="grid h-full grid-cols-[1.1fr_1.35fr]">
|
|
299
|
+
<div className="border-r border-white/10 p-3">
|
|
300
|
+
<SectionLabel>Exceptions only</SectionLabel>
|
|
301
|
+
|
|
302
|
+
<div className="space-y-2.5">
|
|
303
|
+
{[
|
|
304
|
+
{
|
|
305
|
+
title: "Rename helper import",
|
|
306
|
+
status: "Auto-approved",
|
|
307
|
+
body: "No behavior change. Formatting only.",
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
title: "Guard malformed returnTo",
|
|
311
|
+
status: "Needs review",
|
|
312
|
+
body: "Redirect logic changed for invalid callback paths.",
|
|
313
|
+
active: true,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
title: "Remove stale logger",
|
|
317
|
+
status: "Auto-approved",
|
|
318
|
+
body: "Unused debug output removed.",
|
|
319
|
+
},
|
|
320
|
+
].map((item) => (<div key={item.title} className={`rounded-2xl border p-3 ${item.active
|
|
321
|
+
? "border-cyan-300/45 bg-white/[0.045]"
|
|
322
|
+
: "border-white/10 bg-white/[0.025]"}`}>
|
|
323
|
+
<div className="flex items-start justify-between gap-3">
|
|
324
|
+
<div>
|
|
325
|
+
<p className="text-[11px] font-semibold text-white/88">
|
|
326
|
+
{item.title}
|
|
327
|
+
</p>
|
|
328
|
+
<p className="mt-1 text-[10px] leading-4 text-white/46">
|
|
329
|
+
{item.body}
|
|
330
|
+
</p>
|
|
331
|
+
</div>
|
|
332
|
+
<span className={`shrink-0 rounded-full border px-2 py-1 text-[8px] uppercase tracking-[0.22em] ${item.active
|
|
333
|
+
? "border-cyan-300/30 bg-cyan-300/10 text-cyan-100"
|
|
334
|
+
: "border-white/10 bg-white/5 text-white/48"}`}>
|
|
335
|
+
{item.status}
|
|
336
|
+
</span>
|
|
337
|
+
</div>
|
|
338
|
+
</div>))}
|
|
339
|
+
</div>
|
|
340
|
+
|
|
341
|
+
<div className="mt-4 rounded-2xl border border-white/10 bg-white/[0.03] p-3">
|
|
342
|
+
<div className="mb-3 flex items-center justify-between">
|
|
343
|
+
<p className="text-[10px] font-semibold text-white/82">
|
|
344
|
+
Queue policy
|
|
345
|
+
</p>
|
|
346
|
+
<span className="text-[8px] uppercase tracking-[0.22em] text-white/32">
|
|
347
|
+
Active
|
|
348
|
+
</span>
|
|
349
|
+
</div>
|
|
350
|
+
<div className="space-y-2 text-[10px] text-white/55">
|
|
351
|
+
<div className="flex items-center justify-between">
|
|
352
|
+
<span>Routine edits auto-ship</span>
|
|
353
|
+
<span className="text-white/82">On</span>
|
|
354
|
+
</div>
|
|
355
|
+
<div className="flex items-center justify-between">
|
|
356
|
+
<span>Behavior changes require review</span>
|
|
357
|
+
<span className="text-white/82">On</span>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
|
|
363
|
+
<div className="p-3">
|
|
364
|
+
<SectionLabel>Selected patch</SectionLabel>
|
|
365
|
+
|
|
366
|
+
<div className="rounded-[20px] border border-white/10 bg-white/[0.03] p-4">
|
|
367
|
+
<div className="flex items-center justify-between">
|
|
368
|
+
<div>
|
|
369
|
+
<p className="text-[12px] font-semibold text-white/92">
|
|
370
|
+
Redirect safety patch
|
|
371
|
+
</p>
|
|
372
|
+
<p className="mt-1 text-[10px] text-white/42">
|
|
373
|
+
auth callback · medium confidence impact
|
|
374
|
+
</p>
|
|
375
|
+
</div>
|
|
376
|
+
<span className="rounded-full border border-cyan-300/30 bg-cyan-300/10 px-2 py-1 text-[8px] uppercase tracking-[0.22em] text-cyan-100">
|
|
377
|
+
review required
|
|
378
|
+
</span>
|
|
379
|
+
</div>
|
|
380
|
+
|
|
381
|
+
<div className="mt-4 grid grid-cols-3 gap-2">
|
|
382
|
+
{[
|
|
383
|
+
["Files touched", "2"],
|
|
384
|
+
["Risk", "Medium"],
|
|
385
|
+
["Checks", "Passed"],
|
|
386
|
+
].map(([label, value]) => (<div key={label} className="rounded-xl border border-white/10 bg-black/20 px-3 py-3">
|
|
387
|
+
<p className="text-[8px] uppercase tracking-[0.22em] text-white/28">
|
|
388
|
+
{label}
|
|
389
|
+
</p>
|
|
390
|
+
<p className="mt-1 text-[11px] font-semibold text-white/86">
|
|
391
|
+
{value}
|
|
392
|
+
</p>
|
|
393
|
+
</div>))}
|
|
394
|
+
</div>
|
|
395
|
+
|
|
396
|
+
<div className="mt-4 rounded-2xl border border-white/10 bg-black/20 p-3">
|
|
397
|
+
<p className="text-[9px] uppercase tracking-[0.22em] text-white/28">
|
|
398
|
+
Summary
|
|
399
|
+
</p>
|
|
400
|
+
<ul className="mt-2 space-y-2 text-[10px] leading-4 text-white/68">
|
|
401
|
+
<li>• Normalizes callback return targets before redirect.</li>
|
|
402
|
+
<li>
|
|
403
|
+
• Preserves intended destination when the value is valid.
|
|
404
|
+
</li>
|
|
405
|
+
<li>
|
|
406
|
+
• Falls back to /dashboard only when the param is unsafe.
|
|
407
|
+
</li>
|
|
408
|
+
</ul>
|
|
409
|
+
</div>
|
|
410
|
+
|
|
411
|
+
<div className="mt-4 grid grid-cols-[1fr_auto] gap-3">
|
|
412
|
+
<div className="rounded-2xl border border-white/10 bg-black/20 p-3">
|
|
413
|
+
<p className="text-[9px] uppercase tracking-[0.22em] text-white/28">
|
|
414
|
+
Reviewer note
|
|
415
|
+
</p>
|
|
416
|
+
<p className="mt-2 text-[10px] leading-4 text-white/74">
|
|
417
|
+
This changes navigation behavior for malformed callback
|
|
418
|
+
params. Requesting human confirmation before merge.
|
|
419
|
+
</p>
|
|
420
|
+
</div>
|
|
421
|
+
|
|
422
|
+
<div className="flex flex-col justify-end gap-2">
|
|
423
|
+
<button className="rounded-xl border border-white/12 bg-white/6 px-4 py-2 text-[10px] font-medium text-white/82">
|
|
424
|
+
Send back
|
|
425
|
+
</button>
|
|
426
|
+
<button className="rounded-xl border border-cyan-300/30 bg-cyan-300/12 px-4 py-2 text-[10px] font-medium text-cyan-100">
|
|
427
|
+
Approve patch
|
|
428
|
+
</button>
|
|
429
|
+
</div>
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
</div>
|
|
433
|
+
</div>
|
|
434
|
+
</WindowFrame>);
|
|
435
|
+
}
|
|
436
|
+
export function FeatureMockupsPreview() {
|
|
437
|
+
return (<div className="space-y-8 bg-black p-8">
|
|
438
|
+
<TaskToCodeMockup />
|
|
439
|
+
<TranscriptDiffMockup />
|
|
440
|
+
<ReviewQueueMockup />
|
|
441
|
+
</div>);
|
|
442
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Features.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Features.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,QAAQ,
|
|
1
|
+
{"version":3,"file":"Features.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Features.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,QAAQ,gCAsCvB"}
|
|
@@ -4,26 +4,28 @@
|
|
|
4
4
|
import { Features as SharedFeatures } from "@nextworks/blocks-sections";
|
|
5
5
|
const featuresData = [
|
|
6
6
|
{
|
|
7
|
-
imageSrc: "/placeholders/
|
|
8
|
-
imageAlt: "
|
|
9
|
-
headingText: "
|
|
10
|
-
subheadingText: "
|
|
7
|
+
imageSrc: "/placeholders/aiworkflow/task.svg",
|
|
8
|
+
imageAlt: "Task navigator and repo context view",
|
|
9
|
+
headingText: "Turn plain-language tasks into code changes",
|
|
10
|
+
subheadingText: "The agent reads the repo, traces the issue, and shapes a safe patch with clear context.",
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
|
-
imageSrc: "/placeholders/
|
|
14
|
-
imageAlt: "
|
|
15
|
-
headingText: "
|
|
16
|
-
subheadingText: "
|
|
13
|
+
imageSrc: "/placeholders/aiworkflow/live.svg",
|
|
14
|
+
imageAlt: "Transcript, live diff, and editor output",
|
|
15
|
+
headingText: "Watch the transcript and diff move independently",
|
|
16
|
+
subheadingText: "The agent can keep reading, edit the file, and land a result without forcing both panes to move in lockstep.",
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
imageSrc: "/placeholders/
|
|
20
|
-
imageAlt: "
|
|
21
|
-
headingText: "
|
|
22
|
-
subheadingText: "
|
|
19
|
+
imageSrc: "/placeholders/aiworkflow/review.svg",
|
|
20
|
+
imageAlt: "Review queue and patch summary panel",
|
|
21
|
+
headingText: "Review only the changes that matter",
|
|
22
|
+
subheadingText: "Keep the agent moving on routine edits while exceptions surface only when a human needs to step in.",
|
|
23
23
|
},
|
|
24
24
|
];
|
|
25
25
|
export function Features() {
|
|
26
|
-
return (<SharedFeatures sectionHeading="One system for requests,
|
|
26
|
+
return (<SharedFeatures sectionHeading="One system for requests, code, execution, and visibility" sectionSubheading="Turn a task into context, a patch, and a live result without losing the thread." featuresData={featuresData} section={{
|
|
27
|
+
className: "bg-[var(--section-bg)] py-18 md:py-22 lg:py-24",
|
|
28
|
+
}} container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-10" }} header={{ className: "mb-12 text-center md:mb-14" }} heading={{
|
|
27
29
|
className: "font-outfit text-3xl font-semibold text-[var(--heading-fg)] md:text-4xl lg:text-5xl",
|
|
28
30
|
}} subheading={{
|
|
29
31
|
className: "mx-auto max-w-3xl font-inter text-base leading-7 text-[var(--subheading-fg)] md:text-lg",
|
|
@@ -35,5 +37,5 @@ export function Features() {
|
|
|
35
37
|
className: "font-inter text-xl font-semibold leading-tight text-[var(--card-title-fg)]",
|
|
36
38
|
}} cardSubheading={{
|
|
37
39
|
className: "font-inter text-sm leading-6 text-[var(--card-muted-fg)] md:text-base",
|
|
38
|
-
}} ariaLabel="AI
|
|
40
|
+
}} ariaLabel="AI coding agent features"/>);
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Footer.tsx"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Footer.tsx"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,gCA2GrB"}
|
|
@@ -6,7 +6,7 @@ import { Github, Linkedin, Mail, Twitter } from "lucide-react";
|
|
|
6
6
|
export function Footer() {
|
|
7
7
|
return (<SharedFooter id="footer" footerBrandName="FlowPilot AI" footerNavLinks={[
|
|
8
8
|
{
|
|
9
|
-
heading: "
|
|
9
|
+
heading: "Product",
|
|
10
10
|
links: [
|
|
11
11
|
{ name: "Features", href: "#features" },
|
|
12
12
|
{ name: "Pricing", href: "#pricing" },
|
|
@@ -17,14 +17,14 @@ export function Footer() {
|
|
|
17
17
|
{
|
|
18
18
|
heading: "Use cases",
|
|
19
19
|
links: [
|
|
20
|
-
{ name: "
|
|
21
|
-
{ name: "
|
|
22
|
-
{ name: "
|
|
23
|
-
{ name: "
|
|
20
|
+
{ name: "Bug fixes", href: "#features" },
|
|
21
|
+
{ name: "Refactors", href: "#features" },
|
|
22
|
+
{ name: "Reviews", href: "#faq" },
|
|
23
|
+
{ name: "Tooling", href: "#features" },
|
|
24
24
|
],
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
heading: "
|
|
27
|
+
heading: "Resources",
|
|
28
28
|
links: [
|
|
29
29
|
{ name: "About", href: "#home" },
|
|
30
30
|
{ name: "Security", href: "#faq" },
|
|
@@ -65,9 +65,13 @@ export function Footer() {
|
|
|
65
65
|
className: "w-full border-t border-[var(--footer-border)] bg-[var(--footer-bg)] text-[var(--footer-fg)]",
|
|
66
66
|
}} container={{ className: "max-w-7xl mx-auto px-6" }} brand={{
|
|
67
67
|
className: "font-outfit text-xl font-semibold text-[var(--footer-heading-fg)] md:text-2xl",
|
|
68
|
-
}} brandWrapper={{
|
|
68
|
+
}} brandWrapper={{
|
|
69
|
+
className: "flex flex-col items-start text-left lg:pr-8",
|
|
70
|
+
}} navSection={{
|
|
69
71
|
className: "flex flex-col items-start justify-between gap-8 pt-10 pb-12 lg:flex-row",
|
|
70
|
-
}} navGroup={{
|
|
72
|
+
}} navGroup={{
|
|
73
|
+
className: "flex min-w-[150px] flex-col items-start text-left",
|
|
74
|
+
}} navHeading={{
|
|
71
75
|
className: "mb-4 font-inter text-sm font-semibold uppercase tracking-wider text-[var(--footer-heading-fg)]",
|
|
72
76
|
}} navLink={{
|
|
73
77
|
className: "mb-3 block font-inter text-sm text-[var(--footer-link-fg)] transition-colors duration-200 hover:text-[var(--footer-link-hover-fg)]",
|
|
@@ -77,5 +81,5 @@ export function Footer() {
|
|
|
77
81
|
className: "rounded-lg p-3 text-[var(--footer-link-fg)] transition-all duration-200 hover:bg-[var(--footer-link-hover-bg)] hover:text-[var(--footer-link-hover-fg)]",
|
|
78
82
|
}} socialIcon={{ className: "h-5 w-5" }} copyright={{
|
|
79
83
|
className: "border-t border-[var(--footer-border)] py-6 text-center font-inter text-sm text-[var(--footer-muted-fg)]",
|
|
80
|
-
}} ariaLabel="AI
|
|
84
|
+
}} ariaLabel="AI coding agent footer"/>);
|
|
81
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hero.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Hero.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Hero.d.ts","sourceRoot":"","sources":["../../../../src/templates/aiworkflow/components/Hero.tsx"],"names":[],"mappings":"AA2yBA,wBAAgB,IAAI,gCAyEnB"}
|