@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,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';