@inversestudio/neptune-components 1.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 (42) hide show
  1. package/README.md +2 -0
  2. package/components/data-display/AppPreview.jsx +150 -0
  3. package/components/data-display/DataTable.jsx +65 -0
  4. package/components/data-display/FileTree.jsx +123 -0
  5. package/components/data-display/KpiCard.jsx +57 -0
  6. package/components/data-display/VersionRow.jsx +103 -0
  7. package/components/feedback/Avatar.jsx +28 -0
  8. package/components/feedback/Badge.jsx +32 -0
  9. package/components/feedback/ChatMessage.jsx +42 -0
  10. package/components/feedback/StatusDot.jsx +55 -0
  11. package/components/feedback/StatusIndicator.jsx +40 -0
  12. package/components/inputs/Button.jsx +48 -0
  13. package/components/inputs/Checkbox.jsx +90 -0
  14. package/components/inputs/FilterBar.jsx +64 -0
  15. package/components/inputs/IconButton.jsx +43 -0
  16. package/components/inputs/IconToggle.jsx +44 -0
  17. package/components/inputs/NaiaChatInput.jsx +173 -0
  18. package/components/inputs/NaiaSendButton.jsx +36 -0
  19. package/components/inputs/PillSelect.jsx +175 -0
  20. package/components/inputs/PropertyField.jsx +58 -0
  21. package/components/inputs/SuggestionPill.jsx +28 -0
  22. package/components/inputs/TextInput.jsx +96 -0
  23. package/components/inputs/Toggle.jsx +73 -0
  24. package/components/layout/AppHeader.jsx +56 -0
  25. package/components/layout/BottomBar.jsx +81 -0
  26. package/components/layout/Card.jsx +57 -0
  27. package/components/layout/Panel.jsx +26 -0
  28. package/components/layout/Toolbar.jsx +89 -0
  29. package/components/navigation/Breadcrumb.jsx +43 -0
  30. package/components/navigation/Dropdown.jsx +104 -0
  31. package/components/navigation/SidebarNav.jsx +82 -0
  32. package/components/navigation/SidebarTabs.jsx +99 -0
  33. package/components/navigation/TabBar.jsx +61 -0
  34. package/components/overlays/Modal.jsx +101 -0
  35. package/components/shared/index.jsx +112 -0
  36. package/index.css +3 -0
  37. package/index.js +50 -0
  38. package/neptune-components.css +1771 -0
  39. package/package.json +45 -0
  40. package/registry.json +1215 -0
  41. package/tokens/neptune-design-tokens.css +730 -0
  42. package/tokens/neptune-design-tokens.json +191 -0
package/registry.json ADDED
@@ -0,0 +1,1215 @@
1
+ {
2
+ "version": "1.1.0",
3
+ "lastUpdated": "2026-04-09T22:30:00Z",
4
+ "themes": [
5
+ "base-light",
6
+ "base-dark",
7
+ "naia-light",
8
+ "naia-dark"
9
+ ],
10
+ "components": [
11
+ {
12
+ "name": "Button",
13
+ "file": "components/inputs/Button.jsx",
14
+ "category": "inputs",
15
+ "status": "stable",
16
+ "variants": [
17
+ "primary",
18
+ "secondary",
19
+ "tertiary",
20
+ "ghost",
21
+ "danger"
22
+ ],
23
+ "states": [
24
+ "default",
25
+ "hover",
26
+ "active",
27
+ "focus-visible",
28
+ "disabled"
29
+ ],
30
+ "tokens": [
31
+ "--npt-accent-primary",
32
+ "--npt-accent-primary-hover",
33
+ "--npt-text-on-accent",
34
+ "--npt-text-secondary",
35
+ "--npt-text-primary",
36
+ "--npt-border-default",
37
+ "--npt-surface-raised",
38
+ "--npt-surface-sunken",
39
+ "--npt-text-disabled",
40
+ "--npt-border-focus",
41
+ "--npt-status-error",
42
+ "--npt-status-error-vivid",
43
+ "--npt-radius-sm"
44
+ ],
45
+ "darkMode": true,
46
+ "themeAware": true,
47
+ "a11y": {
48
+ "contrast": "AA",
49
+ "focusVisible": true,
50
+ "ariaSupport": [
51
+ "aria-disabled"
52
+ ]
53
+ },
54
+ "figmaLink": null,
55
+ "description": "Theme-aware action button. Primary=orange (base) or purple (naia). Secondary=subtle outline. Ghost=transparent. Danger=red.",
56
+ "lastModifiedBy": "claude-agent",
57
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
58
+ "lastCommit": "[ds-agent] Refactor Button \u2014 orange primary, remove naia/accent variants, sm radius"
59
+ },
60
+ {
61
+ "name": "IconButton",
62
+ "file": "components/inputs/IconButton.jsx",
63
+ "category": "inputs",
64
+ "status": "stable",
65
+ "variants": [
66
+ "default",
67
+ "subtle",
68
+ "outline",
69
+ "secondary"
70
+ ],
71
+ "states": [
72
+ "default",
73
+ "hover",
74
+ "active",
75
+ "focus-visible",
76
+ "disabled"
77
+ ],
78
+ "tokens": [
79
+ "--npt-surface-raised",
80
+ "--npt-surface-sunken",
81
+ "--npt-text-primary",
82
+ "--npt-text-secondary",
83
+ "--npt-text-disabled",
84
+ "--npt-icon-primary",
85
+ "--npt-icon-secondary",
86
+ "--npt-icon-tertiary",
87
+ "--npt-border-focus",
88
+ "--npt-radius-sm",
89
+ "--npt-radius-md"
90
+ ],
91
+ "darkMode": true,
92
+ "themeAware": true,
93
+ "a11y": {
94
+ "contrast": "AA",
95
+ "focusVisible": true,
96
+ "ariaSupport": [
97
+ "aria-label",
98
+ "aria-disabled"
99
+ ]
100
+ },
101
+ "figmaLink": null,
102
+ "description": "Icon-only button for toolbars and headers. Default=toolbar, subtle=header/compact.",
103
+ "lastModifiedBy": "claude-agent",
104
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
105
+ "lastCommit": "[ds-agent] Add IconButton component"
106
+ },
107
+ {
108
+ "name": "IconToggle",
109
+ "file": "components/inputs/IconToggle.jsx",
110
+ "category": "inputs",
111
+ "status": "stable",
112
+ "variants": [
113
+ "default"
114
+ ],
115
+ "states": [
116
+ "default",
117
+ "hover",
118
+ "active",
119
+ "focus-visible",
120
+ "disabled",
121
+ "pressed"
122
+ ],
123
+ "tokens": [
124
+ "--npt-surface-raised",
125
+ "--npt-surface-sunken",
126
+ "--npt-surface-deep",
127
+ "--npt-accent-primary-vivid",
128
+ "--npt-text-primary",
129
+ "--npt-text-secondary",
130
+ "--npt-text-disabled",
131
+ "--npt-icon-tertiary",
132
+ "--npt-border-focus",
133
+ "--npt-radius-sm",
134
+ "--npt-radius-md"
135
+ ],
136
+ "darkMode": true,
137
+ "themeAware": true,
138
+ "a11y": {
139
+ "contrast": "AA",
140
+ "focusVisible": true,
141
+ "ariaSupport": [
142
+ "aria-pressed",
143
+ "aria-label",
144
+ "aria-disabled"
145
+ ]
146
+ },
147
+ "figmaLink": null,
148
+ "description": "Stateful icon toggle button with pressed state. For sidebar toggles, panel expand/collapse.",
149
+ "lastModifiedBy": "claude-agent",
150
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
151
+ "lastCommit": "[ds-agent] Add IconToggle component"
152
+ },
153
+ {
154
+ "name": "TextInput",
155
+ "file": "components/inputs/TextInput.jsx",
156
+ "category": "inputs",
157
+ "status": "stable",
158
+ "variants": [
159
+ "default",
160
+ "search"
161
+ ],
162
+ "states": [
163
+ "default",
164
+ "hover",
165
+ "focus",
166
+ "focus-visible",
167
+ "disabled"
168
+ ],
169
+ "tokens": [
170
+ "--npt-surface-input",
171
+ "--npt-text-primary",
172
+ "--npt-border-input",
173
+ "--npt-text-secondary"
174
+ ],
175
+ "darkMode": true,
176
+ "themeAware": true,
177
+ "a11y": {
178
+ "contrast": "AA",
179
+ "focusVisible": true,
180
+ "ariaSupport": [
181
+ "aria-label",
182
+ "aria-describedby"
183
+ ]
184
+ },
185
+ "figmaLink": null,
186
+ "description": "Text input with optional search variant and keyboard shortcut hint",
187
+ "lastModifiedBy": "michael",
188
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
189
+ "lastCommit": "initial"
190
+ },
191
+ {
192
+ "name": "Toggle",
193
+ "file": "components/inputs/Toggle.jsx",
194
+ "category": "inputs",
195
+ "status": "stable",
196
+ "variants": [
197
+ "default"
198
+ ],
199
+ "states": [
200
+ "default",
201
+ "hover",
202
+ "focus-visible",
203
+ "disabled"
204
+ ],
205
+ "tokens": [
206
+ "--npt-accent-primary-vivid",
207
+ "--npt-neutral-400",
208
+ "--npt-surface-raised",
209
+ "--npt-text-primary",
210
+ "--npt-text-disabled",
211
+ "--npt-border-focus"
212
+ ],
213
+ "darkMode": true,
214
+ "themeAware": true,
215
+ "a11y": {
216
+ "contrast": "AA",
217
+ "focusVisible": true,
218
+ "ariaSupport": [
219
+ "aria-checked",
220
+ "role:switch"
221
+ ]
222
+ },
223
+ "figmaLink": null,
224
+ "description": "Theme-aware toggle switch. Orange when checked (base), purple when checked (naia).",
225
+ "lastModifiedBy": "claude-agent",
226
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
227
+ "lastCommit": "[ds-agent] Remove naia variant \u2014 now theme-driven"
228
+ },
229
+ {
230
+ "name": "Checkbox",
231
+ "file": "components/inputs/Checkbox.jsx",
232
+ "category": "inputs",
233
+ "status": "stable",
234
+ "variants": [
235
+ "checked",
236
+ "unchecked"
237
+ ],
238
+ "states": [
239
+ "default",
240
+ "hover",
241
+ "focus-visible",
242
+ "disabled"
243
+ ],
244
+ "tokens": [
245
+ "--npt-accent-primary",
246
+ "--npt-border-input",
247
+ "--npt-text-primary",
248
+ "--npt-text-disabled",
249
+ "--npt-text-on-accent",
250
+ "--npt-border-focus"
251
+ ],
252
+ "darkMode": true,
253
+ "themeAware": true,
254
+ "a11y": {
255
+ "contrast": "AA",
256
+ "focusVisible": true,
257
+ "ariaSupport": [
258
+ "aria-checked"
259
+ ]
260
+ },
261
+ "figmaLink": null,
262
+ "description": "Theme-aware checkbox. Orange when checked (base), purple when checked (naia).",
263
+ "lastModifiedBy": "claude-agent",
264
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
265
+ "lastCommit": "[ds-agent] Fix checkbox to use accent-primary instead of accent-secondary"
266
+ },
267
+ {
268
+ "name": "TabBar",
269
+ "file": "components/navigation/TabBar.jsx",
270
+ "category": "navigation",
271
+ "status": "stable",
272
+ "variants": [
273
+ "default"
274
+ ],
275
+ "states": [
276
+ "default",
277
+ "hover",
278
+ "active",
279
+ "focus-visible",
280
+ "disabled"
281
+ ],
282
+ "tokens": [
283
+ "--npt-surface-secondary",
284
+ "--npt-text-primary",
285
+ "--npt-accent-base",
286
+ "--npt-border-interactive"
287
+ ],
288
+ "darkMode": true,
289
+ "a11y": {
290
+ "contrast": "AA",
291
+ "focusVisible": true,
292
+ "ariaSupport": [
293
+ "aria-selected",
294
+ "role:tab"
295
+ ]
296
+ },
297
+ "figmaLink": null,
298
+ "description": "Horizontal tab bar with underline active indicator. Tabs accept strings or {label, icon} objects.",
299
+ "lastModifiedBy": "claude-agent",
300
+ "lastModifiedAt": "2026-04-08T12:00:00Z",
301
+ "lastCommit": "[ds-agent] Update TabBar \u2014 add icon+label object support"
302
+ },
303
+ {
304
+ "name": "SidebarNav",
305
+ "file": "components/navigation/SidebarNav.jsx",
306
+ "category": "navigation",
307
+ "status": "stable",
308
+ "variants": [
309
+ "expanded",
310
+ "collapsed"
311
+ ],
312
+ "states": [
313
+ "default",
314
+ "hover",
315
+ "active",
316
+ "focus-visible",
317
+ "disabled"
318
+ ],
319
+ "tokens": [
320
+ "--npt-surface-sunken",
321
+ "--npt-text-primary",
322
+ "--npt-text-tertiary",
323
+ "--npt-text-secondary",
324
+ "--npt-accent-primary-vivid",
325
+ "--npt-border-default",
326
+ "--npt-border-focus",
327
+ "--npt-surface-raised",
328
+ "--npt-shadow-sm"
329
+ ],
330
+ "darkMode": true,
331
+ "a11y": {
332
+ "contrast": "AA",
333
+ "focusVisible": true,
334
+ "ariaSupport": [
335
+ "aria-expanded",
336
+ "aria-current"
337
+ ]
338
+ },
339
+ "figmaLink": null,
340
+ "description": "Navigation sidebar with expanded and collapsed modes. Supports divider items, header prop, footer prop, and passes item object to onItemClick.",
341
+ "lastModifiedBy": "claude-agent",
342
+ "lastModifiedAt": "2026-04-08T18:00:00Z",
343
+ "lastCommit": "[ds-agent] Update SidebarNav \u2014 add header, footer props; pass item to onItemClick"
344
+ },
345
+ {
346
+ "name": "SidebarTabs",
347
+ "file": "components/navigation/SidebarTabs.jsx",
348
+ "category": "navigation",
349
+ "status": "stable",
350
+ "variants": [
351
+ "default"
352
+ ],
353
+ "states": [
354
+ "default",
355
+ "hover",
356
+ "active",
357
+ "focus-visible",
358
+ "disabled"
359
+ ],
360
+ "tokens": [
361
+ "--npt-surface-sunken",
362
+ "--npt-text-primary",
363
+ "--npt-text-secondary",
364
+ "--npt-text-tertiary",
365
+ "--npt-accent-primary-vivid",
366
+ "--npt-surface-overlay",
367
+ "--npt-border-focus"
368
+ ],
369
+ "darkMode": true,
370
+ "a11y": {
371
+ "contrast": "AA",
372
+ "focusVisible": true,
373
+ "ariaSupport": [
374
+ "aria-selected",
375
+ "role:tab"
376
+ ]
377
+ },
378
+ "figmaLink": null,
379
+ "description": "Tab switcher for sidebar panels. Tabs accept strings or {label, icon, activeColor, badge} objects. Active tab shows bottom accent border with optional custom color.",
380
+ "lastModifiedBy": "claude-agent",
381
+ "lastModifiedAt": "2026-04-08T18:00:00Z",
382
+ "lastCommit": "[ds-agent] Update SidebarTabs \u2014 add activeColor, badge support"
383
+ },
384
+ {
385
+ "name": "Dropdown",
386
+ "file": "components/navigation/Dropdown.jsx",
387
+ "category": "navigation",
388
+ "status": "stable",
389
+ "variants": [
390
+ "default"
391
+ ],
392
+ "states": [
393
+ "default",
394
+ "hover",
395
+ "active",
396
+ "focus-visible",
397
+ "disabled"
398
+ ],
399
+ "tokens": [
400
+ "--npt-surface-overlay",
401
+ "--npt-text-primary",
402
+ "--npt-accent-base",
403
+ "--npt-border-default"
404
+ ],
405
+ "darkMode": true,
406
+ "a11y": {
407
+ "contrast": "AA",
408
+ "focusVisible": true,
409
+ "ariaSupport": [
410
+ "aria-haspopup",
411
+ "aria-expanded",
412
+ "role:menu"
413
+ ]
414
+ },
415
+ "figmaLink": null,
416
+ "description": "Dropdown menu with check mark on selected item. Items accept strings or rich objects with subtitle and extra. Supports custom renderItem.",
417
+ "lastModifiedBy": "claude-agent",
418
+ "lastModifiedAt": "2026-04-08T12:00:00Z",
419
+ "lastCommit": "[ds-agent] Update Dropdown \u2014 add renderItem and rich item support"
420
+ },
421
+ {
422
+ "name": "AppHeader",
423
+ "file": "components/layout/AppHeader.jsx",
424
+ "category": "layout",
425
+ "status": "stable",
426
+ "variants": [
427
+ "default"
428
+ ],
429
+ "tokens": [
430
+ "--npt-surface-brand",
431
+ "--npt-text-onBrand",
432
+ "--npt-border-default"
433
+ ],
434
+ "darkMode": false,
435
+ "a11y": {
436
+ "contrast": "AAA",
437
+ "focusVisible": false,
438
+ "ariaSupport": [
439
+ "role:banner"
440
+ ]
441
+ },
442
+ "figmaLink": null,
443
+ "description": "Cockpit app header bar (44px, aubergine-800 bg)",
444
+ "lastModifiedBy": "michael",
445
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
446
+ "lastCommit": "initial"
447
+ },
448
+ {
449
+ "name": "Toolbar",
450
+ "file": "components/layout/Toolbar.jsx",
451
+ "category": "layout",
452
+ "status": "stable",
453
+ "variants": [
454
+ "default"
455
+ ],
456
+ "tokens": [
457
+ "--npt-surface-secondary",
458
+ "--npt-text-primary",
459
+ "--npt-accent-base",
460
+ "--npt-border-default"
461
+ ],
462
+ "darkMode": true,
463
+ "a11y": {
464
+ "contrast": "AA",
465
+ "focusVisible": true,
466
+ "ariaSupport": [
467
+ "role:toolbar"
468
+ ]
469
+ },
470
+ "figmaLink": null,
471
+ "description": "Application toolbar with actions and badge",
472
+ "lastModifiedBy": "michael",
473
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
474
+ "lastCommit": "initial"
475
+ },
476
+ {
477
+ "name": "BottomBar",
478
+ "file": "components/layout/BottomBar.jsx",
479
+ "category": "layout",
480
+ "status": "stable",
481
+ "variants": [
482
+ "default"
483
+ ],
484
+ "tokens": [
485
+ "--npt-surface-secondary",
486
+ "--npt-text-secondary",
487
+ "--npt-border-default"
488
+ ],
489
+ "darkMode": true,
490
+ "a11y": {
491
+ "contrast": "AA",
492
+ "focusVisible": true,
493
+ "ariaSupport": []
494
+ },
495
+ "figmaLink": null,
496
+ "description": "Bottom status bar with breakpoint toggles and theme switcher",
497
+ "lastModifiedBy": "michael",
498
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
499
+ "lastCommit": "initial"
500
+ },
501
+ {
502
+ "name": "Panel",
503
+ "file": "components/layout/Panel.jsx",
504
+ "category": "layout",
505
+ "status": "stable",
506
+ "variants": [
507
+ "default"
508
+ ],
509
+ "tokens": [
510
+ "--npt-surface-secondary",
511
+ "--npt-border-default",
512
+ "--npt-shadow-sm"
513
+ ],
514
+ "darkMode": true,
515
+ "a11y": {
516
+ "contrast": "AA",
517
+ "focusVisible": false,
518
+ "ariaSupport": []
519
+ },
520
+ "figmaLink": null,
521
+ "description": "General purpose panel/card wrapper",
522
+ "lastModifiedBy": "michael",
523
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
524
+ "lastCommit": "initial"
525
+ },
526
+ {
527
+ "name": "Badge",
528
+ "file": "components/feedback/Badge.jsx",
529
+ "category": "feedback",
530
+ "status": "stable",
531
+ "variants": [
532
+ "default",
533
+ "success",
534
+ "warning",
535
+ "error",
536
+ "info",
537
+ "env-prod",
538
+ "env-qa",
539
+ "env-dev",
540
+ "module-ui",
541
+ "module-script",
542
+ "module-api",
543
+ "module-data"
544
+ ],
545
+ "tokens": [
546
+ "--npt-status-success",
547
+ "--npt-status-warning",
548
+ "--npt-status-error",
549
+ "--npt-status-info",
550
+ "--npt-surface-overlay",
551
+ "--npt-text-secondary"
552
+ ],
553
+ "darkMode": true,
554
+ "a11y": {
555
+ "contrast": "AA",
556
+ "focusVisible": false,
557
+ "ariaSupport": [
558
+ "aria-label"
559
+ ]
560
+ },
561
+ "figmaLink": null,
562
+ "description": "Multi-purpose badge/tag with status, environment, and module variants",
563
+ "lastModifiedBy": "michael",
564
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
565
+ "lastCommit": "initial"
566
+ },
567
+ {
568
+ "name": "StatusDot",
569
+ "file": "components/feedback/StatusDot.jsx",
570
+ "category": "feedback",
571
+ "status": "stable",
572
+ "variants": [
573
+ "success",
574
+ "warning",
575
+ "error",
576
+ "info"
577
+ ],
578
+ "states": [
579
+ "default",
580
+ "pulse"
581
+ ],
582
+ "tokens": [
583
+ "--npt-status-success",
584
+ "--npt-status-warning",
585
+ "--npt-status-error",
586
+ "--npt-status-info"
587
+ ],
588
+ "darkMode": true,
589
+ "themeAware": true,
590
+ "a11y": {
591
+ "contrast": "AA",
592
+ "focusVisible": false,
593
+ "ariaSupport": [
594
+ "role:status",
595
+ "aria-label"
596
+ ]
597
+ },
598
+ "figmaLink": null,
599
+ "description": "Animated status dot with pulse. Child component of BottomBar. Used for live status indicators.",
600
+ "lastModifiedBy": "claude-agent",
601
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
602
+ "lastCommit": "[ds-agent] Add StatusDot component"
603
+ },
604
+ {
605
+ "name": "StatusIndicator",
606
+ "file": "components/feedback/StatusIndicator.jsx",
607
+ "category": "feedback",
608
+ "status": "stable",
609
+ "variants": [
610
+ "success",
611
+ "warning",
612
+ "error",
613
+ "info"
614
+ ],
615
+ "tokens": [
616
+ "--npt-status-success",
617
+ "--npt-status-warning",
618
+ "--npt-status-error",
619
+ "--npt-status-info",
620
+ "--npt-text-primary"
621
+ ],
622
+ "darkMode": true,
623
+ "a11y": {
624
+ "contrast": "AA",
625
+ "focusVisible": false,
626
+ "ariaSupport": [
627
+ "aria-label",
628
+ "role:status"
629
+ ]
630
+ },
631
+ "figmaLink": null,
632
+ "description": "Status dot with label and optional pulse animation",
633
+ "lastModifiedBy": "michael",
634
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
635
+ "lastCommit": "initial"
636
+ },
637
+ {
638
+ "name": "ChatMessage",
639
+ "file": "components/feedback/ChatMessage.jsx",
640
+ "category": "feedback",
641
+ "status": "stable",
642
+ "variants": [
643
+ "user",
644
+ "naia"
645
+ ],
646
+ "tokens": [
647
+ "--npt-surface-tertiary",
648
+ "--npt-text-primary",
649
+ "--npt-accent-primary",
650
+ "--npt-accent-primary-vivid"
651
+ ],
652
+ "darkMode": true,
653
+ "themeAware": true,
654
+ "a11y": {
655
+ "contrast": "AA",
656
+ "focusVisible": false,
657
+ "ariaSupport": [
658
+ "role:article"
659
+ ]
660
+ },
661
+ "figmaLink": null,
662
+ "description": "Chat message bubble for Naia AI chat (user/naia sender). Theme-aware via data-theme.",
663
+ "lastModifiedBy": "claude-agent",
664
+ "lastModifiedAt": "2026-04-09T18:00:00Z",
665
+ "lastCommit": "[ds-agent] Update ChatMessage to be theme-aware"
666
+ },
667
+ {
668
+ "name": "DataTable",
669
+ "file": "components/data-display/DataTable.jsx",
670
+ "category": "data-display",
671
+ "status": "stable",
672
+ "variants": [
673
+ "default"
674
+ ],
675
+ "tokens": [
676
+ "--npt-surface-secondary",
677
+ "--npt-text-primary",
678
+ "--npt-border-default",
679
+ "--npt-surface-tertiary"
680
+ ],
681
+ "darkMode": true,
682
+ "a11y": {
683
+ "contrast": "AA",
684
+ "focusVisible": true,
685
+ "ariaSupport": [
686
+ "role:table",
687
+ "aria-sort"
688
+ ]
689
+ },
690
+ "figmaLink": null,
691
+ "description": "Data table with column headers and row rendering",
692
+ "lastModifiedBy": "michael",
693
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
694
+ "lastCommit": "initial"
695
+ },
696
+ {
697
+ "name": "FileTree",
698
+ "file": "components/data-display/FileTree.jsx",
699
+ "category": "data-display",
700
+ "status": "stable",
701
+ "variants": [
702
+ "default"
703
+ ],
704
+ "tokens": [
705
+ "--npt-text-secondary",
706
+ "--npt-text-primary",
707
+ "--npt-text-tertiary",
708
+ "--npt-accent-primary-vivid",
709
+ "--npt-accent-primary",
710
+ "--npt-surface-raised",
711
+ "--npt-surface-sunken"
712
+ ],
713
+ "darkMode": true,
714
+ "a11y": {
715
+ "contrast": "AA",
716
+ "focusVisible": true,
717
+ "ariaSupport": [
718
+ "role:tree",
719
+ "aria-expanded"
720
+ ]
721
+ },
722
+ "figmaLink": null,
723
+ "description": "Recursive file/folder tree with depth-based indentation, open/close state, onSelect callback with parent path metadata, selectedName highlight, and custom per-item icons.",
724
+ "lastModifiedBy": "claude-agent",
725
+ "lastModifiedAt": "2026-04-08T18:00:00Z",
726
+ "lastCommit": "[ds-agent] Update FileTree \u2014 add recursive folder support with internal open/close state"
727
+ },
728
+ {
729
+ "name": "KpiCard",
730
+ "file": "components/data-display/KpiCard.jsx",
731
+ "category": "data-display",
732
+ "status": "stable",
733
+ "variants": [
734
+ "default"
735
+ ],
736
+ "tokens": [
737
+ "--npt-surface-secondary",
738
+ "--npt-text-primary",
739
+ "--npt-accent-base",
740
+ "--npt-text-secondary"
741
+ ],
742
+ "darkMode": true,
743
+ "a11y": {
744
+ "contrast": "AA",
745
+ "focusVisible": false,
746
+ "ariaSupport": [
747
+ "aria-label"
748
+ ]
749
+ },
750
+ "figmaLink": null,
751
+ "description": "KPI metric card with icon, value, label, subtitle",
752
+ "lastModifiedBy": "michael",
753
+ "lastModifiedAt": "2026-04-09T12:00:00Z",
754
+ "lastCommit": "initial"
755
+ },
756
+ {
757
+ "name": "PillSelect",
758
+ "file": "components/inputs/PillSelect.jsx",
759
+ "category": "inputs",
760
+ "status": "stable",
761
+ "variants": [
762
+ "default"
763
+ ],
764
+ "states": [
765
+ "default",
766
+ "hover",
767
+ "open",
768
+ "focus-visible",
769
+ "disabled"
770
+ ],
771
+ "tokens": [
772
+ "--npt-surface-sunken",
773
+ "--npt-surface-raised",
774
+ "--npt-surface-overlay",
775
+ "--npt-interactive-fg",
776
+ "--npt-border-default",
777
+ "--npt-shadow-lg",
778
+ "--npt-text-primary",
779
+ "--npt-text-secondary",
780
+ "--npt-text-tertiary"
781
+ ],
782
+ "darkMode": true,
783
+ "themeAware": true,
784
+ "a11y": {
785
+ "contrast": "AA",
786
+ "focusVisible": true,
787
+ "ariaSupport": [
788
+ "aria-haspopup",
789
+ "aria-expanded",
790
+ "role:listbox",
791
+ "aria-selected"
792
+ ]
793
+ },
794
+ "figmaLink": null,
795
+ "description": "Pill-shaped dropdown select for compact option picking. Used for mode, model, and autonomy selectors in Naia chat.",
796
+ "lastModifiedBy": "claude-agent",
797
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
798
+ "lastCommit": "[ds-agent] Add PillSelect component"
799
+ },
800
+ {
801
+ "name": "NaiaSendButton",
802
+ "file": "components/inputs/NaiaSendButton.jsx",
803
+ "category": "inputs",
804
+ "status": "stable",
805
+ "variants": [
806
+ "default"
807
+ ],
808
+ "states": [
809
+ "default",
810
+ "hover",
811
+ "disabled",
812
+ "focus-visible",
813
+ "active"
814
+ ],
815
+ "tokens": [
816
+ "--npt-accent-primary",
817
+ "--npt-accent-primary-hover",
818
+ "--npt-text-on-accent",
819
+ "--npt-surface-overlay",
820
+ "--npt-text-disabled"
821
+ ],
822
+ "darkMode": true,
823
+ "themeAware": true,
824
+ "a11y": {
825
+ "contrast": "AA",
826
+ "focusVisible": false,
827
+ "ariaSupport": [
828
+ "aria-label"
829
+ ]
830
+ },
831
+ "figmaLink": null,
832
+ "description": "Circular send button for chat inputs. Enabled/disabled state based on input content. Theme-aware accent color.",
833
+ "lastModifiedBy": "claude-agent",
834
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
835
+ "lastCommit": "[ds-agent] Add NaiaSendButton component"
836
+ },
837
+ {
838
+ "name": "SuggestionPill",
839
+ "file": "components/inputs/SuggestionPill.jsx",
840
+ "category": "inputs",
841
+ "status": "stable",
842
+ "variants": [
843
+ "default"
844
+ ],
845
+ "states": [
846
+ "default",
847
+ "hover",
848
+ "active",
849
+ "focus-visible",
850
+ "disabled"
851
+ ],
852
+ "tokens": [
853
+ "--npt-interactive-fg",
854
+ "--npt-interactive-border",
855
+ "--npt-border-default",
856
+ "--npt-surface-raised",
857
+ "--npt-surface-sunken",
858
+ "--npt-border-focus"
859
+ ],
860
+ "darkMode": true,
861
+ "themeAware": true,
862
+ "a11y": {
863
+ "contrast": "AA",
864
+ "focusVisible": true,
865
+ "ariaSupport": []
866
+ },
867
+ "figmaLink": null,
868
+ "description": "Chip button for AI quick-action suggestions. Rounded-lg border, transparent bg, interactive-* tokens for Naia theme adaptation.",
869
+ "lastModifiedBy": "claude-agent",
870
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
871
+ "lastCommit": "[ds-agent] Rewrite SuggestionPill \u2014 rounded-lg, standalone styling"
872
+ },
873
+ {
874
+ "name": "NaiaChatInput",
875
+ "file": "components/inputs/NaiaChatInput.jsx",
876
+ "category": "inputs",
877
+ "status": "stable",
878
+ "variants": [
879
+ "default"
880
+ ],
881
+ "states": [
882
+ "default",
883
+ "hover",
884
+ "focus",
885
+ "focus-visible",
886
+ "has-content",
887
+ "disabled"
888
+ ],
889
+ "tokens": [
890
+ "--npt-border-subtle",
891
+ "--npt-border-default",
892
+ "--npt-text-primary",
893
+ "--npt-surface-sunken"
894
+ ],
895
+ "darkMode": true,
896
+ "themeAware": true,
897
+ "a11y": {
898
+ "contrast": "AA",
899
+ "focusVisible": true,
900
+ "ariaSupport": [
901
+ "aria-label"
902
+ ]
903
+ },
904
+ "figmaLink": null,
905
+ "description": "Full chat input area composing SuggestionPill, PillSelect, and NaiaSendButton. Auto-resizing textarea, Enter to send.",
906
+ "lastModifiedBy": "claude-agent",
907
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
908
+ "lastCommit": "[ds-agent] Rewrite NaiaChatInput \u2014 compose PillSelect, NaiaSendButton, SuggestionPill"
909
+ },
910
+ {
911
+ "name": "Modal",
912
+ "file": "components/overlays/Modal.jsx",
913
+ "category": "overlays",
914
+ "status": "stable",
915
+ "variants": [
916
+ "default"
917
+ ],
918
+ "states": [
919
+ "default"
920
+ ],
921
+ "tokens": [
922
+ "--npt-surface-overlay",
923
+ "--npt-border-default",
924
+ "--npt-shadow-xl",
925
+ "--npt-radius-xl",
926
+ "--npt-text-primary",
927
+ "--npt-text-secondary",
928
+ "--npt-text-base",
929
+ "--npt-text-sm",
930
+ "--npt-font-weight-semibold",
931
+ "--npt-radius-sm"
932
+ ],
933
+ "darkMode": true,
934
+ "themeAware": true,
935
+ "a11y": {
936
+ "contrast": "AA",
937
+ "focusVisible": true,
938
+ "ariaSupport": [
939
+ "aria-modal",
940
+ "aria-label",
941
+ "role:dialog"
942
+ ]
943
+ },
944
+ "figmaLink": null,
945
+ "description": "General-purpose modal overlay with backdrop, title header, close button, Escape/backdrop dismiss.",
946
+ "lastModifiedBy": "claude-agent",
947
+ "lastModifiedAt": "2026-04-09T20:00:00Z",
948
+ "lastCommit": "[ds-agent] Add Modal component"
949
+ },
950
+ {
951
+ "name": "Card",
952
+ "file": "components/layout/Card.jsx",
953
+ "category": "layout",
954
+ "status": "stable",
955
+ "variants": [
956
+ "default",
957
+ "interactive"
958
+ ],
959
+ "states": [
960
+ "default",
961
+ "hover",
962
+ "focus-visible"
963
+ ],
964
+ "tokens": [
965
+ "--npt-surface-raised",
966
+ "--npt-border-default",
967
+ "--npt-radius-lg",
968
+ "--npt-space-6",
969
+ "--npt-shadow-xs",
970
+ "--npt-shadow-md",
971
+ "--npt-border-focus"
972
+ ],
973
+ "darkMode": true,
974
+ "themeAware": true,
975
+ "a11y": {
976
+ "contrast": "AA",
977
+ "focusVisible": true,
978
+ "ariaSupport": []
979
+ },
980
+ "figmaLink": null,
981
+ "description": "Generic card container with optional interactive hover elevation. More feature-rich than Panel.",
982
+ "lastModifiedBy": "claude-agent",
983
+ "lastModifiedAt": "2026-04-09T20:00:00Z",
984
+ "lastCommit": "[ds-agent] Add Card component"
985
+ },
986
+ {
987
+ "name": "FilterBar",
988
+ "file": "components/inputs/FilterBar.jsx",
989
+ "category": "inputs",
990
+ "status": "stable",
991
+ "variants": [
992
+ "default"
993
+ ],
994
+ "states": [
995
+ "default",
996
+ "hover",
997
+ "focus-visible",
998
+ "disabled"
999
+ ],
1000
+ "tokens": [
1001
+ "--npt-interactive-fg",
1002
+ "--npt-interactive-fg-hover",
1003
+ "--npt-interactive-border",
1004
+ "--npt-interactive-bg",
1005
+ "--npt-surface-raised",
1006
+ "--npt-surface-sunken"
1007
+ ],
1008
+ "darkMode": true,
1009
+ "themeAware": true,
1010
+ "a11y": {
1011
+ "contrast": "AA",
1012
+ "focusVisible": true,
1013
+ "ariaSupport": [
1014
+ "aria-pressed",
1015
+ "role:group",
1016
+ "aria-label"
1017
+ ]
1018
+ },
1019
+ "figmaLink": null,
1020
+ "description": "Horizontal row of filter pill buttons using Button component. Active filter=secondary, others=tertiary.",
1021
+ "lastModifiedBy": "claude-agent",
1022
+ "lastModifiedAt": "2026-04-09T20:00:00Z",
1023
+ "lastCommit": "[ds-agent] Add FilterBar component"
1024
+ },
1025
+ {
1026
+ "name": "VersionRow",
1027
+ "file": "components/data-display/VersionRow.jsx",
1028
+ "category": "data-display",
1029
+ "status": "stable",
1030
+ "variants": [
1031
+ "default"
1032
+ ],
1033
+ "states": [
1034
+ "default",
1035
+ "hover"
1036
+ ],
1037
+ "tokens": [
1038
+ "--npt-surface-raised",
1039
+ "--npt-surface-sunken",
1040
+ "--npt-text-primary",
1041
+ "--npt-text-secondary",
1042
+ "--npt-text-tertiary",
1043
+ "--npt-text-sm",
1044
+ "--npt-text-xs",
1045
+ "--npt-font-weight-medium",
1046
+ "--npt-radius-md"
1047
+ ],
1048
+ "darkMode": true,
1049
+ "themeAware": true,
1050
+ "a11y": {
1051
+ "contrast": "AA",
1052
+ "focusVisible": true,
1053
+ "ariaSupport": [
1054
+ "aria-expanded",
1055
+ "role:button"
1056
+ ]
1057
+ },
1058
+ "figmaLink": null,
1059
+ "description": "Expandable row for version/history lists with description, author, time, and detail section.",
1060
+ "lastModifiedBy": "claude-agent",
1061
+ "lastModifiedAt": "2026-04-09T20:00:00Z",
1062
+ "lastCommit": "[ds-agent] Add VersionRow component"
1063
+ },
1064
+ {
1065
+ "name": "Avatar",
1066
+ "file": "components/feedback/Avatar.jsx",
1067
+ "category": "feedback",
1068
+ "status": "stable",
1069
+ "variants": [
1070
+ "default"
1071
+ ],
1072
+ "states": [
1073
+ "default"
1074
+ ],
1075
+ "tokens": [
1076
+ "--npt-gradient-warm",
1077
+ "--npt-text-on-brand"
1078
+ ],
1079
+ "darkMode": true,
1080
+ "themeAware": false,
1081
+ "a11y": {
1082
+ "contrast": "AA",
1083
+ "focusVisible": false,
1084
+ "ariaSupport": [
1085
+ "aria-label"
1086
+ ]
1087
+ },
1088
+ "figmaLink": null,
1089
+ "description": "Circular user avatar with initials or image. Sizes: sm, default, lg.",
1090
+ "lastModifiedBy": "claude-agent",
1091
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
1092
+ "lastCommit": "[ds-agent] Add Avatar component"
1093
+ },
1094
+ {
1095
+ "name": "Breadcrumb",
1096
+ "file": "components/navigation/Breadcrumb.jsx",
1097
+ "category": "navigation",
1098
+ "status": "stable",
1099
+ "variants": [
1100
+ "default"
1101
+ ],
1102
+ "states": [
1103
+ "default",
1104
+ "hover",
1105
+ "focus-visible",
1106
+ "disabled"
1107
+ ],
1108
+ "tokens": [
1109
+ "--npt-text-secondary",
1110
+ "--npt-text-primary",
1111
+ "--npt-text-tertiary"
1112
+ ],
1113
+ "darkMode": true,
1114
+ "themeAware": false,
1115
+ "a11y": {
1116
+ "contrast": "AA",
1117
+ "focusVisible": true,
1118
+ "ariaSupport": [
1119
+ "aria-label",
1120
+ "role:navigation"
1121
+ ]
1122
+ },
1123
+ "figmaLink": null,
1124
+ "description": "Navigation breadcrumb trail with clickable segments and separator.",
1125
+ "lastModifiedBy": "claude-agent",
1126
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
1127
+ "lastCommit": "[ds-agent] Add Breadcrumb component"
1128
+ },
1129
+ {
1130
+ "name": "PropertyField",
1131
+ "file": "components/inputs/PropertyField.jsx",
1132
+ "category": "inputs",
1133
+ "status": "stable",
1134
+ "variants": [
1135
+ "default",
1136
+ "highlight"
1137
+ ],
1138
+ "states": [
1139
+ "default",
1140
+ "hover",
1141
+ "focus",
1142
+ "focus-visible",
1143
+ "disabled"
1144
+ ],
1145
+ "tokens": [
1146
+ "--npt-text-secondary",
1147
+ "--npt-text-primary",
1148
+ "--npt-text-xs",
1149
+ "--npt-font-mono",
1150
+ "--npt-border-default",
1151
+ "--npt-border-focus",
1152
+ "--npt-accent-primary",
1153
+ "--npt-accent-primary-vivid",
1154
+ "--npt-surface-raised",
1155
+ "--npt-surface-sunken"
1156
+ ],
1157
+ "darkMode": true,
1158
+ "themeAware": true,
1159
+ "a11y": {
1160
+ "contrast": "AA",
1161
+ "focusVisible": true,
1162
+ "ariaSupport": []
1163
+ },
1164
+ "figmaLink": null,
1165
+ "description": "Label + monospace input for property editors. Supports highlight state for modified values.",
1166
+ "lastModifiedBy": "claude-agent",
1167
+ "lastModifiedAt": "2026-04-09T22:00:00Z",
1168
+ "lastCommit": "[ds-agent] Add PropertyField component"
1169
+ },
1170
+ {
1171
+ "name": "AppPreview",
1172
+ "file": "components/data-display/AppPreview.jsx",
1173
+ "category": "data-display",
1174
+ "status": "stable",
1175
+ "variants": [
1176
+ "browser",
1177
+ "tablet",
1178
+ "phone"
1179
+ ],
1180
+ "states": [
1181
+ "default"
1182
+ ],
1183
+ "tokens": [
1184
+ "--npt-neutral-900",
1185
+ "--npt-neutral-800",
1186
+ "--npt-neutral-700",
1187
+ "--npt-neutral-650",
1188
+ "--npt-neutral-400",
1189
+ "--npt-neutral-200",
1190
+ "--npt-neutral-150",
1191
+ "--npt-neutral-50",
1192
+ "--npt-orange-350",
1193
+ "--npt-orange-500",
1194
+ "--npt-green-400",
1195
+ "--npt-green-550",
1196
+ "--npt-purple-300",
1197
+ "--npt-purple-500",
1198
+ "--npt-shadow-lg",
1199
+ "--npt-radius-lg"
1200
+ ],
1201
+ "darkMode": true,
1202
+ "themeAware": false,
1203
+ "a11y": {
1204
+ "contrast": "AA",
1205
+ "focusVisible": false,
1206
+ "ariaSupport": []
1207
+ },
1208
+ "figmaLink": null,
1209
+ "description": "Mock application preview wireframe for the builder workspace. Uses neutral greys independent of cockpit theme. Responsive breakpoints: browser, tablet, phone.",
1210
+ "lastModifiedBy": "claude-agent",
1211
+ "lastModifiedAt": "2026-04-09T23:00:00Z",
1212
+ "lastCommit": "[ds-agent] Add AppPreview component"
1213
+ }
1214
+ ]
1215
+ }