@nadicodeai/ui 0.10.1 → 0.11.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.
- package/AGENTS.md +23 -135
- package/README.md +39 -110
- package/dist/components/action-band.d.ts +5 -3
- package/dist/components/action-band.d.ts.map +1 -1
- package/dist/components/action-band.js +35 -21
- package/dist/components/agent-chat.d.ts.map +1 -1
- package/dist/components/agent-chat.js +1 -1
- package/dist/components/agent-composer.d.ts.map +1 -1
- package/dist/components/agent-composer.js +1 -1
- package/dist/components/ai-elements/code-block.d.ts.map +1 -1
- package/dist/components/ai-elements/code-block.js +9 -23
- package/dist/components/ai-elements/commit.d.ts.map +1 -1
- package/dist/components/ai-elements/commit.js +9 -23
- package/dist/components/ai-elements/environment-variables.d.ts.map +1 -1
- package/dist/components/ai-elements/environment-variables.js +4 -29
- package/dist/components/ai-elements/snippet.d.ts.map +1 -1
- package/dist/components/ai-elements/snippet.js +9 -23
- package/dist/components/ai-elements/stack-trace.d.ts.map +1 -1
- package/dist/components/ai-elements/stack-trace.js +8 -21
- package/dist/components/ai-elements/terminal.d.ts.map +1 -1
- package/dist/components/ai-elements/terminal.js +16 -29
- package/dist/components/alert-dialog.d.ts.map +1 -1
- package/dist/components/alert-dialog.js +3 -2
- package/dist/components/artifact-panel.d.ts.map +1 -1
- package/dist/components/artifact-panel.js +5 -5
- package/dist/components/badge.js +1 -1
- package/dist/components/bento.d.ts +14 -3
- package/dist/components/bento.d.ts.map +1 -1
- package/dist/components/bento.js +26 -5
- package/dist/components/brand.d.ts.map +1 -1
- package/dist/components/brand.js +29 -3
- package/dist/components/button.js +1 -1
- package/dist/components/chart-time-series.d.ts.map +1 -1
- package/dist/components/chart-time-series.js +2 -2
- package/dist/components/chart.js +1 -1
- package/dist/components/contact.d.ts +22 -10
- package/dist/components/contact.d.ts.map +1 -1
- package/dist/components/contact.js +34 -12
- package/dist/components/dialog.d.ts.map +1 -1
- package/dist/components/dialog.js +3 -2
- package/dist/components/diff-count.js +1 -1
- package/dist/components/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu.js +2 -1
- package/dist/components/faq-item.js +2 -2
- package/dist/components/faq.d.ts +4 -1
- package/dist/components/faq.d.ts.map +1 -1
- package/dist/components/faq.js +5 -2
- package/dist/components/feature-grid.d.ts +23 -0
- package/dist/components/feature-grid.d.ts.map +1 -0
- package/dist/components/feature-grid.js +33 -0
- package/dist/components/feature-rows.d.ts +23 -0
- package/dist/components/feature-rows.d.ts.map +1 -0
- package/dist/components/feature-rows.js +27 -0
- package/dist/components/footer.d.ts +18 -12
- package/dist/components/footer.d.ts.map +1 -1
- package/dist/components/footer.js +32 -20
- package/dist/components/hero.d.ts +28 -0
- package/dist/components/hero.d.ts.map +1 -0
- package/dist/components/hero.js +45 -0
- package/dist/components/input-otp.js +1 -1
- package/dist/components/integration-flow.d.ts +36 -0
- package/dist/components/integration-flow.d.ts.map +1 -0
- package/dist/components/integration-flow.js +36 -0
- package/dist/components/live-demo.d.ts +31 -0
- package/dist/components/live-demo.d.ts.map +1 -0
- package/dist/components/live-demo.js +30 -0
- package/dist/components/logo-band.d.ts +12 -2
- package/dist/components/logo-band.d.ts.map +1 -1
- package/dist/components/logo-band.js +16 -1
- package/dist/components/logo-tile.d.ts.map +1 -1
- package/dist/components/logo-tile.js +5 -2
- package/dist/components/nav-bar.d.ts +14 -8
- package/dist/components/nav-bar.d.ts.map +1 -1
- package/dist/components/nav-bar.js +19 -13
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/popover.js +2 -1
- package/dist/components/pricing-card.d.ts +10 -15
- package/dist/components/pricing-card.d.ts.map +1 -1
- package/dist/components/pricing-card.js +18 -29
- package/dist/components/pricing.d.ts +11 -14
- package/dist/components/pricing.d.ts.map +1 -1
- package/dist/components/pricing.js +5 -15
- package/dist/components/quote-card.d.ts +10 -2
- package/dist/components/quote-card.d.ts.map +1 -1
- package/dist/components/quote-card.js +15 -3
- package/dist/components/security-grid.d.ts +25 -0
- package/dist/components/security-grid.d.ts.map +1 -0
- package/dist/components/security-grid.js +31 -0
- package/dist/components/select.d.ts.map +1 -1
- package/dist/components/select.js +2 -1
- package/dist/components/sheet.d.ts.map +1 -1
- package/dist/components/sheet.js +3 -2
- package/dist/components/sidebar.js +1 -1
- package/dist/components/stat-block.d.ts +9 -5
- package/dist/components/stat-block.d.ts.map +1 -1
- package/dist/components/stat-block.js +12 -6
- package/dist/components/statement.d.ts +32 -0
- package/dist/components/statement.d.ts.map +1 -0
- package/dist/components/statement.js +40 -0
- package/dist/components/stats-band.d.ts +6 -2
- package/dist/components/stats-band.d.ts.map +1 -1
- package/dist/components/stats-band.js +10 -3
- package/dist/components/status-dot.js +4 -4
- package/dist/components/steps.d.ts +34 -0
- package/dist/components/steps.d.ts.map +1 -0
- package/dist/components/steps.js +40 -0
- package/dist/components/team-grid.d.ts +27 -0
- package/dist/components/team-grid.d.ts.map +1 -0
- package/dist/components/team-grid.js +30 -0
- package/dist/components/testimonials.d.ts +39 -12
- package/dist/components/testimonials.d.ts.map +1 -1
- package/dist/components/testimonials.js +46 -13
- package/dist/components/texture-strip.d.ts +22 -0
- package/dist/components/texture-strip.d.ts.map +1 -0
- package/dist/components/texture-strip.js +29 -0
- package/dist/components/toggle.js +1 -1
- package/dist/components/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip.js +2 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/lib/message-scroller-primitive/geometry.d.ts +1 -5
- package/dist/lib/message-scroller-primitive/geometry.d.ts.map +1 -1
- package/dist/lib/message-scroller-primitive/geometry.js +1 -1
- package/dist/lib/message-scroller-primitive/stores.d.ts +2 -3
- package/dist/lib/message-scroller-primitive/stores.d.ts.map +1 -1
- package/dist/lib/message-scroller-primitive/stores.js +1 -1
- package/dist/lib/message-scroller-primitive/types.d.ts +1 -2
- package/dist/lib/message-scroller-primitive/types.d.ts.map +1 -1
- package/dist/lib/message-scroller-primitive/types.js +1 -1
- package/dist/lib/motion.d.ts +12 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +11 -0
- package/dist/lib/use-copy-to-clipboard.d.ts +11 -0
- package/dist/lib/use-copy-to-clipboard.d.ts.map +1 -0
- package/dist/lib/use-copy-to-clipboard.js +27 -0
- package/dist/styles/globals.css +175 -300
- package/docs/agent-work-surfaces.md +6 -5
- package/docs/agents/nadicodeai-ui.md +42 -273
- package/docs/consuming-cross-repo.md +26 -33
- package/docs/contract.md +43 -0
- package/docs/migration/nadia-consumer-readiness.md +5 -10
- package/docs/terminal-tui-semantics.md +142 -181
- package/llms.txt +49 -84
- package/package.json +2 -3
- package/skills/nadicodeai-ui/SKILL.md +6 -30
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
export function useCopyToClipboard({ text, onCopy, onError, timeout, skipWhileCopied = false, }) {
|
|
3
|
+
const [isCopied, setIsCopied] = useState(false);
|
|
4
|
+
const timeoutRef = useRef(0);
|
|
5
|
+
const copyToClipboard = useCallback(async () => {
|
|
6
|
+
if (typeof window === "undefined" || !navigator?.clipboard?.writeText) {
|
|
7
|
+
onError?.(new Error("Clipboard API not available"));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (skipWhileCopied && isCopied) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
await navigator.clipboard.writeText(text);
|
|
15
|
+
setIsCopied(true);
|
|
16
|
+
onCopy?.();
|
|
17
|
+
timeoutRef.current = window.setTimeout(() => setIsCopied(false), timeout);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
onError?.(error);
|
|
21
|
+
}
|
|
22
|
+
}, [isCopied, onCopy, onError, skipWhileCopied, text, timeout]);
|
|
23
|
+
useEffect(() => () => {
|
|
24
|
+
window.clearTimeout(timeoutRef.current);
|
|
25
|
+
}, []);
|
|
26
|
+
return { copyToClipboard, isCopied };
|
|
27
|
+
}
|
package/dist/styles/globals.css
CHANGED
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* @nadicodeai/ui — Tailwind v4 + shadcn entry stylesheet.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* to brand tokens.
|
|
4
|
+
* Tailwind and the complete design-system CSS module are composed here, behind
|
|
5
|
+
* the package's one public stylesheet interface. The generated raw-token theme,
|
|
6
|
+
* :root/.dark semantic role maps, and Tailwind semantic bridge come from
|
|
7
|
+
* DESIGN.md, so shadcn utilities (bg-background, text-foreground,
|
|
8
|
+
* border-border, …) resolve to brand tokens through one generated owner.
|
|
10
9
|
*
|
|
11
|
-
* Standard shadcn roles are generated by @nadicodeai/design-system.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* Components consume those roles/aliases and do not carry raw palette utilities
|
|
15
|
-
* or dark: utility classes. DESIGN.md remains the only source of literal values.
|
|
10
|
+
* Standard shadcn roles are generated by @nadicodeai/design-system. Components
|
|
11
|
+
* consume those roles or canonical generated tokens without raw palette values
|
|
12
|
+
* or component-local dark: utilities.
|
|
16
13
|
*/
|
|
17
14
|
@layer tokens, theme, reset, base, foundation, motion, layout, primitives, components, utilities;
|
|
18
15
|
|
|
19
16
|
@import "tailwindcss";
|
|
20
17
|
@import "tw-animate-css";
|
|
21
18
|
@import "./shadcn.tailwind.css";
|
|
22
|
-
@import "@nadicodeai/design-system/
|
|
23
|
-
@import "@nadicodeai/design-system/css/tokens.generated.css" layer(tokens);
|
|
19
|
+
@import "@nadicodeai/design-system/css";
|
|
24
20
|
@import "@xyflow/react/dist/style.css" layer(components);
|
|
25
21
|
|
|
26
22
|
/*
|
|
@@ -46,301 +42,179 @@
|
|
|
46
42
|
}
|
|
47
43
|
|
|
48
44
|
/*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* guards the resolved cascade across this file's import order.
|
|
45
|
+
* The canonical design-system module owns raw --nc-* mode aliases, semantic
|
|
46
|
+
* roles, and their Tailwind utility bridge for both root and scoped `.dark`
|
|
47
|
+
* surfaces. This adapter owns only narrow technology integration such as ANSI
|
|
48
|
+
* class translation below.
|
|
54
49
|
*/
|
|
55
50
|
|
|
56
|
-
@theme inline {
|
|
57
|
-
--color-background: var(--background);
|
|
58
|
-
--color-foreground: var(--foreground);
|
|
59
|
-
|
|
60
|
-
--color-card: var(--card);
|
|
61
|
-
--color-card-foreground: var(--card-foreground);
|
|
62
|
-
|
|
63
|
-
--color-popover: var(--popover);
|
|
64
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
65
|
-
|
|
66
|
-
--color-primary: var(--primary);
|
|
67
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
68
|
-
--color-primary-hover: var(--primary-hover);
|
|
69
|
-
--color-primary-active: var(--primary-active);
|
|
70
|
-
|
|
71
|
-
--color-secondary: var(--secondary);
|
|
72
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
73
|
-
|
|
74
|
-
--color-muted: var(--muted);
|
|
75
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
76
|
-
|
|
77
|
-
--color-accent: var(--accent);
|
|
78
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
79
|
-
|
|
80
|
-
--color-destructive: var(--destructive);
|
|
81
|
-
--color-destructive-foreground: var(--destructive-foreground);
|
|
82
|
-
|
|
83
|
-
--color-border: var(--border);
|
|
84
|
-
--color-input: var(--input);
|
|
85
|
-
--color-ring: var(--ring);
|
|
86
|
-
--color-scrim: var(--scrim);
|
|
87
|
-
--color-placeholder: var(--nc-muted);
|
|
88
|
-
|
|
89
|
-
--color-chart-1: var(--chart-1);
|
|
90
|
-
--color-chart-2: var(--chart-2);
|
|
91
|
-
--color-chart-3: var(--chart-3);
|
|
92
|
-
--color-chart-4: var(--chart-4);
|
|
93
|
-
--color-chart-5: var(--chart-5);
|
|
94
|
-
|
|
95
|
-
--color-sidebar: var(--sidebar);
|
|
96
|
-
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
97
|
-
--color-sidebar-primary: var(--sidebar-primary);
|
|
98
|
-
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
99
|
-
--color-sidebar-accent: var(--sidebar-accent);
|
|
100
|
-
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
101
|
-
--color-sidebar-border: var(--sidebar-border);
|
|
102
|
-
--color-sidebar-ring: var(--sidebar-ring);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
:root {
|
|
106
|
-
--nc-app-surface: var(--background);
|
|
107
|
-
--nc-app-surface-chrome: var(--sidebar);
|
|
108
|
-
--nc-app-surface-sidebar: var(--sidebar);
|
|
109
|
-
--nc-app-surface-panel: var(--card);
|
|
110
|
-
--nc-app-surface-panel-hover: var(--accent);
|
|
111
|
-
--nc-app-surface-panel-active: var(--primary);
|
|
112
|
-
--nc-app-surface-elevated: var(--popover);
|
|
113
|
-
--nc-app-surface-overlay: var(--popover);
|
|
114
|
-
--nc-app-border: var(--border);
|
|
115
|
-
--nc-app-border-subtle: var(--nc-seam);
|
|
116
|
-
--nc-app-ring: var(--ring);
|
|
117
|
-
--nc-app-text-primary: var(--foreground);
|
|
118
|
-
--nc-app-text-secondary: var(--nc-body);
|
|
119
|
-
--nc-app-text-tertiary: var(--muted-foreground);
|
|
120
|
-
--nc-app-text-inverse: var(--primary-foreground);
|
|
121
|
-
--nc-app-text-link: var(--nc-link-deep);
|
|
122
|
-
--nc-app-text-code: var(--nc-ink);
|
|
123
|
-
--nc-app-text-placeholder: var(--nc-muted);
|
|
124
|
-
--nc-app-text-disabled: var(--nc-cross);
|
|
125
|
-
|
|
126
|
-
--nc-chat-surface: var(--background);
|
|
127
|
-
--nc-chat-user-surface: var(--primary);
|
|
128
|
-
--nc-chat-assistant-surface: var(--card);
|
|
129
|
-
--nc-chat-system-surface: var(--muted);
|
|
130
|
-
--nc-chat-tool-surface: var(--secondary);
|
|
131
|
-
--nc-chat-reasoning-surface: var(--accent);
|
|
132
|
-
--nc-chat-artifact-surface: var(--popover);
|
|
133
|
-
--nc-chat-inline-ref-surface: var(--nc-link-bg-soft);
|
|
134
|
-
--nc-chat-directive-command: var(--nc-link);
|
|
135
|
-
--nc-chat-directive-skill: var(--nc-info);
|
|
136
|
-
--nc-chat-directive-theme: var(--nc-flag-red);
|
|
137
|
-
--nc-composer-surface: var(--popover);
|
|
138
|
-
--nc-composer-foreground: var(--popover-foreground);
|
|
139
|
-
--nc-composer-border: var(--input);
|
|
140
|
-
--nc-composer-ring: var(--ring);
|
|
141
|
-
|
|
142
|
-
--nc-tool-pending: var(--nc-warning-deep);
|
|
143
|
-
--nc-tool-running: var(--nc-state-running);
|
|
144
|
-
--nc-tool-success: var(--nc-success);
|
|
145
|
-
--nc-tool-warning: var(--nc-warning-deep);
|
|
146
|
-
--nc-tool-error: var(--nc-error);
|
|
147
|
-
--nc-tool-muted: var(--nc-muted);
|
|
148
|
-
--nc-tool-approval-run: var(--nc-state-running);
|
|
149
|
-
--nc-tool-approval-deny: var(--nc-error);
|
|
150
|
-
--nc-tool-approval-session: var(--nc-link);
|
|
151
|
-
--nc-tool-approval-always: var(--nc-success);
|
|
152
|
-
|
|
153
|
-
--nc-status-info: var(--nc-link);
|
|
154
|
-
--nc-status-success: var(--nc-success);
|
|
155
|
-
--nc-status-warning: var(--nc-warning-deep);
|
|
156
|
-
--nc-status-error: var(--nc-error);
|
|
157
|
-
--nc-status-paused: var(--nc-muted);
|
|
158
|
-
--nc-status-running: var(--nc-state-running);
|
|
159
|
-
--nc-status-blocked: var(--nc-state-blocked);
|
|
160
|
-
--nc-status-complete: var(--nc-state-complete);
|
|
161
|
-
--nc-status-offline: var(--nc-muted);
|
|
162
|
-
--nc-status-online: var(--nc-success);
|
|
163
|
-
|
|
164
|
-
--nc-diff-added-line: var(--nc-link-bg-soft);
|
|
165
|
-
--nc-diff-added-word: var(--nc-link);
|
|
166
|
-
--nc-diff-removed-line: var(--nc-error-soft);
|
|
167
|
-
--nc-diff-removed-word: var(--nc-error);
|
|
168
|
-
--nc-diff-hunk: var(--accent);
|
|
169
|
-
--nc-diff-file-header: var(--muted-foreground);
|
|
170
|
-
--nc-code-surface: var(--nc-ink);
|
|
171
|
-
--nc-code-border: var(--nc-body);
|
|
172
|
-
/* cyan family retired per Italia color contract §6 (design-system). keyword
|
|
173
|
-
and terminal cyan roles repoint to info (blue-cobalto-700); function gets
|
|
174
|
-
a deeper blue-cobalto step so it stays visually distinct from keyword. */
|
|
175
|
-
--nc-code-token-keyword: var(--nc-info);
|
|
176
|
-
--nc-code-token-string: var(--nc-success);
|
|
177
|
-
--nc-code-token-comment: var(--nc-cross);
|
|
178
|
-
--nc-code-token-function: var(--nc-blue-cobalto-900);
|
|
179
|
-
|
|
180
|
-
--nc-terminal-bg: var(--nc-ink);
|
|
181
|
-
--nc-terminal-fg: var(--nc-on-primary);
|
|
182
|
-
--nc-terminal-muted: var(--nc-cross);
|
|
183
|
-
--nc-terminal-cursor: var(--nc-info);
|
|
184
|
-
--nc-terminal-selection-bg: var(--nc-link-deep);
|
|
185
|
-
--nc-terminal-ansi-black: var(--nc-ink);
|
|
186
|
-
--nc-terminal-ansi-red: var(--nc-error);
|
|
187
|
-
--nc-terminal-ansi-green: var(--nc-success);
|
|
188
|
-
--nc-terminal-ansi-yellow: var(--nc-warning);
|
|
189
|
-
--nc-terminal-ansi-blue: var(--nc-link);
|
|
190
|
-
--nc-terminal-ansi-magenta: var(--nc-flag-red);
|
|
191
|
-
--nc-terminal-ansi-cyan: var(--nc-info);
|
|
192
|
-
--nc-terminal-ansi-white: var(--nc-on-primary);
|
|
193
|
-
--nc-terminal-ansi-bright-black: var(--nc-body);
|
|
194
|
-
--nc-terminal-ansi-bright-red: var(--nc-error-soft);
|
|
195
|
-
--nc-terminal-ansi-bright-green: var(--nc-green-italia-400);
|
|
196
|
-
--nc-terminal-ansi-bright-yellow: var(--nc-warning-soft);
|
|
197
|
-
--nc-terminal-ansi-bright-blue: var(--nc-info);
|
|
198
|
-
--nc-terminal-ansi-bright-magenta: var(--nc-flag-red);
|
|
199
|
-
--nc-terminal-ansi-bright-cyan: var(--nc-blue-cobalto-200);
|
|
200
|
-
--nc-terminal-ansi-bright-white: var(--nc-on-primary);
|
|
201
|
-
|
|
202
|
-
--nc-model-provider-surface: var(--muted);
|
|
203
|
-
--nc-model-capability-surface: var(--accent);
|
|
204
|
-
--nc-model-capability-border: var(--nc-link);
|
|
205
|
-
--nc-model-context-meter: var(--nc-warning);
|
|
206
|
-
--nc-model-cost-warning: var(--nc-warning-deep);
|
|
207
|
-
--nc-model-rate-limit: var(--nc-error);
|
|
208
|
-
|
|
209
|
-
--nc-plugin-permission-safe: var(--nc-success);
|
|
210
|
-
--nc-plugin-permission-review: var(--nc-warning-deep);
|
|
211
|
-
--nc-plugin-permission-risk: var(--nc-flag-red);
|
|
212
|
-
--nc-plugin-permission-denied: var(--nc-error);
|
|
213
|
-
--nc-plugin-permission-surface: var(--muted);
|
|
214
|
-
--nc-plugin-permission-foreground: var(--foreground);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
.dark {
|
|
218
|
-
--nc-app-surface: var(--background);
|
|
219
|
-
--nc-app-surface-chrome: var(--sidebar);
|
|
220
|
-
--nc-app-surface-sidebar: var(--sidebar);
|
|
221
|
-
--nc-app-surface-panel: var(--card);
|
|
222
|
-
--nc-app-surface-panel-hover: var(--accent);
|
|
223
|
-
--nc-app-surface-panel-active: var(--primary);
|
|
224
|
-
--nc-app-surface-elevated: var(--popover);
|
|
225
|
-
--nc-app-surface-overlay: var(--popover);
|
|
226
|
-
--nc-app-border: var(--border);
|
|
227
|
-
--nc-app-border-subtle: var(--nc-dark-line);
|
|
228
|
-
--nc-app-ring: var(--ring);
|
|
229
|
-
--nc-app-text-primary: var(--foreground);
|
|
230
|
-
--nc-app-text-secondary: var(--nc-cross);
|
|
231
|
-
--nc-app-text-tertiary: var(--muted-foreground);
|
|
232
|
-
--nc-app-text-inverse: var(--primary-foreground);
|
|
233
|
-
--nc-app-text-link: var(--nc-dark-cyan-soft);
|
|
234
|
-
--nc-app-text-code: var(--nc-on-primary);
|
|
235
|
-
--nc-app-text-placeholder: var(--nc-cross);
|
|
236
|
-
--nc-app-text-disabled: var(--nc-dark-muted);
|
|
237
|
-
|
|
238
|
-
--nc-chat-surface: var(--background);
|
|
239
|
-
--nc-chat-user-surface: var(--primary);
|
|
240
|
-
--nc-chat-assistant-surface: var(--card);
|
|
241
|
-
--nc-chat-system-surface: var(--muted);
|
|
242
|
-
--nc-chat-tool-surface: var(--secondary);
|
|
243
|
-
--nc-chat-reasoning-surface: var(--accent);
|
|
244
|
-
--nc-chat-artifact-surface: var(--popover);
|
|
245
|
-
--nc-chat-inline-ref-surface: var(--nc-dark-link-bg-soft);
|
|
246
|
-
--nc-chat-directive-command: var(--nc-dark-cyan);
|
|
247
|
-
--nc-chat-directive-skill: var(--nc-dark-cyan-soft);
|
|
248
|
-
--nc-chat-directive-theme: var(--nc-warning);
|
|
249
|
-
--nc-composer-surface: var(--popover);
|
|
250
|
-
--nc-composer-foreground: var(--popover-foreground);
|
|
251
|
-
--nc-composer-border: var(--input);
|
|
252
|
-
--nc-composer-ring: var(--ring);
|
|
253
|
-
|
|
254
|
-
--nc-tool-pending: var(--nc-warning);
|
|
255
|
-
--nc-tool-running: var(--nc-dark-cyan);
|
|
256
|
-
--nc-tool-success: var(--nc-dark-cyan-soft);
|
|
257
|
-
--nc-tool-warning: var(--nc-warning);
|
|
258
|
-
--nc-tool-error: var(--nc-error-soft);
|
|
259
|
-
--nc-tool-muted: var(--nc-cross);
|
|
260
|
-
--nc-tool-approval-run: var(--nc-dark-cyan-deep);
|
|
261
|
-
--nc-tool-approval-deny: var(--nc-error-soft);
|
|
262
|
-
--nc-tool-approval-session: var(--nc-dark-cyan);
|
|
263
|
-
--nc-tool-approval-always: var(--nc-dark-cyan-soft);
|
|
264
|
-
|
|
265
|
-
--nc-status-info: var(--nc-dark-cyan);
|
|
266
|
-
--nc-status-success: var(--nc-dark-cyan-soft);
|
|
267
|
-
--nc-status-warning: var(--nc-warning);
|
|
268
|
-
--nc-status-error: var(--nc-error-soft);
|
|
269
|
-
--nc-status-paused: var(--nc-cross);
|
|
270
|
-
--nc-status-running: var(--nc-dark-cyan);
|
|
271
|
-
--nc-status-blocked: var(--nc-error-soft);
|
|
272
|
-
--nc-status-complete: var(--nc-dark-cyan-soft);
|
|
273
|
-
--nc-status-offline: var(--nc-cross);
|
|
274
|
-
--nc-status-online: var(--nc-dark-cyan-soft);
|
|
275
|
-
|
|
276
|
-
--nc-diff-added-line: var(--nc-dark-link-bg-soft);
|
|
277
|
-
--nc-diff-added-word: var(--nc-dark-cyan-soft);
|
|
278
|
-
--nc-diff-removed-line: var(--nc-error-deep);
|
|
279
|
-
--nc-diff-removed-word: var(--nc-error-soft);
|
|
280
|
-
--nc-diff-hunk: var(--muted);
|
|
281
|
-
--nc-diff-file-header: var(--muted-foreground);
|
|
282
|
-
/* Code/terminal chrome must stay near-black in dark mode. --nc-ink flips
|
|
283
|
-
light at :root.dark (generated surface-palette remap), so these ink-as-
|
|
284
|
-
surface aliases re-pin to the dark canvas tokens explicitly. */
|
|
285
|
-
--nc-code-surface: var(--nc-dark-canvas-soft);
|
|
286
|
-
--nc-code-border: var(--nc-body);
|
|
287
|
-
/* cyan family retired per Italia color contract §6. dark-cyan/-soft/-deep
|
|
288
|
-
were kept unchanged in DESIGN.md specifically for this dark-mode "electric"
|
|
289
|
-
accent role, so repoint here rather than to info (which is the light-mode
|
|
290
|
-
replacement) to preserve the existing dark-theme look. */
|
|
291
|
-
--nc-code-token-keyword: var(--nc-dark-cyan);
|
|
292
|
-
--nc-code-token-string: var(--nc-dark-cyan-soft);
|
|
293
|
-
--nc-code-token-comment: var(--nc-cross);
|
|
294
|
-
--nc-code-token-function: var(--nc-dark-cyan-soft);
|
|
295
|
-
|
|
296
|
-
--nc-terminal-bg: var(--nc-dark-canvas-soft);
|
|
297
|
-
--nc-terminal-fg: var(--nc-on-primary);
|
|
298
|
-
--nc-terminal-muted: var(--nc-cross);
|
|
299
|
-
--nc-terminal-cursor: var(--nc-dark-cyan);
|
|
300
|
-
--nc-terminal-selection-bg: var(--nc-dark-link-bg-soft);
|
|
301
|
-
--nc-terminal-ansi-black: var(--nc-dark-line);
|
|
302
|
-
--nc-terminal-ansi-red: var(--nc-error-soft);
|
|
303
|
-
--nc-terminal-ansi-green: var(--nc-dark-cyan-soft);
|
|
304
|
-
--nc-terminal-ansi-yellow: var(--nc-warning);
|
|
305
|
-
--nc-terminal-ansi-blue: var(--nc-dark-cyan);
|
|
306
|
-
--nc-terminal-ansi-magenta: var(--nc-flag-red);
|
|
307
|
-
--nc-terminal-ansi-cyan: var(--nc-dark-cyan-soft);
|
|
308
|
-
--nc-terminal-ansi-white: var(--nc-on-primary);
|
|
309
|
-
--nc-terminal-ansi-bright-black: var(--nc-cross);
|
|
310
|
-
--nc-terminal-ansi-bright-red: var(--nc-error-soft);
|
|
311
|
-
--nc-terminal-ansi-bright-green: var(--nc-dark-cyan-soft);
|
|
312
|
-
--nc-terminal-ansi-bright-yellow: var(--nc-warning);
|
|
313
|
-
--nc-terminal-ansi-bright-blue: var(--nc-dark-cyan);
|
|
314
|
-
--nc-terminal-ansi-bright-magenta: var(--nc-flag-red);
|
|
315
|
-
--nc-terminal-ansi-bright-cyan: var(--nc-dark-cyan-soft);
|
|
316
|
-
--nc-terminal-ansi-bright-white: var(--nc-on-primary);
|
|
317
|
-
|
|
318
|
-
--nc-model-provider-surface: var(--muted);
|
|
319
|
-
--nc-model-capability-surface: var(--accent);
|
|
320
|
-
--nc-model-capability-border: var(--nc-dark-cyan);
|
|
321
|
-
--nc-model-context-meter: var(--nc-warning);
|
|
322
|
-
--nc-model-cost-warning: var(--nc-warning);
|
|
323
|
-
--nc-model-rate-limit: var(--nc-error-soft);
|
|
324
|
-
|
|
325
|
-
--nc-plugin-permission-safe: var(--nc-dark-cyan-soft);
|
|
326
|
-
--nc-plugin-permission-review: var(--nc-warning);
|
|
327
|
-
--nc-plugin-permission-risk: var(--nc-flag-red);
|
|
328
|
-
--nc-plugin-permission-denied: var(--nc-error-soft);
|
|
329
|
-
--nc-plugin-permission-surface: var(--muted);
|
|
330
|
-
--nc-plugin-permission-foreground: var(--foreground);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
51
|
/*
|
|
334
52
|
* The design-system CSS components (.nc-chat-thread, .nc-chat-bubble-*,
|
|
335
53
|
* .nc-artifact-preview, .nc-approval-gate, .nc-tool-call-trace,
|
|
336
54
|
* .nc-usage-meter, .nc-run-timeline, .nc-memory-item, .nc-handoff-banner, …)
|
|
337
55
|
* paint from the raw --nc-canvas/ink/body/line/canvas-soft/muted/warning
|
|
338
|
-
* palette. The generated
|
|
339
|
-
*
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
56
|
+
* palette. The generated mode layer remaps that surface palette alongside every
|
|
57
|
+
* other authored dark pair, so nc-* CSS components need no local mode selectors.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* ansi-to-react emits stable classes when Terminal enables `useClasses`.
|
|
62
|
+
* Terminal is an intentionally fixed-dark technology surface, so this adapter
|
|
63
|
+
* maps those protocol classes directly to canonical dark design tokens. It does
|
|
64
|
+
* not declare a parallel product-token hierarchy.
|
|
343
65
|
*/
|
|
66
|
+
[data-slot="terminal"] .ansi-black-fg {
|
|
67
|
+
color: var(--nc-dark-muted);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
[data-slot="terminal"] .ansi-red-fg {
|
|
71
|
+
color: var(--nc-dark-error);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
[data-slot="terminal"] .ansi-green-fg {
|
|
75
|
+
color: var(--nc-dark-success);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[data-slot="terminal"] .ansi-yellow-fg {
|
|
79
|
+
color: var(--nc-dark-warning);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
[data-slot="terminal"] .ansi-blue-fg {
|
|
83
|
+
color: var(--nc-dark-info);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[data-slot="terminal"] .ansi-magenta-fg {
|
|
87
|
+
color: var(--nc-dark-chart-6);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[data-slot="terminal"] .ansi-cyan-fg {
|
|
91
|
+
color: var(--nc-dark-cyan);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
[data-slot="terminal"] .ansi-white-fg {
|
|
95
|
+
color: var(--nc-dark-body);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
[data-slot="terminal"] .ansi-bright-black-fg {
|
|
99
|
+
color: var(--nc-dark-body);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
[data-slot="terminal"] .ansi-bright-red-fg {
|
|
103
|
+
color: var(--nc-dark-error-deep);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
[data-slot="terminal"] .ansi-bright-green-fg {
|
|
107
|
+
color: var(--nc-dark-link-deep);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
[data-slot="terminal"] .ansi-bright-yellow-fg {
|
|
111
|
+
color: var(--nc-dark-warning-deep);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
[data-slot="terminal"] .ansi-bright-blue-fg {
|
|
115
|
+
color: var(--nc-dark-info-deep);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
[data-slot="terminal"] .ansi-bright-magenta-fg {
|
|
119
|
+
color: var(--nc-dark-chart-seq-3);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
[data-slot="terminal"] .ansi-bright-cyan-fg {
|
|
123
|
+
color: var(--nc-dark-cyan-soft);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
[data-slot="terminal"] .ansi-bright-white-fg {
|
|
127
|
+
color: var(--nc-dark-ink);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
[data-slot="terminal"] .ansi-black-bg {
|
|
131
|
+
background-color: var(--nc-dark-canvas);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
[data-slot="terminal"] .ansi-red-bg {
|
|
135
|
+
background-color: var(--nc-dark-error);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
[data-slot="terminal"] .ansi-green-bg {
|
|
139
|
+
background-color: var(--nc-dark-success);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
[data-slot="terminal"] .ansi-yellow-bg {
|
|
143
|
+
background-color: var(--nc-dark-warning);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
[data-slot="terminal"] .ansi-blue-bg {
|
|
147
|
+
background-color: var(--nc-dark-info);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
[data-slot="terminal"] .ansi-magenta-bg {
|
|
151
|
+
background-color: var(--nc-dark-chart-6);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
[data-slot="terminal"] .ansi-cyan-bg {
|
|
155
|
+
background-color: var(--nc-dark-cyan);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
[data-slot="terminal"] .ansi-white-bg {
|
|
159
|
+
background-color: var(--nc-dark-body);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
[data-slot="terminal"] .ansi-bright-black-bg {
|
|
163
|
+
background-color: var(--nc-dark-body);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
[data-slot="terminal"] .ansi-bright-red-bg {
|
|
167
|
+
background-color: var(--nc-dark-error-deep);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
[data-slot="terminal"] .ansi-bright-green-bg {
|
|
171
|
+
background-color: var(--nc-dark-link-deep);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
[data-slot="terminal"] .ansi-bright-yellow-bg {
|
|
175
|
+
background-color: var(--nc-dark-warning-deep);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
[data-slot="terminal"] .ansi-bright-blue-bg {
|
|
179
|
+
background-color: var(--nc-dark-info-deep);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
[data-slot="terminal"] .ansi-bright-magenta-bg {
|
|
183
|
+
background-color: var(--nc-dark-chart-seq-3);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
[data-slot="terminal"] .ansi-bright-cyan-bg {
|
|
187
|
+
background-color: var(--nc-dark-cyan-soft);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
[data-slot="terminal"] .ansi-bright-white-bg {
|
|
191
|
+
background-color: var(--nc-dark-ink);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
[data-slot="terminal"] .ansi-black-bg:not([class*="-fg"]) {
|
|
195
|
+
color: var(--nc-dark-ink);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
[data-slot="terminal"]
|
|
199
|
+
:is(
|
|
200
|
+
.ansi-red-bg,
|
|
201
|
+
.ansi-green-bg,
|
|
202
|
+
.ansi-yellow-bg,
|
|
203
|
+
.ansi-blue-bg,
|
|
204
|
+
.ansi-magenta-bg,
|
|
205
|
+
.ansi-cyan-bg,
|
|
206
|
+
.ansi-white-bg,
|
|
207
|
+
.ansi-bright-black-bg,
|
|
208
|
+
.ansi-bright-red-bg,
|
|
209
|
+
.ansi-bright-green-bg,
|
|
210
|
+
.ansi-bright-yellow-bg,
|
|
211
|
+
.ansi-bright-blue-bg,
|
|
212
|
+
.ansi-bright-magenta-bg,
|
|
213
|
+
.ansi-bright-cyan-bg,
|
|
214
|
+
.ansi-bright-white-bg
|
|
215
|
+
):not([class*="-fg"]) {
|
|
216
|
+
color: var(--nc-dark-canvas);
|
|
217
|
+
}
|
|
344
218
|
|
|
345
219
|
[data-nc-code-block-body] {
|
|
346
220
|
background-color: var(--shiki-code-block-light-bg, var(--background));
|
|
@@ -407,3 +281,4 @@
|
|
|
407
281
|
}
|
|
408
282
|
|
|
409
283
|
@source "../components";
|
|
284
|
+
@source "../lib";
|
|
@@ -11,8 +11,9 @@ The React agent layer is the React face of the design-system Agentic Work
|
|
|
11
11
|
Surface CSS families (`design-system/DESIGN.md`). Each component consumes its
|
|
12
12
|
`nc-*` family class for identity — surface, border, chrome — and adds Tailwind
|
|
13
13
|
only for layout and spacing; the CSS family owns any value it already sets. The
|
|
14
|
-
families
|
|
15
|
-
|
|
14
|
+
families arrive through the UI package's complete React stylesheet interface.
|
|
15
|
+
Consumer setup lives in [`consuming-cross-repo.md`](consuming-cross-repo.md);
|
|
16
|
+
the component styling invariant lives in [`contract.md`](contract.md).
|
|
16
17
|
|
|
17
18
|
- `AgentThread` -> `nc-chat-thread`.
|
|
18
19
|
- `AgentMessage` text bubbles -> `nc-chat-bubble-user` / `nc-chat-bubble-agent`;
|
|
@@ -34,7 +35,7 @@ imports alongside `@nadicodeai/ui/globals.css`.
|
|
|
34
35
|
- `AgentComposer` renders a controlled or uncontrolled input surface with
|
|
35
36
|
attachments, queue panel, submit or stop control, and slash or mention slots.
|
|
36
37
|
- `AgentToolApproval` renders the approval choices `run`, `deny`, `session`,
|
|
37
|
-
and `always` with stable
|
|
38
|
+
and `always` with stable action meanings.
|
|
38
39
|
- `ArtifactPanel` renders text, code, diff, terminal summary, preview,
|
|
39
40
|
stack-trace, and test-result artifacts.
|
|
40
41
|
- `FilesPreview` and `ProjectFileTree` render a serializable project tree and
|
|
@@ -113,9 +114,9 @@ const redactedTool = {
|
|
|
113
114
|
} as const
|
|
114
115
|
```
|
|
115
116
|
|
|
116
|
-
## Approval
|
|
117
|
+
## Approval Meanings
|
|
117
118
|
|
|
118
|
-
`AgentToolApproval` emits both the user-facing choice and a
|
|
119
|
+
`AgentToolApproval` emits both the user-facing choice and a stable action value:
|
|
119
120
|
|
|
120
121
|
- `run` -> `approve-once`
|
|
121
122
|
- `deny` -> `reject`
|