@vadimcomanescu/nadicode-design-system 4.0.4 → 4.0.6

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-2LUDPRRG.js +24 -0
  7. package/dist/{chunk-RMGDDOCD.js → chunk-3ZPNIY2Z.js} +2 -2
  8. package/dist/chunk-4KZLCCIR.js +88 -0
  9. package/dist/{chunk-AWZFQQGN.js → chunk-6NCLYJAI.js} +2 -2
  10. package/dist/{chunk-K4U67BVG.js → chunk-7ALMTY6W.js} +1 -1
  11. package/dist/chunk-CZ7NGW7N.js +60 -0
  12. package/dist/chunk-FRGZSR2P.js +86 -0
  13. package/dist/{chunk-LGW7FVG5.js → chunk-HMFIUUYC.js} +1 -1
  14. package/dist/chunk-IC3BMFHV.js +86 -0
  15. package/dist/chunk-JVIRZNQ6.js +37 -0
  16. package/dist/chunk-K5AFXZDL.js +30 -0
  17. package/dist/{chunk-LK2L3C7D.js → chunk-LCMAB2BX.js} +3 -3
  18. package/dist/chunk-LIJYUSSE.js +152 -0
  19. package/dist/chunk-MB6TIORE.js +103 -0
  20. package/dist/chunk-PV62D7H6.js +75 -0
  21. package/dist/chunk-QVAV4MA2.js +60 -0
  22. package/dist/{chunk-QW5II6YK.js → chunk-TEWCCMRH.js} +2 -2
  23. package/dist/chunk-WVKJNHQM.js +120 -0
  24. package/dist/chunk-YQCDWJBT.js +184 -0
  25. package/dist/chunk-YZWC4EY4.js +101 -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 +13 -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
@@ -1,99 +1,112 @@
1
1
  'use client';
2
+ import { VoiceAgentsPageKit } from '../chunk-32OLQ7FC.js';
3
+ import { ResetPageKit } from '../chunk-LP6ZZYOQ.js';
4
+ import { ServiceSuitePageKit } from '../chunk-7ALMTY6W.js';
5
+ import { SignupPageKit } from '../chunk-BRICSLHJ.js';
2
6
  import { SuccessPageKit } from '../chunk-3U56FXYC.js';
3
7
  import { TeamSettingsPageKit } from '../chunk-DEZXWNYF.js';
4
8
  import { TwoFactorPageKit } from '../chunk-S5OY2B63.js';
5
9
  import { VerifyEmailPageKit } from '../chunk-SWRJWMGG.js';
6
- import { VoiceAgentsPageKit } from '../chunk-32OLQ7FC.js';
10
+ import { LandingPageKit } from '../chunk-LCMAB2BX.js';
11
+ import { LoginPageKit } from '../chunk-Z2WION42.js';
7
12
  import { OnboardingPageKit } from '../chunk-BYEHHZZN.js';
8
- import { PricingPageKit } from '../chunk-RMGDDOCD.js';
13
+ import { PricingPageKit } from '../chunk-3ZPNIY2Z.js';
9
14
  import { ProfileSettingsPageKit } from '../chunk-MGSGCARB.js';
10
- import { RecoveryPageKit } from '../chunk-BRCBJ3S4.js';
11
- import { ResetPageKit } from '../chunk-LP6ZZYOQ.js';
12
- import { ServiceSuitePageKit } from '../chunk-K4U67BVG.js';
13
15
  import { SettingsPageKit } from '../chunk-RKQPU75I.js';
14
- import { SignupPageKit } from '../chunk-BRICSLHJ.js';
16
+ import { RecoveryPageKit } from '../chunk-BRCBJ3S4.js';
17
+ import { BlogContentPageKit } from '../chunk-6NCLYJAI.js';
18
+ import { CheckoutPageKit } from '../chunk-HMFIUUYC.js';
19
+ import { CompanySuitePageKit } from '../chunk-TEWCCMRH.js';
20
+ import { MarketingShellPageKit } from '../chunk-E4L6LR6P.js';
21
+ import { CrudFormPageKit } from '../chunk-KWILREVQ.js';
15
22
  import { DashboardPageKit } from '../chunk-C33GUEDY.js';
16
23
  import { ErrorPageKit } from '../chunk-HPTHS7SX.js';
17
24
  import { KanbanBoardPageKit } from '../chunk-25BOZMXA.js';
18
25
  import { CrudListDetailPageKit } from '../chunk-OJ7OO3QB.js';
19
- import { LandingPageKit } from '../chunk-LK2L3C7D.js';
20
- import { LoginPageKit } from '../chunk-Z2WION42.js';
26
+ import { UsageDonutBlock } from '../chunk-VRGPG2YN.js';
27
+ import { VoiceAgentCard } from '../chunk-HWHJ6IRQ.js';
28
+ import { WizardBlock } from '../chunk-XKKFSFYO.js';
29
+ import { WorkspaceSwitcherBlock } from '../chunk-2LUDPRRG.js';
21
30
  import { InviteUserModal } from '../chunk-YDYDGG5K.js';
22
31
  import { AccountLockedPageKit } from '../chunk-DNJEVMDY.js';
23
32
  import { AgentsChatPageKit } from '../chunk-UR43ANYS.js';
24
33
  import { AnalyticsPageKit } from '../chunk-CUDMDYKE.js';
25
- import { BlogContentPageKit } from '../chunk-AWZFQQGN.js';
26
- import { CheckoutPageKit } from '../chunk-LGW7FVG5.js';
27
- import { CompanySuitePageKit } from '../chunk-QW5II6YK.js';
28
- import { MarketingShellPageKit } from '../chunk-Z233ZQZE.js';
29
- import { CrudFormPageKit } from '../chunk-KWILREVQ.js';
30
34
  import { NavigationShellPageKit } from '../chunk-ZKLB5N3Q.js';
35
+ import { SolutionShowcaseBlock } from '../chunk-RWCL5OPX.js';
36
+ import { StatsBlock } from '../chunk-224KPIOG.js';
37
+ import { StatsMarketingBlock } from '../chunk-QIHA7S3A.js';
31
38
  import { TeamBlock } from '../chunk-VBZQ4DBE.js';
32
39
  import { TestimonialsBlock } from '../chunk-FV2G6SAF.js';
33
40
  import { TimezonePickerBlock } from '../chunk-ZXVDDZZL.js';
34
41
  import '../chunk-PTJPPKDR.js';
35
42
  import { TwoFactorChallengeBlock } from '../chunk-W7FXDRQJ.js';
36
43
  import { TwoFactorSetupBlock } from '../chunk-IXQGKJU4.js';
37
- import { UsageDonutBlock } from '../chunk-VRGPG2YN.js';
38
- import { VoiceAgentCard } from '../chunk-HWHJ6IRQ.js';
39
- import { WizardBlock } from '../chunk-XKKFSFYO.js';
44
+ import { PricingBlock } from '../chunk-VNNAL4A6.js';
45
+ import { PricingTableBlock } from '../chunk-YZWC4EY4.js';
40
46
  import { ProcessFlowBlock } from '../chunk-HZERHGBT.js';
41
47
  import { ResetPasswordBlock } from '../chunk-X6VXWEDO.js';
48
+ import { SavingsCalculatorBlock } from '../chunk-IC3BMFHV.js';
42
49
  import { SettingsLayout } from '../chunk-4MWKE6F5.js';
43
50
  import { SignUpBlock } from '../chunk-7IADIXDV.js';
44
51
  import { SocialProofBlock } from '../chunk-C7WHMSF3.js';
45
- import { SolutionShowcaseBlock } from '../chunk-RWCL5OPX.js';
46
- import { StatsBlock } from '../chunk-224KPIOG.js';
47
- import { StatsMarketingBlock } from '../chunk-QIHA7S3A.js';
48
- import { LogoCloud } from '../chunk-ZFKSVEYW.js';
52
+ import { MagicLinkBlock } from '../chunk-WVKJNHQM.js';
49
53
  import { NavUser } from '../chunk-QJCE7NZF.js';
50
54
  import { NewsletterBlock } from '../chunk-K7NQ6ZAW.js';
55
+ import '../chunk-DARC2ACH.js';
51
56
  import { NotFoundBlock } from '../chunk-XO7TBM47.js';
57
+ import { OTPBlock } from '../chunk-K5AFXZDL.js';
52
58
  import { OnboardingBlock } from '../chunk-KQ7ZC6EM.js';
59
+ import { PasswordChangedBlock } from '../chunk-QVAV4MA2.js';
53
60
  import { PasswordRecoveryBlock } from '../chunk-5PZ4VR2D.js';
54
- import { PricingBlock } from '../chunk-VNNAL4A6.js';
55
- import '../chunk-DARC2ACH.js';
56
- import { GalleryBlock } from '../chunk-FTGFOK6T.js';
57
61
  import { HeroBlock } from '../chunk-GJ557DGH.js';
58
62
  import { HeroSectionBlock } from '../chunk-ALA6OM7K.js';
59
- import '../chunk-QQOWC53X.js';
60
- import { HeaderBlock } from '../chunk-WOYBVPXK.js';
61
- import { IntegrationsBlock } from '../chunk-BSCC7OQK.js';
63
+ import { IntegrationsBlock } from '../chunk-4TUJJ3UI.js';
62
64
  import '../chunk-3ZDYYZDD.js';
65
+ import '../chunk-TSVN5A2F.js';
66
+ import '../chunk-PX2WVDDB.js';
63
67
  import '../chunk-BZYMCJHW.js';
64
68
  import '../chunk-H466RJCI.js';
65
69
  import '../chunk-DT6DGTVW.js';
66
70
  import '../chunk-J5DRK4RF.js';
67
- import '../chunk-TSVN5A2F.js';
68
- import '../chunk-PX2WVDDB.js';
69
71
  import { InteractiveAreaChartBlock } from '../chunk-TPJ6JJ2F.js';
70
72
  import { KanbanDemoBlock } from '../chunk-CVTMWSNS.js';
71
- import { ContactBlock } from '../chunk-U4GYSYGN.js';
72
- import { CreateBlock } from '../chunk-HFBJ6L6O.js';
73
- import { DataGridBlock } from '../chunk-SP7NIZFP.js';
74
- import { DirectoryBlock } from '../chunk-TCQIJ3DO.js';
73
+ import { LogoCloud } from '../chunk-ZFKSVEYW.js';
74
+ import '../chunk-QQOWC53X.js';
75
+ import { EmailVerifiedBlock } from '../chunk-CZ7NGW7N.js';
75
76
  import { FAQBlock } from '../chunk-NEHCPO53.js';
76
77
  import { FeatureBlock } from '../chunk-HJ3A2YNO.js';
77
78
  import { FeatureGridBlock } from '../chunk-Q5IYBNA7.js';
78
79
  import { FooterBlock } from '../chunk-AYWL4IYM.js';
80
+ import { ForgotPasswordBlock } from '../chunk-PV62D7H6.js';
81
+ import { GalleryBlock } from '../chunk-FTGFOK6T.js';
82
+ import { HeaderBlock } from '../chunk-WOYBVPXK.js';
83
+ import { CheckEmailBlock } from '../chunk-4KZLCCIR.js';
84
+ import { CodeBlock } from '../chunk-XTASI4IY.js';
85
+ import { CommandPaletteBlock } from '../chunk-FRGZSR2P.js';
86
+ import '../chunk-JVIRZNQ6.js';
87
+ import { ComparisonBlock } from '../chunk-VZCB4APK.js';
88
+ import { ContactBlock } from '../chunk-U4GYSYGN.js';
89
+ import { CreateBlock } from '../chunk-HFBJ6L6O.js';
90
+ import { DataGridBlock } from '../chunk-SP7NIZFP.js';
91
+ import { DirectoryBlock } from '../chunk-TCQIJ3DO.js';
92
+ import { BannerBlock } from '../chunk-DNJOBML6.js';
79
93
  import { BarChartBlock } from '../chunk-3JJBJ4VR.js';
94
+ import { BenchmarksBlock } from '../chunk-MB6TIORE.js';
80
95
  import { CallToActionBlock } from '../chunk-GJPTPLCQ.js';
81
96
  import { ChangelogBlock } from '../chunk-VEO56RH4.js';
82
97
  import { ChartBlock } from '../chunk-LV4P7WVM.js';
83
98
  import { ChartCollectionBlock } from '../chunk-YMJOUYMT.js';
84
99
  import { HeatmapChartBlock } from '../chunk-VDONTZZX.js';
85
100
  import { ChatLayout } from '../chunk-WSBLCWY7.js';
86
- import { CodeBlock } from '../chunk-XTASI4IY.js';
87
- import { ComparisonBlock } from '../chunk-VZCB4APK.js';
88
101
  import { AgentConversationBlock } from '../chunk-4IGBBIYW.js';
89
102
  import { AgentProfileGridBlock } from '../chunk-7NS3VFD7.js';
90
103
  import { AgentRunOverviewBlock } from '../chunk-KNR3WB5C.js';
91
104
  import { AgentWorkbenchBlock } from '../chunk-SIQNG72C.js';
105
+ import { ApiKeysBlock } from '../chunk-YQCDWJBT.js';
92
106
  import { AudioVisualizerBlock } from '../chunk-AN5TW4AL.js';
93
107
  import { AuthLayout } from '../chunk-N3YFYMNZ.js';
94
108
  import { LoginBlock } from '../chunk-RGE5OQMZ.js';
95
109
  import { AuthSuccessBlock } from '../chunk-LCKLZ4XK.js';
96
- import { BannerBlock } from '../chunk-DNJOBML6.js';
97
110
  import '../chunk-G5EO22OR.js';
98
111
  import '../chunk-OHX2LFAH.js';
99
112
  import '../chunk-SGI25ZJ6.js';
@@ -133,6 +146,7 @@ import '../chunk-HOWTYZL5.js';
133
146
  import '../chunk-ZLSWCV55.js';
134
147
  import '../chunk-OHCQPI3W.js';
135
148
  import '../chunk-GLU236NN.js';
149
+ import '../chunk-LIJYUSSE.js';
136
150
  import '../chunk-UJDEGCCZ.js';
137
151
  import '../chunk-JWQXBRE7.js';
138
152
  import '../chunk-3UJ3HJZ3.js';
@@ -318,25 +332,31 @@ import '../chunk-QYZT24TS.js';
318
332
  // src/catalog/components.tsx
319
333
  var seedComponents = {
320
334
  AccountLockedBlock,
335
+ ApiKeysBlock,
321
336
  ActivityFeedBlock,
322
337
  AgentConversationBlock,
323
338
  AgentProfileGridBlock,
324
339
  AgentRunOverviewBlock,
325
340
  AgentWorkbenchBlock,
341
+ BenchmarksBlock,
326
342
  BannerBlock,
327
343
  BarChartBlock,
328
344
  CallToActionBlock,
329
345
  ChangelogBlock,
346
+ CheckEmailBlock,
330
347
  ChartBlock,
331
348
  ChartCollectionBlock,
349
+ CommandPaletteBlock,
332
350
  ComparisonBlock,
333
351
  ContactBlock,
334
352
  CreateBlock,
335
353
  DataGridBlock,
336
354
  DirectoryBlock,
355
+ EmailVerifiedBlock,
337
356
  FAQBlock,
338
357
  FeatureBlock,
339
358
  FeatureGridBlock,
359
+ ForgotPasswordBlock,
340
360
  FooterBlock,
341
361
  GalleryBlock,
342
362
  HeaderBlock,
@@ -346,13 +366,18 @@ var seedComponents = {
346
366
  IntegrationsBlock,
347
367
  InteractiveAreaChartBlock,
348
368
  LoginBlock,
369
+ MagicLinkBlock,
349
370
  NewsletterBlock,
350
371
  OnboardingBlock,
372
+ OTPBlock,
373
+ PasswordChangedBlock,
351
374
  PasswordRecoveryBlock,
352
375
  PricingBlock,
376
+ PricingTableBlock,
353
377
  ProcessFlowBlock,
354
378
  ResetPasswordBlock,
355
379
  SignUpBlock,
380
+ SavingsCalculatorBlock,
356
381
  SocialProofBlock,
357
382
  SolutionShowcaseBlock,
358
383
  StatsBlock,
@@ -379,6 +404,7 @@ var seedComponents = {
379
404
  SettingsLayout,
380
405
  VoiceAgentCard,
381
406
  WizardBlock,
407
+ WorkspaceSwitcherBlock,
382
408
  AccountLockedPageKit,
383
409
  AgentsChatPageKit,
384
410
  AnalyticsPageKit,
@@ -0,0 +1,24 @@
1
+ import { SidebarMenu, SidebarMenuItem, SidebarMenuButton } from './chunk-J2DCQDXO.js';
2
+ import { LayoutDashboardIcon } from './chunk-O74AEVHW.js';
3
+ import { cn } from './chunk-QYZT24TS.js';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var DEFAULT_NAME = "My Workspace";
7
+ var DEFAULT_PLAN = "Free Plan";
8
+ var DEFAULT_HREF = "/dashboard";
9
+ function WorkspaceSwitcherBlock({
10
+ name = DEFAULT_NAME,
11
+ plan = DEFAULT_PLAN,
12
+ href = DEFAULT_HREF,
13
+ className
14
+ }) {
15
+ return /* @__PURE__ */ jsx(SidebarMenu, { className: cn(className), children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, { size: "lg", asChild: true, children: /* @__PURE__ */ jsxs("a", { href, children: [
16
+ /* @__PURE__ */ jsx("div", { className: "flex aspect-square size-8 items-center justify-center rounded-lg bg-accent text-accent-foreground", children: /* @__PURE__ */ jsx(LayoutDashboardIcon, { size: 16 }) }),
17
+ /* @__PURE__ */ jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [
18
+ /* @__PURE__ */ jsx("span", { className: "truncate font-semibold text-text-primary", children: name }),
19
+ /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-text-tertiary", children: plan })
20
+ ] })
21
+ ] }) }) }) });
22
+ }
23
+
24
+ export { WorkspaceSwitcherBlock };
@@ -1,8 +1,8 @@
1
- import { MarketingShellPageKit } from './chunk-Z233ZQZE.js';
1
+ import { MarketingShellPageKit } from './chunk-E4L6LR6P.js';
2
2
  import { PricingBlock } from './chunk-VNNAL4A6.js';
3
3
  import { FAQBlock } from './chunk-NEHCPO53.js';
4
- import { CallToActionBlock } from './chunk-GJPTPLCQ.js';
5
4
  import { ComparisonBlock } from './chunk-VZCB4APK.js';
5
+ import { CallToActionBlock } from './chunk-GJPTPLCQ.js';
6
6
  import { Typography } from './chunk-N53OMWW2.js';
7
7
  import { Heading } from './chunk-WI547C47.js';
8
8
  import { Card, CardHeader, CardTitle, CardContent } from './chunk-AH6YSYYT.js';
@@ -0,0 +1,88 @@
1
+ import { Spinner } from './chunk-ZLSWCV55.js';
2
+ import { Separator } from './chunk-CUZJIDU7.js';
3
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './chunk-AH6YSYYT.js';
4
+ import { Button } from './chunk-7KIDDF3I.js';
5
+ import { m, fadeInUp } from './chunk-PD2YEH3H.js';
6
+ import { MailIcon } from './chunk-XQ2UDMPO.js';
7
+ import { Badge } from './chunk-S4JAHKOP.js';
8
+ import { cn } from './chunk-QYZT24TS.js';
9
+ import * as React from 'react';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
+
12
+ var titleMap = {
13
+ verification: "Verify your email",
14
+ reset: "Check your email",
15
+ "magic-link": "Check your email"
16
+ };
17
+ var descMap = {
18
+ verification: "We sent a verification link to your email address.",
19
+ reset: "We sent a password reset link to your email address.",
20
+ "magic-link": "We sent a magic link to your email address."
21
+ };
22
+ function CheckEmailBlock({
23
+ className,
24
+ email,
25
+ type = "verification",
26
+ onResend,
27
+ onBackToLogin
28
+ }) {
29
+ const [resendState, setResendState] = React.useState("idle");
30
+ const handleResend = () => {
31
+ setResendState("sending");
32
+ onResend?.();
33
+ setTimeout(() => {
34
+ setResendState("sent");
35
+ setTimeout(() => setResendState("idle"), 3e3);
36
+ }, 1e3);
37
+ };
38
+ return /* @__PURE__ */ jsx(m.div, { ...fadeInUp, className: cn("w-full max-w-md mx-auto", className), children: /* @__PURE__ */ jsxs(Card, { children: [
39
+ /* @__PURE__ */ jsxs(CardHeader, { className: "text-center", children: [
40
+ /* @__PURE__ */ jsx("div", { className: "mx-auto mb-2", children: /* @__PURE__ */ jsx(MailIcon, { size: 48, className: "text-accent" }) }),
41
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-2xl", children: titleMap[type] }),
42
+ /* @__PURE__ */ jsx(CardDescription, { children: descMap[type] })
43
+ ] }),
44
+ /* @__PURE__ */ jsxs(CardContent, { className: "grid gap-4", children: [
45
+ Boolean(email) && /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "font-mono text-xs", children: email }) }),
46
+ /* @__PURE__ */ jsx("ol", { className: "space-y-2 text-sm text-text-secondary list-none", children: [
47
+ "Check your inbox for the email",
48
+ "Click the link in the email",
49
+ "Check your spam folder if you don't see it"
50
+ ].map((step, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2.5", children: [
51
+ /* @__PURE__ */ jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-surface-active text-xs font-medium text-text-tertiary", children: i + 1 }),
52
+ /* @__PURE__ */ jsx("span", { children: step })
53
+ ] }, i)) }),
54
+ /* @__PURE__ */ jsx(Separator, {}),
55
+ /* @__PURE__ */ jsxs("div", { className: "text-center space-y-2", children: [
56
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-text-tertiary", children: [
57
+ "Didn",
58
+ "'",
59
+ "t receive the email?"
60
+ ] }),
61
+ /* @__PURE__ */ jsxs(
62
+ Button,
63
+ {
64
+ variant: "outline",
65
+ size: "sm",
66
+ onClick: handleResend,
67
+ disabled: resendState === "sending",
68
+ children: [
69
+ resendState === "sending" && /* @__PURE__ */ jsx(Spinner, { className: "mr-2" }),
70
+ resendState === "sent" ? "Email resent!" : "Resend email"
71
+ ]
72
+ }
73
+ )
74
+ ] })
75
+ ] }),
76
+ /* @__PURE__ */ jsx(CardFooter, { className: "justify-center", children: /* @__PURE__ */ jsx(
77
+ "button",
78
+ {
79
+ type: "button",
80
+ onClick: onBackToLogin,
81
+ className: "text-sm text-text-tertiary hover:text-text-primary transition-colors",
82
+ children: "Back to login"
83
+ }
84
+ ) })
85
+ ] }) });
86
+ }
87
+
88
+ export { CheckEmailBlock };
@@ -1,7 +1,7 @@
1
- import { MarketingShellPageKit } from './chunk-Z233ZQZE.js';
1
+ import { MarketingShellPageKit } from './chunk-E4L6LR6P.js';
2
2
  import { NewsletterBlock } from './chunk-K7NQ6ZAW.js';
3
- import { ChangelogBlock } from './chunk-VEO56RH4.js';
4
3
  import { CodeBlock } from './chunk-XTASI4IY.js';
4
+ import { ChangelogBlock } from './chunk-VEO56RH4.js';
5
5
  import { Typography } from './chunk-N53OMWW2.js';
6
6
  import { Heading } from './chunk-WI547C47.js';
7
7
  import { Card, CardHeader, CardTitle, CardContent } from './chunk-AH6YSYYT.js';
@@ -1,4 +1,4 @@
1
- import { MarketingShellPageKit } from './chunk-Z233ZQZE.js';
1
+ import { MarketingShellPageKit } from './chunk-E4L6LR6P.js';
2
2
  import { TeamBlock } from './chunk-VBZQ4DBE.js';
3
3
  import { TestimonialsBlock } from './chunk-FV2G6SAF.js';
4
4
  import { ProcessFlowBlock } from './chunk-HZERHGBT.js';
@@ -0,0 +1,60 @@
1
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './chunk-AH6YSYYT.js';
2
+ import { Button } from './chunk-7KIDDF3I.js';
3
+ import { useMotionConfig, m, scaleIn, motionSpring } from './chunk-PD2YEH3H.js';
4
+ import { CheckIcon } from './chunk-CXACRCZ4.js';
5
+ import { cn } from './chunk-QYZT24TS.js';
6
+ import * as React from 'react';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ function EmailVerifiedBlock({
10
+ className,
11
+ title = "Email verified!",
12
+ description = "Your email address has been successfully verified.",
13
+ buttonText = "Continue",
14
+ onContinue,
15
+ autoRedirectSeconds
16
+ }) {
17
+ const motionConfig = useMotionConfig();
18
+ const [countdown, setCountdown] = React.useState(autoRedirectSeconds ?? 0);
19
+ React.useEffect(() => {
20
+ if (!autoRedirectSeconds) return;
21
+ setCountdown(autoRedirectSeconds);
22
+ const interval = setInterval(() => {
23
+ setCountdown((prev) => {
24
+ if (prev <= 1) {
25
+ clearInterval(interval);
26
+ onContinue?.();
27
+ return 0;
28
+ }
29
+ return prev - 1;
30
+ });
31
+ }, 1e3);
32
+ return () => clearInterval(interval);
33
+ }, [autoRedirectSeconds, onContinue]);
34
+ return /* @__PURE__ */ jsx(m.div, { ...scaleIn, className: cn("w-full max-w-sm mx-auto", className), children: /* @__PURE__ */ jsxs(Card, { children: [
35
+ /* @__PURE__ */ jsxs(CardHeader, { className: "text-center", children: [
36
+ /* @__PURE__ */ jsx(
37
+ m.div,
38
+ {
39
+ className: "mx-auto mb-2",
40
+ initial: { scale: 0.8, opacity: 0 },
41
+ animate: { scale: 1, opacity: 1 },
42
+ transition: { ...motionSpring.bouncy, ...motionConfig },
43
+ children: /* @__PURE__ */ jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-success/10 shadow-[0_0_24px_rgb(var(--color-success)/0.2)]", children: /* @__PURE__ */ jsx(CheckIcon, { size: 32, className: "text-success" }) })
44
+ }
45
+ ),
46
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-2xl", children: title }),
47
+ /* @__PURE__ */ jsx(CardDescription, { children: description })
48
+ ] }),
49
+ /* @__PURE__ */ jsxs(CardContent, { className: "grid gap-4", children: [
50
+ autoRedirectSeconds !== void 0 && countdown > 0 && /* @__PURE__ */ jsxs("p", { className: "text-center text-sm text-text-tertiary tabular-nums", children: [
51
+ "Redirecting in ",
52
+ countdown,
53
+ "..."
54
+ ] }),
55
+ /* @__PURE__ */ jsx(Button, { variant: "accent", className: "w-full", onClick: onContinue, children: buttonText })
56
+ ] })
57
+ ] }) });
58
+ }
59
+
60
+ export { EmailVerifiedBlock };
@@ -0,0 +1,86 @@
1
+ import { useHotkey } from './chunk-JVIRZNQ6.js';
2
+ import { SearchCommand } from './chunk-LIJYUSSE.js';
3
+ import { Dialog, DialogContent, DialogTitle } from './chunk-W73JAOHW.js';
4
+ import { Button } from './chunk-7KIDDF3I.js';
5
+ import { SearchIcon } from './chunk-T6BRD7TS.js';
6
+ import { Badge } from './chunk-S4JAHKOP.js';
7
+ import { cn } from './chunk-QYZT24TS.js';
8
+ import { useState, useCallback, useMemo } from 'react';
9
+ import { jsxs, jsx } from 'react/jsx-runtime';
10
+
11
+ var EMPTY_ITEMS = [];
12
+ function CommandPaletteBlock({
13
+ items = EMPTY_ITEMS,
14
+ onSelect,
15
+ placeholder = "Search...",
16
+ className
17
+ }) {
18
+ const [open, setOpen] = useState(false);
19
+ const [query, setQuery] = useState("");
20
+ const toggle = useCallback(() => setOpen((prev) => !prev), []);
21
+ useHotkey("mod+k", toggle);
22
+ const filtered = useMemo(
23
+ () => query ? items.filter(
24
+ (item) => item.title.toLowerCase().includes(query.toLowerCase())
25
+ ) : items,
26
+ [query, items]
27
+ );
28
+ function handleSelect(result) {
29
+ setOpen(false);
30
+ setQuery("");
31
+ onSelect?.(result);
32
+ }
33
+ return /* @__PURE__ */ jsxs("div", { className: cn(className), children: [
34
+ /* @__PURE__ */ jsxs(
35
+ Button,
36
+ {
37
+ variant: "ghost",
38
+ size: "sm",
39
+ className: "hidden gap-2 text-text-tertiary md:flex",
40
+ onClick: toggle,
41
+ children: [
42
+ /* @__PURE__ */ jsx(SearchIcon, { size: 16 }),
43
+ /* @__PURE__ */ jsx("span", { className: "text-sm", children: placeholder }),
44
+ /* @__PURE__ */ jsxs(
45
+ Badge,
46
+ {
47
+ variant: "outline",
48
+ className: "pointer-events-none hidden h-5 select-none items-center gap-1 font-mono md:inline-flex",
49
+ children: [
50
+ /* @__PURE__ */ jsx("span", { className: "text-xs", children: "\u2318" }),
51
+ "K"
52
+ ]
53
+ }
54
+ )
55
+ ]
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsx(
59
+ Button,
60
+ {
61
+ variant: "ghost",
62
+ size: "icon",
63
+ className: "md:hidden",
64
+ onClick: toggle,
65
+ "aria-label": "Search",
66
+ children: /* @__PURE__ */ jsx(SearchIcon, { size: 16 })
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-lg gap-0 p-0", children: [
70
+ /* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: "Search" }),
71
+ /* @__PURE__ */ jsx(
72
+ SearchCommand,
73
+ {
74
+ value: query,
75
+ onChange: setQuery,
76
+ results: filtered,
77
+ onSelect: handleSelect,
78
+ placeholder,
79
+ showShortcut: false
80
+ }
81
+ )
82
+ ] }) })
83
+ ] });
84
+ }
85
+
86
+ export { CommandPaletteBlock };
@@ -1,4 +1,4 @@
1
- import { MarketingShellPageKit } from './chunk-Z233ZQZE.js';
1
+ import { MarketingShellPageKit } from './chunk-E4L6LR6P.js';
2
2
  import { Typography } from './chunk-N53OMWW2.js';
3
3
  import { FieldSet, Field, FieldLabel, FieldDescription } from './chunk-RX5EUODB.js';
4
4
  import { Input } from './chunk-AP3XXYAY.js';
@@ -0,0 +1,86 @@
1
+ import { CountingNumber } from './chunk-F3T2U7YL.js';
2
+ import { StaggerChildren } from './chunk-DQPK2XRL.js';
3
+ import { Heading } from './chunk-WI547C47.js';
4
+ import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-PXDHNGTG.js';
5
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './chunk-AH6YSYYT.js';
6
+ import { Badge } from './chunk-S4JAHKOP.js';
7
+ import { cn } from './chunk-QYZT24TS.js';
8
+ import { jsx, jsxs } from 'react/jsx-runtime';
9
+
10
+ var DEFAULT_BILLING_MODELS = [
11
+ { model: "Claude Opus 4.5/4.6", inputRate: "$5.00", savedPerRead: "$0.009" },
12
+ { model: "Claude Sonnet 4.5/4.6", inputRate: "$3.00", savedPerRead: "$0.0054" },
13
+ { model: "GPT-4o", inputRate: "$2.50", savedPerRead: "$0.0045" }
14
+ ];
15
+ var DEFAULT_PROJECTIONS = [
16
+ { label: "On Sonnet ($3/MTok)", amount: 49, suffix: "/mo", detail: "16.2M tokens/mo saved" },
17
+ { label: "On Opus ($5/MTok)", amount: 81, suffix: "/mo", detail: "16.2M tokens/mo saved" }
18
+ ];
19
+ var DEFAULT_SUMMARY_ITEMS = [
20
+ { label: "Team of 5 on Opus", value: "$400+/mo saved" },
21
+ { label: "Subscription stretch (Sonnet)", value: "1.6x further" }
22
+ ];
23
+ function SavingsCalculatorBlock({
24
+ title = "What this saves you",
25
+ description = "Real numbers from API billing rates and SWE-Bench token data.",
26
+ badgeLabel = "Savings",
27
+ billingTitle = "API billing savings",
28
+ billingDescription = "Per file read, avg 1,800 tokens saved",
29
+ billingModels = DEFAULT_BILLING_MODELS,
30
+ projectionTitle = "Monthly projections",
31
+ projectionDescription = "Active developer, 300 pruned reads/day",
32
+ projections = DEFAULT_PROJECTIONS,
33
+ summaryItems = DEFAULT_SUMMARY_ITEMS,
34
+ className
35
+ }) {
36
+ return /* @__PURE__ */ jsx("section", { className: cn("py-16 md:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto px-6 lg:px-8", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "text-center mb-16 max-w-2xl mx-auto", children: [
38
+ /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "mb-4", children: badgeLabel }),
39
+ /* @__PURE__ */ jsx(Heading, { level: 2, className: "mb-4", children: title }),
40
+ /* @__PURE__ */ jsx("p", { className: "text-text-secondary text-lg", children: description })
41
+ ] }),
42
+ /* @__PURE__ */ jsxs(StaggerChildren, { staggerMs: 120, className: "grid gap-8 lg:grid-cols-2 [grid-auto-rows:1fr]", children: [
43
+ /* @__PURE__ */ jsxs(Card, { className: "h-full", children: [
44
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
45
+ /* @__PURE__ */ jsx(CardTitle, { children: billingTitle }),
46
+ /* @__PURE__ */ jsx(CardDescription, { children: billingDescription })
47
+ ] }),
48
+ /* @__PURE__ */ jsx(CardContent, { className: "flex-1 overflow-x-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
49
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
50
+ /* @__PURE__ */ jsx(TableHead, { children: "Model" }),
51
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: "Input $/MTok" }),
52
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: "Saved/read" })
53
+ ] }) }),
54
+ /* @__PURE__ */ jsx(TableBody, { children: billingModels.map((row) => /* @__PURE__ */ jsxs(TableRow, { children: [
55
+ /* @__PURE__ */ jsx(TableCell, { className: "font-medium", children: row.model }),
56
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: row.inputRate }),
57
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right font-semibold text-chart-4", children: row.savedPerRead })
58
+ ] }, row.model)) })
59
+ ] }) })
60
+ ] }),
61
+ /* @__PURE__ */ jsxs(Card, { className: "h-full", children: [
62
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
63
+ /* @__PURE__ */ jsx(CardTitle, { children: projectionTitle }),
64
+ /* @__PURE__ */ jsx(CardDescription, { children: projectionDescription })
65
+ ] }),
66
+ /* @__PURE__ */ jsxs(CardContent, { className: "flex-1 space-y-8", children: [
67
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-6", children: projections.map((proj) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
68
+ /* @__PURE__ */ jsx("div", { className: "text-sm text-text-tertiary", children: proj.label }),
69
+ /* @__PURE__ */ jsxs("div", { className: "text-3xl font-bold tabular-nums text-text-primary", children: [
70
+ "~$",
71
+ /* @__PURE__ */ jsx(CountingNumber, { number: proj.amount, inViewOnce: true }),
72
+ /* @__PURE__ */ jsx("span", { className: "text-lg text-text-secondary", children: proj.suffix })
73
+ ] }),
74
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-text-tertiary", children: proj.detail })
75
+ ] }, proj.label)) }),
76
+ summaryItems.length > 0 && /* @__PURE__ */ jsx("div", { className: "border-t border-border/50 pt-6 space-y-4", children: summaryItems.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-baseline", children: [
77
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-text-secondary", children: item.label }),
78
+ /* @__PURE__ */ jsx("span", { className: "text-lg font-bold text-chart-4", children: item.value })
79
+ ] }, item.label)) })
80
+ ] })
81
+ ] })
82
+ ] })
83
+ ] }) });
84
+ }
85
+
86
+ export { SavingsCalculatorBlock };
@@ -0,0 +1,37 @@
1
+ import { useRef, useEffect, useMemo } from 'react';
2
+
3
+ // src/hooks/useHotkey.ts
4
+ function parseCombo(combo) {
5
+ const parts = combo.toLowerCase().split("+");
6
+ return {
7
+ key: parts[parts.length - 1],
8
+ mod: parts.includes("mod"),
9
+ shift: parts.includes("shift"),
10
+ alt: parts.includes("alt")
11
+ };
12
+ }
13
+ function useHotkey(combo, callback, options) {
14
+ const callbackRef = useRef(callback);
15
+ const enabled = options?.enabled ?? true;
16
+ useEffect(() => {
17
+ callbackRef.current = callback;
18
+ });
19
+ const parsed = useMemo(() => parseCombo(combo), [combo]);
20
+ useEffect(() => {
21
+ if (!enabled) return;
22
+ function handler(event) {
23
+ const mac = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.userAgent);
24
+ const modPressed = mac ? event.metaKey : event.ctrlKey;
25
+ if (parsed.mod && !modPressed) return;
26
+ if (parsed.shift && !event.shiftKey) return;
27
+ if (parsed.alt && !event.altKey) return;
28
+ if (event.key.toLowerCase() !== parsed.key) return;
29
+ event.preventDefault();
30
+ callbackRef.current(event);
31
+ }
32
+ document.addEventListener("keydown", handler);
33
+ return () => document.removeEventListener("keydown", handler);
34
+ }, [parsed, enabled]);
35
+ }
36
+
37
+ export { useHotkey };