@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
@@ -1,23 +1,24 @@
1
- import { NavigationShellPageKit } from '../../chunk-ZKLB5N3Q.js';
2
- import { Typography } from '../../chunk-N53OMWW2.js';
1
+ export { AnalyticsPageKit } from '../../chunk-CUDMDYKE.js';
2
+ import '../../chunk-ZKLB5N3Q.js';
3
+ import '../../chunk-N53OMWW2.js';
3
4
  import '../../chunk-J2DCQDXO.js';
4
5
  import '../../chunk-C4SNHMYC.js';
5
6
  import '../../chunk-B5QL76GA.js';
6
7
  import '../../chunk-HOWTYZL5.js';
7
- import { NativeSelect } from '../../chunk-UGV45DH3.js';
8
- import { Heading } from '../../chunk-WI547C47.js';
9
- import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from '../../chunk-PXDHNGTG.js';
8
+ import '../../chunk-UGV45DH3.js';
9
+ import '../../chunk-WI547C47.js';
10
+ import '../../chunk-PXDHNGTG.js';
10
11
  import '../../chunk-CUZJIDU7.js';
11
12
  import '../../chunk-AP3XXYAY.js';
12
13
  import '../../chunk-LIBXYD5Q.js';
13
- import { ChartCard } from '../../chunk-HJZRSPWB.js';
14
+ import '../../chunk-HJZRSPWB.js';
14
15
  import '../../chunk-RASEB2XI.js';
15
- import { Empty, EmptyTitle, EmptyDescription } from '../../chunk-55HD4L6G.js';
16
+ import '../../chunk-55HD4L6G.js';
16
17
  import '../../chunk-MJ4CB6ZL.js';
17
18
  import '../../chunk-35EX5FP5.js';
18
- import { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../../chunk-AH6YSYYT.js';
19
+ import '../../chunk-AH6YSYYT.js';
19
20
  import '../../chunk-NAAU5IWU.js';
20
- import { Button } from '../../chunk-7KIDDF3I.js';
21
+ import '../../chunk-7KIDDF3I.js';
21
22
  import '../../chunk-6FOHUNXR.js';
22
23
  import '../../chunk-PD2YEH3H.js';
23
24
  import '../../chunk-CRY67BIF.js';
@@ -131,147 +132,8 @@ import '../../chunk-UHXGBV5N.js';
131
132
  import '../../chunk-UIUMTURU.js';
132
133
  import '../../chunk-PRUXIDBD.js';
133
134
  import '../../chunk-NURPUVUV.js';
134
- import { Badge } from '../../chunk-S4JAHKOP.js';
135
+ import '../../chunk-S4JAHKOP.js';
135
136
  import '../../chunk-TV4RSQH4.js';
136
137
  import '../../chunk-HJBXUXTD.js';
137
138
  import '../../chunk-ASKFAYYR.js';
138
- import { cn } from '../../chunk-QYZT24TS.js';
139
- import { jsx, jsxs } from 'react/jsx-runtime';
140
-
141
- function deriveState(state, data) {
142
- if (state) {
143
- return state;
144
- }
145
- if (!data || data.length === 0) {
146
- return "empty";
147
- }
148
- return "has-data";
149
- }
150
- function renderGridRegion(region) {
151
- const state = deriveState(region.state, region.rows);
152
- const isFilteredState = state === "filtered";
153
- const isPartialDataState = state === "partial-data";
154
- if (state === "loading") {
155
- return /* @__PURE__ */ jsxs(Card, { children: [
156
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: region.title }) }),
157
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: "Loading analytics table" }) })
158
- ] }, region.id);
159
- }
160
- if (state === "error") {
161
- return /* @__PURE__ */ jsxs(Card, { children: [
162
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: region.title }) }),
163
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
164
- "div",
165
- {
166
- role: "alert",
167
- className: "rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive",
168
- children: region.errorMessage ?? "Analytics table is unavailable."
169
- }
170
- ) })
171
- ] }, region.id);
172
- }
173
- if (state === "empty" || isFilteredState) {
174
- return /* @__PURE__ */ jsxs(Card, { children: [
175
- /* @__PURE__ */ jsxs(CardHeader, { children: [
176
- /* @__PURE__ */ jsx(CardTitle, { children: region.title }),
177
- region.description ? /* @__PURE__ */ jsx(CardDescription, { children: region.description }) : null
178
- ] }),
179
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(Empty, { children: [
180
- /* @__PURE__ */ jsx(EmptyTitle, { children: region.emptyTitle ?? (isFilteredState ? "No rows for selected filters" : "No matching rows") }),
181
- /* @__PURE__ */ jsx(EmptyDescription, { children: region.emptyDescription ?? (isFilteredState ? "Broaden filters or date range to restore table results." : "Adjust filters or date range to load analytics records.") })
182
- ] }) })
183
- ] }, region.id);
184
- }
185
- return /* @__PURE__ */ jsxs(Card, { children: [
186
- /* @__PURE__ */ jsxs(CardHeader, { children: [
187
- /* @__PURE__ */ jsx(CardTitle, { children: region.title }),
188
- region.description ? /* @__PURE__ */ jsx(CardDescription, { children: region.description }) : null
189
- ] }),
190
- /* @__PURE__ */ jsxs(CardContent, { children: [
191
- isPartialDataState ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mb-3 text-text-secondary", children: "Showing available rows while some analytics dimensions are still syncing." }) : null,
192
- /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
193
- /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, { children: region.columns.map((column) => /* @__PURE__ */ jsx(TableHead, { children: column }, `${region.id}-${column}`)) }) }),
194
- /* @__PURE__ */ jsx(TableBody, { children: region.rows.map((row, rowIndex) => /* @__PURE__ */ jsx(TableRow, { children: region.columns.map((column) => /* @__PURE__ */ jsx(TableCell, { children: row[column] ?? "-" }, `${region.id}-row-${rowIndex}-${column}`)) }, `${region.id}-row-${rowIndex}`)) })
195
- ] }) })
196
- ] })
197
- ] }, region.id);
198
- }
199
- function AnalyticsPageKit({
200
- shell,
201
- title = "Analytics reporting",
202
- description = "Coordinate filters, chart surfaces, and tabular analysis from one stable page-kit contract.",
203
- filters,
204
- chartRegions,
205
- gridRegions,
206
- comparisonLabel,
207
- onResetFilters,
208
- className
209
- }) {
210
- return /* @__PURE__ */ jsx(NavigationShellPageKit, { ...shell, children: /* @__PURE__ */ jsxs("section", { className: cn("space-y-6", className), children: [
211
- /* @__PURE__ */ jsxs("header", { className: "space-y-2", children: [
212
- /* @__PURE__ */ jsx(Heading, { level: 3, children: title }),
213
- /* @__PURE__ */ jsx(Typography, { variant: "muted", children: description })
214
- ] }),
215
- /* @__PURE__ */ jsx(
216
- "section",
217
- {
218
- "aria-label": "Analytics filters",
219
- className: "rounded-lg border border-border/70 bg-surface/60 p-4",
220
- children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end gap-4", children: [
221
- filters.map((filter) => /* @__PURE__ */ jsxs("div", { className: "min-w-[180px] flex-1 space-y-2", children: [
222
- /* @__PURE__ */ jsx("label", { htmlFor: `analytics-filter-${filter.id}`, className: "text-sm font-medium text-text-primary", children: filter.label }),
223
- /* @__PURE__ */ jsx(
224
- NativeSelect,
225
- {
226
- id: `analytics-filter-${filter.id}`,
227
- "aria-label": filter.label,
228
- value: filter.value,
229
- onChange: (event) => filter.onChange?.(event.target.value),
230
- children: filter.options.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, `${filter.id}-${option.value}`))
231
- }
232
- )
233
- ] }, filter.id)),
234
- comparisonLabel ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: comparisonLabel }) : null,
235
- onResetFilters ? /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: onResetFilters, children: "Reset filters" }) : null
236
- ] })
237
- }
238
- ),
239
- /* @__PURE__ */ jsx("section", { className: "grid gap-4 xl:grid-cols-2", children: chartRegions.map((region) => {
240
- const state = deriveState(region.state, region.data);
241
- const isFilteredState = state === "filtered";
242
- const isPartialDataState = state === "partial-data";
243
- if (state === "error") {
244
- return /* @__PURE__ */ jsxs(Card, { className: region.className, children: [
245
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: region.title }) }),
246
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
247
- "div",
248
- {
249
- role: "alert",
250
- className: "rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive",
251
- children: region.errorMessage ?? "Analytics chart is unavailable."
252
- }
253
- ) })
254
- ] }, region.id);
255
- }
256
- return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
257
- isPartialDataState ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: "Showing available chart data while some series are still syncing." }) : null,
258
- /* @__PURE__ */ jsx(
259
- ChartCard,
260
- {
261
- className: region.className,
262
- title: region.title,
263
- description: region.description,
264
- chart: region.chart,
265
- data: state === "empty" || isFilteredState ? [] : region.data,
266
- loading: state === "loading",
267
- emptyTitle: region.emptyTitle ?? (isFilteredState ? "No chart points for selected filters" : "No chart points"),
268
- emptyDescription: region.emptyDescription ?? "Try adjusting filters to broaden the results."
269
- }
270
- )
271
- ] }, region.id);
272
- }) }),
273
- /* @__PURE__ */ jsx("section", { className: "grid gap-4 xl:grid-cols-2", children: gridRegions.map((region) => renderGridRegion(region)) })
274
- ] }) });
275
- }
276
-
277
- export { AnalyticsPageKit };
139
+ import '../../chunk-QYZT24TS.js';
@@ -1,25 +1,26 @@
1
- import { MarketingShellPageKit } from '../../chunk-Z233ZQZE.js';
2
- import { NewsletterBlock } from '../../chunk-K7NQ6ZAW.js';
1
+ export { BlogContentPageKit } from '../../chunk-AWZFQQGN.js';
2
+ import '../../chunk-Z233ZQZE.js';
3
+ import '../../chunk-K7NQ6ZAW.js';
3
4
  import '../../chunk-DARC2ACH.js';
4
5
  import '../../chunk-WOYBVPXK.js';
5
6
  import '../../chunk-AYWL4IYM.js';
6
- import { ChangelogBlock } from '../../chunk-VEO56RH4.js';
7
- import { CodeBlock } from '../../chunk-XTASI4IY.js';
7
+ import '../../chunk-VEO56RH4.js';
8
+ import '../../chunk-XTASI4IY.js';
8
9
  import '../../chunk-MDAYDDTC.js';
9
- import { Typography } from '../../chunk-N53OMWW2.js';
10
+ import '../../chunk-N53OMWW2.js';
10
11
  import '../../chunk-DQPK2XRL.js';
11
12
  import '../../chunk-HOWTYZL5.js';
12
13
  import '../../chunk-ZLSWCV55.js';
13
14
  import '../../chunk-GHIBG7OM.js';
14
- import { Heading } from '../../chunk-WI547C47.js';
15
+ import '../../chunk-WI547C47.js';
15
16
  import '../../chunk-A7NUWD76.js';
16
17
  import '../../chunk-CUZJIDU7.js';
17
18
  import '../../chunk-AP3XXYAY.js';
18
19
  import '../../chunk-LIBXYD5Q.js';
19
20
  import '../../chunk-I23DDSU7.js';
20
- import { Card, CardHeader, CardTitle, CardContent } from '../../chunk-AH6YSYYT.js';
21
- import { Avatar, AvatarFallback } from '../../chunk-NAAU5IWU.js';
22
- import { Button } from '../../chunk-7KIDDF3I.js';
21
+ import '../../chunk-AH6YSYYT.js';
22
+ import '../../chunk-NAAU5IWU.js';
23
+ import '../../chunk-7KIDDF3I.js';
23
24
  import '../../chunk-6FOHUNXR.js';
24
25
  import '../../chunk-PD2YEH3H.js';
25
26
  import '../../chunk-CRY67BIF.js';
@@ -133,164 +134,8 @@ import '../../chunk-UHXGBV5N.js';
133
134
  import '../../chunk-UIUMTURU.js';
134
135
  import '../../chunk-PRUXIDBD.js';
135
136
  import '../../chunk-NURPUVUV.js';
136
- import { Badge } from '../../chunk-S4JAHKOP.js';
137
+ import '../../chunk-S4JAHKOP.js';
137
138
  import '../../chunk-TV4RSQH4.js';
138
139
  import '../../chunk-HJBXUXTD.js';
139
140
  import '../../chunk-ASKFAYYR.js';
140
- import { cn } from '../../chunk-QYZT24TS.js';
141
- import { jsx, jsxs } from 'react/jsx-runtime';
142
-
143
- var EMPTY_CATEGORIES = [];
144
- var EMPTY_ARTICLES = [];
145
- var DEFAULT_CHANGELOG = {};
146
- var DEFAULT_NEWSLETTER = {};
147
- var DEFAULT_EMPTY_STATE = {
148
- title: "No content available",
149
- description: "Add content entries to populate this route."
150
- };
151
- function BlogContentPageKit({
152
- shell,
153
- state = "has-data",
154
- variant = "content-index",
155
- categories = EMPTY_CATEGORIES,
156
- activeCategoryId = null,
157
- onCategoryChange,
158
- articles = EMPTY_ARTICLES,
159
- detail,
160
- changelog = DEFAULT_CHANGELOG,
161
- pagination,
162
- newsletter = DEFAULT_NEWSLETTER,
163
- loadingMessage = "Loading content...",
164
- emptyState = DEFAULT_EMPTY_STATE,
165
- className
166
- }) {
167
- const shouldRenderLoading = state === "loading";
168
- const shouldRenderEmpty = state === "empty" || (state === "filtered" || state === "has-data" || state === "paginated") && variant === "content-index" && articles.length === 0;
169
- let content = null;
170
- if (shouldRenderLoading) {
171
- 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 });
172
- } else if (variant === "changelog") {
173
- content = changelog === null ? null : /* @__PURE__ */ jsx(ChangelogBlock, { ...changelog });
174
- } else if (variant === "content-detail") {
175
- content = detail ? /* @__PURE__ */ jsxs("article", { className: "space-y-6", children: [
176
- /* @__PURE__ */ jsxs("header", { className: "space-y-4", children: [
177
- /* @__PURE__ */ jsx(Heading, { level: 2, children: detail.title }),
178
- detail.excerpt ? /* @__PURE__ */ jsx(Typography, { variant: "muted", children: detail.excerpt }) : null,
179
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3 border-y border-border/70 py-3", children: [
180
- /* @__PURE__ */ jsx(Avatar, { className: "h-9 w-9", children: /* @__PURE__ */ jsx(AvatarFallback, { children: detail.authorFallback ?? detail.authorName.slice(0, 2).toUpperCase() }) }),
181
- /* @__PURE__ */ jsxs("div", { children: [
182
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "font-medium text-text-primary", children: detail.authorName }),
183
- /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
184
- detail.publishedAt,
185
- detail.readTimeLabel ? ` \xB7 ${detail.readTimeLabel}` : ""
186
- ] })
187
- ] })
188
- ] })
189
- ] }),
190
- /* @__PURE__ */ jsx("div", { className: "space-y-6", children: detail.content }),
191
- detail.codeExamples && detail.codeExamples.length > 0 ? /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
192
- /* @__PURE__ */ jsx(Heading, { level: 4, children: "Code examples" }),
193
- detail.codeExamples.map((example) => /* @__PURE__ */ jsx(
194
- CodeBlock,
195
- {
196
- filename: example.filename,
197
- language: example.language,
198
- code: example.code
199
- },
200
- example.id
201
- ))
202
- ] }) : null
203
- ] }) : /* @__PURE__ */ jsxs(Card, { children: [
204
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: emptyState.title }) }),
205
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Typography, { variant: "muted", children: emptyState.description }) })
206
- ] });
207
- } else {
208
- content = /* @__PURE__ */ jsxs("div", { "data-testid": "blog-index-view", className: "space-y-6", children: [
209
- categories.length > 0 ? /* @__PURE__ */ jsxs("div", { "data-testid": "blog-category-controls", className: "flex flex-wrap items-center gap-2", children: [
210
- /* @__PURE__ */ jsx(
211
- Button,
212
- {
213
- type: "button",
214
- variant: activeCategoryId === null ? "primary" : "outline",
215
- size: "sm",
216
- onClick: () => onCategoryChange?.(null),
217
- children: "All"
218
- }
219
- ),
220
- categories.map((category) => /* @__PURE__ */ jsxs(
221
- Button,
222
- {
223
- type: "button",
224
- variant: activeCategoryId === category.id ? "primary" : "outline",
225
- size: "sm",
226
- onClick: () => onCategoryChange?.(category.id),
227
- children: [
228
- category.label,
229
- typeof category.count === "number" ? ` (${category.count})` : ""
230
- ]
231
- },
232
- category.id
233
- ))
234
- ] }) : null,
235
- shouldRenderEmpty ? /* @__PURE__ */ jsxs(Card, { "data-testid": "blog-empty-state", children: [
236
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: emptyState.title }) }),
237
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(Typography, { variant: "muted", children: emptyState.description }) })
238
- ] }) : /* @__PURE__ */ jsx("div", { className: "grid gap-4", children: articles.map((article) => /* @__PURE__ */ jsxs(Card, { children: [
239
- /* @__PURE__ */ jsxs(CardHeader, { className: "space-y-3", children: [
240
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
241
- /* @__PURE__ */ jsx(Badge, { variant: "outline", children: article.category }),
242
- article.readTimeLabel ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-tertiary", children: article.readTimeLabel }) : null
243
- ] }),
244
- /* @__PURE__ */ jsx(CardTitle, { children: article.title }),
245
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: article.excerpt })
246
- ] }),
247
- /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-wrap items-center justify-between gap-3", children: [
248
- /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
249
- article.authorName,
250
- " \xB7 ",
251
- article.publishedAt
252
- ] }),
253
- article.onOpen ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: article.onOpen, children: "Open" }) : null
254
- ] })
255
- ] }, article.id)) }),
256
- pagination ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
257
- /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
258
- "Page ",
259
- pagination.page,
260
- " of ",
261
- pagination.totalPages
262
- ] }),
263
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
264
- /* @__PURE__ */ jsx(
265
- Button,
266
- {
267
- type: "button",
268
- size: "sm",
269
- variant: "outline",
270
- disabled: pagination.page <= 1,
271
- onClick: () => pagination.onPageChange(Math.max(1, pagination.page - 1)),
272
- children: "Previous page"
273
- }
274
- ),
275
- /* @__PURE__ */ jsx(
276
- Button,
277
- {
278
- type: "button",
279
- size: "sm",
280
- variant: "outline",
281
- disabled: pagination.page >= pagination.totalPages,
282
- onClick: () => pagination.onPageChange(Math.min(pagination.totalPages, pagination.page + 1)),
283
- children: "Next page"
284
- }
285
- )
286
- ] })
287
- ] }) : null
288
- ] });
289
- }
290
- 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: [
291
- content,
292
- newsletter === null ? null : /* @__PURE__ */ jsx(NewsletterBlock, { ...newsletter })
293
- ] }) });
294
- }
295
-
296
- export { BlogContentPageKit };
141
+ import '../../chunk-QYZT24TS.js';
@@ -1,20 +1,21 @@
1
- import { MarketingShellPageKit } from '../../chunk-Z233ZQZE.js';
1
+ export { CheckoutPageKit } from '../../chunk-LGW7FVG5.js';
2
+ import '../../chunk-Z233ZQZE.js';
2
3
  import '../../chunk-WOYBVPXK.js';
3
4
  import '../../chunk-AYWL4IYM.js';
4
- import { Typography } from '../../chunk-N53OMWW2.js';
5
+ import '../../chunk-N53OMWW2.js';
5
6
  import '../../chunk-DQPK2XRL.js';
6
7
  import '../../chunk-HOWTYZL5.js';
7
8
  import '../../chunk-GHIBG7OM.js';
8
9
  import '../../chunk-WI547C47.js';
9
- import { FieldSet, Field, FieldLabel, FieldDescription } from '../../chunk-RX5EUODB.js';
10
+ import '../../chunk-RX5EUODB.js';
10
11
  import '../../chunk-A7NUWD76.js';
11
12
  import '../../chunk-CUZJIDU7.js';
12
- import { Input } from '../../chunk-AP3XXYAY.js';
13
+ import '../../chunk-AP3XXYAY.js';
13
14
  import '../../chunk-LIBXYD5Q.js';
14
15
  import '../../chunk-I23DDSU7.js';
15
- import { Card, CardHeader, CardTitle, CardContent } from '../../chunk-AH6YSYYT.js';
16
- import { Alert, AlertTitle, AlertDescription } from '../../chunk-GJUR6HT3.js';
17
- import { Button } from '../../chunk-7KIDDF3I.js';
16
+ import '../../chunk-AH6YSYYT.js';
17
+ import '../../chunk-GJUR6HT3.js';
18
+ import '../../chunk-7KIDDF3I.js';
18
19
  import '../../chunk-6FOHUNXR.js';
19
20
  import '../../chunk-PD2YEH3H.js';
20
21
  import '../../chunk-CRY67BIF.js';
@@ -131,79 +132,4 @@ import '../../chunk-NURPUVUV.js';
131
132
  import '../../chunk-TV4RSQH4.js';
132
133
  import '../../chunk-HJBXUXTD.js';
133
134
  import '../../chunk-ASKFAYYR.js';
134
- import { cn } from '../../chunk-QYZT24TS.js';
135
- import { jsx, jsxs } from 'react/jsx-runtime';
136
-
137
- function CheckoutPageKit({
138
- shell,
139
- state = "default",
140
- summary,
141
- billingFields,
142
- onBillingFieldChange,
143
- onSubmit,
144
- onRetry,
145
- onContinue,
146
- errorMessage,
147
- successMessage = "Payment successful. Your subscription is now active.",
148
- processingMessage = "Processing payment confirmation...",
149
- className
150
- }) {
151
- const isBusy = state === "submitting" || state === "processing";
152
- return /* @__PURE__ */ jsx(MarketingShellPageKit, { ...shell, children: /* @__PURE__ */ jsxs("section", { className: cn("mx-auto grid w-full max-w-6xl gap-6 px-6 pb-16 lg:grid-cols-[minmax(0,1.1fr)_420px]", className), children: [
153
- /* @__PURE__ */ jsxs(Card, { children: [
154
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Checkout" }) }),
155
- /* @__PURE__ */ jsxs(CardContent, { className: "space-y-4", children: [
156
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: "Complete billing details and confirm payment with app-owned checkout orchestration." }),
157
- state === "processing" ? /* @__PURE__ */ jsxs(Alert, { children: [
158
- /* @__PURE__ */ jsx(AlertTitle, { children: "Processing" }),
159
- /* @__PURE__ */ jsx(AlertDescription, { children: processingMessage })
160
- ] }) : null,
161
- state === "error" ? /* @__PURE__ */ jsxs(Alert, { variant: "destructive", children: [
162
- /* @__PURE__ */ jsx(AlertTitle, { children: "Payment failed" }),
163
- /* @__PURE__ */ jsx(AlertDescription, { children: errorMessage ?? "Payment failed. Review billing details and retry." })
164
- ] }) : null,
165
- state === "success" ? /* @__PURE__ */ jsxs(Alert, { children: [
166
- /* @__PURE__ */ jsx(AlertTitle, { children: "Payment complete" }),
167
- /* @__PURE__ */ jsx(AlertDescription, { children: successMessage })
168
- ] }) : null,
169
- /* @__PURE__ */ jsx(FieldSet, { children: billingFields.map((field) => /* @__PURE__ */ jsxs(Field, { children: [
170
- /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: field.id, children: [
171
- field.label,
172
- field.required ? /* @__PURE__ */ jsx("span", { className: "ml-1 text-destructive", children: "*" }) : null
173
- ] }),
174
- /* @__PURE__ */ jsx(
175
- Input,
176
- {
177
- id: field.id,
178
- name: field.id,
179
- type: field.type ?? "text",
180
- value: field.value,
181
- placeholder: field.placeholder,
182
- required: field.required,
183
- disabled: isBusy || state === "success",
184
- onChange: (event) => onBillingFieldChange?.(field.id, event.target.value)
185
- }
186
- ),
187
- field.description ? /* @__PURE__ */ jsx(FieldDescription, { children: field.description }) : null
188
- ] }, field.id)) }),
189
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap justify-end gap-2", children: [
190
- state === "error" ? /* @__PURE__ */ jsx(Button, { type: "button", onClick: onRetry, children: "Retry payment" }) : null,
191
- state === "success" ? /* @__PURE__ */ jsx(Button, { type: "button", onClick: onContinue, children: "Continue" }) : null,
192
- state !== "error" && state !== "success" ? /* @__PURE__ */ jsx(Button, { type: "button", disabled: isBusy, onClick: onSubmit, children: isBusy ? "Submitting..." : "Submit payment" }) : null
193
- ] })
194
- ] })
195
- ] }),
196
- /* @__PURE__ */ jsxs(Card, { children: [
197
- /* @__PURE__ */ jsxs(CardHeader, { children: [
198
- /* @__PURE__ */ jsx(CardTitle, { children: summary.title }),
199
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: summary.amountLabel })
200
- ] }),
201
- /* @__PURE__ */ jsx(CardContent, { className: "space-y-3", children: summary.lineItems.map((lineItem) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [
202
- /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: lineItem.label }),
203
- /* @__PURE__ */ jsx("span", { className: "font-medium text-text-primary", children: lineItem.value })
204
- ] }, lineItem.id)) })
205
- ] })
206
- ] }) });
207
- }
208
-
209
- export { CheckoutPageKit };
135
+ import '../../chunk-QYZT24TS.js';
@@ -1,10 +1,11 @@
1
- import { MarketingShellPageKit } from '../../chunk-Z233ZQZE.js';
2
- import { TeamBlock } from '../../chunk-VBZQ4DBE.js';
1
+ export { CompanySuitePageKit } from '../../chunk-QW5II6YK.js';
2
+ import '../../chunk-Z233ZQZE.js';
3
+ import '../../chunk-VBZQ4DBE.js';
3
4
  import '../../chunk-WOYBVPXK.js';
4
- import { ContactBlock } from '../../chunk-U4GYSYGN.js';
5
- import { FAQBlock } from '../../chunk-NEHCPO53.js';
5
+ import '../../chunk-U4GYSYGN.js';
6
+ import '../../chunk-NEHCPO53.js';
6
7
  import '../../chunk-AYWL4IYM.js';
7
- import { CallToActionBlock } from '../../chunk-GJPTPLCQ.js';
8
+ import '../../chunk-GJPTPLCQ.js';
8
9
  import '../../chunk-G5EO22OR.js';
9
10
  import '../../chunk-OHX2LFAH.js';
10
11
  import '../../chunk-SGI25ZJ6.js';
@@ -15,7 +16,7 @@ import '../../chunk-F3T2U7YL.js';
15
16
  import '../../chunk-6DYFX5IR.js';
16
17
  import '../../chunk-EB5PYS7Q.js';
17
18
  import '../../chunk-MDAYDDTC.js';
18
- import { Typography } from '../../chunk-N53OMWW2.js';
19
+ import '../../chunk-N53OMWW2.js';
19
20
  import '../../chunk-4OBE2FS2.js';
20
21
  import '../../chunk-DQPK2XRL.js';
21
22
  import '../../chunk-HOWTYZL5.js';
@@ -30,7 +31,7 @@ import '../../chunk-CUZJIDU7.js';
30
31
  import '../../chunk-AP3XXYAY.js';
31
32
  import '../../chunk-LIBXYD5Q.js';
32
33
  import '../../chunk-I23DDSU7.js';
33
- import { Card, CardHeader, CardTitle, CardContent } from '../../chunk-AH6YSYYT.js';
34
+ import '../../chunk-AH6YSYYT.js';
34
35
  import '../../chunk-7KIDDF3I.js';
35
36
  import '../../chunk-6FOHUNXR.js';
36
37
  import '../../chunk-PD2YEH3H.js';
@@ -149,92 +150,4 @@ import '../../chunk-NURPUVUV.js';
149
150
  import '../../chunk-TV4RSQH4.js';
150
151
  import '../../chunk-HJBXUXTD.js';
151
152
  import '../../chunk-ASKFAYYR.js';
152
- import { cn } from '../../chunk-QYZT24TS.js';
153
- import React from 'react';
154
- import { jsx, jsxs } from 'react/jsx-runtime';
155
-
156
- var DEFAULT_SECTION_ORDER = [
157
- "narrative",
158
- "team",
159
- "contact",
160
- "faq",
161
- "cta"
162
- ];
163
- var DEFAULTS_BY_VARIANT = {
164
- "company-about": {
165
- narrative: {
166
- title: "Built by practitioners who ship with contracts first.",
167
- description: "We partner with teams that need high-quality interfaces and predictable release confidence."
168
- },
169
- team: {
170
- title: "Leadership team"
171
- },
172
- contact: null,
173
- faq: {},
174
- cta: {
175
- title: "Interested in working together?",
176
- description: "Share your route goals and we will propose a rollout plan.",
177
- primaryAction: { label: "Talk to us", href: "/contact" }
178
- }
179
- },
180
- "company-contact": {
181
- narrative: {
182
- title: "Talk to our delivery team",
183
- description: "Tell us what you are building, we will recommend an implementation path."
184
- },
185
- team: null,
186
- contact: {
187
- title: "Contact request",
188
- description: "We respond within one business day.",
189
- submitLabel: "Send request"
190
- },
191
- faq: {},
192
- cta: {
193
- title: "Prefer self-serve?",
194
- description: "Start with our templates and scale with support as needed.",
195
- primaryAction: { label: "View templates", href: "/templates" }
196
- }
197
- }
198
- };
199
- var SECTION_CLASS = "mx-auto w-full max-w-6xl px-6";
200
- function normalizeSectionOrder(sectionOrder) {
201
- if (!sectionOrder || sectionOrder.length === 0) {
202
- return DEFAULT_SECTION_ORDER;
203
- }
204
- return [...new Set(sectionOrder)];
205
- }
206
- function CompanySuitePageKit({
207
- shell,
208
- variant = "company-about",
209
- sectionOrder,
210
- narrative,
211
- team,
212
- contact,
213
- faq,
214
- cta,
215
- className
216
- }) {
217
- const defaults = DEFAULTS_BY_VARIANT[variant];
218
- const resolvedNarrative = narrative ?? defaults.narrative ?? { title: "Company overview" };
219
- const resolvedTeam = team === void 0 ? defaults.team : team;
220
- const resolvedContact = contact === void 0 ? defaults.contact : contact;
221
- const resolvedFaq = faq === void 0 ? defaults.faq : faq;
222
- const resolvedCta = cta === void 0 ? defaults.cta : cta;
223
- const orderedSections = normalizeSectionOrder(sectionOrder);
224
- const sectionById = {
225
- narrative: resolvedNarrative === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "company-section-narrative", className: SECTION_CLASS, children: /* @__PURE__ */ jsxs(Card, { children: [
226
- /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: resolvedNarrative.title }) }),
227
- /* @__PURE__ */ jsxs(CardContent, { className: "space-y-3", children: [
228
- resolvedNarrative.description ? /* @__PURE__ */ jsx(Typography, { variant: "muted", children: resolvedNarrative.description }) : null,
229
- resolvedNarrative.content ? /* @__PURE__ */ jsx("div", { children: resolvedNarrative.content }) : null
230
- ] })
231
- ] }) }),
232
- team: resolvedTeam === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "company-section-team", className: SECTION_CLASS, children: /* @__PURE__ */ jsx(TeamBlock, { ...resolvedTeam }) }),
233
- contact: resolvedContact === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "company-section-contact", className: SECTION_CLASS, children: /* @__PURE__ */ jsx(ContactBlock, { ...resolvedContact }) }),
234
- faq: resolvedFaq === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "company-section-faq", className: SECTION_CLASS, children: /* @__PURE__ */ jsx(FAQBlock, { ...resolvedFaq }) }),
235
- cta: resolvedCta === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "company-section-cta", className: cn(SECTION_CLASS, "pb-16"), children: /* @__PURE__ */ jsx(CallToActionBlock, { ...resolvedCta }) })
236
- };
237
- return /* @__PURE__ */ jsx(MarketingShellPageKit, { ...shell, children: /* @__PURE__ */ jsx("div", { className: cn("space-y-10 pb-10", className), children: orderedSections.map((sectionId) => /* @__PURE__ */ jsx(React.Fragment, { children: sectionById[sectionId] }, sectionId)) }) });
238
- }
239
-
240
- export { CompanySuitePageKit };
153
+ import '../../chunk-QYZT24TS.js';