@vadimcomanescu/nadicode-design-system 4.0.3 → 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.
- package/.agents/skills/seed/SKILL.md +24 -3
- package/dist/catalog/catalog.d.ts +186 -0
- package/dist/catalog/catalog.js +194 -0
- package/dist/catalog/components.d.ts +26 -0
- package/dist/catalog/components.js +71 -40
- package/dist/{chunk-RMGDDOCD.js → chunk-3ZPNIY2Z.js} +2 -2
- package/dist/chunk-4KZLCCIR.js +88 -0
- package/dist/{chunk-AWZFQQGN.js → chunk-6NCLYJAI.js} +2 -2
- package/dist/{chunk-K4U67BVG.js → chunk-7ALMTY6W.js} +1 -1
- package/dist/chunk-CZ7NGW7N.js +60 -0
- package/dist/chunk-FRGZSR2P.js +86 -0
- package/dist/{chunk-LGW7FVG5.js → chunk-HMFIUUYC.js} +1 -1
- package/dist/chunk-IC3BMFHV.js +86 -0
- package/dist/chunk-JVIRZNQ6.js +37 -0
- package/dist/chunk-K5AFXZDL.js +30 -0
- package/dist/{chunk-LK2L3C7D.js → chunk-LCMAB2BX.js} +3 -3
- package/dist/chunk-LIJYUSSE.js +152 -0
- package/dist/chunk-MB6TIORE.js +103 -0
- package/dist/chunk-PTJPPKDR.js +115 -0
- package/dist/chunk-PV62D7H6.js +75 -0
- package/dist/chunk-QVAV4MA2.js +60 -0
- package/dist/chunk-RPVG37RB.js +24 -0
- package/dist/{chunk-QW5II6YK.js → chunk-TEWCCMRH.js} +2 -2
- package/dist/chunk-W74WK3HB.js +184 -0
- package/dist/chunk-WVKJNHQM.js +120 -0
- package/dist/chunk-XAAJBX6R.js +100 -0
- package/dist/chunk-ZXVDDZZL.js +96 -0
- package/dist/components/blocks/ApiKeysBlock.d.ts +18 -0
- package/dist/components/blocks/ApiKeysBlock.js +128 -0
- package/dist/components/blocks/BenchmarksBlock.d.ts +20 -0
- package/dist/components/blocks/BenchmarksBlock.js +11 -0
- package/dist/components/blocks/CheckEmailBlock.d.ts +9 -0
- package/dist/components/blocks/CheckEmailBlock.js +13 -0
- package/dist/components/blocks/CommandPaletteBlock.d.ts +9 -0
- package/dist/components/blocks/CommandPaletteBlock.js +125 -0
- package/dist/components/blocks/EmailVerifiedBlock.d.ts +10 -0
- package/dist/components/blocks/EmailVerifiedBlock.js +10 -0
- package/dist/components/blocks/ForgotPasswordBlock.d.ts +14 -0
- package/dist/components/blocks/ForgotPasswordBlock.js +15 -0
- package/dist/components/blocks/IntegrationsBlock.js +4 -4
- package/dist/components/blocks/MagicLinkBlock.d.ts +12 -0
- package/dist/components/blocks/MagicLinkBlock.js +18 -0
- package/dist/components/blocks/OTPBlock.d.ts +10 -0
- package/dist/components/blocks/OTPBlock.js +121 -0
- package/dist/components/blocks/PasswordChangedBlock.d.ts +10 -0
- package/dist/components/blocks/PasswordChangedBlock.js +10 -0
- package/dist/components/blocks/PricingTableBlock.d.ts +19 -0
- package/dist/components/blocks/PricingTableBlock.js +12 -0
- package/dist/components/blocks/SavingsCalculatorBlock.d.ts +30 -0
- package/dist/components/blocks/SavingsCalculatorBlock.js +22 -0
- package/dist/components/blocks/TimezonePickerBlock.d.ts +11 -0
- package/dist/components/blocks/TimezonePickerBlock.js +126 -0
- package/dist/components/blocks/WorkspaceSwitcherBlock.d.ts +11 -0
- package/dist/components/blocks/WorkspaceSwitcherBlock.js +129 -0
- package/dist/components/logos/index.js +3 -3
- package/dist/components/page-kits/BlogContentPageKit.js +4 -4
- package/dist/components/page-kits/CheckoutPageKit.js +3 -3
- package/dist/components/page-kits/CompanySuitePageKit.js +4 -4
- package/dist/components/page-kits/LandingPageKit.js +5 -5
- package/dist/components/page-kits/MarketingShellPageKit.js +2 -2
- package/dist/components/page-kits/PricingPageKit.js +4 -4
- package/dist/components/page-kits/ServiceSuitePageKit.js +3 -3
- package/dist/components/ui/SearchCommand.js +4 -152
- package/dist/hooks/useHotkey.js +1 -37
- package/dist/lib/timezones.d.ts +14 -0
- package/dist/lib/timezones.js +1 -0
- package/package.json +6 -2
- package/dist/{chunk-6HGSU24S.js → chunk-4TUJJ3UI.js} +3 -3
- 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
|
|
51
|
-
3. **`references/`** -- deep dives
|
|
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
|
|
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<{
|
|
@@ -821,6 +981,24 @@ export declare const seedComponentDefinitions: {
|
|
|
821
981
|
events: string[];
|
|
822
982
|
description: string;
|
|
823
983
|
};
|
|
984
|
+
TimezonePickerBlock: {
|
|
985
|
+
props: z.ZodObject<{
|
|
986
|
+
value: z.ZodNullable<z.ZodString>;
|
|
987
|
+
groups: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
988
|
+
region: z.ZodString;
|
|
989
|
+
timezones: z.ZodArray<z.ZodObject<{
|
|
990
|
+
value: z.ZodString;
|
|
991
|
+
label: z.ZodString;
|
|
992
|
+
region: z.ZodString;
|
|
993
|
+
offset: z.ZodString;
|
|
994
|
+
offsetMinutes: z.ZodNumber;
|
|
995
|
+
}, z.core.$strip>>;
|
|
996
|
+
}, z.core.$strip>>>;
|
|
997
|
+
name: z.ZodNullable<z.ZodString>;
|
|
998
|
+
}, z.core.$strip>;
|
|
999
|
+
events: string[];
|
|
1000
|
+
description: string;
|
|
1001
|
+
};
|
|
824
1002
|
UsageDonutBlock: {
|
|
825
1003
|
props: z.ZodObject<{
|
|
826
1004
|
data: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
@@ -1026,6 +1204,14 @@ export declare const seedComponentDefinitions: {
|
|
|
1026
1204
|
events: string[];
|
|
1027
1205
|
description: string;
|
|
1028
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
|
+
};
|
|
1029
1215
|
AccountLockedPageKit: {
|
|
1030
1216
|
props: z.ZodObject<{
|
|
1031
1217
|
reason: z.ZodNullable<z.ZodEnum<{
|
package/dist/catalog/catalog.js
CHANGED
|
@@ -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(),
|
|
@@ -761,6 +925,28 @@ var seedComponentDefinitions = {
|
|
|
761
925
|
events: ["verify", "complete"],
|
|
762
926
|
description: "Two-factor setup wizard with QR code, secret key display, backup codes, and verification."
|
|
763
927
|
},
|
|
928
|
+
TimezonePickerBlock: {
|
|
929
|
+
props: z.object({
|
|
930
|
+
value: z.string().nullable(),
|
|
931
|
+
groups: z.array(
|
|
932
|
+
z.object({
|
|
933
|
+
region: z.string(),
|
|
934
|
+
timezones: z.array(
|
|
935
|
+
z.object({
|
|
936
|
+
value: z.string(),
|
|
937
|
+
label: z.string(),
|
|
938
|
+
region: z.string(),
|
|
939
|
+
offset: z.string(),
|
|
940
|
+
offsetMinutes: z.number()
|
|
941
|
+
})
|
|
942
|
+
)
|
|
943
|
+
})
|
|
944
|
+
).nullable(),
|
|
945
|
+
name: z.string().nullable()
|
|
946
|
+
}),
|
|
947
|
+
events: ["change"],
|
|
948
|
+
description: "Searchable timezone picker with grouped IANA timezones, offset display, and form integration."
|
|
949
|
+
},
|
|
764
950
|
UsageDonutBlock: {
|
|
765
951
|
props: z.object({
|
|
766
952
|
data: z.array(
|
|
@@ -965,6 +1151,14 @@ var seedComponentDefinitions = {
|
|
|
965
1151
|
events: ["finish"],
|
|
966
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."
|
|
967
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
|
+
},
|
|
968
1162
|
// =========================================================================
|
|
969
1163
|
// Page Kits (28 entries, alphabetical)
|
|
970
1164
|
// =========================================================================
|