@vadimcomanescu/nadicode-design-system 2.0.9 → 4.0.0

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 (136) hide show
  1. package/.agents/skills/seed/SKILL.md +19 -10
  2. package/.agents/skills/seed/contract.md +9 -2
  3. package/.agents/skills/seed/references/blocks.md +5 -5
  4. package/.agents/skills/seed/references/components.md +2 -2
  5. package/.agents/skills/seed/references/nextjs.md +2 -2
  6. package/README.md +3 -3
  7. package/contracts/consumer-intent-map.json +1 -2
  8. package/contracts/release-governance-baseline.json +3 -37
  9. package/dist/catalog/catalog.d.ts +2220 -0
  10. package/dist/catalog/catalog.js +1913 -0
  11. package/dist/catalog/components.d.ts +201 -0
  12. package/dist/catalog/components.js +407 -0
  13. package/dist/catalog/types.d.ts +4 -0
  14. package/dist/catalog/types.js +1 -0
  15. package/dist/chunk-224KPIOG.js +60 -0
  16. package/dist/chunk-25BOZMXA.js +169 -0
  17. package/dist/chunk-32OLQ7FC.js +130 -0
  18. package/dist/chunk-3JJBJ4VR.js +47 -0
  19. package/dist/chunk-3U56FXYC.js +30 -0
  20. package/dist/chunk-4MWKE6F5.js +86 -0
  21. package/dist/chunk-6HGSU24S.js +94 -0
  22. package/dist/chunk-7IADIXDV.js +168 -0
  23. package/dist/chunk-7NS3VFD7.js +86 -0
  24. package/dist/chunk-7XLZCXUL.js +175 -0
  25. package/dist/chunk-ALA6OM7K.js +134 -0
  26. package/dist/chunk-AN5TW4AL.js +50 -0
  27. package/dist/chunk-AWZFQQGN.js +167 -0
  28. package/dist/chunk-BRCBJ3S4.js +42 -0
  29. package/dist/chunk-BRICSLHJ.js +30 -0
  30. package/dist/chunk-BYEHHZZN.js +115 -0
  31. package/dist/chunk-C33GUEDY.js +149 -0
  32. package/dist/chunk-CUDMDYKE.js +150 -0
  33. package/dist/chunk-CVTMWSNS.js +145 -0
  34. package/dist/chunk-DEZXWNYF.js +165 -0
  35. package/dist/chunk-DNJEVMDY.js +40 -0
  36. package/dist/chunk-DNJOBML6.js +66 -0
  37. package/dist/chunk-FTGFOK6T.js +69 -0
  38. package/dist/chunk-HFBJ6L6O.js +104 -0
  39. package/dist/chunk-HPTHS7SX.js +52 -0
  40. package/dist/chunk-KNR3WB5C.js +147 -0
  41. package/dist/chunk-KQ7ZC6EM.js +66 -0
  42. package/dist/chunk-LGW7FVG5.js +83 -0
  43. package/dist/chunk-LP6ZZYOQ.js +36 -0
  44. package/dist/chunk-LV4P7WVM.js +54 -0
  45. package/dist/chunk-MGSGCARB.js +164 -0
  46. package/dist/chunk-N3YFYMNZ.js +73 -0
  47. package/dist/chunk-Q5IYBNA7.js +56 -0
  48. package/dist/chunk-QJCE7NZF.js +85 -0
  49. package/dist/chunk-QW5II6YK.js +96 -0
  50. package/dist/chunk-RMGDDOCD.js +138 -0
  51. package/dist/chunk-RNCX4JIE.js +70 -0
  52. package/dist/chunk-RWCL5OPX.js +112 -0
  53. package/dist/chunk-S5OY2B63.js +28 -0
  54. package/dist/chunk-SIQNG72C.js +257 -0
  55. package/dist/chunk-SP7NIZFP.js +117 -0
  56. package/dist/chunk-SWRJWMGG.js +30 -0
  57. package/dist/chunk-TCQIJ3DO.js +85 -0
  58. package/dist/chunk-TPJ6JJ2F.js +290 -0
  59. package/dist/chunk-TUJZMJXW.js +72 -0
  60. package/dist/chunk-UR43ANYS.js +159 -0
  61. package/dist/chunk-VRGPG2YN.js +79 -0
  62. package/dist/chunk-WSBLCWY7.js +126 -0
  63. package/dist/chunk-XKKFSFYO.js +93 -0
  64. package/dist/chunk-XO7TBM47.js +32 -0
  65. package/dist/chunk-YDYDGG5K.js +132 -0
  66. package/dist/chunk-YMJOUYMT.js +171 -0
  67. package/dist/chunk-Z2WION42.js +32 -0
  68. package/dist/chunk-ZFKSVEYW.js +35 -0
  69. package/dist/components/blocks/AgentProfileGridBlock.js +8 -86
  70. package/dist/components/blocks/AgentRunOverviewBlock.js +8 -147
  71. package/dist/components/blocks/AgentWorkbenchBlock.js +15 -257
  72. package/dist/components/blocks/AudioVisualizerBlock.js +2 -50
  73. package/dist/components/blocks/AuthLayout.js +9 -73
  74. package/dist/components/blocks/BannerBlock.js +8 -66
  75. package/dist/components/blocks/BarChartBlock.js +5 -47
  76. package/dist/components/blocks/ChartBlock.js +7 -54
  77. package/dist/components/blocks/ChartCollectionBlock.js +11 -171
  78. package/dist/components/blocks/ChatLayout.js +12 -126
  79. package/dist/components/blocks/CreateBlock.js +9 -104
  80. package/dist/components/blocks/DataGridBlock.js +9 -117
  81. package/dist/components/blocks/DirectoryBlock.js +12 -85
  82. package/dist/components/blocks/FeatureGridBlock.js +6 -56
  83. package/dist/components/blocks/GalleryBlock.js +6 -69
  84. package/dist/components/blocks/HeroSectionBlock.js +10 -134
  85. package/dist/components/blocks/IntegrationsBlock.js +13 -94
  86. package/dist/components/blocks/InteractiveAreaChartBlock.js +5 -290
  87. package/dist/components/blocks/KanbanDemoBlock.js +8 -145
  88. package/dist/components/blocks/LogoCloud.js +4 -35
  89. package/dist/components/blocks/NavUser.js +5 -85
  90. package/dist/components/blocks/NotFoundBlock.js +8 -32
  91. package/dist/components/blocks/OnboardingBlock.js +7 -66
  92. package/dist/components/blocks/SettingsLayout.js +13 -86
  93. package/dist/components/blocks/SignUpBlock.js +8 -168
  94. package/dist/components/blocks/SolutionShowcaseBlock.js +11 -112
  95. package/dist/components/blocks/StatsBlock.js +6 -60
  96. package/dist/components/blocks/UsageDonutBlock.js +5 -79
  97. package/dist/components/blocks/WizardBlock.js +12 -93
  98. package/dist/components/blocks/user/InviteUserModal.js +10 -132
  99. package/dist/components/page-kits/AccountLockedPageKit.js +3 -40
  100. package/dist/components/page-kits/AgentsChatPageKit.js +11 -159
  101. package/dist/components/page-kits/AnalyticsPageKit.js +12 -150
  102. package/dist/components/page-kits/BlogContentPageKit.js +12 -167
  103. package/dist/components/page-kits/CheckoutPageKit.js +9 -83
  104. package/dist/components/page-kits/CompanySuitePageKit.js +9 -96
  105. package/dist/components/page-kits/DashboardPageKit.js +11 -149
  106. package/dist/components/page-kits/ErrorPageKit.js +5 -52
  107. package/dist/components/page-kits/KanbanBoardPageKit.js +7 -169
  108. package/dist/components/page-kits/LandingPageKit.js +11 -72
  109. package/dist/components/page-kits/LoginPageKit.js +3 -32
  110. package/dist/components/page-kits/OnboardingPageKit.js +6 -115
  111. package/dist/components/page-kits/PricingPageKit.js +12 -138
  112. package/dist/components/page-kits/ProfileSettingsPageKit.js +10 -164
  113. package/dist/components/page-kits/RecoveryPageKit.js +3 -42
  114. package/dist/components/page-kits/ResetPageKit.js +3 -36
  115. package/dist/components/page-kits/ServiceSuitePageKit.js +10 -175
  116. package/dist/components/page-kits/SignupPageKit.js +3 -30
  117. package/dist/components/page-kits/SuccessPageKit.js +4 -30
  118. package/dist/components/page-kits/TeamSettingsPageKit.js +9 -165
  119. package/dist/components/page-kits/TwoFactorPageKit.js +4 -28
  120. package/dist/components/page-kits/VerifyEmailPageKit.js +4 -30
  121. package/dist/components/page-kits/VoiceAgentsPageKit.js +13 -130
  122. package/dist/components/ui/CheckoutForm.js +5 -70
  123. package/eslint-rules/nadicode/config.js +1 -0
  124. package/eslint-rules/nadicode/data/catalog-names.json +93 -0
  125. package/eslint-rules/nadicode/index.js +2 -0
  126. package/eslint-rules/nadicode/rules/__tests__/require-catalog-component.test.js +77 -0
  127. package/eslint-rules/nadicode/rules/require-catalog-component.js +79 -0
  128. package/package.json +18 -25
  129. package/contracts/block-props-schemas.json +0 -2186
  130. package/contracts/component-props-schemas.json +0 -8322
  131. package/contracts/consumer-contract.json +0 -178
  132. package/contracts/page-kit-props-schemas.json +0 -1894
  133. package/contracts/public-surface-registry.json +0 -5822
  134. package/contracts/public-surface-registry.schema.json +0 -219
  135. package/contracts/spec-manifest.json +0 -46
  136. 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';