@vadimcomanescu/nadicode-design-system 4.0.4 → 4.0.5

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 (63) hide show
  1. package/.agents/skills/seed/SKILL.md +24 -3
  2. package/dist/catalog/catalog.d.ts +168 -0
  3. package/dist/catalog/catalog.js +172 -0
  4. package/dist/catalog/components.d.ts +24 -0
  5. package/dist/catalog/components.js +61 -35
  6. package/dist/{chunk-RMGDDOCD.js → chunk-3ZPNIY2Z.js} +2 -2
  7. package/dist/chunk-4KZLCCIR.js +88 -0
  8. package/dist/{chunk-AWZFQQGN.js → chunk-6NCLYJAI.js} +2 -2
  9. package/dist/{chunk-K4U67BVG.js → chunk-7ALMTY6W.js} +1 -1
  10. package/dist/chunk-CZ7NGW7N.js +60 -0
  11. package/dist/chunk-FRGZSR2P.js +86 -0
  12. package/dist/{chunk-LGW7FVG5.js → chunk-HMFIUUYC.js} +1 -1
  13. package/dist/chunk-IC3BMFHV.js +86 -0
  14. package/dist/chunk-JVIRZNQ6.js +37 -0
  15. package/dist/chunk-K5AFXZDL.js +30 -0
  16. package/dist/{chunk-LK2L3C7D.js → chunk-LCMAB2BX.js} +3 -3
  17. package/dist/chunk-LIJYUSSE.js +152 -0
  18. package/dist/chunk-MB6TIORE.js +103 -0
  19. package/dist/chunk-PV62D7H6.js +75 -0
  20. package/dist/chunk-QVAV4MA2.js +60 -0
  21. package/dist/chunk-RPVG37RB.js +24 -0
  22. package/dist/{chunk-QW5II6YK.js → chunk-TEWCCMRH.js} +2 -2
  23. package/dist/chunk-W74WK3HB.js +184 -0
  24. package/dist/chunk-WVKJNHQM.js +120 -0
  25. package/dist/chunk-XAAJBX6R.js +100 -0
  26. package/dist/components/blocks/ApiKeysBlock.d.ts +18 -0
  27. package/dist/components/blocks/ApiKeysBlock.js +128 -0
  28. package/dist/components/blocks/BenchmarksBlock.d.ts +20 -0
  29. package/dist/components/blocks/BenchmarksBlock.js +11 -0
  30. package/dist/components/blocks/CheckEmailBlock.d.ts +9 -0
  31. package/dist/components/blocks/CheckEmailBlock.js +13 -0
  32. package/dist/components/blocks/CommandPaletteBlock.d.ts +9 -0
  33. package/dist/components/blocks/CommandPaletteBlock.js +125 -0
  34. package/dist/components/blocks/EmailVerifiedBlock.d.ts +10 -0
  35. package/dist/components/blocks/EmailVerifiedBlock.js +10 -0
  36. package/dist/components/blocks/ForgotPasswordBlock.d.ts +14 -0
  37. package/dist/components/blocks/ForgotPasswordBlock.js +15 -0
  38. package/dist/components/blocks/IntegrationsBlock.js +3 -3
  39. package/dist/components/blocks/MagicLinkBlock.d.ts +12 -0
  40. package/dist/components/blocks/MagicLinkBlock.js +18 -0
  41. package/dist/components/blocks/OTPBlock.d.ts +10 -0
  42. package/dist/components/blocks/OTPBlock.js +121 -0
  43. package/dist/components/blocks/PasswordChangedBlock.d.ts +10 -0
  44. package/dist/components/blocks/PasswordChangedBlock.js +10 -0
  45. package/dist/components/blocks/PricingTableBlock.d.ts +19 -0
  46. package/dist/components/blocks/PricingTableBlock.js +12 -0
  47. package/dist/components/blocks/SavingsCalculatorBlock.d.ts +30 -0
  48. package/dist/components/blocks/SavingsCalculatorBlock.js +22 -0
  49. package/dist/components/blocks/WorkspaceSwitcherBlock.d.ts +11 -0
  50. package/dist/components/blocks/WorkspaceSwitcherBlock.js +129 -0
  51. package/dist/components/logos/index.js +2 -2
  52. package/dist/components/page-kits/BlogContentPageKit.js +4 -4
  53. package/dist/components/page-kits/CheckoutPageKit.js +3 -3
  54. package/dist/components/page-kits/CompanySuitePageKit.js +4 -4
  55. package/dist/components/page-kits/LandingPageKit.js +5 -5
  56. package/dist/components/page-kits/MarketingShellPageKit.js +2 -2
  57. package/dist/components/page-kits/PricingPageKit.js +4 -4
  58. package/dist/components/page-kits/ServiceSuitePageKit.js +3 -3
  59. package/dist/components/ui/SearchCommand.js +4 -152
  60. package/dist/hooks/useHotkey.js +1 -37
  61. package/package.json +1 -1
  62. package/dist/{chunk-BSCC7OQK.js → chunk-4TUJJ3UI.js} +2 -2
  63. package/dist/{chunk-Z233ZQZE.js → chunk-E4L6LR6P.js} +1 -1
@@ -44,11 +44,30 @@ const { LoginBlock, DashboardPageKit } = seedComponents
44
44
 
45
45
  **UI primitives** (Button, Heading, Input, etc.), icons, charts, and effects are imported via individual subpath exports. They are not registered in the catalog.
46
46
 
47
+ ## Catalog-First Rule (MANDATORY)
48
+
49
+ **Before creating any block-level or page-level component, you MUST query `seedComponentDefinitions` for an existing match.** This is non-negotiable.
50
+
51
+ ### The workflow
52
+
53
+ 1. **Check the catalog.** Read `seedComponentDefinitions` keys, descriptions, and props. If a catalog block or page-kit covers >= 70% of the required functionality, USE IT. Pass props, compose with primitives around it, or request missing props upstream.
54
+ 2. **If the catalog block doesn't fit**, document WHY in a code comment at the top of your new component: `// Catalog: <BlockName> exists but doesn't fit because <reason>`. This makes the gap visible for future DS improvement.
55
+ 3. **If no catalog match exists**, build from primitives, but flag the gap: open an issue on the DS repo or leave a `// TODO(catalog-gap): this should be a catalog block` comment.
56
+ 4. **Never silently reimplement** a catalog block. The catalog ships 60+ blocks and 20+ page-kits. Reimplementing from primitives what the catalog already offers is wasted work and creates drift.
57
+
58
+ ### What counts as "block-level"
59
+
60
+ Any component that composes 3+ Seed primitives into a reusable unit (a form section, a settings card, a data display, a modal with form fields). If you're importing Button + Card + Input + Dialog into one component, you're building a block. Check the catalog first.
61
+
62
+ ### Why this matters
63
+
64
+ The catalog is machine-readable, tested, accessible, and themed. Hand-built blocks skip all of that. Every reimplemented block is a maintenance burden that drifts from the DS over time.
65
+
47
66
  ## Read Order
48
67
 
49
68
  1. **This file** -- router, quick references, forbidden patterns, binary rules
50
- 2. **catalog** (`@vadimcomanescu/nadicode-design-system/catalog`) -- machine-readable component metadata (variants, props, tiers)
51
- 3. **`references/`** -- deep dives as needed
69
+ 2. **catalog** (`@vadimcomanescu/nadicode-design-system/catalog`) -- machine-readable component metadata; ALWAYS check before building
70
+ 3. **`references/`** -- deep dives for custom composition (only after confirming catalog doesn't cover your need)
52
71
 
53
72
  ---
54
73
 
@@ -79,6 +98,8 @@ const { LoginBlock, DashboardPageKit } = seedComponents
79
98
  | Hex/rgb in chart config | `var(--color-chart-N)` tokens | Chart colors are tokenized |
80
99
  | Generic English defaults | Override ALL default copy per brand | No shipping placeholder text |
81
100
  | Hardcoded hex in components | Map to semantic tokens | Brand colors via tokens only |
101
+ | Building a block from 3+ primitives without checking catalog | Query `seedComponentDefinitions` first, use catalog block | Catalog-First Rule |
102
+ | Reimplementing a catalog block locally | `const { BlockName } = seedComponents` | Prevents drift and wasted work |
82
103
 
83
104
  ---
84
105
 
@@ -290,7 +311,7 @@ Every page = **Shell > Sections > Components**.
290
311
  - 2-8 sections (vertical bands, no nesting)
291
312
  - 1-6 components per section via CSS grid/flex
292
313
 
293
- Page-kits in the catalog ARE the ready-made compositions. Use `seedComponents.<Name>PageKit` from `@vadimcomanescu/nadicode-design-system/catalog/components` rather than assembling pages by hand.
314
+ **Page-kits are the default.** Before assembling a page from sections and primitives, check if a `*PageKit` exists in the catalog (ProfileSettingsPageKit, DashboardPageKit, AnalyticsPageKit, etc.). Page-kits are pre-composed, tested, accessible, and themed. Only build a page by hand if no page-kit covers your layout. See the Catalog-First Rule above.
294
315
 
295
316
  ### Shell Selection
296
317
 
@@ -39,6 +39,22 @@ export declare const seedComponentDefinitions: {
39
39
  events: string[];
40
40
  description: string;
41
41
  };
42
+ ApiKeysBlock: {
43
+ props: z.ZodObject<{
44
+ keys: z.ZodNullable<z.ZodArray<z.ZodObject<{
45
+ id: z.ZodString;
46
+ name: z.ZodString;
47
+ prefix: z.ZodString;
48
+ createdAt: z.ZodString;
49
+ lastUsedAt: z.ZodNullable<z.ZodString>;
50
+ revokedAt: z.ZodNullable<z.ZodString>;
51
+ }, z.core.$strip>>>;
52
+ title: z.ZodNullable<z.ZodString>;
53
+ description: z.ZodNullable<z.ZodString>;
54
+ }, z.core.$strip>;
55
+ events: string[];
56
+ description: string;
57
+ };
42
58
  ActivityFeedBlock: {
43
59
  props: z.ZodObject<{
44
60
  title: z.ZodNullable<z.ZodString>;
@@ -224,6 +240,24 @@ export declare const seedComponentDefinitions: {
224
240
  events: string[];
225
241
  description: string;
226
242
  };
243
+ BenchmarksBlock: {
244
+ props: z.ZodObject<{
245
+ badgeLabel: z.ZodNullable<z.ZodString>;
246
+ title: z.ZodNullable<z.ZodString>;
247
+ subtitle: z.ZodNullable<z.ZodString>;
248
+ datasets: z.ZodNullable<z.ZodArray<z.ZodObject<{
249
+ name: z.ZodString;
250
+ description: z.ZodString;
251
+ columns: z.ZodArray<z.ZodString>;
252
+ rows: z.ZodArray<z.ZodObject<{
253
+ cells: z.ZodArray<z.ZodString>;
254
+ highlight: z.ZodNullable<z.ZodBoolean>;
255
+ }, z.core.$strip>>;
256
+ }, z.core.$strip>>>;
257
+ staggerMs: z.ZodNullable<z.ZodNumber>;
258
+ }, z.core.$strip>;
259
+ description: string;
260
+ };
227
261
  BannerBlock: {
228
262
  props: z.ZodObject<{
229
263
  variant: z.ZodNullable<z.ZodEnum<{
@@ -297,6 +331,18 @@ export declare const seedComponentDefinitions: {
297
331
  }, z.core.$strip>;
298
332
  description: string;
299
333
  };
334
+ CheckEmailBlock: {
335
+ props: z.ZodObject<{
336
+ email: z.ZodNullable<z.ZodString>;
337
+ type: z.ZodNullable<z.ZodEnum<{
338
+ reset: "reset";
339
+ verification: "verification";
340
+ "magic-link": "magic-link";
341
+ }>>;
342
+ }, z.core.$strip>;
343
+ events: string[];
344
+ description: string;
345
+ };
300
346
  ChartBlock: {
301
347
  props: z.ZodObject<{
302
348
  data: z.ZodNullable<z.ZodArray<z.ZodObject<{
@@ -317,6 +363,18 @@ export declare const seedComponentDefinitions: {
317
363
  props: z.ZodObject<{}, z.core.$strip>;
318
364
  description: string;
319
365
  };
366
+ CommandPaletteBlock: {
367
+ props: z.ZodObject<{
368
+ items: z.ZodNullable<z.ZodArray<z.ZodObject<{
369
+ id: z.ZodString;
370
+ title: z.ZodString;
371
+ group: z.ZodNullable<z.ZodString>;
372
+ }, z.core.$strip>>>;
373
+ placeholder: z.ZodNullable<z.ZodString>;
374
+ }, z.core.$strip>;
375
+ events: string[];
376
+ description: string;
377
+ };
320
378
  ComparisonBlock: {
321
379
  props: z.ZodObject<{
322
380
  title: z.ZodNullable<z.ZodString>;
@@ -387,6 +445,16 @@ export declare const seedComponentDefinitions: {
387
445
  }, z.core.$strip>;
388
446
  description: string;
389
447
  };
448
+ EmailVerifiedBlock: {
449
+ props: z.ZodObject<{
450
+ title: z.ZodNullable<z.ZodString>;
451
+ description: z.ZodNullable<z.ZodString>;
452
+ buttonText: z.ZodNullable<z.ZodString>;
453
+ autoRedirectSeconds: z.ZodNullable<z.ZodNumber>;
454
+ }, z.core.$strip>;
455
+ events: string[];
456
+ description: string;
457
+ };
390
458
  FAQBlock: {
391
459
  props: z.ZodObject<{
392
460
  title: z.ZodNullable<z.ZodString>;
@@ -432,6 +500,19 @@ export declare const seedComponentDefinitions: {
432
500
  }, z.core.$strip>;
433
501
  description: string;
434
502
  };
503
+ ForgotPasswordBlock: {
504
+ props: z.ZodObject<{
505
+ title: z.ZodNullable<z.ZodString>;
506
+ description: z.ZodNullable<z.ZodString>;
507
+ successTitle: z.ZodNullable<z.ZodString>;
508
+ submitLabel: z.ZodNullable<z.ZodString>;
509
+ loadingLabel: z.ZodNullable<z.ZodString>;
510
+ backLabel: z.ZodNullable<z.ZodString>;
511
+ emailPlaceholder: z.ZodNullable<z.ZodString>;
512
+ }, z.core.$strip>;
513
+ events: string[];
514
+ description: string;
515
+ };
435
516
  FooterBlock: {
436
517
  props: z.ZodObject<{
437
518
  brandDescription: z.ZodNullable<z.ZodString>;
@@ -605,6 +686,17 @@ export declare const seedComponentDefinitions: {
605
686
  forgotPasswordHref: string;
606
687
  };
607
688
  };
689
+ MagicLinkBlock: {
690
+ props: z.ZodObject<{
691
+ title: z.ZodNullable<z.ZodString>;
692
+ subtitle: z.ZodNullable<z.ZodString>;
693
+ successTitle: z.ZodNullable<z.ZodString>;
694
+ expiryMinutes: z.ZodNullable<z.ZodNumber>;
695
+ placeholder: z.ZodNullable<z.ZodString>;
696
+ }, z.core.$strip>;
697
+ events: string[];
698
+ description: string;
699
+ };
608
700
  NewsletterBlock: {
609
701
  props: z.ZodObject<{
610
702
  title: z.ZodNullable<z.ZodString>;
@@ -626,6 +718,26 @@ export declare const seedComponentDefinitions: {
626
718
  events: string[];
627
719
  description: string;
628
720
  };
721
+ OTPBlock: {
722
+ props: z.ZodObject<{
723
+ title: z.ZodNullable<z.ZodString>;
724
+ description: z.ZodNullable<z.ZodString>;
725
+ maxLength: z.ZodNullable<z.ZodNumber>;
726
+ buttonText: z.ZodNullable<z.ZodString>;
727
+ }, z.core.$strip>;
728
+ events: string[];
729
+ description: string;
730
+ };
731
+ PasswordChangedBlock: {
732
+ props: z.ZodObject<{
733
+ autoRedirectSeconds: z.ZodNullable<z.ZodNumber>;
734
+ title: z.ZodNullable<z.ZodString>;
735
+ description: z.ZodNullable<z.ZodString>;
736
+ buttonLabel: z.ZodNullable<z.ZodString>;
737
+ }, z.core.$strip>;
738
+ events: string[];
739
+ description: string;
740
+ };
629
741
  PasswordRecoveryBlock: {
630
742
  props: z.ZodObject<{
631
743
  mode: z.ZodNullable<z.ZodEnum<{
@@ -662,6 +774,27 @@ export declare const seedComponentDefinitions: {
662
774
  showBillingToggle: boolean;
663
775
  };
664
776
  };
777
+ PricingTableBlock: {
778
+ props: z.ZodObject<{
779
+ heading: z.ZodNullable<z.ZodString>;
780
+ subheading: z.ZodNullable<z.ZodString>;
781
+ plans: z.ZodNullable<z.ZodArray<z.ZodObject<{
782
+ name: z.ZodString;
783
+ price: z.ZodString;
784
+ period: z.ZodString;
785
+ description: z.ZodString;
786
+ features: z.ZodArray<z.ZodString>;
787
+ highlighted: z.ZodOptional<z.ZodBoolean>;
788
+ badge: z.ZodOptional<z.ZodString>;
789
+ buttonVariant: z.ZodOptional<z.ZodEnum<{
790
+ outline: "outline";
791
+ primary: "primary";
792
+ }>>;
793
+ }, z.core.$strip>>>;
794
+ }, z.core.$strip>;
795
+ events: string[];
796
+ description: string;
797
+ };
665
798
  ProcessFlowBlock: {
666
799
  props: z.ZodObject<{
667
800
  title: z.ZodNullable<z.ZodString>;
@@ -696,6 +829,33 @@ export declare const seedComponentDefinitions: {
696
829
  showSocial: boolean;
697
830
  };
698
831
  };
832
+ SavingsCalculatorBlock: {
833
+ props: z.ZodObject<{
834
+ title: z.ZodNullable<z.ZodString>;
835
+ description: z.ZodNullable<z.ZodString>;
836
+ badgeLabel: z.ZodNullable<z.ZodString>;
837
+ billingTitle: z.ZodNullable<z.ZodString>;
838
+ billingDescription: z.ZodNullable<z.ZodString>;
839
+ billingModels: z.ZodNullable<z.ZodArray<z.ZodObject<{
840
+ model: z.ZodString;
841
+ inputRate: z.ZodString;
842
+ savedPerRead: z.ZodString;
843
+ }, z.core.$strip>>>;
844
+ projectionTitle: z.ZodNullable<z.ZodString>;
845
+ projectionDescription: z.ZodNullable<z.ZodString>;
846
+ projections: z.ZodNullable<z.ZodArray<z.ZodObject<{
847
+ label: z.ZodString;
848
+ amount: z.ZodNumber;
849
+ suffix: z.ZodString;
850
+ detail: z.ZodString;
851
+ }, z.core.$strip>>>;
852
+ summaryItems: z.ZodNullable<z.ZodArray<z.ZodObject<{
853
+ label: z.ZodString;
854
+ value: z.ZodString;
855
+ }, z.core.$strip>>>;
856
+ }, z.core.$strip>;
857
+ description: string;
858
+ };
699
859
  SocialProofBlock: {
700
860
  props: z.ZodObject<{
701
861
  variant: z.ZodNullable<z.ZodEnum<{
@@ -1044,6 +1204,14 @@ export declare const seedComponentDefinitions: {
1044
1204
  events: string[];
1045
1205
  description: string;
1046
1206
  };
1207
+ WorkspaceSwitcherBlock: {
1208
+ props: z.ZodObject<{
1209
+ name: z.ZodNullable<z.ZodString>;
1210
+ plan: z.ZodNullable<z.ZodString>;
1211
+ href: z.ZodNullable<z.ZodString>;
1212
+ }, z.core.$strip>;
1213
+ description: string;
1214
+ };
1047
1215
  AccountLockedPageKit: {
1048
1216
  props: z.ZodObject<{
1049
1217
  reason: z.ZodNullable<z.ZodEnum<{
@@ -58,6 +58,24 @@ var seedComponentDefinitions = {
58
58
  events: ["contactSupport", "backToLogin"],
59
59
  description: "Account locked notification with reason, countdown timer, and support/login actions."
60
60
  },
61
+ ApiKeysBlock: {
62
+ props: z.object({
63
+ keys: z.array(
64
+ z.object({
65
+ id: z.string(),
66
+ name: z.string(),
67
+ prefix: z.string(),
68
+ createdAt: z.string(),
69
+ lastUsedAt: z.string().nullable(),
70
+ revokedAt: z.string().nullable()
71
+ })
72
+ ).nullable(),
73
+ title: z.string().nullable(),
74
+ description: z.string().nullable()
75
+ }),
76
+ events: ["create", "revoke"],
77
+ description: "API key management block with table display, create dialog, copy-once flow, and revoke functionality."
78
+ },
61
79
  ActivityFeedBlock: {
62
80
  props: z.object({
63
81
  title: z.string().nullable(),
@@ -222,6 +240,28 @@ var seedComponentDefinitions = {
222
240
  events: ["composerChange", "composerSend"],
223
241
  description: "Agent workbench with conversation thread, code artifacts, diffs, terminal logs, and composer input."
224
242
  },
243
+ BenchmarksBlock: {
244
+ props: z.object({
245
+ badgeLabel: z.string().nullable(),
246
+ title: z.string().nullable(),
247
+ subtitle: z.string().nullable(),
248
+ datasets: z.array(
249
+ z.object({
250
+ name: z.string(),
251
+ description: z.string(),
252
+ columns: z.array(z.string()),
253
+ rows: z.array(
254
+ z.object({
255
+ cells: z.array(z.string()),
256
+ highlight: z.boolean().nullable()
257
+ })
258
+ )
259
+ })
260
+ ).nullable(),
261
+ staggerMs: z.number().nullable()
262
+ }),
263
+ description: "Benchmark results grid with tabular datasets, badge header, and staggered card animation."
264
+ },
225
265
  BannerBlock: {
226
266
  props: z.object({
227
267
  variant: z.enum(["info", "warning", "accent"]).nullable(),
@@ -269,6 +309,14 @@ var seedComponentDefinitions = {
269
309
  }),
270
310
  description: "Changelog display with versioned entries and categorized changes."
271
311
  },
312
+ CheckEmailBlock: {
313
+ props: z.object({
314
+ email: z.string().nullable(),
315
+ type: z.enum(["verification", "reset", "magic-link"]).nullable()
316
+ }),
317
+ events: ["resend", "backToLogin"],
318
+ description: "Post-submission email check prompt with resend action and step-by-step instructions."
319
+ },
272
320
  ChartBlock: {
273
321
  props: z.object({
274
322
  data: z.array(
@@ -288,6 +336,20 @@ var seedComponentDefinitions = {
288
336
  props: z.object({}),
289
337
  description: "Pre-composed collection of multiple chart types displayed in a dashboard grid."
290
338
  },
339
+ CommandPaletteBlock: {
340
+ props: z.object({
341
+ items: z.array(
342
+ z.object({
343
+ id: z.string(),
344
+ title: z.string(),
345
+ group: z.string().nullable()
346
+ })
347
+ ).nullable(),
348
+ placeholder: z.string().nullable()
349
+ }),
350
+ events: ["select"],
351
+ description: "Keyboard-driven command palette with fuzzy search, hotkey trigger (Cmd+K), and responsive trigger button."
352
+ },
291
353
  ComparisonBlock: {
292
354
  props: z.object({
293
355
  title: z.string().nullable(),
@@ -361,6 +423,16 @@ var seedComponentDefinitions = {
361
423
  }),
362
424
  description: "Navigation directory with sidebar items and project listings."
363
425
  },
426
+ EmailVerifiedBlock: {
427
+ props: z.object({
428
+ title: z.string().nullable(),
429
+ description: z.string().nullable(),
430
+ buttonText: z.string().nullable(),
431
+ autoRedirectSeconds: z.number().nullable()
432
+ }),
433
+ events: ["continue"],
434
+ description: "Email verification success card with check icon, continue button, and optional auto-redirect countdown."
435
+ },
364
436
  FAQBlock: {
365
437
  props: z.object({
366
438
  title: z.string().nullable(),
@@ -404,6 +476,19 @@ var seedComponentDefinitions = {
404
476
  }),
405
477
  description: "Simple feature grid with title and description per feature card."
406
478
  },
479
+ ForgotPasswordBlock: {
480
+ props: z.object({
481
+ title: z.string().nullable(),
482
+ description: z.string().nullable(),
483
+ successTitle: z.string().nullable(),
484
+ submitLabel: z.string().nullable(),
485
+ loadingLabel: z.string().nullable(),
486
+ backLabel: z.string().nullable(),
487
+ emailPlaceholder: z.string().nullable()
488
+ }),
489
+ events: ["submit", "backToLogin"],
490
+ description: "Forgot password form with email input, loading state, and success confirmation."
491
+ },
407
492
  FooterBlock: {
408
493
  props: z.object({
409
494
  brandDescription: z.string().nullable(),
@@ -545,6 +630,17 @@ var seedComponentDefinitions = {
545
630
  description: "Authentication login form with email/password fields and optional social login buttons.",
546
631
  example: { showSocial: true, forgotPasswordHref: "/reset-password" }
547
632
  },
633
+ MagicLinkBlock: {
634
+ props: z.object({
635
+ title: z.string().nullable(),
636
+ subtitle: z.string().nullable(),
637
+ successTitle: z.string().nullable(),
638
+ expiryMinutes: z.number().nullable(),
639
+ placeholder: z.string().nullable()
640
+ }),
641
+ events: ["submit", "backToLogin"],
642
+ description: "Magic link authentication form with email input, loading state, and success confirmation with expiry info."
643
+ },
548
644
  NewsletterBlock: {
549
645
  props: z.object({
550
646
  title: z.string().nullable(),
@@ -568,6 +664,26 @@ var seedComponentDefinitions = {
568
664
  events: ["toggle"],
569
665
  description: "Onboarding checklist with toggleable step completion tracking."
570
666
  },
667
+ OTPBlock: {
668
+ props: z.object({
669
+ title: z.string().nullable(),
670
+ description: z.string().nullable(),
671
+ maxLength: z.number().nullable(),
672
+ buttonText: z.string().nullable()
673
+ }),
674
+ events: ["verify"],
675
+ description: "OTP verification card with configurable code length, title, and verify callback."
676
+ },
677
+ PasswordChangedBlock: {
678
+ props: z.object({
679
+ autoRedirectSeconds: z.number().nullable(),
680
+ title: z.string().nullable(),
681
+ description: z.string().nullable(),
682
+ buttonLabel: z.string().nullable()
683
+ }),
684
+ events: ["continue"],
685
+ description: "Password change success confirmation with optional auto-redirect countdown and continue-to-login action."
686
+ },
571
687
  PasswordRecoveryBlock: {
572
688
  props: z.object({
573
689
  mode: z.enum(["reset", "magic-link"]).nullable(),
@@ -600,6 +716,26 @@ var seedComponentDefinitions = {
600
716
  description: "Pricing table with plan comparison, billing toggle, and feature lists.",
601
717
  example: { title: "Simple, transparent pricing", showBillingToggle: true }
602
718
  },
719
+ PricingTableBlock: {
720
+ props: z.object({
721
+ heading: z.string().nullable(),
722
+ subheading: z.string().nullable(),
723
+ plans: z.array(
724
+ z.object({
725
+ name: z.string(),
726
+ price: z.string(),
727
+ period: z.string(),
728
+ description: z.string(),
729
+ features: z.array(z.string()),
730
+ highlighted: z.boolean().optional(),
731
+ badge: z.string().optional(),
732
+ buttonVariant: z.enum(["primary", "outline"]).optional()
733
+ })
734
+ ).nullable()
735
+ }),
736
+ events: ["selectPlan"],
737
+ description: "Pricing comparison table with tiered plan cards, feature lists, and call-to-action buttons."
738
+ },
603
739
  ProcessFlowBlock: {
604
740
  props: z.object({
605
741
  title: z.string().nullable(),
@@ -633,6 +769,34 @@ var seedComponentDefinitions = {
633
769
  description: "Sign-up form with name, email, and password fields. Optional social login buttons.",
634
770
  example: { title: "Create an Account", showSocial: true }
635
771
  },
772
+ SavingsCalculatorBlock: {
773
+ props: z.object({
774
+ title: z.string().nullable(),
775
+ description: z.string().nullable(),
776
+ badgeLabel: z.string().nullable(),
777
+ billingTitle: z.string().nullable(),
778
+ billingDescription: z.string().nullable(),
779
+ billingModels: z.array(
780
+ z.object({
781
+ model: z.string(),
782
+ inputRate: z.string(),
783
+ savedPerRead: z.string()
784
+ })
785
+ ).nullable(),
786
+ projectionTitle: z.string().nullable(),
787
+ projectionDescription: z.string().nullable(),
788
+ projections: z.array(
789
+ z.object({
790
+ label: z.string(),
791
+ amount: z.number(),
792
+ suffix: z.string(),
793
+ detail: z.string()
794
+ })
795
+ ).nullable(),
796
+ summaryItems: z.array(z.object({ label: z.string(), value: z.string() })).nullable()
797
+ }),
798
+ description: "Savings calculator block with billing table and monthly projection cards featuring animated counting numbers."
799
+ },
636
800
  SocialProofBlock: {
637
801
  props: z.object({
638
802
  variant: z.enum(["logo-cloud", "testimonials"]).nullable(),
@@ -987,6 +1151,14 @@ var seedComponentDefinitions = {
987
1151
  events: ["finish"],
988
1152
  description: "Opinionated multi-step wizard card with Stepper progress indicator and built-in step content slots. Handles account, profile, plan, and launch steps by default. Use for onboarding and setup flows."
989
1153
  },
1154
+ WorkspaceSwitcherBlock: {
1155
+ props: z.object({
1156
+ name: z.string().nullable(),
1157
+ plan: z.string().nullable(),
1158
+ href: z.string().nullable()
1159
+ }),
1160
+ description: "Sidebar workspace switcher button with icon, workspace name, and plan label. Renders inside a SidebarMenu."
1161
+ },
990
1162
  // =========================================================================
991
1163
  // Page Kits (28 entries, alphabetical)
992
1164
  // =========================================================================
@@ -8,25 +8,31 @@
8
8
  * and rendering.
9
9
  */
10
10
  import { AccountLockedBlock } from '../components/blocks/AccountLockedBlock';
11
+ import { ApiKeysBlock } from '../components/blocks/ApiKeysBlock';
11
12
  import { ActivityFeedBlock } from '../components/blocks/ActivityFeedBlock';
12
13
  import { AgentConversationBlock } from '../components/blocks/AgentConversationBlock';
13
14
  import { AgentProfileGridBlock } from '../components/blocks/AgentProfileGridBlock';
14
15
  import { AgentRunOverviewBlock } from '../components/blocks/AgentRunOverviewBlock';
15
16
  import { AgentWorkbenchBlock } from '../components/blocks/AgentWorkbenchBlock';
17
+ import { BenchmarksBlock } from '../components/blocks/BenchmarksBlock';
16
18
  import { BannerBlock } from '../components/blocks/BannerBlock';
17
19
  import { BarChartBlock } from '../components/blocks/BarChartBlock';
18
20
  import { CallToActionBlock } from '../components/blocks/CallToActionBlock';
19
21
  import { ChangelogBlock } from '../components/blocks/ChangelogBlock';
22
+ import { CheckEmailBlock } from '../components/blocks/CheckEmailBlock';
20
23
  import { ChartBlock } from '../components/blocks/ChartBlock';
21
24
  import { ChartCollectionBlock } from '../components/blocks/ChartCollectionBlock';
25
+ import { CommandPaletteBlock } from '../components/blocks/CommandPaletteBlock';
22
26
  import { ComparisonBlock } from '../components/blocks/ComparisonBlock';
23
27
  import { ContactBlock } from '../components/blocks/ContactBlock';
24
28
  import { CreateBlock } from '../components/blocks/CreateBlock';
25
29
  import { DataGridBlock } from '../components/blocks/DataGridBlock';
26
30
  import { DirectoryBlock } from '../components/blocks/DirectoryBlock';
31
+ import { EmailVerifiedBlock } from '../components/blocks/EmailVerifiedBlock';
27
32
  import { FAQBlock } from '../components/blocks/FAQBlock';
28
33
  import { FeatureBlock } from '../components/blocks/FeatureBlock';
29
34
  import { FeatureGridBlock } from '../components/blocks/FeatureGridBlock';
35
+ import { ForgotPasswordBlock } from '../components/blocks/ForgotPasswordBlock';
30
36
  import { FooterBlock } from '../components/blocks/FooterBlock';
31
37
  import { GalleryBlock } from '../components/blocks/GalleryBlock';
32
38
  import { HeaderBlock } from '../components/blocks/HeaderBlock';
@@ -36,13 +42,18 @@ import { HeroSectionBlock } from '../components/blocks/HeroSectionBlock';
36
42
  import { IntegrationsBlock } from '../components/blocks/IntegrationsBlock';
37
43
  import { InteractiveAreaChartBlock } from '../components/blocks/InteractiveAreaChartBlock';
38
44
  import { LoginBlock } from '../components/blocks/LoginBlock';
45
+ import { MagicLinkBlock } from '../components/blocks/MagicLinkBlock';
39
46
  import { NewsletterBlock } from '../components/blocks/NewsletterBlock';
40
47
  import { OnboardingBlock } from '../components/blocks/OnboardingBlock';
48
+ import { OTPBlock } from '../components/blocks/OTPBlock';
49
+ import { PasswordChangedBlock } from '../components/blocks/PasswordChangedBlock';
41
50
  import { PasswordRecoveryBlock } from '../components/blocks/PasswordRecoveryBlock';
42
51
  import { PricingBlock } from '../components/blocks/PricingBlock';
52
+ import { PricingTableBlock } from '../components/blocks/PricingTableBlock';
43
53
  import { ProcessFlowBlock } from '../components/blocks/ProcessFlowBlock';
44
54
  import { ResetPasswordBlock } from '../components/blocks/ResetPasswordBlock';
45
55
  import { SignUpBlock } from '../components/blocks/SignUpBlock';
56
+ import { SavingsCalculatorBlock } from '../components/blocks/SavingsCalculatorBlock';
46
57
  import { SocialProofBlock } from '../components/blocks/SocialProofBlock';
47
58
  import { SolutionShowcaseBlock } from '../components/blocks/SolutionShowcaseBlock';
48
59
  import { StatsBlock } from '../components/blocks/StatsBlock';
@@ -69,6 +80,7 @@ import { NotFoundBlock } from '../components/blocks/NotFoundBlock';
69
80
  import { SettingsLayout } from '../components/blocks/SettingsLayout';
70
81
  import { VoiceAgentCard } from '../components/blocks/VoiceAgentCard';
71
82
  import { WizardBlock } from '../components/blocks/WizardBlock';
83
+ import { WorkspaceSwitcherBlock } from '../components/blocks/WorkspaceSwitcherBlock';
72
84
  import { AccountLockedPageKit } from '../components/page-kits/AccountLockedPageKit';
73
85
  import { AgentsChatPageKit } from '../components/page-kits/AgentsChatPageKit';
74
86
  import { AnalyticsPageKit } from '../components/page-kits/AnalyticsPageKit';
@@ -99,25 +111,31 @@ import { VerifyEmailPageKit } from '../components/page-kits/VerifyEmailPageKit';
99
111
  import { VoiceAgentsPageKit } from '../components/page-kits/VoiceAgentsPageKit';
100
112
  export declare const seedComponents: {
101
113
  readonly AccountLockedBlock: typeof AccountLockedBlock;
114
+ readonly ApiKeysBlock: typeof ApiKeysBlock;
102
115
  readonly ActivityFeedBlock: typeof ActivityFeedBlock;
103
116
  readonly AgentConversationBlock: typeof AgentConversationBlock;
104
117
  readonly AgentProfileGridBlock: typeof AgentProfileGridBlock;
105
118
  readonly AgentRunOverviewBlock: typeof AgentRunOverviewBlock;
106
119
  readonly AgentWorkbenchBlock: typeof AgentWorkbenchBlock;
120
+ readonly BenchmarksBlock: typeof BenchmarksBlock;
107
121
  readonly BannerBlock: typeof BannerBlock;
108
122
  readonly BarChartBlock: typeof BarChartBlock;
109
123
  readonly CallToActionBlock: typeof CallToActionBlock;
110
124
  readonly ChangelogBlock: typeof ChangelogBlock;
125
+ readonly CheckEmailBlock: typeof CheckEmailBlock;
111
126
  readonly ChartBlock: typeof ChartBlock;
112
127
  readonly ChartCollectionBlock: typeof ChartCollectionBlock;
128
+ readonly CommandPaletteBlock: typeof CommandPaletteBlock;
113
129
  readonly ComparisonBlock: typeof ComparisonBlock;
114
130
  readonly ContactBlock: typeof ContactBlock;
115
131
  readonly CreateBlock: typeof CreateBlock;
116
132
  readonly DataGridBlock: typeof DataGridBlock;
117
133
  readonly DirectoryBlock: typeof DirectoryBlock;
134
+ readonly EmailVerifiedBlock: typeof EmailVerifiedBlock;
118
135
  readonly FAQBlock: typeof FAQBlock;
119
136
  readonly FeatureBlock: typeof FeatureBlock;
120
137
  readonly FeatureGridBlock: typeof FeatureGridBlock;
138
+ readonly ForgotPasswordBlock: typeof ForgotPasswordBlock;
121
139
  readonly FooterBlock: typeof FooterBlock;
122
140
  readonly GalleryBlock: typeof GalleryBlock;
123
141
  readonly HeaderBlock: typeof HeaderBlock;
@@ -127,13 +145,18 @@ export declare const seedComponents: {
127
145
  readonly IntegrationsBlock: typeof IntegrationsBlock;
128
146
  readonly InteractiveAreaChartBlock: typeof InteractiveAreaChartBlock;
129
147
  readonly LoginBlock: typeof LoginBlock;
148
+ readonly MagicLinkBlock: typeof MagicLinkBlock;
130
149
  readonly NewsletterBlock: typeof NewsletterBlock;
131
150
  readonly OnboardingBlock: typeof OnboardingBlock;
151
+ readonly OTPBlock: typeof OTPBlock;
152
+ readonly PasswordChangedBlock: typeof PasswordChangedBlock;
132
153
  readonly PasswordRecoveryBlock: typeof PasswordRecoveryBlock;
133
154
  readonly PricingBlock: typeof PricingBlock;
155
+ readonly PricingTableBlock: typeof PricingTableBlock;
134
156
  readonly ProcessFlowBlock: typeof ProcessFlowBlock;
135
157
  readonly ResetPasswordBlock: typeof ResetPasswordBlock;
136
158
  readonly SignUpBlock: typeof SignUpBlock;
159
+ readonly SavingsCalculatorBlock: typeof SavingsCalculatorBlock;
137
160
  readonly SocialProofBlock: typeof SocialProofBlock;
138
161
  readonly SolutionShowcaseBlock: typeof SolutionShowcaseBlock;
139
162
  readonly StatsBlock: typeof StatsBlock;
@@ -172,6 +195,7 @@ export declare const seedComponents: {
172
195
  readonly SettingsLayout: typeof SettingsLayout;
173
196
  readonly VoiceAgentCard: typeof VoiceAgentCard;
174
197
  readonly WizardBlock: typeof WizardBlock;
198
+ readonly WorkspaceSwitcherBlock: typeof WorkspaceSwitcherBlock;
175
199
  readonly AccountLockedPageKit: typeof AccountLockedPageKit;
176
200
  readonly AgentsChatPageKit: typeof AgentsChatPageKit;
177
201
  readonly AnalyticsPageKit: typeof AnalyticsPageKit;