@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,8 +1,9 @@
1
1
  'use client';
2
- import { AreaChart } from '../../chunk-IPXL7WX7.js';
3
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '../../chunk-WH62BE24.js';
2
+ export { InteractiveAreaChartBlock } from '../../chunk-TPJ6JJ2F.js';
3
+ import '../../chunk-IPXL7WX7.js';
4
+ import '../../chunk-WH62BE24.js';
4
5
  import '../../chunk-WSU2PCA2.js';
5
- import { Card, CardHeader, CardTitle, CardDescription, CardContent } from '../../chunk-AH6YSYYT.js';
6
+ import '../../chunk-AH6YSYYT.js';
6
7
  import '../../chunk-PD2YEH3H.js';
7
8
  import '../../chunk-CRY67BIF.js';
8
9
  import '../../chunk-HJC6U46F.js';
@@ -118,290 +119,4 @@ import '../../chunk-NURPUVUV.js';
118
119
  import '../../chunk-TV4RSQH4.js';
119
120
  import '../../chunk-HJBXUXTD.js';
120
121
  import '../../chunk-ASKFAYYR.js';
121
- import { cn } from '../../chunk-QYZT24TS.js';
122
- import * as React from 'react';
123
- import { jsxs, jsx } from 'react/jsx-runtime';
124
-
125
- var defaultTimeRanges = [
126
- { value: "90d", label: "Last 3 months", days: 90 },
127
- { value: "30d", label: "Last 30 days", days: 30 },
128
- { value: "7d", label: "Last 7 days", days: 7 }
129
- ];
130
- var defaultData = (() => {
131
- const base = /* @__PURE__ */ new Date("2024-06-15");
132
- const desktopValues = [
133
- 312,
134
- 245,
135
- 178,
136
- 389,
137
- 267,
138
- 334,
139
- 198,
140
- 421,
141
- 156,
142
- 290,
143
- 375,
144
- 203,
145
- 348,
146
- 187,
147
- 412,
148
- 256,
149
- 301,
150
- 169,
151
- 395,
152
- 228,
153
- 367,
154
- 194,
155
- 340,
156
- 275,
157
- 403,
158
- 215,
159
- 352,
160
- 183,
161
- 298,
162
- 246,
163
- 385,
164
- 210,
165
- 327,
166
- 171,
167
- 416,
168
- 263,
169
- 309,
170
- 195,
171
- 388,
172
- 231,
173
- 370,
174
- 201,
175
- 345,
176
- 278,
177
- 407,
178
- 219,
179
- 356,
180
- 186,
181
- 302,
182
- 249,
183
- 380,
184
- 207,
185
- 332,
186
- 174,
187
- 413,
188
- 260,
189
- 305,
190
- 192,
191
- 392,
192
- 234,
193
- 373,
194
- 198,
195
- 342,
196
- 272,
197
- 405,
198
- 222,
199
- 359,
200
- 189,
201
- 306,
202
- 252,
203
- 377,
204
- 204,
205
- 335,
206
- 177,
207
- 410,
208
- 257,
209
- 308,
210
- 196,
211
- 390,
212
- 237,
213
- 376,
214
- 200,
215
- 339,
216
- 270,
217
- 408,
218
- 225,
219
- 362,
220
- 191,
221
- 303,
222
- 248,
223
- 382,
224
- 209,
225
- 330,
226
- 173,
227
- 415,
228
- 261,
229
- 311,
230
- 193,
231
- 387,
232
- 233
233
- ];
234
- const mobileValues = [
235
- 215,
236
- 312,
237
- 178,
238
- 256,
239
- 345,
240
- 189,
241
- 278,
242
- 367,
243
- 201,
244
- 290,
245
- 234,
246
- 156,
247
- 323,
248
- 198,
249
- 267,
250
- 389,
251
- 212,
252
- 345,
253
- 176,
254
- 301,
255
- 248,
256
- 167,
257
- 334,
258
- 205,
259
- 278,
260
- 356,
261
- 189,
262
- 312,
263
- 223,
264
- 267,
265
- 241,
266
- 159,
267
- 328,
268
- 201,
269
- 271,
270
- 382,
271
- 195,
272
- 338,
273
- 179,
274
- 305,
275
- 245,
276
- 162,
277
- 330,
278
- 208,
279
- 274,
280
- 360,
281
- 192,
282
- 315,
283
- 226,
284
- 270,
285
- 238,
286
- 155,
287
- 325,
288
- 198,
289
- 268,
290
- 385,
291
- 191,
292
- 342,
293
- 182,
294
- 308,
295
- 242,
296
- 164,
297
- 332,
298
- 210,
299
- 276,
300
- 358,
301
- 188,
302
- 318,
303
- 220,
304
- 264,
305
- 240,
306
- 157,
307
- 322,
308
- 195,
309
- 265,
310
- 388,
311
- 194,
312
- 340,
313
- 180,
314
- 302,
315
- 247,
316
- 166,
317
- 336,
318
- 212,
319
- 280,
320
- 362,
321
- 190,
322
- 320,
323
- 228,
324
- 272,
325
- 236,
326
- 153,
327
- 327,
328
- 200,
329
- 270,
330
- 380,
331
- 193,
332
- 335,
333
- 175,
334
- 310
335
- ];
336
- return Array.from({ length: 100 }, (_, i) => {
337
- const date = new Date(base);
338
- date.setDate(date.getDate() - (99 - i));
339
- return {
340
- date: date.toISOString().split("T")[0],
341
- desktop: desktopValues[i],
342
- mobile: mobileValues[i]
343
- };
344
- });
345
- })();
346
- var defaultConfig = {
347
- visitors: {
348
- label: "Visitors"
349
- },
350
- desktop: {
351
- label: "Desktop",
352
- color: "rgb(var(--chart-1))"
353
- },
354
- mobile: {
355
- label: "Mobile",
356
- color: "rgb(var(--chart-2))"
357
- }
358
- };
359
- function InteractiveAreaChartBlock({
360
- data = defaultData,
361
- config = defaultConfig,
362
- title = "Traffic Analysis",
363
- description = "Showing total visitors for the last 3 months",
364
- timeRanges = defaultTimeRanges,
365
- className
366
- }) {
367
- const [timeRange, setTimeRange] = React.useState(timeRanges[0]?.value ?? "90d");
368
- const filteredData = React.useMemo(() => data.filter((item) => {
369
- const date = new Date(item.date);
370
- const now = /* @__PURE__ */ new Date();
371
- const selectedRange = timeRanges.find((r) => r.value === timeRange);
372
- const daysToSubtract = selectedRange?.days ?? 90;
373
- now.setDate(now.getDate() - daysToSubtract);
374
- return date >= now;
375
- }), [data, timeRanges, timeRange]);
376
- return /* @__PURE__ */ jsxs(Card, { className: cn(className), children: [
377
- /* @__PURE__ */ jsxs(CardHeader, { className: "flex items-center gap-2 space-y-0 border-b border-border py-6 sm:flex-row", children: [
378
- /* @__PURE__ */ jsxs("div", { className: "grid flex-1 gap-1.5 text-center sm:text-left", children: [
379
- /* @__PURE__ */ jsx(CardTitle, { children: title }),
380
- /* @__PURE__ */ jsx(CardDescription, { children: description })
381
- ] }),
382
- /* @__PURE__ */ jsxs(Select, { value: timeRange, onValueChange: setTimeRange, children: [
383
- /* @__PURE__ */ jsx(
384
- SelectTrigger,
385
- {
386
- className: "w-[160px] rounded-lg sm:ml-auto",
387
- "aria-label": "Select a value",
388
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: timeRanges[0]?.label ?? "Last 3 months" })
389
- }
390
- ),
391
- /* @__PURE__ */ jsx(SelectContent, { className: "rounded-xl", children: timeRanges.map((range) => /* @__PURE__ */ jsx(SelectItem, { value: range.value, className: "rounded-lg", children: range.label }, range.value)) })
392
- ] })
393
- ] }),
394
- /* @__PURE__ */ jsx(CardContent, { className: "px-2 pt-4 sm:px-6 sm:pt-6", children: /* @__PURE__ */ jsx(
395
- AreaChart,
396
- {
397
- data: filteredData,
398
- config,
399
- indexKey: "date",
400
- areas: ["mobile", "desktop"],
401
- stacked: true
402
- }
403
- ) })
404
- ] });
405
- }
406
-
407
- export { InteractiveAreaChartBlock };
122
+ import '../../chunk-QYZT24TS.js';
@@ -1,154 +1,17 @@
1
1
  'use client';
2
- import { Typography } from '../../chunk-N53OMWW2.js';
3
- import { Heading } from '../../chunk-WI547C47.js';
4
- import { KanbanBoard, KanbanColumn, KanbanColumnHeader, KanbanItem, KanbanHandle } from '../../chunk-TYP2MR3Q.js';
2
+ export { KanbanDemoBlock } from '../../chunk-CVTMWSNS.js';
3
+ import '../../chunk-N53OMWW2.js';
4
+ import '../../chunk-WI547C47.js';
5
+ import '../../chunk-TYP2MR3Q.js';
5
6
  import '../../chunk-VTAOHSPW.js';
6
7
  import '../../chunk-B3BYBSF2.js';
7
8
  import '../../chunk-FOFGPWFS.js';
8
- import { Empty, EmptyDescription } from '../../chunk-55HD4L6G.js';
9
- import { Avatar, AvatarFallback } from '../../chunk-NAAU5IWU.js';
9
+ import '../../chunk-55HD4L6G.js';
10
+ import '../../chunk-NAAU5IWU.js';
10
11
  import '../../chunk-PD2YEH3H.js';
11
12
  import '../../chunk-CRY67BIF.js';
12
13
  import '../../chunk-HJC6U46F.js';
13
14
  import '../../chunk-WXVNTJIB.js';
14
- import { Badge } from '../../chunk-S4JAHKOP.js';
15
+ import '../../chunk-S4JAHKOP.js';
15
16
  import '../../chunk-ASKFAYYR.js';
16
- import { cn } from '../../chunk-QYZT24TS.js';
17
- import { useState } from 'react';
18
- import { jsxs, jsx } from 'react/jsx-runtime';
19
-
20
- var PRIORITY_STYLES = {
21
- low: { dot: "bg-success", badge: "bg-success/10 text-success" },
22
- medium: { dot: "bg-warning", badge: "bg-warning/10 text-warning" },
23
- high: { dot: "bg-destructive", badge: "bg-destructive/10 text-destructive" },
24
- critical: { dot: "bg-destructive", badge: "bg-destructive/20 text-destructive" }
25
- };
26
- var COLUMN_META = {
27
- backlog: { label: "Backlog", color: "bg-text-tertiary" },
28
- todo: { label: "To Do", color: "bg-accent" },
29
- "in-progress": { label: "In Progress", color: "bg-warning" },
30
- review: { label: "Review", color: "bg-info" },
31
- done: { label: "Done", color: "bg-success" }
32
- };
33
- var INITIAL_COLUMNS = [
34
- {
35
- id: "backlog",
36
- items: [
37
- { id: "t1", title: "Design token audit", description: "Review all semantic tokens for contrast compliance", priority: "medium", assignee: "AK", tags: ["tokens", "a11y"] },
38
- { id: "t2", title: "Update changelog", description: "Document v2.0 breaking changes", priority: "low", assignee: "VM", tags: ["docs"] },
39
- { id: "t3", title: "Virtualized list primitive", description: "Research windowing for large data tables", priority: "low", assignee: "JR", tags: ["perf", "research"] }
40
- ]
41
- },
42
- {
43
- id: "todo",
44
- items: [
45
- { id: "t4", title: "Date range picker a11y", description: "Fix keyboard navigation between months", priority: "high", assignee: "AK", tags: ["a11y", "datepicker"] },
46
- { id: "t5", title: "Carousel keyboard nav", description: "Arrow keys should cycle through slides", priority: "high", assignee: "VM", tags: ["a11y", "carousel"] }
47
- ]
48
- },
49
- {
50
- id: "in-progress",
51
- items: [
52
- { id: "t6", title: "Kanban board primitive", description: "dnd-kit compound component with glass styling", priority: "critical", assignee: "VM", tags: ["dnd", "new"] },
53
- { id: "t7", title: "Bloom theme spring tuning", description: "Adjust bloom spring presets for more playful overshoot", priority: "medium", assignee: "JR", tags: ["motion", "bloom"] }
54
- ]
55
- },
56
- {
57
- id: "review",
58
- items: [
59
- { id: "t8", title: "Form wizard validation", description: "Zod schema per step with async validation support", priority: "high", assignee: "AK", tags: ["forms", "zod"] }
60
- ]
61
- },
62
- {
63
- id: "done",
64
- items: [
65
- { id: "t9", title: "Dark mode polish", description: "Fix washed-out glass panels in dark mode", priority: "medium", assignee: "VM", tags: ["theme", "glass"] },
66
- { id: "t10", title: "Icon animation system", description: "77 animated icons with imperative handles", priority: "low", assignee: "JR", tags: ["icons", "motion"] }
67
- ]
68
- }
69
- ];
70
- function TaskCard({ task, compact = false }) {
71
- const ps = PRIORITY_STYLES[task.priority];
72
- const content = /* @__PURE__ */ jsxs("div", { className: cn("min-w-0 flex-1 space-y-2", compact && "w-[260px] p-3"), children: [
73
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
74
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-text-primary leading-snug", children: task.title }),
75
- !compact && /* @__PURE__ */ jsx("div", { className: cn("mt-0.5 h-2 w-2 shrink-0 rounded-full", ps.dot) })
76
- ] }),
77
- /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary line-clamp-2", children: task.description }),
78
- !compact && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: task.tags.map((tag) => /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "rounded bg-surface-secondary px-1.5 text-[10px] font-medium text-text-tertiary", children: tag }, tag)) }),
79
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between pt-1", children: [
80
- /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn("rounded px-1.5 text-[10px] uppercase tracking-wider", ps.badge), children: task.priority }),
81
- !compact && /* @__PURE__ */ jsx(Avatar, { className: "h-5 w-5 text-[10px]", children: /* @__PURE__ */ jsx(AvatarFallback, { children: task.assignee }) })
82
- ] })
83
- ] });
84
- if (compact) return content;
85
- return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
86
- /* @__PURE__ */ jsx(KanbanHandle, { "aria-label": `Move ${task.title}` }),
87
- content
88
- ] });
89
- }
90
- var getTaskId = (task) => task.id;
91
- var getTaskLabel = (task) => task.title;
92
- var renderOverlay = (task) => /* @__PURE__ */ jsx(TaskCard, { task, compact: true });
93
- function KanbanDemoBlock({ className }) {
94
- const [columns, setColumns] = useState(INITIAL_COLUMNS);
95
- const [moveLog, setMoveLog] = useState([]);
96
- function handleMove(next, meta) {
97
- setColumns([...next]);
98
- const entry = `${meta.item.title}: ${meta.fromColumnId} \u2192 ${meta.toColumnId} (pos ${meta.toIndex})`;
99
- setMoveLog((prev) => [entry, ...prev].slice(0, 10));
100
- }
101
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-6", className), children: [
102
- /* @__PURE__ */ jsxs("div", { children: [
103
- /* @__PURE__ */ jsx(Heading, { level: 1, size: "display", children: "Kanban Board" }),
104
- /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-1 text-text-secondary", children: "Drag tasks between columns. Uses handle-only drag with keyboard support." })
105
- ] }),
106
- /* @__PURE__ */ jsx(
107
- KanbanBoard,
108
- {
109
- value: columns,
110
- onValueChange: handleMove,
111
- getItemId: getTaskId,
112
- getItemLabel: getTaskLabel,
113
- renderOverlay,
114
- className: "pb-4",
115
- children: columns.map((col) => {
116
- const colMeta = COLUMN_META[col.id] ?? { label: col.id, color: "bg-accent" };
117
- return /* @__PURE__ */ jsxs(
118
- KanbanColumn,
119
- {
120
- id: col.id,
121
- items: col.items,
122
- "aria-label": colMeta.label,
123
- className: "w-[280px] shrink-0",
124
- children: [
125
- /* @__PURE__ */ jsxs(KanbanColumnHeader, { children: [
126
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
127
- /* @__PURE__ */ jsx("div", { className: cn("h-2 w-2 rounded-full", colMeta.color) }),
128
- /* @__PURE__ */ jsx("span", { children: colMeta.label })
129
- ] }),
130
- /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs tabular-nums", children: col.items.length })
131
- ] }),
132
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: col.items.map((task) => /* @__PURE__ */ jsx(KanbanItem, { value: task, children: /* @__PURE__ */ jsx(TaskCard, { task }) }, task.id)) }),
133
- col.items.length === 0 && /* @__PURE__ */ jsx(Empty, { className: "h-24 p-4", children: /* @__PURE__ */ jsx(EmptyDescription, { className: "text-xs", children: "Drop tasks here" }) })
134
- ]
135
- },
136
- col.id
137
- );
138
- })
139
- }
140
- ),
141
- moveLog.length > 0 && /* @__PURE__ */ jsxs("div", { className: "glass-panel rounded-lg p-4", children: [
142
- /* @__PURE__ */ jsx(Heading, { level: 4, size: "title", className: "mb-2", children: "Move Log" }),
143
- /* @__PURE__ */ jsx("div", { className: "space-y-1 font-mono text-xs text-text-secondary", children: moveLog.map((entry, i) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
144
- /* @__PURE__ */ jsxs("span", { className: "text-text-tertiary", children: [
145
- moveLog.length - i,
146
- "."
147
- ] }),
148
- /* @__PURE__ */ jsx("span", { children: entry })
149
- ] }, i)) })
150
- ] })
151
- ] });
152
- }
153
-
154
- export { KanbanDemoBlock };
17
+ import '../../chunk-QYZT24TS.js';
@@ -1,36 +1,5 @@
1
1
  'use client';
2
- import { LOCAL_CLOUD_LOGOS } from '../../chunk-QQOWC53X.js';
3
- import { Heading } from '../../chunk-WI547C47.js';
4
- import { cn } from '../../chunk-QYZT24TS.js';
5
- import Image from 'next/image';
6
- import { jsx, jsxs } from 'react/jsx-runtime';
7
-
8
- var defaultLogos = LOCAL_CLOUD_LOGOS;
9
- function heightClass(h) {
10
- if (h <= 16) return "h-4";
11
- if (h <= 20) return "h-5";
12
- if (h <= 24) return "h-6";
13
- return "h-7";
14
- }
15
- function LogoCloud({
16
- title = "Your favorite companies are our partners.",
17
- logos = defaultLogos,
18
- className
19
- }) {
20
- return /* @__PURE__ */ jsx("section", { className: className ?? "bg-background py-16", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [
21
- /* @__PURE__ */ jsx(Heading, { level: 2, size: "eyebrow", className: "text-center", children: title }),
22
- /* @__PURE__ */ jsx("div", { className: "mx-auto mt-20 flex max-w-4xl flex-wrap items-center justify-center gap-x-12 gap-y-8 sm:gap-x-16 sm:gap-y-12", children: logos.map((logo) => /* @__PURE__ */ jsx(
23
- Image,
24
- {
25
- className: cn(heightClass(logo.height), "w-auto dark:invert"),
26
- src: logo.src,
27
- alt: logo.alt,
28
- height: logo.height,
29
- width: logo.height * 4
30
- },
31
- logo.alt
32
- )) })
33
- ] }) });
34
- }
35
-
36
- export { LogoCloud };
2
+ export { LogoCloud } from '../../chunk-ZFKSVEYW.js';
3
+ import '../../chunk-QQOWC53X.js';
4
+ import '../../chunk-WI547C47.js';
5
+ import '../../chunk-QYZT24TS.js';
@@ -1,15 +1,16 @@
1
1
  'use client';
2
- import { useSidebar, SidebarMenu, SidebarMenuItem, SidebarMenuButton } from '../../chunk-J2DCQDXO.js';
2
+ export { NavUser } from '../../chunk-QJCE7NZF.js';
3
+ import '../../chunk-J2DCQDXO.js';
3
4
  import '../../chunk-C4SNHMYC.js';
4
5
  import '../../chunk-B5QL76GA.js';
5
6
  import '../../chunk-HOWTYZL5.js';
6
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuItem } from '../../chunk-CQEUNASC.js';
7
+ import '../../chunk-CQEUNASC.js';
7
8
  import '../../chunk-CUZJIDU7.js';
8
9
  import '../../chunk-AP3XXYAY.js';
9
10
  import '../../chunk-LIBXYD5Q.js';
10
11
  import '../../chunk-RASEB2XI.js';
11
12
  import '../../chunk-MJ4CB6ZL.js';
12
- import { Avatar, AvatarImage, AvatarFallback } from '../../chunk-NAAU5IWU.js';
13
+ import '../../chunk-NAAU5IWU.js';
13
14
  import '../../chunk-7KIDDF3I.js';
14
15
  import '../../chunk-6FOHUNXR.js';
15
16
  import '../../chunk-PD2YEH3H.js';
@@ -76,7 +77,7 @@ import '../../chunk-2ZJVU7NV.js';
76
77
  import '../../chunk-5ESF6N36.js';
77
78
  import '../../chunk-RBPLOM3A.js';
78
79
  import '../../chunk-6BAV4TZ5.js';
79
- import { ChevronsUpDownIcon } from '../../chunk-SW6QPJM4.js';
80
+ import '../../chunk-SW6QPJM4.js';
80
81
  import '../../chunk-2NT57K4U.js';
81
82
  import '../../chunk-JRJGSNI4.js';
82
83
  import '../../chunk-RF6ECFS5.js';
@@ -128,84 +129,3 @@ import '../../chunk-TV4RSQH4.js';
128
129
  import '../../chunk-HJBXUXTD.js';
129
130
  import '../../chunk-ASKFAYYR.js';
130
131
  import '../../chunk-QYZT24TS.js';
131
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
132
-
133
- function getInitials(name) {
134
- return name.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
135
- }
136
- var EMPTY_ITEMS = [];
137
- function NavUser({ user, items = EMPTY_ITEMS, footer }) {
138
- const { isMobile } = useSidebar();
139
- const initials = getInitials(user.name);
140
- return /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
141
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
142
- SidebarMenuButton,
143
- {
144
- size: "lg",
145
- className: "data-[state=open]:bg-surface-hover",
146
- children: [
147
- /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8 rounded-lg", children: [
148
- user.avatar && /* @__PURE__ */ jsx(AvatarImage, { src: user.avatar, alt: user.name }),
149
- /* @__PURE__ */ jsx(AvatarFallback, { className: "rounded-lg text-xs", children: initials })
150
- ] }),
151
- /* @__PURE__ */ jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight min-w-0", children: [
152
- /* @__PURE__ */ jsx("span", { className: "truncate font-medium text-text-primary", children: user.name }),
153
- /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-text-tertiary", children: user.email })
154
- ] }),
155
- /* @__PURE__ */ jsx(
156
- ChevronsUpDownIcon,
157
- {
158
- size: 16,
159
- className: "ml-auto text-text-tertiary"
160
- }
161
- )
162
- ]
163
- }
164
- ) }),
165
- /* @__PURE__ */ jsxs(
166
- DropdownMenuContent,
167
- {
168
- className: "w-[var(--radix-dropdown-menu-trigger-width)] min-w-56 rounded-lg",
169
- side: isMobile ? "bottom" : "right",
170
- align: "end",
171
- sideOffset: 4,
172
- children: [
173
- /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "p-0 font-normal", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-1.5 py-1.5", children: [
174
- /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8 rounded-lg", children: [
175
- user.avatar && /* @__PURE__ */ jsx(AvatarImage, { src: user.avatar, alt: user.name }),
176
- /* @__PURE__ */ jsx(AvatarFallback, { className: "rounded-lg text-xs", children: initials })
177
- ] }),
178
- /* @__PURE__ */ jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight min-w-0", children: [
179
- /* @__PURE__ */ jsx("span", { className: "truncate font-medium text-text-primary", children: user.name }),
180
- /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-text-tertiary", children: user.email })
181
- ] })
182
- ] }) }),
183
- items.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
184
- /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
185
- /* @__PURE__ */ jsx(DropdownMenuGroup, { children: items.map((item) => /* @__PURE__ */ jsx(
186
- DropdownMenuItem,
187
- {
188
- asChild: !!item.href,
189
- onClick: item.onClick,
190
- children: item.href ? /* @__PURE__ */ jsxs("a", { href: item.href, children: [
191
- item.icon,
192
- item.label
193
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
194
- item.icon,
195
- item.label
196
- ] })
197
- },
198
- item.label
199
- )) })
200
- ] }),
201
- !!footer && /* @__PURE__ */ jsxs(Fragment, { children: [
202
- /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
203
- footer
204
- ] })
205
- ]
206
- }
207
- )
208
- ] }) }) });
209
- }
210
-
211
- export { NavUser };
@@ -1,19 +1,20 @@
1
1
  'use client';
2
+ export { NotFoundBlock } from '../../chunk-XO7TBM47.js';
2
3
  import '../../chunk-G5EO22OR.js';
3
4
  import '../../chunk-OHX2LFAH.js';
4
5
  import '../../chunk-SGI25ZJ6.js';
5
6
  import '../../chunk-ANBJ2OLC.js';
6
7
  import '../../chunk-LV4LBWCS.js';
7
- import { AnimatedGradientText } from '../../chunk-XZ3A33GP.js';
8
+ import '../../chunk-XZ3A33GP.js';
8
9
  import '../../chunk-F3T2U7YL.js';
9
10
  import '../../chunk-6DYFX5IR.js';
10
11
  import '../../chunk-EB5PYS7Q.js';
11
- import { Typography } from '../../chunk-N53OMWW2.js';
12
+ import '../../chunk-N53OMWW2.js';
12
13
  import '../../chunk-ULLTRLBD.js';
13
14
  import '../../chunk-4O6L5YWT.js';
14
- import { MeteorShower } from '../../chunk-ZU55E4A7.js';
15
- import { Heading } from '../../chunk-WI547C47.js';
16
- import { Button } from '../../chunk-7KIDDF3I.js';
15
+ import '../../chunk-ZU55E4A7.js';
16
+ import '../../chunk-WI547C47.js';
17
+ import '../../chunk-7KIDDF3I.js';
17
18
  import '../../chunk-PD2YEH3H.js';
18
19
  import '../../chunk-CRY67BIF.js';
19
20
  import '../../chunk-HJC6U46F.js';
@@ -86,7 +87,7 @@ import '../../chunk-KYZT3RNW.js';
86
87
  import '../../chunk-UEG2LI7Z.js';
87
88
  import '../../chunk-CI7GPGCJ.js';
88
89
  import '../../chunk-226EBOTK.js';
89
- import { ArrowLeftIcon } from '../../chunk-74RKVIBV.js';
90
+ import '../../chunk-74RKVIBV.js';
90
91
  import '../../chunk-V6WNRZT3.js';
91
92
  import '../../chunk-JBK2LA6U.js';
92
93
  import '../../chunk-55U27XY4.js';
@@ -129,29 +130,4 @@ import '../../chunk-NURPUVUV.js';
129
130
  import '../../chunk-TV4RSQH4.js';
130
131
  import '../../chunk-HJBXUXTD.js';
131
132
  import '../../chunk-ASKFAYYR.js';
132
- import { cn } from '../../chunk-QYZT24TS.js';
133
- import Link from 'next/link';
134
- import { jsxs, jsx } from 'react/jsx-runtime';
135
-
136
- function NotFoundBlock({
137
- title = "404",
138
- description = "The page you're looking for doesn't exist or has been moved.",
139
- backHref = "/",
140
- backLabel = "Back home",
141
- className
142
- }) {
143
- return /* @__PURE__ */ jsxs("div", { className: cn("relative flex min-h-[60vh] items-center justify-center overflow-hidden", className), children: [
144
- /* @__PURE__ */ jsx(MeteorShower, { className: "absolute inset-0" }),
145
- /* @__PURE__ */ jsx("div", { className: "relative z-10 mx-auto max-w-md px-6 text-center", children: /* @__PURE__ */ jsxs("div", { className: "glass-panel rounded-2xl border border-border/50 p-10 shadow-2xl", children: [
146
- /* @__PURE__ */ jsx(AnimatedGradientText, { className: "text-8xl font-extrabold tracking-tighter sm:text-9xl", children: title }),
147
- /* @__PURE__ */ jsx(Heading, { level: 3, size: "subsection", className: "mt-4 text-text-primary", children: "Page not found" }),
148
- /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-2 text-text-secondary", children: description }),
149
- /* @__PURE__ */ jsx(Button, { asChild: true, size: "lg", variant: "accent", className: "mt-8", children: /* @__PURE__ */ jsxs(Link, { href: backHref, children: [
150
- /* @__PURE__ */ jsx(ArrowLeftIcon, { size: 16, className: "mr-2" }),
151
- backLabel
152
- ] }) })
153
- ] }) })
154
- ] });
155
- }
156
-
157
- export { NotFoundBlock };
133
+ import '../../chunk-QYZT24TS.js';