@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,14 +1,15 @@
1
- import { MarketingShellPageKit } from '../../chunk-Z233ZQZE.js';
2
- import { TeamBlock } from '../../chunk-VBZQ4DBE.js';
3
- import { TestimonialsBlock } from '../../chunk-FV2G6SAF.js';
4
- import { ProcessFlowBlock } from '../../chunk-HZERHGBT.js';
5
- import { HeroBlock } from '../../chunk-7A2RXKGH.js';
1
+ export { ServiceSuitePageKit } from '../../chunk-7XLZCXUL.js';
2
+ import '../../chunk-Z233ZQZE.js';
3
+ import '../../chunk-VBZQ4DBE.js';
4
+ import '../../chunk-FV2G6SAF.js';
5
+ import '../../chunk-HZERHGBT.js';
6
+ import '../../chunk-7A2RXKGH.js';
6
7
  import '../../chunk-QQOWC53X.js';
7
8
  import '../../chunk-WOYBVPXK.js';
8
- import { FAQBlock } from '../../chunk-NEHCPO53.js';
9
- import { FeatureBlock } from '../../chunk-HJ3A2YNO.js';
9
+ import '../../chunk-NEHCPO53.js';
10
+ import '../../chunk-HJ3A2YNO.js';
10
11
  import '../../chunk-AYWL4IYM.js';
11
- import { CallToActionBlock } from '../../chunk-GJPTPLCQ.js';
12
+ import '../../chunk-GJPTPLCQ.js';
12
13
  import '../../chunk-G5EO22OR.js';
13
14
  import '../../chunk-OHX2LFAH.js';
14
15
  import '../../chunk-SGI25ZJ6.js';
@@ -152,170 +153,4 @@ import '../../chunk-S4JAHKOP.js';
152
153
  import '../../chunk-TV4RSQH4.js';
153
154
  import '../../chunk-HJBXUXTD.js';
154
155
  import '../../chunk-ASKFAYYR.js';
155
- import { cn } from '../../chunk-QYZT24TS.js';
156
- import React from 'react';
157
- import { jsx } from 'react/jsx-runtime';
158
-
159
- var DEFAULT_SECTION_ORDER = [
160
- "hero",
161
- "features",
162
- "process",
163
- "team",
164
- "testimonials",
165
- "faq",
166
- "cta"
167
- ];
168
- var DEFAULTS_BY_VARIANT = {
169
- "agency-home": {
170
- hero: {
171
- headline: "A service partner for design and engineering velocity.",
172
- subheadline: "Launch polished digital experiences with a repeatable service system.",
173
- primaryAction: { label: "Talk to sales" }
174
- },
175
- features: {
176
- features: [
177
- {
178
- title: "Cross-functional squads",
179
- description: "Design, engineering, and QA operating in one weekly cadence.",
180
- icon: /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\u25CF" }),
181
- bullets: ["Shared backlog", "Contract-first delivery", "Continuous validation"],
182
- buttonLabel: "Learn more"
183
- }
184
- ]
185
- },
186
- process: {
187
- title: "Service process",
188
- steps: [
189
- { title: "Discover", description: "Map goals, constraints, and target outcomes." },
190
- { title: "Build", description: "Ship slices weekly with measurable acceptance." },
191
- { title: "Scale", description: "Expand coverage using reusable contracts and kits." }
192
- ]
193
- },
194
- team: null,
195
- testimonials: {},
196
- faq: {},
197
- cta: {
198
- title: "Need an execution partner?",
199
- description: "Book a planning session and get a route-level rollout plan.",
200
- primaryAction: { label: "Book planning", href: "/contact" }
201
- }
202
- },
203
- "digital-workers": {
204
- hero: {
205
- headline: "Digital workers for planning, delivery, and quality.",
206
- subheadline: "Deploy role-based workers that execute work while humans stay in control.",
207
- primaryAction: { label: "Request demo" }
208
- },
209
- features: {
210
- features: [
211
- {
212
- title: "Role-specialized workers",
213
- description: "Assign planner, coder, and QA workers per workflow.",
214
- icon: /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\u25CD" }),
215
- bullets: ["Shared context", "Traceable decisions", "Approval checkpoints"],
216
- buttonLabel: "Explore workers"
217
- }
218
- ]
219
- },
220
- process: {
221
- title: "Delivery process",
222
- steps: [
223
- { title: "Select workers", description: "Pick the worker stack for each objective." },
224
- { title: "Run supervised", description: "Review outputs before execution-critical actions." },
225
- { title: "Promote safely", description: "Ship with tests and release gates enforced." }
226
- ]
227
- },
228
- team: {
229
- title: "Worker team"
230
- },
231
- testimonials: {},
232
- faq: {},
233
- cta: {
234
- title: "Design your worker stack",
235
- description: "Start with a pilot route and scale based on measured outcomes.",
236
- primaryAction: { label: "Start pilot", href: "/contact" }
237
- }
238
- },
239
- "service-detail": {
240
- hero: {
241
- headline: "A focused service track for your highest-impact route.",
242
- subheadline: "Bring one route from concept to production with a contract-first approach.",
243
- primaryAction: { label: "Request proposal" }
244
- },
245
- features: {
246
- features: [
247
- {
248
- title: "Outcome-led scope",
249
- description: "Every section is mapped to a measurable business outcome.",
250
- icon: /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\u25C9" }),
251
- bullets: ["Delivery milestones", "Weekly demos", "Launch checklist"],
252
- buttonLabel: "See deliverables"
253
- }
254
- ]
255
- },
256
- process: {
257
- title: "Implementation steps",
258
- steps: [
259
- { title: "Audit", description: "Review current route structure and conversion friction." },
260
- { title: "Design", description: "Define section contracts and interaction states." },
261
- { title: "Implement", description: "Ship validated route kit with test coverage." }
262
- ]
263
- },
264
- team: null,
265
- testimonials: {},
266
- faq: {},
267
- cta: {
268
- title: "Need this service for your route?",
269
- description: "Share your current page and goals, we will map a rollout plan.",
270
- primaryAction: { label: "Contact team", href: "/contact" }
271
- }
272
- }
273
- };
274
- function normalizeSectionOrder(sectionOrder) {
275
- if (!sectionOrder || sectionOrder.length === 0) {
276
- return DEFAULT_SECTION_ORDER;
277
- }
278
- const seen = /* @__PURE__ */ new Set();
279
- return sectionOrder.filter((sectionId) => {
280
- if (seen.has(sectionId)) {
281
- return false;
282
- }
283
- seen.add(sectionId);
284
- return true;
285
- });
286
- }
287
- function ServiceSuitePageKit({
288
- shell,
289
- variant = "agency-home",
290
- sectionOrder,
291
- hero,
292
- features,
293
- process,
294
- team,
295
- testimonials,
296
- faq,
297
- cta,
298
- className
299
- }) {
300
- const defaults = DEFAULTS_BY_VARIANT[variant];
301
- const resolvedHero = hero ?? defaults.hero;
302
- const resolvedFeatures = features === void 0 ? defaults.features : features;
303
- const resolvedProcess = process === void 0 ? defaults.process : process;
304
- const resolvedTeam = team === void 0 ? defaults.team : team;
305
- const resolvedTestimonials = testimonials === void 0 ? defaults.testimonials : testimonials;
306
- const resolvedFaq = faq === void 0 ? defaults.faq : faq;
307
- const resolvedCta = cta === void 0 ? defaults.cta : cta;
308
- const orderedSections = normalizeSectionOrder(sectionOrder);
309
- const sectionById = {
310
- hero: resolvedHero === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-hero", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(HeroBlock, { variant: "split", ...resolvedHero }) }),
311
- features: resolvedFeatures === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-features", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(FeatureBlock, { variant: "list", ...resolvedFeatures }) }),
312
- process: resolvedProcess === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-process", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(ProcessFlowBlock, { ...resolvedProcess }) }),
313
- team: resolvedTeam === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-team", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(TeamBlock, { ...resolvedTeam }) }),
314
- testimonials: resolvedTestimonials === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-testimonials", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(TestimonialsBlock, { ...resolvedTestimonials }) }),
315
- faq: resolvedFaq === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-faq", className: "mx-auto w-full max-w-6xl px-6", children: /* @__PURE__ */ jsx(FAQBlock, { ...resolvedFaq }) }),
316
- cta: resolvedCta === null ? null : /* @__PURE__ */ jsx("section", { "data-testid": "service-section-cta", className: "mx-auto w-full max-w-6xl px-6 pb-16", children: /* @__PURE__ */ jsx(CallToActionBlock, { ...resolvedCta }) })
317
- };
318
- 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)) }) });
319
- }
320
-
321
- export { ServiceSuitePageKit };
156
+ import '../../chunk-QYZT24TS.js';
@@ -1,4 +1,5 @@
1
- import { LoginBlock } from '../../chunk-RGE5OQMZ.js';
1
+ export { SignupPageKit } from '../../chunk-BRICSLHJ.js';
2
+ import '../../chunk-RGE5OQMZ.js';
2
3
  import '../../chunk-DQPK2XRL.js';
3
4
  import '../../chunk-WI547C47.js';
4
5
  import '../../chunk-RX5EUODB.js';
@@ -10,32 +11,4 @@ import '../../chunk-7KIDDF3I.js';
10
11
  import '../../chunk-PD2YEH3H.js';
11
12
  import '../../chunk-CRY67BIF.js';
12
13
  import '../../chunk-HJC6U46F.js';
13
- import { cn } from '../../chunk-QYZT24TS.js';
14
- import { jsx } from 'react/jsx-runtime';
15
-
16
- function SignupPageKit({
17
- action,
18
- googleAction,
19
- error,
20
- showSocial = true,
21
- labels,
22
- signInHref,
23
- className,
24
- cardClassName
25
- }) {
26
- 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__ */ jsx("div", { className: "mx-auto flex w-full max-w-5xl items-center justify-center", children: /* @__PURE__ */ jsx(
27
- LoginBlock,
28
- {
29
- className: cn("w-full", cardClassName),
30
- type: "signup",
31
- action,
32
- googleAction,
33
- error,
34
- showSocial,
35
- labels,
36
- signInHref
37
- }
38
- ) }) });
39
- }
40
-
41
- export { SignupPageKit };
14
+ import '../../chunk-QYZT24TS.js';
@@ -1,4 +1,5 @@
1
- import { AuthSuccessBlock } from '../../chunk-LCKLZ4XK.js';
1
+ export { SuccessPageKit } from '../../chunk-3U56FXYC.js';
2
+ import '../../chunk-LCKLZ4XK.js';
2
3
  import '../../chunk-AH6YSYYT.js';
3
4
  import '../../chunk-7KIDDF3I.js';
4
5
  import '../../chunk-PD2YEH3H.js';
@@ -72,7 +73,7 @@ import '../../chunk-RF6ECFS5.js';
72
73
  import '../../chunk-KYZT3RNW.js';
73
74
  import '../../chunk-UEG2LI7Z.js';
74
75
  import '../../chunk-CI7GPGCJ.js';
75
- import { CheckCircleIcon } from '../../chunk-226EBOTK.js';
76
+ import '../../chunk-226EBOTK.js';
76
77
  import '../../chunk-74RKVIBV.js';
77
78
  import '../../chunk-V6WNRZT3.js';
78
79
  import '../../chunk-JBK2LA6U.js';
@@ -116,31 +117,4 @@ import '../../chunk-NURPUVUV.js';
116
117
  import '../../chunk-TV4RSQH4.js';
117
118
  import '../../chunk-HJBXUXTD.js';
118
119
  import '../../chunk-ASKFAYYR.js';
119
- import { cn } from '../../chunk-QYZT24TS.js';
120
- import { jsx } from 'react/jsx-runtime';
121
-
122
- function SuccessPageKit({
123
- icon = /* @__PURE__ */ jsx(CheckCircleIcon, { size: 32, className: "text-success" }),
124
- title = "Success",
125
- description = "Your request completed successfully.",
126
- buttonText = "Continue",
127
- onContinue,
128
- autoRedirectSeconds,
129
- className,
130
- cardClassName
131
- }) {
132
- 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__ */ jsx("div", { className: "mx-auto flex w-full max-w-5xl items-center justify-center", children: /* @__PURE__ */ jsx(
133
- AuthSuccessBlock,
134
- {
135
- className: cn("w-full", cardClassName),
136
- icon,
137
- title,
138
- description,
139
- buttonText,
140
- onContinue,
141
- autoRedirectSeconds
142
- }
143
- ) }) });
144
- }
145
-
146
- export { SuccessPageKit };
120
+ import '../../chunk-QYZT24TS.js';
@@ -1,15 +1,16 @@
1
- import { CrudListDetailPageKit } from '../../chunk-OJ7OO3QB.js';
1
+ export { TeamSettingsPageKit } from '../../chunk-DEZXWNYF.js';
2
+ import '../../chunk-OJ7OO3QB.js';
2
3
  import '../../chunk-ZKLB5N3Q.js';
3
- import { Typography } from '../../chunk-N53OMWW2.js';
4
+ import '../../chunk-N53OMWW2.js';
4
5
  import '../../chunk-J2DCQDXO.js';
5
6
  import '../../chunk-C4SNHMYC.js';
6
7
  import '../../chunk-B5QL76GA.js';
7
8
  import '../../chunk-HOWTYZL5.js';
8
- import { RoleBadge } from '../../chunk-OHCQPI3W.js';
9
+ import '../../chunk-OHCQPI3W.js';
9
10
  import '../../chunk-2BADJLMV.js';
10
11
  import '../../chunk-WI547C47.js';
11
12
  import '../../chunk-PXDHNGTG.js';
12
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '../../chunk-CQEUNASC.js';
13
+ import '../../chunk-CQEUNASC.js';
13
14
  import '../../chunk-CUZJIDU7.js';
14
15
  import '../../chunk-AP3XXYAY.js';
15
16
  import '../../chunk-LIBXYD5Q.js';
@@ -18,8 +19,8 @@ import '../../chunk-55HD4L6G.js';
18
19
  import '../../chunk-MJ4CB6ZL.js';
19
20
  import '../../chunk-35EX5FP5.js';
20
21
  import '../../chunk-AH6YSYYT.js';
21
- import { Avatar, AvatarImage, AvatarFallback } from '../../chunk-NAAU5IWU.js';
22
- import { Button } from '../../chunk-7KIDDF3I.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';
@@ -82,7 +83,7 @@ import '../../chunk-WA45EC4Y.js';
82
83
  import '../../chunk-2MOEOEOI.js';
83
84
  import '../../chunk-5LCXASRW.js';
84
85
  import '../../chunk-2ZJVU7NV.js';
85
- import { EllipsisIcon } from '../../chunk-5ESF6N36.js';
86
+ import '../../chunk-5ESF6N36.js';
86
87
  import '../../chunk-RBPLOM3A.js';
87
88
  import '../../chunk-6BAV4TZ5.js';
88
89
  import '../../chunk-SW6QPJM4.js';
@@ -133,165 +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
141
  import '../../chunk-QYZT24TS.js';
141
- import { useMemo } from 'react';
142
- import { jsxs, jsx } from 'react/jsx-runtime';
143
-
144
- var EMPTY_MEMBER_ACTIONS = [];
145
- function statusBadge(status) {
146
- switch (status) {
147
- case "active":
148
- return /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "border-success/20 bg-success/10 text-success", children: "Active" });
149
- case "invited":
150
- return /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "border-warning/20 bg-warning/10 text-warning", children: "Invited" });
151
- case "suspended":
152
- return /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "border-destructive/20 bg-destructive/10 text-destructive", children: "Suspended" });
153
- }
154
- }
155
- function mapState(state) {
156
- switch (state) {
157
- case void 0:
158
- return void 0;
159
- case "invited-member":
160
- case "active-member":
161
- return "selected-row";
162
- case "saving":
163
- return "loading";
164
- case "fatal-error":
165
- return "error";
166
- default:
167
- return state;
168
- }
169
- }
170
- function TeamSettingsPageKit({
171
- shell,
172
- state,
173
- members,
174
- seatSummary,
175
- search,
176
- inviteAction,
177
- memberActions = EMPTY_MEMBER_ACTIONS,
178
- onMemberAction,
179
- selectedMemberId = null,
180
- onSelectedMemberChange,
181
- errorMessage,
182
- className
183
- }) {
184
- const membersById = useMemo(
185
- () => new Map(members.map((member) => [member.id, member])),
186
- [members]
187
- );
188
- const mappedRows = useMemo(
189
- () => members.map((member) => ({
190
- id: member.id,
191
- summaryLabel: member.name,
192
- cells: {
193
- member: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
194
- /* @__PURE__ */ jsxs(Avatar, { className: "h-9 w-9 border border-border-subtle", children: [
195
- member.avatarUrl ? /* @__PURE__ */ jsx(AvatarImage, { src: member.avatarUrl, alt: member.name }) : null,
196
- /* @__PURE__ */ jsx(AvatarFallback, { children: member.avatarFallback ?? member.name.slice(0, 1).toUpperCase() })
197
- ] }),
198
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
199
- /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium text-text-primary", children: member.name }),
200
- /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-text-secondary", children: member.email })
201
- ] })
202
- ] }),
203
- role: /* @__PURE__ */ jsx(RoleBadge, { role: member.role }),
204
- status: statusBadge(member.status),
205
- joined: member.joinedLabel ?? "-",
206
- actions: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
207
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", "aria-label": `Actions for ${member.name}`, children: /* @__PURE__ */ jsx(EllipsisIcon, { size: 16 }) }) }),
208
- /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: memberActions.map((action) => /* @__PURE__ */ jsx(
209
- DropdownMenuItem,
210
- {
211
- className: action.tone === "destructive" ? "text-destructive focus:text-destructive" : void 0,
212
- onClick: () => onMemberAction?.(member.id, action.id),
213
- children: action.label
214
- },
215
- action.id
216
- )) })
217
- ] })
218
- }
219
- })),
220
- [memberActions, members, onMemberAction]
221
- );
222
- const inviteDisabled = inviteAction.canInvite === false;
223
- return /* @__PURE__ */ jsx(
224
- CrudListDetailPageKit,
225
- {
226
- shell,
227
- title: "Team settings",
228
- description: "Manage members, roles, and seat usage through a consistent workspace roster contract.",
229
- state: mapState(state),
230
- columns: [
231
- { id: "member", header: "Member" },
232
- { id: "role", header: "Role" },
233
- { id: "status", header: "Status" },
234
- { id: "joined", header: "Joined" },
235
- { id: "actions", header: "Actions", headerClassName: "w-[80px]" }
236
- ],
237
- rows: mappedRows,
238
- filterControls: [
239
- {
240
- id: "team-search",
241
- label: search.label ?? "Search members",
242
- value: search.value,
243
- onChange: search.onChange,
244
- placeholder: search.placeholder
245
- }
246
- ],
247
- selectedRowId: selectedMemberId,
248
- onRowSelect: onSelectedMemberChange,
249
- detailPanel: {
250
- title: "Member detail",
251
- description: "Inspect role, status, and contact details for the selected member.",
252
- mode: "inline",
253
- renderDetail: (row) => {
254
- const member = membersById.get(row.id);
255
- if (!member) {
256
- return null;
257
- }
258
- return /* @__PURE__ */ jsxs("div", { className: "space-y-2 text-sm", children: [
259
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: member.email }),
260
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
261
- /* @__PURE__ */ jsx(RoleBadge, { role: member.role }),
262
- statusBadge(member.status)
263
- ] }),
264
- /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
265
- "Joined ",
266
- member.joinedLabel ?? "-"
267
- ] })
268
- ] });
269
- }
270
- },
271
- emptyState: {
272
- title: "No team members",
273
- description: "Invite your first member to start collaborating."
274
- },
275
- pagination: {
276
- page: 1,
277
- totalPages: 1,
278
- onPageChange: () => {
279
- }
280
- },
281
- errorMessage: errorMessage ?? "Team settings are unavailable. Retry shortly.",
282
- headerActions: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-end gap-1", children: [
283
- /* @__PURE__ */ jsx(Button, { onClick: inviteAction.onInvite, disabled: inviteDisabled, children: inviteAction.label }),
284
- /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-text-secondary", children: [
285
- seatSummary.usedSeats,
286
- " of ",
287
- seatSummary.totalSeats,
288
- " seats used"
289
- ] }),
290
- inviteDisabled && inviteAction.disabledReason ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-warning", children: inviteAction.disabledReason }) : null
291
- ] }),
292
- className
293
- }
294
- );
295
- }
296
-
297
- export { TeamSettingsPageKit };
@@ -1,5 +1,6 @@
1
- import { TwoFactorChallengeBlock } from '../../chunk-W7FXDRQJ.js';
2
- import { TwoFactorSetupBlock } from '../../chunk-IXQGKJU4.js';
1
+ export { TwoFactorPageKit } from '../../chunk-S5OY2B63.js';
2
+ import '../../chunk-W7FXDRQJ.js';
3
+ import '../../chunk-IXQGKJU4.js';
3
4
  import '../../chunk-MDAYDDTC.js';
4
5
  import '../../chunk-DQPK2XRL.js';
5
6
  import '../../chunk-WN5ONOHC.js';
@@ -128,29 +129,4 @@ import '../../chunk-S4JAHKOP.js';
128
129
  import '../../chunk-TV4RSQH4.js';
129
130
  import '../../chunk-HJBXUXTD.js';
130
131
  import '../../chunk-ASKFAYYR.js';
131
- import { cn } from '../../chunk-QYZT24TS.js';
132
- import { jsx, jsxs } from 'react/jsx-runtime';
133
-
134
- function TwoFactorPageKit({
135
- mode = "challenge",
136
- challengeProps,
137
- setupProps,
138
- errorMessage,
139
- className,
140
- cardClassName
141
- }) {
142
- const pageContent = mode === "setup" ? /* @__PURE__ */ jsx(TwoFactorSetupBlock, { className: cn("w-full", cardClassName), ...setupProps }) : /* @__PURE__ */ jsx(TwoFactorChallengeBlock, { className: cn("w-full", cardClassName), ...challengeProps });
143
- 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: [
144
- errorMessage ? /* @__PURE__ */ jsx(
145
- "div",
146
- {
147
- role: "alert",
148
- className: "w-full max-w-sm rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive",
149
- children: errorMessage
150
- }
151
- ) : null,
152
- pageContent
153
- ] }) });
154
- }
155
-
156
- export { TwoFactorPageKit };
132
+ import '../../chunk-QYZT24TS.js';
@@ -1,4 +1,5 @@
1
- import { AuthSuccessBlock } from '../../chunk-LCKLZ4XK.js';
1
+ export { VerifyEmailPageKit } from '../../chunk-SWRJWMGG.js';
2
+ import '../../chunk-LCKLZ4XK.js';
2
3
  import '../../chunk-AH6YSYYT.js';
3
4
  import '../../chunk-7KIDDF3I.js';
4
5
  import '../../chunk-PD2YEH3H.js';
@@ -37,7 +38,7 @@ import '../../chunk-RYOTIXZO.js';
37
38
  import '../../chunk-JZ4G2SJH.js';
38
39
  import '../../chunk-KYGKJ553.js';
39
40
  import '../../chunk-M7YSMMAC.js';
40
- import { MailIcon } from '../../chunk-XQ2UDMPO.js';
41
+ import '../../chunk-XQ2UDMPO.js';
41
42
  import '../../chunk-JMCSAGZ3.js';
42
43
  import '../../chunk-QUKDUSHD.js';
43
44
  import '../../chunk-O74AEVHW.js';
@@ -116,31 +117,4 @@ import '../../chunk-NURPUVUV.js';
116
117
  import '../../chunk-TV4RSQH4.js';
117
118
  import '../../chunk-HJBXUXTD.js';
118
119
  import '../../chunk-ASKFAYYR.js';
119
- import { cn } from '../../chunk-QYZT24TS.js';
120
- import { jsx } from 'react/jsx-runtime';
121
-
122
- function VerifyEmailPageKit({
123
- icon = /* @__PURE__ */ jsx(MailIcon, { size: 32, className: "text-success" }),
124
- title = "Email verified!",
125
- description = "Your email has been verified. Continue to sign in.",
126
- buttonText = "Continue to sign in",
127
- onContinue,
128
- autoRedirectSeconds,
129
- className,
130
- cardClassName
131
- }) {
132
- 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__ */ jsx("div", { className: "mx-auto flex w-full max-w-5xl items-center justify-center", children: /* @__PURE__ */ jsx(
133
- AuthSuccessBlock,
134
- {
135
- className: cn("w-full", cardClassName),
136
- icon,
137
- title,
138
- description,
139
- buttonText,
140
- onContinue,
141
- autoRedirectSeconds
142
- }
143
- ) }) });
144
- }
145
-
146
- export { VerifyEmailPageKit };
120
+ import '../../chunk-QYZT24TS.js';