@nextworks/blocks-templates 0.2.0-alpha.13 → 0.2.0-alpha.15

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.
Files changed (36) hide show
  1. package/README.md +3 -0
  2. package/dist/templates/aiworkflow/PresetThemeVars.d.ts +1 -6
  3. package/dist/templates/aiworkflow/PresetThemeVars.d.ts.map +1 -1
  4. package/dist/templates/aiworkflow/PresetThemeVars.jsx +1 -7
  5. package/dist/templates/aiworkflow/components/CTA.jsx +9 -9
  6. package/dist/templates/aiworkflow/components/Contact.d.ts.map +1 -1
  7. package/dist/templates/aiworkflow/components/Contact.jsx +10 -10
  8. package/dist/templates/aiworkflow/components/FAQ.d.ts.map +1 -1
  9. package/dist/templates/aiworkflow/components/FAQ.jsx +18 -18
  10. package/dist/templates/aiworkflow/components/FeatureMockups.d.ts +5 -0
  11. package/dist/templates/aiworkflow/components/FeatureMockups.d.ts.map +1 -0
  12. package/dist/templates/aiworkflow/components/FeatureMockups.jsx +442 -0
  13. package/dist/templates/aiworkflow/components/Features.d.ts.map +1 -1
  14. package/dist/templates/aiworkflow/components/Features.jsx +16 -14
  15. package/dist/templates/aiworkflow/components/Footer.d.ts.map +1 -1
  16. package/dist/templates/aiworkflow/components/Footer.jsx +13 -9
  17. package/dist/templates/aiworkflow/components/Hero.d.ts.map +1 -1
  18. package/dist/templates/aiworkflow/components/Hero.jsx +664 -416
  19. package/dist/templates/aiworkflow/components/Navbar.d.ts.map +1 -1
  20. package/dist/templates/aiworkflow/components/Navbar.jsx +13 -14
  21. package/dist/templates/aiworkflow/components/Pricing.d.ts.map +1 -1
  22. package/dist/templates/aiworkflow/components/Pricing.jsx +25 -21
  23. package/dist/templates/aiworkflow/components/ProcessTimeline.d.ts.map +1 -1
  24. package/dist/templates/aiworkflow/components/ProcessTimeline.jsx +15 -15
  25. package/dist/templates/aiworkflow/components/Testimonials.d.ts.map +1 -1
  26. package/dist/templates/aiworkflow/components/Testimonials.jsx +14 -10
  27. package/dist/templates/aiworkflow/components/TrustBadges.d.ts.map +1 -1
  28. package/dist/templates/aiworkflow/components/TrustBadges.jsx +14 -12
  29. package/dist/templates/aiworkflow/themes/default.d.ts +7 -0
  30. package/dist/templates/aiworkflow/themes/default.d.ts.map +1 -0
  31. package/dist/templates/aiworkflow/themes/default.jsx +9 -0
  32. package/dist/templates/gallery/PresetThemeVars.d.ts.map +1 -1
  33. package/dist/templates/gallery/PresetThemeVars.jsx +2 -0
  34. package/dist/templates/gallery/page.d.ts.map +1 -1
  35. package/dist/templates/gallery/page.jsx +381 -34
  36. package/package.json +3 -3
@@ -7,6 +7,7 @@ import { CTA } from "@nextworks/blocks-sections";
7
7
  import { FAQ } from "@nextworks/blocks-sections";
8
8
  import { Features } from "@nextworks/blocks-sections";
9
9
  import { Footer } from "@nextworks/blocks-sections";
10
+ import { HeroProductDemo } from "@nextworks/blocks-sections";
10
11
  import { HeroMotion } from "@nextworks/blocks-sections";
11
12
  import { HeroOverlay } from "@nextworks/blocks-sections";
12
13
  import { HeroSplit } from "@nextworks/blocks-sections";
@@ -48,6 +49,241 @@ export function Gallery() {
48
49
  subheadingText: "Access your data and manage your workflow from anywhere with our responsive, mobile-optimized interface that works perfectly on all devices.",
49
50
  },
50
51
  ];
52
+ const heroProductDemoScenarios = [
53
+ {
54
+ key: "gallery-product-demo",
55
+ label: "Workflow overview",
56
+ description: "An AI-powered coding agent that plans, edits, and verifies changes across your entire codebase — without breaking your flow.",
57
+ activeWindow: "workflowStudio",
58
+ playback: {
59
+ workflowStudio: {
60
+ playbackStepDurationsMs: [820, 920, 1240, 1100, 960, 840, 1560],
61
+ playbackResetDelayMs: 2200,
62
+ },
63
+ runConsole: {
64
+ playbackStepDurationsMs: [1080, 1320, 920, 780, 700, 620, 1240],
65
+ playbackResetDelayMs: 2200,
66
+ playbackStepEntryIndices: [0, 0, 1, 1, 2, 2, 2, 3, 3],
67
+ playbackStepVisibleLineCounts: [2, 2, 3, 4, 6, 8, 10, 12, 12],
68
+ },
69
+ },
70
+ taskList: {
71
+ window: {
72
+ key: "taskList",
73
+ title: "Queues",
74
+ subtitle: "Active tasks",
75
+ status: { label: "Ready", tone: "info" },
76
+ },
77
+ title: "Task queues",
78
+ subtitle: "Switch between in-progress agent runs.",
79
+ activeItemId: "gallery-product-demo",
80
+ items: [
81
+ {
82
+ id: "gallery-product-demo",
83
+ title: "Refactor auth module",
84
+ description: "Extract token logic into a dedicated service, add refresh handling, and update all call sites.",
85
+ meta: "in progress · 4 files",
86
+ },
87
+ ],
88
+ },
89
+ workflowStudio: {
90
+ window: {
91
+ key: "workflowStudio",
92
+ title: "Agent console",
93
+ subtitle: "Live run",
94
+ status: { label: "Running", tone: "info" },
95
+ },
96
+ title: "Refactoring auth module",
97
+ subtitle: "The agent reads existing logic, plans the extraction, and applies changes across all affected files.",
98
+ activeNodeId: "polish-layout",
99
+ transcript: [
100
+ { id: "gallery-title", kind: "title", text: "Refactor auth module" },
101
+ {
102
+ id: "gallery-prompt",
103
+ kind: "prompt",
104
+ text: "Extract token handling into an AuthService class, add silent refresh on 401, and update every call site.",
105
+ },
106
+ {
107
+ id: "gallery-read-1",
108
+ kind: "activity",
109
+ text: "Read auth/session.ts and api/client.ts",
110
+ },
111
+ {
112
+ id: "gallery-read-2",
113
+ kind: "activity",
114
+ text: "Scan for token usage across 12 files",
115
+ },
116
+ {
117
+ id: "gallery-file-1",
118
+ kind: "file",
119
+ path: "src/services/auth-service.ts",
120
+ text: "src/services/auth-service.ts",
121
+ added: 74,
122
+ removed: 0,
123
+ },
124
+ {
125
+ id: "gallery-summary",
126
+ kind: "message",
127
+ text: "Done. Token logic is centralised in AuthService and silent refresh is active on every API call.",
128
+ },
129
+ ],
130
+ composer: {
131
+ placeholder: "Describe your next change...",
132
+ modeLabel: "Agent",
133
+ modelLabel: "Sonnet",
134
+ },
135
+ highlights: [
136
+ { id: "read-copy", label: "Read codebase", tone: "info" },
137
+ { id: "polish-layout", label: "Apply changes", tone: "accent" },
138
+ ],
139
+ nodes: [
140
+ {
141
+ id: "read-copy",
142
+ label: "Read existing auth logic",
143
+ description: "Parse session handling and identify all token read/write paths.",
144
+ type: "Read",
145
+ status: "success",
146
+ metadata: "auth/session.ts · api/client.ts",
147
+ },
148
+ {
149
+ id: "layout-shell",
150
+ label: "Plan the extraction",
151
+ description: "Decide class boundaries and map which call sites need updating.",
152
+ type: "Analyze",
153
+ status: "success",
154
+ metadata: "12 files affected",
155
+ },
156
+ {
157
+ id: "polish-layout",
158
+ label: "Write AuthService",
159
+ description: "Create the service class, move token storage, and add the 401 refresh interceptor.",
160
+ type: "Edit",
161
+ status: "info",
162
+ active: true,
163
+ emphasized: true,
164
+ metadata: "src/services/auth-service.ts",
165
+ },
166
+ {
167
+ id: "review-story",
168
+ label: "Update call sites",
169
+ description: "Replace direct token access with AuthService across all affected files and verify types.",
170
+ type: "Verify",
171
+ status: "neutral",
172
+ metadata: "final pass",
173
+ },
174
+ ],
175
+ },
176
+ runConsole: {
177
+ window: {
178
+ key: "runConsole",
179
+ title: "Console",
180
+ subtitle: "Live output",
181
+ status: { label: "Writing", tone: "info" },
182
+ },
183
+ title: "src/services/auth-service.ts",
184
+ subtitle: "New file — token logic extracted from session.ts and api/client.ts.",
185
+ statusLabel: "Writing AuthService",
186
+ progressLabel: "74 lines added",
187
+ progressPercent: 64,
188
+ activeEntryId: "gallery-diff-3",
189
+ editorTabLabel: "auth-service.ts",
190
+ editorLanguage: "TypeScript",
191
+ editorSummary: "Create AuthService with token storage, silent refresh, and a fetch interceptor.",
192
+ entries: [
193
+ {
194
+ id: "gallery-diff-1",
195
+ message: "Read auth/session.ts and mapped token access patterns",
196
+ timestamp: "10:48",
197
+ source: "agent",
198
+ status: "success",
199
+ },
200
+ {
201
+ id: "gallery-diff-2",
202
+ message: "Identified 12 call sites that reference tokens directly",
203
+ timestamp: "10:49",
204
+ source: "analysis",
205
+ status: "success",
206
+ detail: "Centralising access in AuthService will eliminate all direct imports.",
207
+ },
208
+ {
209
+ id: "gallery-diff-3",
210
+ message: "Created AuthService with refresh interceptor",
211
+ timestamp: "10:49",
212
+ source: "editor",
213
+ status: "info",
214
+ highlighted: true,
215
+ lineNumber: "34",
216
+ code: [
217
+ " export class AuthService {",
218
+ " private static token: string | null = null;",
219
+ " ",
220
+ "+ static async getToken(): Promise<string | null> {",
221
+ "+ if (!this.token) this.token = await storage.get('auth_token');",
222
+ "+ return this.token;",
223
+ "+ }",
224
+ "+ ",
225
+ "+ static async refreshIfExpired(): Promise<void> {",
226
+ "+ const exp = parseExpiry(this.token);",
227
+ "+ if (exp && exp < Date.now() + 60_000) {",
228
+ "+ this.token = await api.post('/auth/refresh');",
229
+ "+ }",
230
+ "+ }",
231
+ ],
232
+ },
233
+ {
234
+ id: "gallery-diff-4",
235
+ message: "Queued call-site updates across 12 files",
236
+ timestamp: "10:50",
237
+ source: "preview",
238
+ status: "neutral",
239
+ },
240
+ ],
241
+ metrics: [
242
+ { id: "gm1", label: "Files", value: "1", tone: "success" },
243
+ { id: "gm2", label: "Lines added", value: "74", tone: "info" },
244
+ { id: "gm3", label: "Type errors", value: "0", tone: "success" },
245
+ ],
246
+ highlights: [],
247
+ },
248
+ approvalInbox: {
249
+ window: {
250
+ key: "approvalInbox",
251
+ title: "Hidden",
252
+ },
253
+ items: [],
254
+ },
255
+ knowledgePanel: {
256
+ window: {
257
+ key: "knowledgePanel",
258
+ title: "Knowledge",
259
+ subtitle: "Context",
260
+ status: { label: "Ready", tone: "success" },
261
+ },
262
+ title: "Auth codebase context",
263
+ subtitle: "Relevant files and patterns surfaced for this task.",
264
+ query: "AuthService token refresh",
265
+ summary: "Token storage is currently split between session.ts and api/client.ts. Centralising in AuthService removes 3 duplicate patterns and enables a single refresh intercept point.",
266
+ snippets: [
267
+ {
268
+ id: "gallery-snippet",
269
+ title: "auth/session.ts — token storage",
270
+ excerptLabel: "Current implementation",
271
+ confidence: "12 call sites",
272
+ highlighted: true,
273
+ content: "getToken(): string | null { return localStorage.getItem('auth_token'); }\nsetToken(t: string): void { localStorage.setItem('auth_token', t); }\nclearToken(): void { localStorage.removeItem('auth_token'); }",
274
+ tags: ["auth", "token", "session"],
275
+ },
276
+ ],
277
+ highlights: [
278
+ { id: "gallery-snippet", label: "Token pattern", tone: "success" },
279
+ ],
280
+ },
281
+ highlights: [
282
+ { id: "polish-layout", label: "AuthService created", tone: "accent" },
283
+ { id: "gallery-diff-3", label: "Refresh interceptor", tone: "info" },
284
+ ],
285
+ },
286
+ ];
51
287
  const BrandNode = (<>
52
288
  <ThemeSelector ariaLabel="Demo: Color theme" label="" className="mr-2"/>
53
289
 
@@ -64,7 +300,7 @@ export function Gallery() {
64
300
  }} desktopMenu={{
65
301
  className: "hidden md:hidden lg:flex items-center space-x-1 lg:space-x-0",
66
302
  }} id="site-navigation" brand="Nextworks" brandNode={BrandNode} menuItems={[
67
- { label: "Hero", href: "#hero-sections" },
303
+ { label: "Hero", href: "#hero-product-demo" },
68
304
  { label: "Trust", href: "#trust" },
69
305
  { label: "Features", href: "#features" },
70
306
  { label: "About", href: "#about-process" },
@@ -78,27 +314,72 @@ export function Gallery() {
78
314
  className: "text-base font-normal text-foreground hover:text-gray-500 dark:hover:text-gray-400 transition-colors",
79
315
  }} ctaButton={null}/>
80
316
  {/* Hero Sections */}
81
- <div id="hero-sections">
82
- <HeroMotion actions={{
83
- className: "mt-8 flex items-center justify-center gap-3 [--btn-ring:var(--ring)]",
84
- }} primaryButtonStyle={{
85
- size: "lg",
317
+ <div id="hero-sections" className="scroll-mt-16">
318
+ <div id="hero-product-demo" className="scroll-mt-16">
319
+ <div className="relative pt-0">
320
+ <HeroProductDemo className="bg-transparent" heading={{
321
+ text: "Ship faster with an agent that knows your codebase.",
322
+ className: "max-w-4xl text-left font-outfit text-3xl font-semibold leading-none tracking-tight text-[var(--heading-fg)] sm:text-4xl lg:text-5xl",
323
+ }} subheading={{
324
+ text: "Describe the change you need. The agent reads, plans, edits, and verifies — across every affected file, in one run.",
325
+ className: "mt-3 max-w-2xl text-left font-inter text-sm leading-6 text-[var(--subheading-fg)] sm:text-base",
326
+ }} cta1={{
327
+ label: "Start for free",
328
+ href: "#features",
86
329
  variant: "default",
87
- className: "[--btn-bg:var(--primary)] [--btn-fg:var(--primary-foreground)] " +
88
- "hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_88%,black)] " +
89
- "hover:[--btn-hover-fg:var(--primary-foreground)]",
90
- }} secondaryButtonStyle={{
91
330
  size: "lg",
331
+ className:
332
+ // "ml-4 px-7 py-3 text-sm font-semibold shadow-lg shadow-black/10 dark:shadow-black/30 " +
333
+ // "!bg-[var(--hero-cta-primary-bg)] !text-[var(--hero-cta-primary-fg)] " +
334
+ // "hover:!bg-[var(--hero-cta-primary-hover-bg)] hover:!text-[var(--hero-cta-primary-hover-fg)] " +
335
+ // "active:!bg-[var(--hero-cta-primary-bg)] active:!text-[var(--hero-cta-primary-fg)] " +
336
+ // "visited:!bg-[var(--hero-cta-primary-bg)] visited:!text-[var(--hero-cta-primary-fg)] " +
337
+ // "dark:!bg-[var(--hero-cta-primary-bg)] dark:!text-[var(--hero-cta-primary-fg)] " +
338
+ // "dark:hover:!bg-[var(--hero-cta-secondary-hover-bg)] dark:hover:!text-[var(--hero-cta-primary-hover-fg)] " +
339
+ // "dark:active:!bg-[var(--hero-cta-primary-bg)] dark:active:!text-[var(--hero-cta-primary-fg)] " +
340
+ // "dark:visited:!bg-[var(--hero-cta-primary-bg)] dark:visited:!text-[var(--hero-cta-primary-fg)]",
341
+ "ml-4 border border-transparent px-7 py-3 text-sm font-semibold shadow-lg shadow-black/10 dark:shadow-black/30 " +
342
+ "!bg-[var(--hero-cta-primary-bg)] !text-[var(--hero-cta-primary-fg)] " +
343
+ "hover:!bg-[var(--hero-cta-primary-hover-bg)] hover:!text-[var(--hero-cta-primary-hover-fg)] " +
344
+ "active:!bg-[var(--hero-cta-primary-bg)] active:!text-[var(--hero-cta-primary-fg)] " +
345
+ "visited:!bg-[var(--hero-cta-primary-bg)] visited:!text-[var(--hero-cta-primary-fg)] " +
346
+ "dark:!bg-[var(--hero-cta-primary-bg)] dark:!text-[var(--hero-cta-primary-fg)] " +
347
+ "dark:hover:!bg-[var(--hero-cta-secondary-hover-bg)] dark:hover:!text-[var(--hero-cta-primary-hover-fg)] " +
348
+ "dark:hover:!border-white " +
349
+ "dark:active:!bg-[var(--hero-cta-primary-bg)] dark:active:!text-[var(--hero-cta-primary-fg)] " +
350
+ "dark:visited:!bg-[var(--hero-cta-primary-bg)] dark:visited:!text-[var(--hero-cta-primary-fg)]",
351
+ }} cta2={{
352
+ label: "See it in action",
353
+ href: "#trust",
92
354
  variant: "outline",
93
- className: "border [&:where(button)]:border " +
94
- "[--btn-bg:transparent] dark:[--btn-bg:transparent] " +
95
- "[--btn-fg:var(--primary)] dark:[--btn-fg:var(--primary)] " +
96
- "[--btn-border:var(--primary)] dark:[--btn-border:var(--primary)] " +
97
- "hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_15%,transparent)] " +
98
- "dark:hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_18%,transparent)] " +
99
- "hover:[--btn-hover-fg:var(--primary)] dark:hover:[--btn-hover-fg:var(--primary)]",
100
- }} primaryCta={{ label: "Get Started", href: "#hero-sections" }} secondaryCta={{ label: "See Demo", href: "#hero-sections" }}/>
101
- <HeroOverlay heading="Forecast The Next Move" subheading="Predict demand, personalize journeys, and scale impact with AI-guided insights your team can use today." cta1={{
355
+ size: "lg",
356
+ className: "border px-7 py-3 text-sm font-semibold shadow-sm dark:shadow-black/20 " +
357
+ "[--btn-bg:var(--hero-cta-secondary-bg)] " +
358
+ "[--btn-fg:var(--hero-cta-secondary-fg)] " +
359
+ "[--btn-border:var(--hero-cta-secondary-border)] " +
360
+ "hover:[--btn-hover-bg:var(--hero-cta-secondary-hover-bg)] " +
361
+ "hover:[--btn-hover-fg:var(--hero-cta-secondary-hover-fg)]",
362
+ }} stage={{
363
+ scenarios: heroProductDemoScenarios,
364
+ initialScenarioIndex: 0,
365
+ className: "mt-0",
366
+ }} section={{
367
+ className: "px-6 pt-10 pb-6 sm:px-8 lg:px-10 lg:pt-12 lg:pb-8",
368
+ }} container={{
369
+ className: "relative z-10 max-w-7xl gap-8",
370
+ }} textContainer={{
371
+ className: "max-w-3xl pt-6 lg:pl-4 lg:pt-8",
372
+ }} demoContainer={{
373
+ className: "relative mt-2 min-h-[34rem] w-full max-w-full overflow-hidden rounded-[0.5rem] border border-border/0 bg-background/90 p-3 shadow-[0_24px_80px_-44px_rgba(15,23,42,0.24)] backdrop-blur-sm lg:h-[clamp(34rem,calc(100svh-8rem),46rem)] lg:min-h-0 lg:px-4",
374
+ // "relative mt-2 min-h-[34rem] w-full max-w-full overflow-hidden rounded-[2rem] border border-border/70 bg-background/90 p-3 shadow-[0_24px_80px_-44px_rgba(15,23,42,0.24)] backdrop-blur-sm lg:h-[clamp(34rem,calc(100svh-8rem),46rem)] lg:min-h-0 lg:px-4",
375
+ }} buttonsContainer={{
376
+ className: "mt-6 flex flex-col items-start gap-3 sm:flex-row sm:items-center [--btn-ring:var(--ring)]",
377
+ }} demoBelowText ariaLabel="Gallery product demo hero section"/>
378
+ </div>
379
+ </div>
380
+
381
+ <div className="relative pt-4 sm:pt-5 mb-10">
382
+ <HeroOverlay heading="Forecast The Next Move" subheading="Predict demand, personalize journeys, and scale impact with AI-guided insights your team can use today." cta1={{
102
383
  label: "Try It Free",
103
384
  href: "#hero-sections",
104
385
  className: "[--btn-bg:var(--primary)] [--btn-fg:var(--primary-foreground)] " +
@@ -121,7 +402,31 @@ export function Gallery() {
121
402
  }} image={{
122
403
  src: "/placeholders/gallery/hero-pexels-broken-9945014.avif",
123
404
  }}/>
124
- <HeroSplit heading="Confident Decisions, On Demand" subheading="Reliable data when you need it." cta1={{
405
+ </div>
406
+ <div className="relative pt-3 sm:pt-4 mb-10">
407
+ <HeroMotion actions={{
408
+ className: "mt-8 flex items-center justify-center gap-3 [--btn-ring:var(--ring)]",
409
+ }} primaryButtonStyle={{
410
+ size: "lg",
411
+ variant: "default",
412
+ className: "[--btn-bg:var(--primary)] [--btn-fg:var(--primary-foreground)] " +
413
+ "hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_88%,black)] " +
414
+ "hover:[--btn-hover-fg:var(--primary-foreground)]",
415
+ }} secondaryButtonStyle={{
416
+ size: "lg",
417
+ variant: "outline",
418
+ className: "border [&:where(button)]:border " +
419
+ "[--btn-bg:transparent] dark:[--btn-bg:transparent] " +
420
+ "[--btn-fg:var(--primary)] dark:[--btn-fg:var(--primary)] " +
421
+ "[--btn-border:var(--primary)] dark:[--btn-border:var(--primary)] " +
422
+ "hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_15%,transparent)] " +
423
+ "dark:hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_18%,transparent)] " +
424
+ "hover:[--btn-hover-fg:var(--primary)] dark:hover:[--btn-hover-fg:var(--primary)]",
425
+ }} primaryCta={{ label: "Get Started", href: "#hero-sections" }} secondaryCta={{ label: "See Demo", href: "#hero-sections" }}/>
426
+ </div>
427
+
428
+ <div className="relative pt-4 sm:pt-5">
429
+ <HeroSplit section={{ className: "bg-muted" }} heading="Confident Decisions, On Demand" subheading="Reliable data when you need it." cta1={{
125
430
  label: "Start Free Trial",
126
431
  href: "#hero-sections",
127
432
  className: "[--btn-bg:var(--primary)] [--btn-fg:var(--primary-foreground)] " +
@@ -142,38 +447,67 @@ export function Gallery() {
142
447
  }} image={{
143
448
  src: "/placeholders/gallery/hero-pexels-broken-9945014.avif",
144
449
  }} imageLayout="full-bleed"/>
450
+ </div>
145
451
  {/* */}
146
452
  </div>
453
+
147
454
  {/* Trust & Social Proof */}
148
455
  <div id="trust" className="scroll-mt-16">
149
- <TrustBadges />
456
+ <div className="relative pt-0">
457
+ <TrustBadges section={{
458
+ className: "py-8 px-6 bg-[color-mix(in_oklab,var(--muted)_94%,black)] dark:bg-[color-mix(in_oklab,var(--muted)_90%,white)]",
459
+ }}/>
460
+ </div>
150
461
  </div>
462
+
151
463
  {/* Features & Services */}
152
464
  <div id="features" className="scroll-mt-16">
153
- <Features featuresData={defaultFeaturesData}></Features>
154
- <ServicesGrid />
465
+ <div className="relative pt-3 sm:pt-4">
466
+ <Features featuresData={defaultFeaturesData}></Features>
467
+ </div>
468
+ <div className="relative pt-4 sm:pt-5 mb-0">
469
+ <ServicesGrid />
470
+ </div>
155
471
  </div>
472
+
156
473
  {/* About & Process */}
157
474
  <div id="about-process" className="scroll-mt-16">
158
- <About animateStats={false}/>
159
- <ProcessTimeline />
475
+ <div className="relative pt-0">
476
+ <About animateStats={false}/>
477
+ </div>
478
+ <div className="relative pt-0 mb-0">
479
+ <ProcessTimeline />
480
+ </div>
160
481
  </div>
482
+
161
483
  {/* Portfolio & Team */}
162
484
  <div id="portfolio-team" className="scroll-mt-16">
163
- <PortfolioSimple />
164
- <Team />
485
+ <div className="relative pt-3 sm:pt-4">
486
+ <PortfolioSimple />
487
+ </div>
488
+ <div className="relative pt-4 sm:pt-5 mb-0">
489
+ <Team />
490
+ </div>
165
491
  </div>
492
+
166
493
  {/* Testimonials */}
167
494
  <div id="testimonials" className="scroll-mt-16">
168
- <Testimonials />
495
+ <div className="relative pt-0 mb-0">
496
+ <Testimonials />
497
+ </div>
169
498
  </div>
499
+
170
500
  {/* Pricing */}
171
501
  <div id="pricing" className="scroll-mt-16">
172
- <Pricing />
502
+ <div className="relative pt-3 sm:pt-4 mb-0">
503
+ <Pricing />
504
+ </div>
173
505
  </div>
506
+
174
507
  {/* FAQ */}
175
508
  <div id="faq" className="scroll-mt-16">
176
- <FAQ questionButton={{
509
+ <div className="relative pt-4 sm:pt-5 mb-0">
510
+ <FAQ questionButton={{
177
511
  className:
178
512
  // Distinct, theme-driven gradient tile + brand ring/border
179
513
  "bg-gradient-to-r " +
@@ -189,10 +523,13 @@ export function Gallery() {
189
523
  className: "bg-gradient-to-r " +
190
524
  "from-[var(--secondary)] to-[color-mix(in_oklab,var(--secondary)_90%,white)] ",
191
525
  }}/>
526
+ </div>
192
527
  </div>
528
+
193
529
  {/* Call to Action */}
194
530
  <div id="cta" className="scroll-mt-16">
195
- <CTA ctaButton={{ label: "Sign Up Now", href: "#contact" }} actionsWrapper={{
531
+ <div className="relative pt-3 sm:pt-4 mb-0">
532
+ <CTA ctaButton={{ label: "Sign Up Now", href: "#contact" }} actionsWrapper={{
196
533
  className: "mt-6 flex flex-col items-center gap-3 sm:flex-row [--btn-ring:var(--ring)]",
197
534
  }} ctaButtonStyle={{
198
535
  variant: "default",
@@ -202,10 +539,13 @@ export function Gallery() {
202
539
  "hover:[--btn-hover-bg:color-mix(in_oklab,var(--primary)_88%,black)] " +
203
540
  "hover:[--btn-hover-fg:var(--primary-foreground)]",
204
541
  }}/>
542
+ </div>
205
543
  </div>
544
+
206
545
  {/* Contact */}
207
546
  <div id="contact" className="scroll-mt-16">
208
- <Contact submitButtonStyle={{
547
+ <div className="relative pt-4 sm:pt-5 mb-0">
548
+ <Contact submitButtonStyle={{
209
549
  variant: "default",
210
550
  size: "lg",
211
551
  className: "w-full shadow-lg hover:shadow-xl transition-all duration-200 hover:-translate-y-0.5 " +
@@ -217,16 +557,23 @@ export function Gallery() {
217
557
  "text-[var(--primary-foreground)] " +
218
558
  "[--btn-ring:var(--ring)] [--btn-border:var(--primary)] border [&:where(button)]:border",
219
559
  }}/>
560
+ </div>
220
561
  </div>
562
+
221
563
  {/* Newsletter */}
222
564
  <div id="newsletter" className="scroll-mt-16">
223
- <Newsletter button={{
565
+ <div className="relative pt-3 sm:pt-4 mb-0">
566
+ <Newsletter button={{
224
567
  className: "!bg-[var(--primary)] hover:!bg-[color-mix(in_oklab,var(--primary)_90%,transparent)] !text-[var(--primary-foreground)] hover:!text-[var(--primary-background)]",
225
568
  }}/>
569
+ </div>
226
570
  </div>
571
+
227
572
  {/* Footer */}
228
573
  <div id="footer">
229
- <Footer />
574
+ <div className="relative pt-3 sm:pt-4 mb-0">
575
+ <Footer />
576
+ </div>
230
577
  </div>
231
578
  </div>
232
579
  </PresetThemeVars>);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextworks/blocks-templates",
3
- "version": "0.2.0-alpha.13",
3
+ "version": "0.2.0-alpha.15",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -16,8 +16,8 @@
16
16
  "build": "npx tsc -p tsconfig.json"
17
17
  },
18
18
  "dependencies": {
19
- "@nextworks/blocks-core": "0.2.0-alpha.13",
20
- "@nextworks/blocks-sections": "0.2.0-alpha.13",
19
+ "@nextworks/blocks-core": "0.2.0-alpha.15",
20
+ "@nextworks/blocks-sections": "0.2.0-alpha.15",
21
21
  "lucide-react": "^0.542.0"
22
22
  },
23
23
  "devDependencies": {