@vadimcomanescu/nadicode-design-system 2.0.9 → 4.0.1

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 (154) hide show
  1. package/.agents/skills/seed/SKILL.md +24 -14
  2. package/.agents/skills/seed/contract.md +19 -6
  3. package/.agents/skills/seed/recipes/agency-home.md +5 -5
  4. package/.agents/skills/seed/recipes/auth.md +3 -3
  5. package/.agents/skills/seed/recipes/blog-content.md +2 -2
  6. package/.agents/skills/seed/recipes/company-about.md +3 -3
  7. package/.agents/skills/seed/recipes/company-contact.md +3 -3
  8. package/.agents/skills/seed/recipes/digital-workers.md +3 -3
  9. package/.agents/skills/seed/recipes/marketing-landing.md +8 -8
  10. package/.agents/skills/seed/recipes/marketing-shell.md +4 -4
  11. package/.agents/skills/seed/recipes/navigation-shell.md +3 -2
  12. package/.agents/skills/seed/recipes/pricing.md +4 -4
  13. package/.agents/skills/seed/recipes/service-detail.md +3 -3
  14. package/.agents/skills/seed/references/blocks.md +5 -5
  15. package/.agents/skills/seed/references/components.md +2 -2
  16. package/.agents/skills/seed/references/nextjs.md +2 -2
  17. package/README.md +3 -3
  18. package/contracts/consumer-intent-map.json +1 -2
  19. package/contracts/release-governance-baseline.json +3 -37
  20. package/dist/catalog/catalog.d.ts +2220 -0
  21. package/dist/catalog/catalog.js +1913 -0
  22. package/dist/catalog/components.d.ts +201 -0
  23. package/dist/catalog/components.js +407 -0
  24. package/dist/catalog/types.d.ts +4 -0
  25. package/dist/catalog/types.js +1 -0
  26. package/dist/chunk-224KPIOG.js +60 -0
  27. package/dist/chunk-25BOZMXA.js +169 -0
  28. package/dist/chunk-32OLQ7FC.js +130 -0
  29. package/dist/chunk-3JJBJ4VR.js +47 -0
  30. package/dist/chunk-3U56FXYC.js +30 -0
  31. package/dist/chunk-4MWKE6F5.js +86 -0
  32. package/dist/chunk-6HGSU24S.js +94 -0
  33. package/dist/chunk-7IADIXDV.js +168 -0
  34. package/dist/chunk-7NS3VFD7.js +86 -0
  35. package/dist/chunk-ALA6OM7K.js +134 -0
  36. package/dist/chunk-AN5TW4AL.js +50 -0
  37. package/dist/chunk-AWZFQQGN.js +167 -0
  38. package/dist/chunk-BRCBJ3S4.js +42 -0
  39. package/dist/chunk-BRICSLHJ.js +30 -0
  40. package/dist/chunk-BYEHHZZN.js +115 -0
  41. package/dist/chunk-C33GUEDY.js +149 -0
  42. package/dist/chunk-CUDMDYKE.js +150 -0
  43. package/dist/chunk-CVTMWSNS.js +145 -0
  44. package/dist/chunk-DEZXWNYF.js +165 -0
  45. package/dist/chunk-DNJEVMDY.js +40 -0
  46. package/dist/chunk-DNJOBML6.js +66 -0
  47. package/dist/chunk-FTGFOK6T.js +69 -0
  48. package/dist/{chunk-7A2RXKGH.js → chunk-GJ557DGH.js} +1 -1
  49. package/dist/chunk-HFBJ6L6O.js +104 -0
  50. package/dist/chunk-HPTHS7SX.js +52 -0
  51. package/dist/chunk-K4U67BVG.js +175 -0
  52. package/dist/chunk-KNR3WB5C.js +147 -0
  53. package/dist/chunk-KQ7ZC6EM.js +66 -0
  54. package/dist/chunk-LGW7FVG5.js +83 -0
  55. package/dist/chunk-LK2L3C7D.js +72 -0
  56. package/dist/chunk-LP6ZZYOQ.js +36 -0
  57. package/dist/chunk-LV4P7WVM.js +54 -0
  58. package/dist/chunk-MGSGCARB.js +164 -0
  59. package/dist/chunk-N3YFYMNZ.js +73 -0
  60. package/dist/{chunk-DSMGCFMJ.js → chunk-POFFOUQW.js} +2 -5
  61. package/dist/chunk-Q5IYBNA7.js +56 -0
  62. package/dist/chunk-QJCE7NZF.js +85 -0
  63. package/dist/chunk-QW5II6YK.js +96 -0
  64. package/dist/chunk-RMGDDOCD.js +138 -0
  65. package/dist/chunk-RNCX4JIE.js +70 -0
  66. package/dist/chunk-RWCL5OPX.js +112 -0
  67. package/dist/chunk-S5OY2B63.js +28 -0
  68. package/dist/chunk-SIQNG72C.js +257 -0
  69. package/dist/chunk-SP7NIZFP.js +117 -0
  70. package/dist/chunk-SWRJWMGG.js +30 -0
  71. package/dist/chunk-TCQIJ3DO.js +85 -0
  72. package/dist/chunk-TPJ6JJ2F.js +290 -0
  73. package/dist/chunk-UR43ANYS.js +159 -0
  74. package/dist/chunk-VRGPG2YN.js +79 -0
  75. package/dist/chunk-WSBLCWY7.js +126 -0
  76. package/dist/chunk-XKKFSFYO.js +93 -0
  77. package/dist/chunk-XO7TBM47.js +32 -0
  78. package/dist/chunk-YDYDGG5K.js +132 -0
  79. package/dist/chunk-YMJOUYMT.js +171 -0
  80. package/dist/chunk-Z2WION42.js +32 -0
  81. package/dist/chunk-ZFKSVEYW.js +35 -0
  82. package/dist/components/blocks/AgentProfileGridBlock.js +8 -86
  83. package/dist/components/blocks/AgentRunOverviewBlock.js +8 -147
  84. package/dist/components/blocks/AgentWorkbenchBlock.js +15 -257
  85. package/dist/components/blocks/AudioVisualizerBlock.js +2 -50
  86. package/dist/components/blocks/AuthLayout.js +9 -73
  87. package/dist/components/blocks/BannerBlock.js +8 -66
  88. package/dist/components/blocks/BarChartBlock.js +5 -47
  89. package/dist/components/blocks/ChartBlock.js +7 -54
  90. package/dist/components/blocks/ChartCollectionBlock.js +11 -171
  91. package/dist/components/blocks/ChatLayout.js +12 -126
  92. package/dist/components/blocks/CreateBlock.js +9 -104
  93. package/dist/components/blocks/DataGridBlock.js +9 -117
  94. package/dist/components/blocks/DirectoryBlock.js +12 -85
  95. package/dist/components/blocks/FeatureGridBlock.js +6 -56
  96. package/dist/components/blocks/GalleryBlock.js +6 -69
  97. package/dist/components/blocks/HeroBlock.js +2 -2
  98. package/dist/components/blocks/HeroSectionBlock.js +10 -134
  99. package/dist/components/blocks/IntegrationsBlock.js +13 -94
  100. package/dist/components/blocks/InteractiveAreaChartBlock.js +5 -290
  101. package/dist/components/blocks/KanbanDemoBlock.js +8 -145
  102. package/dist/components/blocks/LogoCloud.js +4 -35
  103. package/dist/components/blocks/NavUser.js +5 -85
  104. package/dist/components/blocks/NotFoundBlock.js +8 -32
  105. package/dist/components/blocks/OnboardingBlock.js +7 -66
  106. package/dist/components/blocks/SettingsLayout.js +13 -86
  107. package/dist/components/blocks/SignUpBlock.js +8 -168
  108. package/dist/components/blocks/SolutionShowcaseBlock.js +11 -112
  109. package/dist/components/blocks/StatsBlock.js +6 -60
  110. package/dist/components/blocks/UsageDonutBlock.js +5 -79
  111. package/dist/components/blocks/WizardBlock.js +12 -93
  112. package/dist/components/blocks/user/InviteUserModal.js +10 -132
  113. package/dist/components/page-kits/AccountLockedPageKit.js +3 -40
  114. package/dist/components/page-kits/AgentsChatPageKit.js +11 -159
  115. package/dist/components/page-kits/AnalyticsPageKit.js +12 -150
  116. package/dist/components/page-kits/BlogContentPageKit.js +12 -167
  117. package/dist/components/page-kits/CheckoutPageKit.js +9 -83
  118. package/dist/components/page-kits/CompanySuitePageKit.js +9 -96
  119. package/dist/components/page-kits/DashboardPageKit.js +11 -149
  120. package/dist/components/page-kits/ErrorPageKit.js +5 -52
  121. package/dist/components/page-kits/KanbanBoardPageKit.js +7 -169
  122. package/dist/components/page-kits/LandingPageKit.js +12 -73
  123. package/dist/components/page-kits/LoginPageKit.js +3 -32
  124. package/dist/components/page-kits/OnboardingPageKit.js +6 -115
  125. package/dist/components/page-kits/PricingPageKit.js +12 -138
  126. package/dist/components/page-kits/ProfileSettingsPageKit.js +10 -164
  127. package/dist/components/page-kits/RecoveryPageKit.js +3 -42
  128. package/dist/components/page-kits/ResetPageKit.js +3 -36
  129. package/dist/components/page-kits/ServiceSuitePageKit.js +11 -176
  130. package/dist/components/page-kits/SignupPageKit.js +3 -30
  131. package/dist/components/page-kits/SuccessPageKit.js +4 -30
  132. package/dist/components/page-kits/TeamSettingsPageKit.js +9 -165
  133. package/dist/components/page-kits/TwoFactorPageKit.js +4 -28
  134. package/dist/components/page-kits/VerifyEmailPageKit.js +4 -30
  135. package/dist/components/page-kits/VoiceAgentsPageKit.js +13 -130
  136. package/dist/components/ui/AvatarUpload.js +1 -1
  137. package/dist/components/ui/CheckoutForm.js +5 -70
  138. package/dist/components/ui/MouseEffect.js +1 -1
  139. package/eslint-rules/nadicode/config.js +2 -0
  140. package/eslint-rules/nadicode/data/catalog-names.json +93 -0
  141. package/eslint-rules/nadicode/index.js +4 -0
  142. package/eslint-rules/nadicode/rules/__tests__/require-catalog-component.test.js +77 -0
  143. package/eslint-rules/nadicode/rules/__tests__/require-catalog-import.test.js +111 -0
  144. package/eslint-rules/nadicode/rules/require-catalog-component.js +79 -0
  145. package/eslint-rules/nadicode/rules/require-catalog-import.js +59 -0
  146. package/package.json +15 -358
  147. package/contracts/block-props-schemas.json +0 -2186
  148. package/contracts/component-props-schemas.json +0 -8322
  149. package/contracts/consumer-contract.json +0 -178
  150. package/contracts/page-kit-props-schemas.json +0 -1894
  151. package/contracts/public-surface-registry.json +0 -5822
  152. package/contracts/public-surface-registry.schema.json +0 -219
  153. package/contracts/spec-manifest.json +0 -46
  154. package/dist/catalog.json +0 -5221
@@ -0,0 +1,168 @@
1
+ import { LogoIcon } from './chunk-GHIBG7OM.js';
2
+ import { Heading } from './chunk-WI547C47.js';
3
+ import { Field, FieldLabel } from './chunk-RX5EUODB.js';
4
+ import { siteConfig } from './chunk-A7NUWD76.js';
5
+ import { Input } from './chunk-AP3XXYAY.js';
6
+ import { GoogleIcon, MicrosoftIcon } from './chunk-DJTF3XFB.js';
7
+ import { Button } from './chunk-7KIDDF3I.js';
8
+ import Link from 'next/link';
9
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
+
11
+ function SignUpBlock({
12
+ title = `Create a ${siteConfig.name} Account`,
13
+ description = "Welcome! Create an account to get started",
14
+ showSocial = true,
15
+ signInHref = "#",
16
+ onSubmit,
17
+ className
18
+ }) {
19
+ return /* @__PURE__ */ jsx("section", { className: className ?? "flex min-h-dvh bg-background px-4 py-16 md:py-32 dark:bg-transparent", children: /* @__PURE__ */ jsxs(
20
+ "form",
21
+ {
22
+ action: "",
23
+ onSubmit,
24
+ className: "bg-surface m-auto h-fit w-full max-w-sm rounded-[calc(var(--radius)+.125rem)] border p-0.5 shadow-md dark:[--color-muted:var(--color-surface)]",
25
+ children: [
26
+ /* @__PURE__ */ jsxs("div", { className: "p-8 pb-6", children: [
27
+ /* @__PURE__ */ jsxs("div", { children: [
28
+ /* @__PURE__ */ jsx(
29
+ Link,
30
+ {
31
+ href: "#",
32
+ "aria-label": "go home",
33
+ children: /* @__PURE__ */ jsx(LogoIcon, {})
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsx(Heading, { level: 1, size: "title", className: "mb-1.5 mt-4", children: title }),
37
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: description })
38
+ ] }),
39
+ !!showSocial && /* @__PURE__ */ jsxs(Fragment, { children: [
40
+ /* @__PURE__ */ jsxs("div", { className: "mt-6 grid grid-cols-2 gap-4", children: [
41
+ /* @__PURE__ */ jsxs(
42
+ Button,
43
+ {
44
+ type: "button",
45
+ variant: "outline",
46
+ className: "h-11",
47
+ children: [
48
+ /* @__PURE__ */ jsx(GoogleIcon, {}),
49
+ /* @__PURE__ */ jsx("span", { children: "Google" })
50
+ ]
51
+ }
52
+ ),
53
+ /* @__PURE__ */ jsxs(
54
+ Button,
55
+ {
56
+ type: "button",
57
+ variant: "outline",
58
+ className: "h-11",
59
+ children: [
60
+ /* @__PURE__ */ jsx(MicrosoftIcon, {}),
61
+ /* @__PURE__ */ jsx("span", { children: "Microsoft" })
62
+ ]
63
+ }
64
+ )
65
+ ] }),
66
+ /* @__PURE__ */ jsx("hr", { className: "my-4 border-dashed" })
67
+ ] }),
68
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
69
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
70
+ /* @__PURE__ */ jsxs(Field, { children: [
71
+ /* @__PURE__ */ jsx(
72
+ FieldLabel,
73
+ {
74
+ htmlFor: "firstname",
75
+ className: "block text-sm",
76
+ children: "Firstname"
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsx(
80
+ Input,
81
+ {
82
+ type: "text",
83
+ required: true,
84
+ name: "firstname",
85
+ id: "firstname"
86
+ }
87
+ )
88
+ ] }),
89
+ /* @__PURE__ */ jsxs(Field, { children: [
90
+ /* @__PURE__ */ jsx(
91
+ FieldLabel,
92
+ {
93
+ htmlFor: "lastname",
94
+ className: "block text-sm",
95
+ children: "Lastname"
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsx(
99
+ Input,
100
+ {
101
+ type: "text",
102
+ required: true,
103
+ name: "lastname",
104
+ id: "lastname"
105
+ }
106
+ )
107
+ ] })
108
+ ] }),
109
+ /* @__PURE__ */ jsxs(Field, { children: [
110
+ /* @__PURE__ */ jsx(
111
+ FieldLabel,
112
+ {
113
+ htmlFor: "email",
114
+ className: "block text-sm",
115
+ children: "Username"
116
+ }
117
+ ),
118
+ /* @__PURE__ */ jsx(
119
+ Input,
120
+ {
121
+ type: "email",
122
+ required: true,
123
+ name: "email",
124
+ id: "email"
125
+ }
126
+ )
127
+ ] }),
128
+ /* @__PURE__ */ jsxs(Field, { children: [
129
+ /* @__PURE__ */ jsx(
130
+ FieldLabel,
131
+ {
132
+ htmlFor: "pwd",
133
+ className: "text-sm",
134
+ children: "Password"
135
+ }
136
+ ),
137
+ /* @__PURE__ */ jsx(
138
+ Input,
139
+ {
140
+ type: "password",
141
+ required: true,
142
+ name: "pwd",
143
+ id: "pwd",
144
+ className: "input sz-md variant-mixed"
145
+ }
146
+ )
147
+ ] }),
148
+ /* @__PURE__ */ jsx(Button, { className: "w-full", children: "Continue" })
149
+ ] })
150
+ ] }),
151
+ /* @__PURE__ */ jsx("div", { className: "bg-muted rounded-(--radius) border p-4", children: /* @__PURE__ */ jsxs("p", { className: "text-accent-foreground text-center text-sm", children: [
152
+ "Have an account ?",
153
+ /* @__PURE__ */ jsx(
154
+ Button,
155
+ {
156
+ asChild: true,
157
+ variant: "link",
158
+ className: "px-2",
159
+ children: /* @__PURE__ */ jsx(Link, { href: signInHref, children: "Sign In" })
160
+ }
161
+ )
162
+ ] }) })
163
+ ]
164
+ }
165
+ ) });
166
+ }
167
+
168
+ export { SignUpBlock };
@@ -0,0 +1,86 @@
1
+ import { StaggerChildren } from './chunk-DQPK2XRL.js';
2
+ import { Heading } from './chunk-WI547C47.js';
3
+ import { ScrollFadeIn } from './chunk-I23DDSU7.js';
4
+ import { Card, CardHeader, CardContent } from './chunk-AH6YSYYT.js';
5
+ import { Button } from './chunk-7KIDDF3I.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 defaultAgents = [
11
+ {
12
+ name: "Atlas",
13
+ role: "Data Analyst",
14
+ description: "Transforms raw data into actionable insights with automated reporting.",
15
+ avatar: /* @__PURE__ */ jsx("div", { className: "flex size-16 items-center justify-center rounded-full bg-accent/10 text-2xl font-bold text-accent", children: "A" }),
16
+ capabilities: ["Analytics", "Reporting", "Forecasting"],
17
+ status: "active"
18
+ },
19
+ {
20
+ name: "Nova",
21
+ role: "Customer Support",
22
+ description: "Handles customer inquiries with empathy and precision, 24/7.",
23
+ avatar: /* @__PURE__ */ jsx("div", { className: "flex size-16 items-center justify-center rounded-full bg-accent/10 text-2xl font-bold text-accent", children: "N" }),
24
+ capabilities: ["Chat", "Email", "Tickets"],
25
+ status: "active"
26
+ },
27
+ {
28
+ name: "Orion",
29
+ role: "Content Creator",
30
+ description: "Generates and optimizes content across all your marketing channels.",
31
+ avatar: /* @__PURE__ */ jsx("div", { className: "flex size-16 items-center justify-center rounded-full bg-accent/10 text-2xl font-bold text-accent", children: "O" }),
32
+ capabilities: ["Writing", "SEO", "Social"],
33
+ status: "coming-soon"
34
+ }
35
+ ];
36
+ var statusVariant = {
37
+ active: "accent",
38
+ idle: "secondary",
39
+ "coming-soon": "outline"
40
+ };
41
+ var statusLabel = {
42
+ active: "Active",
43
+ idle: "Idle",
44
+ "coming-soon": "Coming Soon"
45
+ };
46
+ var columnClasses = {
47
+ 2: "grid-cols-1 sm:grid-cols-2",
48
+ 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
49
+ 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
50
+ };
51
+ function AgentProfileGridBlock({
52
+ title = "Meet your AI team",
53
+ description = "Purpose-built agents that work together to accelerate your workflow.",
54
+ agents = defaultAgents,
55
+ columns = 3,
56
+ className
57
+ }) {
58
+ return /* @__PURE__ */ jsx(ScrollFadeIn, { children: /* @__PURE__ */ jsx("section", { className: className ?? "py-16 md:py-32", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [
59
+ /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
60
+ /* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-4xl lg:text-5xl", children: title }),
61
+ /* @__PURE__ */ jsx("p", { className: "mt-4 text-text-secondary", children: description })
62
+ ] }),
63
+ /* @__PURE__ */ jsx(
64
+ StaggerChildren,
65
+ {
66
+ staggerMs: 80,
67
+ className: cn("mt-8 grid gap-6 md:mt-16", columnClasses[columns]),
68
+ children: agents.map((agent, i) => /* @__PURE__ */ jsxs(Card, { className: "text-center", children: [
69
+ /* @__PURE__ */ jsxs(CardHeader, { className: "items-center", children: [
70
+ /* @__PURE__ */ jsx("div", { className: "size-16", children: agent.avatar }),
71
+ /* @__PURE__ */ jsx(Heading, { level: 3, size: "title", className: "mt-4 font-medium", children: agent.name }),
72
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-text-tertiary", children: agent.role })
73
+ ] }),
74
+ /* @__PURE__ */ jsxs(CardContent, { className: "space-y-4", children: [
75
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: agent.description }),
76
+ agent.capabilities && agent.capabilities.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap justify-center gap-1.5", children: agent.capabilities.map((cap) => /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs", children: cap }, cap)) }),
77
+ agent.status && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant[agent.status], children: statusLabel[agent.status] }) }),
78
+ agent.href && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Button, { variant: "link", asChild: true, children: /* @__PURE__ */ jsx("a", { href: agent.href, children: "Learn more" }) }) })
79
+ ] })
80
+ ] }, i))
81
+ }
82
+ )
83
+ ] }) }) });
84
+ }
85
+
86
+ export { AgentProfileGridBlock };
@@ -0,0 +1,134 @@
1
+ import { LOCAL_HERO_LOGOS } from './chunk-QQOWC53X.js';
2
+ import { HeaderBlock } from './chunk-WOYBVPXK.js';
3
+ import { FlipWords } from './chunk-6DYFX5IR.js';
4
+ import { ProgressiveBlur } from './chunk-3UJ3HJZ3.js';
5
+ import { Heading } from './chunk-WI547C47.js';
6
+ import { InfiniteSlider } from './chunk-IFIDWZ5M.js';
7
+ import { Button } from './chunk-7KIDDF3I.js';
8
+ import { ChevronRightIcon } from './chunk-G24VV5NO.js';
9
+ import { cn } from './chunk-QYZT24TS.js';
10
+ import Link from 'next/link';
11
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
12
+
13
+ var defaultFlipWords = ["scalable", "accessible", "beautiful", "performant"];
14
+ var defaultPrimaryAction = { label: "Start Building", href: "#link" };
15
+ var defaultSecondaryAction = { label: "Request a demo", href: "#link" };
16
+ var defaultLogos = LOCAL_HERO_LOGOS;
17
+ function heightClass(h) {
18
+ const n = parseInt(h, 10);
19
+ if (n <= 16) return "h-4";
20
+ if (n <= 20) return "h-5";
21
+ if (n <= 24) return "h-6";
22
+ return "h-7";
23
+ }
24
+ function HeroSectionBlock({
25
+ headline = "Build 10x Faster with NS",
26
+ flipWords = defaultFlipWords,
27
+ primaryAction = defaultPrimaryAction,
28
+ secondaryAction = defaultSecondaryAction,
29
+ logos = defaultLogos,
30
+ className
31
+ }) {
32
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ /* @__PURE__ */ jsx(HeaderBlock, {}),
34
+ /* @__PURE__ */ jsxs("main", { className: className ?? "overflow-x-hidden", children: [
35
+ /* @__PURE__ */ jsx("section", { children: /* @__PURE__ */ jsxs("div", { className: "py-24 md:pb-32 lg:pb-36 lg:pt-72", children: [
36
+ /* @__PURE__ */ jsx("div", { className: "relative mx-auto flex max-w-7xl flex-col px-6 lg:block lg:px-12", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-lg text-center lg:ml-0 lg:max-w-full lg:text-left", children: [
37
+ /* @__PURE__ */ jsx(Heading, { level: 1, size: "display", className: "mt-8 max-w-2xl text-5xl md:text-6xl lg:mt-16 xl:text-7xl", children: headline }),
38
+ /* @__PURE__ */ jsxs("p", { className: "mt-8 max-w-2xl text-balance text-lg", children: [
39
+ "Highly customizable components that are",
40
+ " ",
41
+ /* @__PURE__ */ jsx(
42
+ FlipWords,
43
+ {
44
+ words: flipWords,
45
+ interval: 3e3,
46
+ className: "text-accent"
47
+ }
48
+ )
49
+ ] }),
50
+ /* @__PURE__ */ jsxs("div", { className: "mt-12 flex flex-col items-center justify-center gap-2 sm:flex-row lg:justify-start", children: [
51
+ /* @__PURE__ */ jsx(
52
+ Button,
53
+ {
54
+ asChild: true,
55
+ size: "lg",
56
+ className: "h-12 rounded-full pl-6 pr-4 text-base",
57
+ children: /* @__PURE__ */ jsxs(Link, { href: primaryAction.href, children: [
58
+ /* @__PURE__ */ jsx("span", { className: "text-nowrap", children: primaryAction.label }),
59
+ /* @__PURE__ */ jsx(ChevronRightIcon, { size: 16, className: "ml-1.5" })
60
+ ] })
61
+ }
62
+ ),
63
+ /* @__PURE__ */ jsx(
64
+ Button,
65
+ {
66
+ asChild: true,
67
+ size: "lg",
68
+ variant: "ghost",
69
+ className: "h-12 rounded-full px-6 text-base hover:bg-surface-hover",
70
+ children: /* @__PURE__ */ jsx(Link, { href: secondaryAction.href, children: /* @__PURE__ */ jsx("span", { className: "text-nowrap", children: secondaryAction.label }) })
71
+ },
72
+ 2
73
+ )
74
+ ] })
75
+ ] }) }),
76
+ /* @__PURE__ */ jsxs(
77
+ "div",
78
+ {
79
+ "aria-hidden": "true",
80
+ className: "absolute inset-1.5 -z-10 overflow-hidden rounded-3xl border border-border/50 bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.12),transparent_34%),radial-gradient(circle_at_bottom_right,rgba(59,130,246,0.18),transparent_30%),linear-gradient(135deg,rgba(15,23,42,0.98),rgba(30,41,59,0.94))] lg:rounded-[3rem]",
81
+ children: [
82
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-x-10 top-10 h-24 rounded-full bg-accent/20 blur-3xl" }),
83
+ /* @__PURE__ */ jsx("div", { className: "absolute left-8 top-16 size-40 rounded-full border border-foreground/10 bg-foreground/5 blur-[1px]" }),
84
+ /* @__PURE__ */ jsx("div", { className: "absolute right-10 bottom-10 size-48 rounded-full border border-accent/20 bg-accent/10 blur-[1px]" }),
85
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-[linear-gradient(to_right,rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.03)_1px,transparent_1px)] bg-[size:48px_48px] opacity-40" })
86
+ ]
87
+ }
88
+ )
89
+ ] }) }),
90
+ /* @__PURE__ */ jsx("section", { className: "bg-background pb-2", children: /* @__PURE__ */ jsx("div", { className: "group relative m-auto max-w-7xl px-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center md:flex-row", children: [
91
+ /* @__PURE__ */ jsx("div", { className: "md:max-w-44 md:border-r md:pr-6", children: /* @__PURE__ */ jsx("p", { className: "text-end text-sm", children: "Powering the best teams" }) }),
92
+ /* @__PURE__ */ jsxs("div", { className: "relative py-6 md:w-[calc(100%-11rem)]", children: [
93
+ /* @__PURE__ */ jsx(
94
+ InfiniteSlider,
95
+ {
96
+ speed: 40,
97
+ gap: 112,
98
+ children: logos.map((logo) => /* @__PURE__ */ jsx("div", { className: "flex", children: /* @__PURE__ */ jsx(
99
+ "img",
100
+ {
101
+ className: cn("mx-auto w-fit dark:invert", heightClass(logo.height)),
102
+ src: logo.src,
103
+ alt: logo.alt,
104
+ height: logo.height,
105
+ width: "auto"
106
+ }
107
+ ) }, logo.alt))
108
+ }
109
+ ),
110
+ /* @__PURE__ */ jsx("div", { className: "bg-linear-to-r from-background absolute inset-y-0 left-0 w-20" }),
111
+ /* @__PURE__ */ jsx("div", { className: "bg-linear-to-l from-background absolute inset-y-0 right-0 w-20" }),
112
+ /* @__PURE__ */ jsx(
113
+ ProgressiveBlur,
114
+ {
115
+ className: "pointer-events-none absolute left-0 top-0 h-full w-20",
116
+ direction: "left",
117
+ blurIntensity: 1
118
+ }
119
+ ),
120
+ /* @__PURE__ */ jsx(
121
+ ProgressiveBlur,
122
+ {
123
+ className: "pointer-events-none absolute right-0 top-0 h-full w-20",
124
+ direction: "right",
125
+ blurIntensity: 1
126
+ }
127
+ )
128
+ ] })
129
+ ] }) }) })
130
+ ] })
131
+ ] });
132
+ }
133
+
134
+ export { HeroSectionBlock };
@@ -0,0 +1,50 @@
1
+ import { cn } from './chunk-QYZT24TS.js';
2
+ import { useRef, useEffect } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function AudioVisualizerBlock({
6
+ className,
7
+ bars = 20,
8
+ isPlaying = false
9
+ }) {
10
+ const barsRef = useRef(null);
11
+ const opacityOffsetsRef = useRef(null);
12
+ if (opacityOffsetsRef.current === null || opacityOffsetsRef.current.length !== bars) {
13
+ opacityOffsetsRef.current = Array.from({ length: bars }, (_, i) => (i * 3 + 1) % 10 * 0.05);
14
+ }
15
+ const opacityOffsets = opacityOffsetsRef.current;
16
+ useEffect(() => {
17
+ const container = barsRef.current;
18
+ if (!container) return;
19
+ let interval;
20
+ const applyHeights = (heights) => {
21
+ const children = container.children;
22
+ for (let i = 0; i < children.length; i++) {
23
+ const child = children[i];
24
+ child.style.height = `${Math.max(10, heights[i])}%`;
25
+ child.style.opacity = String(isPlaying ? 0.5 + opacityOffsets[i] : 0.3);
26
+ }
27
+ };
28
+ if (isPlaying) {
29
+ interval = setInterval(() => {
30
+ applyHeights(Array.from({ length: bars }, () => Math.random() * 100));
31
+ }, 100);
32
+ } else {
33
+ applyHeights(Array(bars).fill(10));
34
+ }
35
+ return () => clearInterval(interval);
36
+ }, [isPlaying, bars, opacityOffsets]);
37
+ return /* @__PURE__ */ jsx("div", { ref: barsRef, className: cn("flex h-16 items-center justify-center gap-1.5", className), children: Array.from({ length: bars }, (_, i) => /* @__PURE__ */ jsx(
38
+ "div",
39
+ {
40
+ className: "w-1 rounded-full bg-accent transition-[height,opacity] duration-micro ease-out",
41
+ style: {
42
+ height: "10%",
43
+ opacity: 0.3
44
+ }
45
+ },
46
+ i
47
+ )) });
48
+ }
49
+
50
+ export { AudioVisualizerBlock };
@@ -0,0 +1,167 @@
1
+ import { MarketingShellPageKit } from './chunk-Z233ZQZE.js';
2
+ import { NewsletterBlock } from './chunk-K7NQ6ZAW.js';
3
+ import { ChangelogBlock } from './chunk-VEO56RH4.js';
4
+ import { CodeBlock } from './chunk-XTASI4IY.js';
5
+ import { Typography } from './chunk-N53OMWW2.js';
6
+ import { Heading } from './chunk-WI547C47.js';
7
+ import { Card, CardHeader, CardTitle, CardContent } from './chunk-AH6YSYYT.js';
8
+ import { Avatar, AvatarFallback } from './chunk-NAAU5IWU.js';
9
+ import { Button } from './chunk-7KIDDF3I.js';
10
+ import { Badge } from './chunk-S4JAHKOP.js';
11
+ import { cn } from './chunk-QYZT24TS.js';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+
14
+ var EMPTY_CATEGORIES = [];
15
+ var EMPTY_ARTICLES = [];
16
+ var DEFAULT_CHANGELOG = {};
17
+ var DEFAULT_NEWSLETTER = {};
18
+ var DEFAULT_EMPTY_STATE = {
19
+ title: "No content available",
20
+ description: "Add content entries to populate this route."
21
+ };
22
+ function BlogContentPageKit({
23
+ shell,
24
+ state = "has-data",
25
+ variant = "content-index",
26
+ categories = EMPTY_CATEGORIES,
27
+ activeCategoryId = null,
28
+ onCategoryChange,
29
+ articles = EMPTY_ARTICLES,
30
+ detail,
31
+ changelog = DEFAULT_CHANGELOG,
32
+ pagination,
33
+ newsletter = DEFAULT_NEWSLETTER,
34
+ loadingMessage = "Loading content...",
35
+ emptyState = DEFAULT_EMPTY_STATE,
36
+ className
37
+ }) {
38
+ const shouldRenderLoading = state === "loading";
39
+ const shouldRenderEmpty = state === "empty" || (state === "filtered" || state === "has-data" || state === "paginated") && variant === "content-index" && articles.length === 0;
40
+ let content = null;
41
+ if (shouldRenderLoading) {
42
+ content = /* @__PURE__ */ jsx("div", { role: "status", className: "rounded-md border border-border/70 bg-surface/70 px-4 py-3 text-sm text-text-secondary", children: loadingMessage });
43
+ } else if (variant === "changelog") {
44
+ content = changelog === null ? null : /* @__PURE__ */ jsx(ChangelogBlock, { ...changelog });
45
+ } else if (variant === "content-detail") {
46
+ content = detail ? /* @__PURE__ */ jsxs("article", { className: "space-y-6", children: [
47
+ /* @__PURE__ */ jsxs("header", { className: "space-y-4", children: [
48
+ /* @__PURE__ */ jsx(Heading, { level: 2, children: detail.title }),
49
+ detail.excerpt ? /* @__PURE__ */ jsx(Typography, { variant: "muted", children: detail.excerpt }) : null,
50
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3 border-y border-border/70 py-3", children: [
51
+ /* @__PURE__ */ jsx(Avatar, { className: "h-9 w-9", children: /* @__PURE__ */ jsx(AvatarFallback, { children: detail.authorFallback ?? detail.authorName.slice(0, 2).toUpperCase() }) }),
52
+ /* @__PURE__ */ jsxs("div", { children: [
53
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "font-medium text-text-primary", children: detail.authorName }),
54
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
55
+ detail.publishedAt,
56
+ detail.readTimeLabel ? ` \xB7 ${detail.readTimeLabel}` : ""
57
+ ] })
58
+ ] })
59
+ ] })
60
+ ] }),
61
+ /* @__PURE__ */ jsx("div", { className: "space-y-6", children: detail.content }),
62
+ detail.codeExamples && detail.codeExamples.length > 0 ? /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
63
+ /* @__PURE__ */ jsx(Heading, { level: 4, children: "Code examples" }),
64
+ detail.codeExamples.map((example) => /* @__PURE__ */ jsx(
65
+ CodeBlock,
66
+ {
67
+ filename: example.filename,
68
+ language: example.language,
69
+ code: example.code
70
+ },
71
+ example.id
72
+ ))
73
+ ] }) : null
74
+ ] }) : /* @__PURE__ */ jsxs(Card, { children: [
75
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: emptyState.title }) }),
76
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Typography, { variant: "muted", children: emptyState.description }) })
77
+ ] });
78
+ } else {
79
+ content = /* @__PURE__ */ jsxs("div", { "data-testid": "blog-index-view", className: "space-y-6", children: [
80
+ categories.length > 0 ? /* @__PURE__ */ jsxs("div", { "data-testid": "blog-category-controls", className: "flex flex-wrap items-center gap-2", children: [
81
+ /* @__PURE__ */ jsx(
82
+ Button,
83
+ {
84
+ type: "button",
85
+ variant: activeCategoryId === null ? "primary" : "outline",
86
+ size: "sm",
87
+ onClick: () => onCategoryChange?.(null),
88
+ children: "All"
89
+ }
90
+ ),
91
+ categories.map((category) => /* @__PURE__ */ jsxs(
92
+ Button,
93
+ {
94
+ type: "button",
95
+ variant: activeCategoryId === category.id ? "primary" : "outline",
96
+ size: "sm",
97
+ onClick: () => onCategoryChange?.(category.id),
98
+ children: [
99
+ category.label,
100
+ typeof category.count === "number" ? ` (${category.count})` : ""
101
+ ]
102
+ },
103
+ category.id
104
+ ))
105
+ ] }) : null,
106
+ shouldRenderEmpty ? /* @__PURE__ */ jsxs(Card, { "data-testid": "blog-empty-state", children: [
107
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: emptyState.title }) }),
108
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Typography, { variant: "muted", children: emptyState.description }) })
109
+ ] }) : /* @__PURE__ */ jsx("div", { className: "grid gap-4", children: articles.map((article) => /* @__PURE__ */ jsxs(Card, { children: [
110
+ /* @__PURE__ */ jsxs(CardHeader, { className: "space-y-3", children: [
111
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
112
+ /* @__PURE__ */ jsx(Badge, { variant: "outline", children: article.category }),
113
+ article.readTimeLabel ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-tertiary", children: article.readTimeLabel }) : null
114
+ ] }),
115
+ /* @__PURE__ */ jsx(CardTitle, { children: article.title }),
116
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: article.excerpt })
117
+ ] }),
118
+ /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-wrap items-center justify-between gap-3", children: [
119
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
120
+ article.authorName,
121
+ " \xB7 ",
122
+ article.publishedAt
123
+ ] }),
124
+ article.onOpen ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: article.onOpen, children: "Open" }) : null
125
+ ] })
126
+ ] }, article.id)) }),
127
+ pagination ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
128
+ /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
129
+ "Page ",
130
+ pagination.page,
131
+ " of ",
132
+ pagination.totalPages
133
+ ] }),
134
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
135
+ /* @__PURE__ */ jsx(
136
+ Button,
137
+ {
138
+ type: "button",
139
+ size: "sm",
140
+ variant: "outline",
141
+ disabled: pagination.page <= 1,
142
+ onClick: () => pagination.onPageChange(Math.max(1, pagination.page - 1)),
143
+ children: "Previous page"
144
+ }
145
+ ),
146
+ /* @__PURE__ */ jsx(
147
+ Button,
148
+ {
149
+ type: "button",
150
+ size: "sm",
151
+ variant: "outline",
152
+ disabled: pagination.page >= pagination.totalPages,
153
+ onClick: () => pagination.onPageChange(Math.min(pagination.totalPages, pagination.page + 1)),
154
+ children: "Next page"
155
+ }
156
+ )
157
+ ] })
158
+ ] }) : null
159
+ ] });
160
+ }
161
+ return /* @__PURE__ */ jsx(MarketingShellPageKit, { ...shell, children: /* @__PURE__ */ jsxs("section", { className: cn("mx-auto w-full max-w-5xl space-y-8 px-6 pb-16", className), children: [
162
+ content,
163
+ newsletter === null ? null : /* @__PURE__ */ jsx(NewsletterBlock, { ...newsletter })
164
+ ] }) });
165
+ }
166
+
167
+ export { BlogContentPageKit };
@@ -0,0 +1,42 @@
1
+ import { PasswordRecoveryBlock } from './chunk-5PZ4VR2D.js';
2
+ import { cn } from './chunk-QYZT24TS.js';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ function RecoveryPageKit({
6
+ mode = "reset",
7
+ onSubmit,
8
+ onBackToLogin,
9
+ title,
10
+ description,
11
+ buttonText,
12
+ successTitle,
13
+ errorMessage,
14
+ className,
15
+ cardClassName
16
+ }) {
17
+ return /* @__PURE__ */ jsx("section", { className: cn("min-h-dvh w-full bg-background px-4 py-12 md:px-8 md:py-20", className), children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex w-full max-w-5xl flex-col items-center justify-center gap-4", children: [
18
+ errorMessage ? /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ role: "alert",
22
+ className: "w-full max-w-sm rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive",
23
+ children: errorMessage
24
+ }
25
+ ) : null,
26
+ /* @__PURE__ */ jsx(
27
+ PasswordRecoveryBlock,
28
+ {
29
+ className: cn("w-full", cardClassName),
30
+ mode,
31
+ onSubmit,
32
+ onBackToLogin,
33
+ title,
34
+ description,
35
+ buttonText,
36
+ successTitle
37
+ }
38
+ )
39
+ ] }) });
40
+ }
41
+
42
+ export { RecoveryPageKit };