@nadicodeai/ui 0.2.0 → 0.3.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 +2 -0
- package/README.md +29 -0
- package/dist/components/action-band.d.ts.map +1 -1
- package/dist/components/action-band.js +2 -1
- package/dist/components/agent-message.d.ts +2 -1
- package/dist/components/agent-message.d.ts.map +1 -1
- package/dist/components/agent-message.js +14 -21
- package/dist/components/agent-thread.d.ts.map +1 -1
- package/dist/components/agent-thread.js +3 -10
- package/dist/components/ai-elements/open-in-chat.d.ts.map +1 -1
- package/dist/components/ai-elements/open-in-chat.js +7 -18
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/automation-section.d.ts.map +1 -1
- package/dist/components/automation-section.js +38 -43
- package/dist/components/benefits-bento.js +1 -1
- package/dist/components/bento.d.ts +2 -2
- package/dist/components/bento.d.ts.map +1 -1
- package/dist/components/bento.js +4 -3
- package/dist/components/button.js +5 -5
- package/dist/components/card.js +1 -1
- package/dist/components/demo-surface.d.ts +10 -2
- package/dist/components/demo-surface.d.ts.map +1 -1
- package/dist/components/demo-surface.js +9 -2
- package/dist/components/dialog.js +1 -1
- package/dist/components/faq.d.ts +6 -5
- package/dist/components/faq.d.ts.map +1 -1
- package/dist/components/faq.js +8 -6
- package/dist/components/files-preview.d.ts.map +1 -1
- package/dist/components/files-preview.js +8 -17
- package/dist/components/hero-split.d.ts.map +1 -1
- package/dist/components/hero-split.js +3 -2
- package/dist/components/input.js +1 -1
- package/dist/components/installer-shell.d.ts.map +1 -1
- package/dist/components/installer-shell.js +9 -12
- package/dist/components/logo-band.d.ts.map +1 -1
- package/dist/components/logo-band.js +2 -3
- package/dist/components/pricing.d.ts.map +1 -1
- package/dist/components/pricing.js +5 -3
- package/dist/components/seam-grid.d.ts +30 -0
- package/dist/components/seam-grid.d.ts.map +1 -0
- package/dist/components/seam-grid.js +30 -0
- package/dist/components/section-intro.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/shift-band.d.ts.map +1 -1
- package/dist/components/shift-band.js +2 -1
- package/dist/components/state-notice.d.ts +13 -0
- package/dist/components/state-notice.d.ts.map +1 -0
- package/dist/components/state-notice.js +8 -0
- package/dist/components/stats-band.d.ts.map +1 -1
- package/dist/components/stats-band.js +4 -5
- package/dist/components/testimonials.d.ts.map +1 -1
- package/dist/components/testimonials.js +3 -4
- package/dist/components/textarea.js +1 -1
- package/dist/components/use-case-bento.d.ts +4 -2
- package/dist/components/use-case-bento.d.ts.map +1 -1
- package/dist/components/use-case-bento.js +3 -3
- package/dist/components/watch-it-work-band.d.ts +3 -2
- package/dist/components/watch-it-work-band.d.ts.map +1 -1
- package/dist/components/watch-it-work-band.js +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lib/agent-work-state.d.ts +36 -0
- package/dist/lib/agent-work-state.d.ts.map +1 -0
- package/dist/lib/agent-work-state.js +36 -0
- package/dist/lib/seam.d.ts +29 -0
- package/dist/lib/seam.d.ts.map +1 -0
- package/dist/lib/seam.js +30 -0
- package/dist/styles/globals.css +46 -36
- package/docs/agents/nadicodeai-ui.md +22 -0
- package/package.json +3 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { SeamGrid } from "./seam-grid.js";
|
|
3
3
|
import { Bento, BentoItem } from "./bento.js";
|
|
4
|
-
import { DemoSurface } from "./demo-surface.js";
|
|
5
|
-
function WatchItWorkBand({ kicker = "Product demonstration", title = "Watch it work", lead, primaryDemo, secondaryDemo, className, ...props }) {
|
|
6
|
-
return (_jsx(
|
|
4
|
+
import { DemoSurface, } from "./demo-surface.js";
|
|
5
|
+
function WatchItWorkBand({ kicker = "Product demonstration", title = "Watch it work", lead, primaryDemo, secondaryDemo, demoLabels, className, ...props }) {
|
|
6
|
+
return (_jsx(SeamGrid, { "data-slot": "watch-it-work-band", className: className, ...props, children: _jsxs(Bento, { children: [_jsxs(BentoItem, { span: 4, children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h2", { className: "nc-type-title-md text-foreground", children: title }), lead ? (_jsx("p", { className: "nc-type-body-md text-muted-foreground", children: lead })) : null] }), primaryDemo ? (_jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "p-[var(--nc-sm)]", children: _jsx(DemoSurface, { labels: demoLabels, script: primaryDemo, title: "Conversation" }) })) : null, secondaryDemo ? (_jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "p-[var(--nc-sm)]", children: _jsx(DemoSurface, { labels: demoLabels, script: secondaryDemo, title: "Screen" }) })) : null] }) }));
|
|
7
7
|
}
|
|
8
8
|
export { WatchItWorkBand };
|
package/dist/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export * from "./components/quote-card";
|
|
|
75
75
|
export * from "./components/radio-group";
|
|
76
76
|
export * from "./components/resizable";
|
|
77
77
|
export * from "./components/scroll-area";
|
|
78
|
+
export * from "./components/seam-grid";
|
|
78
79
|
export * from "./components/section-intro";
|
|
79
80
|
export * from "./components/select";
|
|
80
81
|
export * from "./components/separator";
|
|
@@ -87,6 +88,7 @@ export * from "./components/slider";
|
|
|
87
88
|
export * from "./components/sonner";
|
|
88
89
|
export * from "./components/spinner";
|
|
89
90
|
export * from "./components/stat-block";
|
|
91
|
+
export * from "./components/state-notice";
|
|
90
92
|
export * from "./components/stats-band";
|
|
91
93
|
export * from "./components/switch";
|
|
92
94
|
export * from "./components/table";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -75,6 +75,7 @@ export * from "./components/quote-card.js";
|
|
|
75
75
|
export * from "./components/radio-group.js";
|
|
76
76
|
export * from "./components/resizable.js";
|
|
77
77
|
export * from "./components/scroll-area.js";
|
|
78
|
+
export * from "./components/seam-grid.js";
|
|
78
79
|
export * from "./components/section-intro.js";
|
|
79
80
|
export * from "./components/select.js";
|
|
80
81
|
export * from "./components/separator.js";
|
|
@@ -87,6 +88,7 @@ export * from "./components/slider.js";
|
|
|
87
88
|
export * from "./components/sonner.js";
|
|
88
89
|
export * from "./components/spinner.js";
|
|
89
90
|
export * from "./components/stat-block.js";
|
|
91
|
+
export * from "./components/state-notice.js";
|
|
90
92
|
export * from "./components/stats-band.js";
|
|
91
93
|
export * from "./components/switch.js";
|
|
92
94
|
export * from "./components/table.js";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam for the `AgentWorkState` presentation contract.
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONE place a work state's icon, ARIA `role`, and
|
|
5
|
+
* busy/motion signal are decided. Every caller (`agent-message.tsx`,
|
|
6
|
+
* `agent-thread.tsx`, `state-notice.tsx`) reads `statePresentation` instead
|
|
7
|
+
* of keeping its own copy of the icon table or the role/busy rule, so a
|
|
8
|
+
* future state's presentation rule has exactly one place to be added or
|
|
9
|
+
* fixed.
|
|
10
|
+
*
|
|
11
|
+
* This is NOT part of the public package surface. It has no `exports`
|
|
12
|
+
* subpath, matching `agent-attachment.ts` and `seam.ts` in this directory.
|
|
13
|
+
*
|
|
14
|
+
* Dependency direction is one-way: components import this module; this
|
|
15
|
+
* module never imports a component (no cycle).
|
|
16
|
+
*/
|
|
17
|
+
import type { ComponentType } from "react";
|
|
18
|
+
type AgentWorkState = "idle" | "empty" | "queued" | "streaming" | "interrupted" | "retryable" | "permission-denied" | "fatal";
|
|
19
|
+
type AgentWorkStatePresentation = {
|
|
20
|
+
icon: ComponentType<{
|
|
21
|
+
className?: string;
|
|
22
|
+
}>;
|
|
23
|
+
role: "alert" | "status";
|
|
24
|
+
busy: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* statePresentation is the single source of truth for a presentable
|
|
28
|
+
* `AgentWorkState`'s icon, ARIA `role`, and busy/motion signal. Icon values
|
|
29
|
+
* reproduce `agent-message.tsx`'s `stateMeta` and `agent-thread.tsx`'s
|
|
30
|
+
* `threadStateDefaults` (confirmed byte-identical icon-for-icon); `role`
|
|
31
|
+
* and `busy` reproduce `state-notice.tsx`'s inline rules verbatim.
|
|
32
|
+
*/
|
|
33
|
+
declare function statePresentation(state: Exclude<AgentWorkState, "idle" | "empty">): AgentWorkStatePresentation;
|
|
34
|
+
export { statePresentation };
|
|
35
|
+
export type { AgentWorkState };
|
|
36
|
+
//# sourceMappingURL=agent-work-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-work-state.d.ts","sourceRoot":"","sources":["../../src/lib/agent-work-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,KAAK,cAAc,GACf,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,aAAa,GACb,WAAW,GACX,mBAAmB,GACnB,OAAO,CAAA;AAEX,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3C,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAcD;;;;;;GAMG;AACH,iBAAS,iBAAiB,CACxB,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAC/C,0BAA0B,CAE5B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,YAAY,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam for the `AgentWorkState` presentation contract.
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONE place a work state's icon, ARIA `role`, and
|
|
5
|
+
* busy/motion signal are decided. Every caller (`agent-message.tsx`,
|
|
6
|
+
* `agent-thread.tsx`, `state-notice.tsx`) reads `statePresentation` instead
|
|
7
|
+
* of keeping its own copy of the icon table or the role/busy rule, so a
|
|
8
|
+
* future state's presentation rule has exactly one place to be added or
|
|
9
|
+
* fixed.
|
|
10
|
+
*
|
|
11
|
+
* This is NOT part of the public package surface. It has no `exports`
|
|
12
|
+
* subpath, matching `agent-attachment.ts` and `seam.ts` in this directory.
|
|
13
|
+
*
|
|
14
|
+
* Dependency direction is one-way: components import this module; this
|
|
15
|
+
* module never imports a component (no cycle).
|
|
16
|
+
*/
|
|
17
|
+
import { AlertTriangleIcon, ClockIcon, FileWarningIcon, LoaderCircleIcon, RefreshCwIcon, ShieldXIcon, } from "lucide-react";
|
|
18
|
+
const presentationByState = {
|
|
19
|
+
fatal: { busy: false, icon: FileWarningIcon, role: "alert" },
|
|
20
|
+
interrupted: { busy: false, icon: AlertTriangleIcon, role: "status" },
|
|
21
|
+
"permission-denied": { busy: false, icon: ShieldXIcon, role: "alert" },
|
|
22
|
+
queued: { busy: false, icon: ClockIcon, role: "status" },
|
|
23
|
+
retryable: { busy: false, icon: RefreshCwIcon, role: "status" },
|
|
24
|
+
streaming: { busy: true, icon: LoaderCircleIcon, role: "status" },
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* statePresentation is the single source of truth for a presentable
|
|
28
|
+
* `AgentWorkState`'s icon, ARIA `role`, and busy/motion signal. Icon values
|
|
29
|
+
* reproduce `agent-message.tsx`'s `stateMeta` and `agent-thread.tsx`'s
|
|
30
|
+
* `threadStateDefaults` (confirmed byte-identical icon-for-icon); `role`
|
|
31
|
+
* and `busy` reproduce `state-notice.tsx`'s inline rules verbatim.
|
|
32
|
+
*/
|
|
33
|
+
function statePresentation(state) {
|
|
34
|
+
return presentationByState[state];
|
|
35
|
+
}
|
|
36
|
+
export { statePresentation };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam helper for the "gap-as-seam" grid mechanics.
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONE place the ink seam `color-mix(...)` string lives, so a
|
|
5
|
+
* typo can no longer silently break one band's seam while the others stay
|
|
6
|
+
* correct. `SeamGrid` (the public primitive) and the `logo-band` grid owner both
|
|
7
|
+
* derive their seam colour from `seamSurfaceClass` here.
|
|
8
|
+
*
|
|
9
|
+
* SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
|
|
10
|
+
* every cell boundary while borderless, square-cornered cells fill on top, so no
|
|
11
|
+
* coordinate ever carries two lines. The seam COLOUR is the only thing that flips
|
|
12
|
+
* with `surface`: canvas paints the brand `line` via `bg-border`; ink mixes the
|
|
13
|
+
* line toward the ink role so the seam stays a seam and never changes weight.
|
|
14
|
+
* Token-only; no `dark:` styling.
|
|
15
|
+
*
|
|
16
|
+
* This is NOT part of the public package surface. It has no `exports` subpath, so
|
|
17
|
+
* consumers couple to the `SeamGrid` component contract rather than to the exact
|
|
18
|
+
* arbitrary Tailwind class string. Keep it that way.
|
|
19
|
+
*/
|
|
20
|
+
type SeamSurface = "canvas" | "ink";
|
|
21
|
+
/**
|
|
22
|
+
* seamSurfaceClass is the single source for the seam colour class. Internal code
|
|
23
|
+
* reaches for this (or `SeamGrid`, which wraps it) instead of hand-copying the ink
|
|
24
|
+
* `color-mix(...)` string into another grid owner.
|
|
25
|
+
*/
|
|
26
|
+
declare function seamSurfaceClass(surface: SeamSurface): string;
|
|
27
|
+
export { seamSurfaceClass };
|
|
28
|
+
export type { SeamSurface };
|
|
29
|
+
//# sourceMappingURL=seam.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seam.d.ts","sourceRoot":"","sources":["../../src/lib/seam.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,KAAK,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEnC;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAItD;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/lib/seam.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam helper for the "gap-as-seam" grid mechanics.
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONE place the ink seam `color-mix(...)` string lives, so a
|
|
5
|
+
* typo can no longer silently break one band's seam while the others stay
|
|
6
|
+
* correct. `SeamGrid` (the public primitive) and the `logo-band` grid owner both
|
|
7
|
+
* derive their seam colour from `seamSurfaceClass` here.
|
|
8
|
+
*
|
|
9
|
+
* SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
|
|
10
|
+
* every cell boundary while borderless, square-cornered cells fill on top, so no
|
|
11
|
+
* coordinate ever carries two lines. The seam COLOUR is the only thing that flips
|
|
12
|
+
* with `surface`: canvas paints the brand `line` via `bg-border`; ink mixes the
|
|
13
|
+
* line toward the ink role so the seam stays a seam and never changes weight.
|
|
14
|
+
* Token-only; no `dark:` styling.
|
|
15
|
+
*
|
|
16
|
+
* This is NOT part of the public package surface. It has no `exports` subpath, so
|
|
17
|
+
* consumers couple to the `SeamGrid` component contract rather than to the exact
|
|
18
|
+
* arbitrary Tailwind class string. Keep it that way.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* seamSurfaceClass is the single source for the seam colour class. Internal code
|
|
22
|
+
* reaches for this (or `SeamGrid`, which wraps it) instead of hand-copying the ink
|
|
23
|
+
* `color-mix(...)` string into another grid owner.
|
|
24
|
+
*/
|
|
25
|
+
function seamSurfaceClass(surface) {
|
|
26
|
+
return surface === "ink"
|
|
27
|
+
? "bg-[color-mix(in_srgb,var(--nc-line)_40%,var(--nc-ink))]"
|
|
28
|
+
: "bg-border";
|
|
29
|
+
}
|
|
30
|
+
export { seamSurfaceClass };
|
package/dist/styles/globals.css
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
--nc-chat-artifact-surface: var(--popover);
|
|
103
103
|
--nc-chat-inline-ref-surface: var(--nc-link-bg-soft);
|
|
104
104
|
--nc-chat-directive-command: var(--nc-link);
|
|
105
|
-
--nc-chat-directive-skill: var(--nc-
|
|
105
|
+
--nc-chat-directive-skill: var(--nc-info);
|
|
106
106
|
--nc-chat-directive-theme: var(--nc-flag-red);
|
|
107
107
|
--nc-composer-surface: var(--popover);
|
|
108
108
|
--nc-composer-foreground: var(--popover-foreground);
|
|
@@ -139,15 +139,18 @@
|
|
|
139
139
|
--nc-diff-file-header: var(--muted-foreground);
|
|
140
140
|
--nc-code-surface: var(--nc-ink);
|
|
141
141
|
--nc-code-border: var(--nc-body);
|
|
142
|
-
|
|
142
|
+
/* cyan family retired per Italia color contract §6 (design-system). keyword
|
|
143
|
+
and terminal cyan roles repoint to info (blue-cobalto-700); function gets
|
|
144
|
+
a deeper blue-cobalto step so it stays visually distinct from keyword. */
|
|
145
|
+
--nc-code-token-keyword: var(--nc-info);
|
|
143
146
|
--nc-code-token-string: var(--nc-success);
|
|
144
147
|
--nc-code-token-comment: var(--nc-cross);
|
|
145
|
-
--nc-code-token-function: var(--nc-
|
|
148
|
+
--nc-code-token-function: var(--nc-blue-cobalto-900);
|
|
146
149
|
|
|
147
150
|
--nc-terminal-bg: var(--nc-ink);
|
|
148
151
|
--nc-terminal-fg: var(--nc-on-primary);
|
|
149
152
|
--nc-terminal-muted: var(--nc-cross);
|
|
150
|
-
--nc-terminal-cursor: var(--nc-
|
|
153
|
+
--nc-terminal-cursor: var(--nc-info);
|
|
151
154
|
--nc-terminal-selection-bg: var(--nc-link-deep);
|
|
152
155
|
--nc-terminal-ansi-black: var(--nc-ink);
|
|
153
156
|
--nc-terminal-ansi-red: var(--nc-error);
|
|
@@ -155,15 +158,15 @@
|
|
|
155
158
|
--nc-terminal-ansi-yellow: var(--nc-warning);
|
|
156
159
|
--nc-terminal-ansi-blue: var(--nc-link);
|
|
157
160
|
--nc-terminal-ansi-magenta: var(--nc-flag-red);
|
|
158
|
-
--nc-terminal-ansi-cyan: var(--nc-
|
|
161
|
+
--nc-terminal-ansi-cyan: var(--nc-info);
|
|
159
162
|
--nc-terminal-ansi-white: var(--nc-on-primary);
|
|
160
163
|
--nc-terminal-ansi-bright-black: var(--nc-body);
|
|
161
164
|
--nc-terminal-ansi-bright-red: var(--nc-error-soft);
|
|
162
|
-
--nc-terminal-ansi-bright-green: var(--nc-
|
|
165
|
+
--nc-terminal-ansi-bright-green: var(--nc-green-italia-400);
|
|
163
166
|
--nc-terminal-ansi-bright-yellow: var(--nc-warning-soft);
|
|
164
|
-
--nc-terminal-ansi-bright-blue: var(--nc-
|
|
167
|
+
--nc-terminal-ansi-bright-blue: var(--nc-info);
|
|
165
168
|
--nc-terminal-ansi-bright-magenta: var(--nc-flag-red);
|
|
166
|
-
--nc-terminal-ansi-bright-cyan: var(--nc-
|
|
169
|
+
--nc-terminal-ansi-bright-cyan: var(--nc-blue-cobalto-200);
|
|
167
170
|
--nc-terminal-ansi-bright-white: var(--nc-on-primary);
|
|
168
171
|
|
|
169
172
|
--nc-model-provider-surface: var(--muted);
|
|
@@ -197,7 +200,7 @@
|
|
|
197
200
|
--nc-app-text-secondary: var(--nc-cross);
|
|
198
201
|
--nc-app-text-tertiary: var(--muted-foreground);
|
|
199
202
|
--nc-app-text-inverse: var(--primary-foreground);
|
|
200
|
-
--nc-app-text-link: var(--nc-cyan-soft);
|
|
203
|
+
--nc-app-text-link: var(--nc-dark-cyan-soft);
|
|
201
204
|
--nc-app-text-code: var(--nc-on-primary);
|
|
202
205
|
--nc-app-text-placeholder: var(--nc-cross);
|
|
203
206
|
--nc-app-text-disabled: var(--nc-body);
|
|
@@ -210,8 +213,8 @@
|
|
|
210
213
|
--nc-chat-reasoning-surface: var(--accent);
|
|
211
214
|
--nc-chat-artifact-surface: var(--popover);
|
|
212
215
|
--nc-chat-inline-ref-surface: var(--nc-link-deep);
|
|
213
|
-
--nc-chat-directive-command: var(--nc-cyan);
|
|
214
|
-
--nc-chat-directive-skill: var(--nc-cyan-soft);
|
|
216
|
+
--nc-chat-directive-command: var(--nc-dark-cyan);
|
|
217
|
+
--nc-chat-directive-skill: var(--nc-dark-cyan-soft);
|
|
215
218
|
--nc-chat-directive-theme: var(--nc-warning);
|
|
216
219
|
--nc-composer-surface: var(--popover);
|
|
217
220
|
--nc-composer-foreground: var(--popover-foreground);
|
|
@@ -219,70 +222,77 @@
|
|
|
219
222
|
--nc-composer-ring: var(--ring);
|
|
220
223
|
|
|
221
224
|
--nc-tool-pending: var(--nc-warning);
|
|
222
|
-
--nc-tool-running: var(--nc-cyan);
|
|
223
|
-
--nc-tool-success: var(--nc-cyan-soft);
|
|
225
|
+
--nc-tool-running: var(--nc-dark-cyan);
|
|
226
|
+
--nc-tool-success: var(--nc-dark-cyan-soft);
|
|
224
227
|
--nc-tool-warning: var(--nc-warning);
|
|
225
228
|
--nc-tool-error: var(--nc-error-soft);
|
|
226
229
|
--nc-tool-muted: var(--nc-cross);
|
|
227
|
-
--nc-tool-approval-run: var(--nc-cyan-deep);
|
|
230
|
+
--nc-tool-approval-run: var(--nc-dark-cyan-deep);
|
|
228
231
|
--nc-tool-approval-deny: var(--nc-error-soft);
|
|
229
|
-
--nc-tool-approval-session: var(--nc-cyan);
|
|
230
|
-
--nc-tool-approval-always: var(--nc-cyan-soft);
|
|
232
|
+
--nc-tool-approval-session: var(--nc-dark-cyan);
|
|
233
|
+
--nc-tool-approval-always: var(--nc-dark-cyan-soft);
|
|
231
234
|
|
|
232
|
-
--nc-status-info: var(--nc-cyan);
|
|
233
|
-
--nc-status-success: var(--nc-cyan-soft);
|
|
235
|
+
--nc-status-info: var(--nc-dark-cyan);
|
|
236
|
+
--nc-status-success: var(--nc-dark-cyan-soft);
|
|
234
237
|
--nc-status-warning: var(--nc-warning);
|
|
235
238
|
--nc-status-error: var(--nc-error-soft);
|
|
236
239
|
--nc-status-paused: var(--nc-cross);
|
|
237
|
-
--nc-status-running: var(--nc-cyan);
|
|
240
|
+
--nc-status-running: var(--nc-dark-cyan);
|
|
238
241
|
--nc-status-blocked: var(--nc-error-soft);
|
|
239
|
-
--nc-status-complete: var(--nc-cyan-soft);
|
|
242
|
+
--nc-status-complete: var(--nc-dark-cyan-soft);
|
|
240
243
|
--nc-status-offline: var(--nc-cross);
|
|
241
|
-
--nc-status-online: var(--nc-cyan-soft);
|
|
244
|
+
--nc-status-online: var(--nc-dark-cyan-soft);
|
|
242
245
|
|
|
243
246
|
--nc-diff-added-line: var(--nc-link-deep);
|
|
244
|
-
--nc-diff-added-word: var(--nc-cyan-soft);
|
|
247
|
+
--nc-diff-added-word: var(--nc-dark-cyan-soft);
|
|
245
248
|
--nc-diff-removed-line: var(--nc-error-deep);
|
|
246
249
|
--nc-diff-removed-word: var(--nc-error-soft);
|
|
247
250
|
--nc-diff-hunk: var(--muted);
|
|
248
251
|
--nc-diff-file-header: var(--muted-foreground);
|
|
249
|
-
--nc-
|
|
252
|
+
/* --nc-primary is now green-700 (Italia contract §4); code/terminal chrome
|
|
253
|
+
must stay near-black in dark mode too, so repoint to --nc-ink instead of
|
|
254
|
+
letting the code surface render green. */
|
|
255
|
+
--nc-code-surface: var(--nc-ink);
|
|
250
256
|
--nc-code-border: var(--nc-body);
|
|
251
|
-
|
|
252
|
-
|
|
257
|
+
/* cyan family retired per Italia color contract §6. dark-cyan/-soft/-deep
|
|
258
|
+
were kept unchanged in DESIGN.md specifically for this dark-mode "electric"
|
|
259
|
+
accent role, so repoint here rather than to info (which is the light-mode
|
|
260
|
+
replacement) to preserve the existing dark-theme look. */
|
|
261
|
+
--nc-code-token-keyword: var(--nc-dark-cyan);
|
|
262
|
+
--nc-code-token-string: var(--nc-dark-cyan-soft);
|
|
253
263
|
--nc-code-token-comment: var(--nc-cross);
|
|
254
|
-
--nc-code-token-function: var(--nc-cyan-soft);
|
|
264
|
+
--nc-code-token-function: var(--nc-dark-cyan-soft);
|
|
255
265
|
|
|
256
|
-
--nc-terminal-bg: var(--nc-
|
|
266
|
+
--nc-terminal-bg: var(--nc-ink);
|
|
257
267
|
--nc-terminal-fg: var(--nc-on-primary);
|
|
258
268
|
--nc-terminal-muted: var(--nc-cross);
|
|
259
|
-
--nc-terminal-cursor: var(--nc-cyan);
|
|
269
|
+
--nc-terminal-cursor: var(--nc-dark-cyan);
|
|
260
270
|
--nc-terminal-selection-bg: var(--nc-link-deep);
|
|
261
271
|
--nc-terminal-ansi-black: var(--nc-body);
|
|
262
272
|
--nc-terminal-ansi-red: var(--nc-error-soft);
|
|
263
|
-
--nc-terminal-ansi-green: var(--nc-cyan-soft);
|
|
273
|
+
--nc-terminal-ansi-green: var(--nc-dark-cyan-soft);
|
|
264
274
|
--nc-terminal-ansi-yellow: var(--nc-warning);
|
|
265
|
-
--nc-terminal-ansi-blue: var(--nc-cyan);
|
|
275
|
+
--nc-terminal-ansi-blue: var(--nc-dark-cyan);
|
|
266
276
|
--nc-terminal-ansi-magenta: var(--nc-flag-red);
|
|
267
|
-
--nc-terminal-ansi-cyan: var(--nc-cyan-soft);
|
|
277
|
+
--nc-terminal-ansi-cyan: var(--nc-dark-cyan-soft);
|
|
268
278
|
--nc-terminal-ansi-white: var(--nc-on-primary);
|
|
269
279
|
--nc-terminal-ansi-bright-black: var(--nc-cross);
|
|
270
280
|
--nc-terminal-ansi-bright-red: var(--nc-error-soft);
|
|
271
|
-
--nc-terminal-ansi-bright-green: var(--nc-cyan-soft);
|
|
281
|
+
--nc-terminal-ansi-bright-green: var(--nc-dark-cyan-soft);
|
|
272
282
|
--nc-terminal-ansi-bright-yellow: var(--nc-warning-soft);
|
|
273
|
-
--nc-terminal-ansi-bright-blue: var(--nc-cyan);
|
|
283
|
+
--nc-terminal-ansi-bright-blue: var(--nc-dark-cyan);
|
|
274
284
|
--nc-terminal-ansi-bright-magenta: var(--nc-flag-red);
|
|
275
|
-
--nc-terminal-ansi-bright-cyan: var(--nc-cyan-soft);
|
|
285
|
+
--nc-terminal-ansi-bright-cyan: var(--nc-dark-cyan-soft);
|
|
276
286
|
--nc-terminal-ansi-bright-white: var(--nc-on-primary);
|
|
277
287
|
|
|
278
288
|
--nc-model-provider-surface: var(--muted);
|
|
279
289
|
--nc-model-capability-surface: var(--accent);
|
|
280
|
-
--nc-model-capability-border: var(--nc-cyan);
|
|
290
|
+
--nc-model-capability-border: var(--nc-dark-cyan);
|
|
281
291
|
--nc-model-context-meter: var(--nc-warning);
|
|
282
292
|
--nc-model-cost-warning: var(--nc-warning);
|
|
283
293
|
--nc-model-rate-limit: var(--nc-error-soft);
|
|
284
294
|
|
|
285
|
-
--nc-plugin-permission-safe: var(--nc-cyan-soft);
|
|
295
|
+
--nc-plugin-permission-safe: var(--nc-dark-cyan-soft);
|
|
286
296
|
--nc-plugin-permission-review: var(--nc-warning);
|
|
287
297
|
--nc-plugin-permission-risk: var(--nc-flag-red);
|
|
288
298
|
--nc-plugin-permission-denied: var(--nc-error-soft);
|
|
@@ -87,6 +87,11 @@ Current shipped product subpaths:
|
|
|
87
87
|
- `@nadicodeai/ui/components/plugin-slot-boundary`
|
|
88
88
|
- `@nadicodeai/ui/components/settings-section`
|
|
89
89
|
|
|
90
|
+
`StateNotice` (`@nadicodeai/ui/components/state-notice`) is the supported
|
|
91
|
+
low-level state-banner primitive behind `AgentMessageStateNotice` and
|
|
92
|
+
`AgentThreadStateBanner`; it requires a `title` and owns the shared
|
|
93
|
+
`role="status"`/`role="alert"` skeleton.
|
|
94
|
+
|
|
90
95
|
## Product Components And Migration
|
|
91
96
|
|
|
92
97
|
Product components are presentational. Use them for shared settings, shell,
|
|
@@ -112,6 +117,23 @@ Read `docs/migration/nadia-consumer-readiness.md` before migrating a consumer.
|
|
|
112
117
|
It lists the CSS imports, public subpaths, fixture redaction rules, and readiness
|
|
113
118
|
gates.
|
|
114
119
|
|
|
120
|
+
## Layout Primitives
|
|
121
|
+
|
|
122
|
+
`SeamGrid` (`@nadicodeai/ui/components/seam-grid`) is a supported low-level layout
|
|
123
|
+
primitive: the single owner of the "gap-as-seam" grid that backs the bordered
|
|
124
|
+
section grids (stats band, testimonials, logo band, and siblings). It renders a
|
|
125
|
+
`div` with the invariant `grid gap-px` base, so borderless, square-cornered cells
|
|
126
|
+
paint one shared hairline seam at every boundary instead of doubling lines.
|
|
127
|
+
|
|
128
|
+
Its only seam-specific prop is `surface`: `"canvas"` (default) paints the brand
|
|
129
|
+
`line` via `bg-border`, and `"ink"` mixes the line toward the ink role for darker
|
|
130
|
+
panels; the value is also mirrored on a `data-surface` attribute. Pass
|
|
131
|
+
`className`, `children`, and any `div` props to keep a bespoke column map,
|
|
132
|
+
heights, and `data-*` attributes. Reach for `SeamGrid` and its `surface` prop
|
|
133
|
+
when building a new bordered grid rather than hand-copying the seam colour: the
|
|
134
|
+
seam class helper is an internal `src/lib/seam` detail with no public subpath
|
|
135
|
+
export, so nothing should couple to the raw arbitrary Tailwind class string.
|
|
136
|
+
|
|
115
137
|
## Forms
|
|
116
138
|
|
|
117
139
|
Use the package's shadcn form stack as one model:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadicodeai/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"skills"
|
|
42
42
|
],
|
|
43
43
|
"scripts": {
|
|
44
|
+
"dev": "node scripts/dev-build.mjs --watch",
|
|
44
45
|
"build": "rm -rf dist && tsc -p tsconfig.build.json && node scripts/fix-dist-imports.mjs && rm -rf dist/styles && cp -R src/styles dist/styles",
|
|
46
|
+
"build:fast": "node scripts/dev-build.mjs",
|
|
45
47
|
"prepack": "npm run build",
|
|
46
48
|
"test": "vitest run"
|
|
47
49
|
},
|