@nadicodeai/ui 10.0.2 → 12.1.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 +39 -24
- package/README.md +58 -124
- package/dist/agent-orb.d.ts +1 -1
- package/dist/agent-orb.d.ts.map +1 -1
- package/dist/assets/brand/index.json +1 -1
- package/dist/components/action-menu.js +1 -1
- package/dist/components/agent-card.d.ts.map +1 -1
- package/dist/components/agent-card.js +2 -4
- package/dist/components/agent-orb.d.ts +11 -5
- package/dist/components/agent-orb.d.ts.map +1 -1
- package/dist/components/agent-orb.js +8 -6
- package/dist/components/alert.js +3 -3
- package/dist/components/badge.js +6 -6
- package/dist/components/brand-field.d.ts +2 -0
- package/dist/components/brand-field.d.ts.map +1 -1
- package/dist/components/brand-field.js +3 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/button.d.ts.map +1 -1
- package/dist/components/button.js +4 -5
- package/dist/components/carousel.js +2 -2
- package/dist/components/chart-bar-horizontal.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/command.js +1 -1
- package/dist/components/context-menu.js +1 -1
- package/dist/components/diff-count.js +1 -1
- package/dist/components/dropdown-menu.js +3 -3
- package/dist/components/footer.d.ts +15 -9
- package/dist/components/footer.d.ts.map +1 -1
- package/dist/components/footer.js +6 -27
- package/dist/components/item.js +1 -1
- package/dist/components/kpi-card.js +2 -2
- package/dist/components/label-system.d.ts +1 -5
- package/dist/components/label-system.d.ts.map +1 -1
- package/dist/components/label-system.js +2 -6
- package/dist/components/menu-choice-row.js +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/object-workspace.js +1 -1
- package/dist/components/progress.js +1 -1
- package/dist/components/scope-switcher.d.ts +24 -0
- package/dist/components/scope-switcher.d.ts.map +1 -0
- package/dist/components/scope-switcher.js +34 -0
- package/dist/components/settings-section.d.ts +2 -1
- package/dist/components/settings-section.d.ts.map +1 -1
- package/dist/components/settings-section.js +2 -2
- package/dist/components/status-dot.js +1 -1
- package/dist/components/status-row.js +1 -1
- package/dist/components/table.d.ts.map +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.d.ts +11 -5
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +37 -5
- package/dist/components/tooltip.js +1 -1
- package/dist/components/trend-badge.d.ts.map +1 -1
- package/dist/components/trend-badge.js +1 -2
- package/dist/eslint/index.js +4 -0
- package/dist/eslint/rules/jsx-class-utility.js +1 -1
- package/dist/eslint/rules/no-shadcn-appearance-override.js +3 -3
- package/dist/eslint/rules/one-control-height.js +94 -0
- package/dist/eslint/rules/settings-section-description.js +45 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/agent-orb-motion.d.ts +1 -0
- package/dist/internal/agent-orb-motion.d.ts.map +1 -1
- package/dist/internal/agent-orb-motion.js +6 -3
- package/dist/internal/agent-orb.d.ts +10 -2
- package/dist/internal/agent-orb.d.ts.map +1 -1
- package/dist/internal/agent-orb.js +19 -9
- package/dist/internal/assistant-ui/attachment.js +4 -4
- package/dist/internal/assistant-ui/follow-up-suggestions.js +1 -1
- package/dist/internal/assistant-ui/markdown-text.js +4 -4
- package/dist/internal/assistant-ui/reasoning.js +2 -2
- package/dist/internal/assistant-ui/thread.d.ts.map +1 -1
- package/dist/internal/assistant-ui/thread.js +11 -9
- package/dist/internal/assistant-ui/tool-group.js +2 -2
- package/dist/styles/components.css +9 -5
- package/dist/styles/globals.css +43 -0
- package/package.json +3 -4
- package/dist/components/handoff-banner.d.ts +0 -9
- package/dist/components/handoff-banner.d.ts.map +0 -1
- package/dist/components/handoff-banner.js +0 -6
- package/docs/activity.md +0 -113
- package/docs/agent-orb.md +0 -168
- package/docs/component-classification.md +0 -45
- package/docs/consuming-cross-repo.md +0 -116
- package/docs/contract.md +0 -388
- package/docs/icon-assets.md +0 -106
- package/docs/migration/1.0.0.md +0 -75
- package/docs/migration/10.0.0.md +0 -144
- package/docs/migration/2.0.0.md +0 -69
- package/docs/migration/6.0.0.md +0 -30
- package/docs/migration/9.0.0.md +0 -35
- package/docs/migration/base-ui-migration.md +0 -62
- package/docs/model-identity.md +0 -18
- package/docs/product-compositions.md +0 -96
- package/docs/product-sections.md +0 -200
package/docs/migration/1.0.0.md
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Migrating to `@nadicodeai/ui` 1.0.0
|
|
2
|
-
|
|
3
|
-
This release makes material hierarchy and Agent identity package-owned. It
|
|
4
|
-
also publishes the previously held status-vocabulary break.
|
|
5
|
-
|
|
6
|
-
## Status
|
|
7
|
-
|
|
8
|
-
`StatusTag` and `StateTag` are removed. Use `Badge` with one of its five
|
|
9
|
-
semantic tones. The consuming app owns the status word, icon, and tone mapping.
|
|
10
|
-
|
|
11
|
-
```tsx
|
|
12
|
-
import { Badge } from "@nadicodeai/ui/components/badge";
|
|
13
|
-
|
|
14
|
-
<Badge variant="green">Ready</Badge>;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
The retired `.nc-status-tag`, `.nc-state-tag`, and `.nc-state-row` CSS classes
|
|
18
|
-
have no replacement CSS API.
|
|
19
|
-
|
|
20
|
-
## Material and Card
|
|
21
|
-
|
|
22
|
-
Import `@nadicodeai/ui/globals.css` once. It now composes
|
|
23
|
-
`shadow-plugin@1.2.7`; consumers do not install its classes or override its
|
|
24
|
-
ring.
|
|
25
|
-
|
|
26
|
-
`Card` defaults to `surface="resting"`. Use `surface="raised"` only for work
|
|
27
|
-
that is physically raised or selected, and `surface="plain"` for the explicit
|
|
28
|
-
structural/auth/website escape. `variant` continues to describe interaction.
|
|
29
|
-
Replace the removed `variant="borderless"` with `surface="plain"`.
|
|
30
|
-
|
|
31
|
-
```tsx
|
|
32
|
-
<Card>Resting content</Card>
|
|
33
|
-
<Card surface="raised">Selected work</Card>
|
|
34
|
-
<Card surface="plain">Structural content</Card>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Overlay primitives now own floating or modal elevation internally. Remove
|
|
38
|
-
caller `border-*`, `ring-*`, `shadow-*`, and `smooth-shadow-*` appearance
|
|
39
|
-
classes from their content roots.
|
|
40
|
-
|
|
41
|
-
## Empty and glass control
|
|
42
|
-
|
|
43
|
-
Set Empty containment explicitly when nesting matters:
|
|
44
|
-
|
|
45
|
-
```tsx
|
|
46
|
-
<Empty scope="region">No agents</Empty>
|
|
47
|
-
<Card><Empty scope="card">No runs</Empty></Card>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Use `GlassControl shape="control"` for compact controls and `shape="bar"` for
|
|
51
|
-
full-width header chrome. Both float over legible content. Cards and modal
|
|
52
|
-
primitives continue to contain page content and dialog bodies.
|
|
53
|
-
|
|
54
|
-
## Agent identity
|
|
55
|
-
|
|
56
|
-
Agent identity is available from direct component subpaths. The
|
|
57
|
-
`@nadicodeai/ui/agents` entry remains the client-only assistant conversation
|
|
58
|
-
and runtime interface.
|
|
59
|
-
|
|
60
|
-
```tsx
|
|
61
|
-
import { AgentCard } from "@nadicodeai/ui/components/agent-card";
|
|
62
|
-
import { AgentVisual } from "@nadicodeai/ui/components/agent-visual";
|
|
63
|
-
|
|
64
|
-
<AgentCard
|
|
65
|
-
name={agent.name}
|
|
66
|
-
job={agent.job}
|
|
67
|
-
status={<Badge variant="blue">Running</Badge>}
|
|
68
|
-
visual={<AgentVisual recipe={agent.recipe} presentation="card" />}
|
|
69
|
-
/>;
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Recipe assignment is app-owned and explicit. Do not infer it from a free-form
|
|
73
|
-
role, hash an identifier, or randomize it. `AgentVisual` accepts only the five
|
|
74
|
-
closed recipes and three presentations; raw shader controls are intentionally
|
|
75
|
-
not public. `AgentGlyph` and `AgentRow` do not exist in the 1.0.0 API.
|
package/docs/migration/10.0.0.md
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# Migrating to `@nadicodeai/ui` 10.0.0
|
|
2
|
-
|
|
3
|
-
This release carries the nadicode design system settled in
|
|
4
|
-
[the ADR](https://github.com/nadicodeai/nadicodeai/blob/main/docs/adr/2026-09-23-the-nadicode-design-system.md):
|
|
5
|
-
the new logo and name, twelve type tokens named by role, two greens, one motion
|
|
6
|
-
law, activity without spinners, the stepped dark ring, three Agent colours, and
|
|
7
|
-
the website's page grammar retired. `@nadicodeai/ui` 10.0.0 requires
|
|
8
|
-
`@nadicodeai/design-system` 10.0.0; the two packages are released in lockstep.
|
|
9
|
-
The type renames are the largest break for consumers; start there.
|
|
10
|
-
|
|
11
|
-
## Type tokens
|
|
12
|
-
|
|
13
|
-
Twelve sizes named by the role they play, Geist and Geist Mono only. Strong is
|
|
14
|
-
a weight, not a token: a 500 run of body copy is `body-md` with
|
|
15
|
-
`font-weight: 500`. Rename the `.nc-type-*` class and the `--nc-type-*` tokens
|
|
16
|
-
at every call site.
|
|
17
|
-
|
|
18
|
-
| Removed | Use instead |
|
|
19
|
-
| --- | --- |
|
|
20
|
-
| `title-lg` | `display-md` |
|
|
21
|
-
| `title-md` | `heading-lg` |
|
|
22
|
-
| `title-sm` | `heading-md` |
|
|
23
|
-
| `display-md` | `heading-md` |
|
|
24
|
-
| `display-sm` | `heading-sm` |
|
|
25
|
-
| `body-md-strong` | `body-md` plus `font-weight: 500` |
|
|
26
|
-
| `body-sm-strong` | `body-sm` plus `font-weight: 500` |
|
|
27
|
-
| `caption-strong` | `caption` plus `font-weight: 500` |
|
|
28
|
-
| `button-lg` | `body-md` plus `font-weight: 500` |
|
|
29
|
-
| `button-md` | `body-sm` plus `font-weight: 500` |
|
|
30
|
-
| `caption-mono` | `label-mono` |
|
|
31
|
-
|
|
32
|
-
`display-xl`, `display-lg`, `body-lg`, `body-md`, `body-sm`, `caption` and
|
|
33
|
-
`code` keep their names. `display-md` is now 40/42 rather than 24/32, so a call
|
|
34
|
-
site that used the old small display tier moves to `heading-md`. Tracking is a
|
|
35
|
-
display-tier exception and nothing else: the three display sizes run from
|
|
36
|
-
-0.035em at 72px to -0.025em at 40px, and every other tier is `0px`.
|
|
37
|
-
|
|
38
|
-
## Colour tokens
|
|
39
|
-
|
|
40
|
-
Two greens, and only two: `link` carries text, identity verde carries marks.
|
|
41
|
-
|
|
42
|
-
| Removed | Use instead |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `--nc-primary` | `--nc-identity-cobalto` for a brand mark, `--nc-link` for text, or the shadcn `--primary` role for the neutral action |
|
|
45
|
-
| `--nc-dark-primary` | as above; the mode layer maps `--nc-identity-cobalto` in both themes |
|
|
46
|
-
| `--nc-verde-vivo` | `--nc-identity-verde` |
|
|
47
|
-
| `--nc-dark-verde-vivo` | `--nc-identity-verde` |
|
|
48
|
-
|
|
49
|
-
The shadcn `primary` role is unchanged and still resolves to the neutral action
|
|
50
|
-
family. `success` and `state-complete` are unchanged.
|
|
51
|
-
|
|
52
|
-
## Motion tokens
|
|
53
|
-
|
|
54
|
-
| Removed | Use instead |
|
|
55
|
-
| --- | --- |
|
|
56
|
-
| `--nc-duration-spin` | nothing; a busy spinner is not an Agent |
|
|
57
|
-
| `--nc-duration-typing` | nothing; the typewriter line is retired |
|
|
58
|
-
| `--nc-duration-shimmer` | nothing; the shimmer systems are retired |
|
|
59
|
-
| `--nc-duration-pulse` | `--nc-duration-wait`, for the one waiting line |
|
|
60
|
-
| `.nc-anim-typing`, `.nc-anim-pulse`, `.nc-anim-shimmer` | nothing; only Agents move on their own |
|
|
61
|
-
|
|
62
|
-
One default transition in every product, `confirm` on `out-strong`, is declared
|
|
63
|
-
once in the shipped `motion.css`. One reduced-motion policy replaces the
|
|
64
|
-
per-component switches: movement stops and paint continues, so an overlay keeps
|
|
65
|
-
its fade and only the transform or scale it would have travelled is dropped. A
|
|
66
|
-
component that answered reduced motion with `motion-reduce:transition-none` on a
|
|
67
|
-
paint-only transition should drop that class; one on a mixed transition should
|
|
68
|
-
narrow to `motion-reduce:transition-opacity` instead.
|
|
69
|
-
|
|
70
|
-
## Elevation
|
|
71
|
-
|
|
72
|
-
In dark mode the four rungs step their ring: resting 12%, raised 16%, floating
|
|
73
|
-
22%, modal 28% white, in place of one 18% ring on every rung. Light mode and the
|
|
74
|
-
shadow falloff are unchanged, and the `nc-elevation-*` utilities are unchanged,
|
|
75
|
-
so a consumer that uses the rung by name needs no edit.
|
|
76
|
-
|
|
77
|
-
## Agent colours
|
|
78
|
-
|
|
79
|
-
`agentOrbColors` is `cobalto`, `verde` and `arancio`, beside the inherited
|
|
80
|
-
default. Rosso left the picker because it is exactly the error red, and a red
|
|
81
|
-
Agent beside a red status badge read as a broken Agent. `agentOrbColorValues`
|
|
82
|
-
and `agentOrbColorTokens` lose their `rosso` entry with it, so a caller that
|
|
83
|
-
indexed either by a stored string must go through `resolveAgentOrb`, which maps
|
|
84
|
-
a stored rosso, by name or by the `#d3302f` hex, to arancio. The retired
|
|
85
|
-
spelling is exported as `retiredAgentOrbColorValues` for fixtures and tests.
|
|
86
|
-
Nadia's ribbon keeps its rosso stripe.
|
|
87
|
-
|
|
88
|
-
## Removed components
|
|
89
|
-
|
|
90
|
-
| Removed | Use instead |
|
|
91
|
-
| --- | --- |
|
|
92
|
-
| `components/brand` (`BrandLockup`) | `BrandWordmark` |
|
|
93
|
-
|
|
94
|
-
There is no lockup any more. The wordmark names the company in full and the n
|
|
95
|
-
is already inside it, so a placement carrying `BrandMark` and `BrandWordmark`
|
|
96
|
-
together draws the letter twice; pick the one form the space allows.
|
|
97
|
-
`BrandMark` and `BrandWordmark` keep their props, and their default accessible
|
|
98
|
-
name is now `nadicode`.
|
|
99
|
-
|
|
100
|
-
## Removed assets
|
|
101
|
-
|
|
102
|
-
The design system publishes seven files, as SVG and as transparent PNG, under
|
|
103
|
-
the names the ADR gives them. Append `.png` to any route for the raster.
|
|
104
|
-
|
|
105
|
-
| Removed | Use instead |
|
|
106
|
-
| --- | --- |
|
|
107
|
-
| `assets/logo-lockup`, `assets/logo-wordmark` | `assets/logo` |
|
|
108
|
-
| `assets/logo-lockup-inverse`, `assets/logo-wordmark-inverse` | `assets/logo-white` |
|
|
109
|
-
| `assets/logo-lockup-mono`, `assets/logo-wordmark-mono` | `assets/logo-one-ink` |
|
|
110
|
-
| `assets/logo-mark` | `assets/mark` |
|
|
111
|
-
| `assets/logo-mark-inverse` | `assets/mark-white` |
|
|
112
|
-
| `assets/logo-mark-mono` | `assets/mark`; the n is one ink already |
|
|
113
|
-
| `assets/logo-lockup-on-verde`, `assets/logo-mark-on-verde`, `assets/logo-wordmark-on-verde` | No replacement. The logo is never mounted on a verde field. |
|
|
114
|
-
|
|
115
|
-
Added: `assets/logo-one-ink-white`, the one-ink wordmark on a dark ground, and
|
|
116
|
-
`assets/app-icon`, the white n on the cobalto tile at 1024 for an application
|
|
117
|
-
icon slot. The one-ink files exist for embossing, stamps and one-colour print,
|
|
118
|
-
where a second colour cannot be laid down.
|
|
119
|
-
|
|
120
|
-
`assets/logo-geometry` keeps its route and changes shape. `LogoPaints` is now a
|
|
121
|
-
record of paint roles, `ink` for every stroked letter, `dot` for the dot over
|
|
122
|
-
the i and `tile` for the icon's field, and a geometry that names a role the
|
|
123
|
-
caller did not supply throws instead of rendering an unpainted shape.
|
|
124
|
-
`resolveLogoGeometry` no longer takes `idPrefix`: the geometry emits no DOM id,
|
|
125
|
-
so two logos on a page cannot collide. `logoLockupGeometry` is removed;
|
|
126
|
-
`logoWordmarkGeometry` and `logoMarkGeometry` remain and `logoIconGeometry`
|
|
127
|
-
is added.
|
|
128
|
-
|
|
129
|
-
## Tokens
|
|
130
|
-
|
|
131
|
-
| Added | Why |
|
|
132
|
-
| --- | --- |
|
|
133
|
-
| `--nc-logo-dot` | The dot's colour, #1e3cff, and the only token a consumer paints it with. |
|
|
134
|
-
| `--nc-logo-dot` under `.dark` | #4d6bff, so the dot does not sink into black. |
|
|
135
|
-
|
|
136
|
-
A consumer that painted the logo with `--nc-primary` moves to `--nc-logo-dot`.
|
|
137
|
-
The generated mode layer flips it under any dark ancestor, so one rendered form
|
|
138
|
-
serves both grounds.
|
|
139
|
-
|
|
140
|
-
## The name
|
|
141
|
-
|
|
142
|
-
The company is nadicode, lowercase. Package names and domains are unchanged;
|
|
143
|
-
the accessible name of every shipped logo file and both React adapters is now
|
|
144
|
-
`nadicode`.
|
package/docs/migration/2.0.0.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Migrating to `@nadicodeai/ui` 2.0.0
|
|
2
|
-
|
|
3
|
-
This release makes elevation package-owned. `shadow-plugin` is gone from the
|
|
4
|
-
dependency tree, and `@nadicodeai/ui/globals.css` declares the four elevation
|
|
5
|
-
utilities itself over the `--nc-elevation-*` tokens that
|
|
6
|
-
`@nadicodeai/design-system` 2.0.0 generates. The recipes are the plugin's own
|
|
7
|
-
values, copied byte for byte, so nothing renders differently in either mode.
|
|
8
|
-
|
|
9
|
-
`@nadicodeai/ui` 2.0.0 requires `@nadicodeai/design-system` 2.0.0; the two
|
|
10
|
-
packages are released in lockstep.
|
|
11
|
-
|
|
12
|
-
## Elevation utilities
|
|
13
|
-
|
|
14
|
-
Rename every call site by the rung's role. Each utility paints the same
|
|
15
|
-
`box-shadow` its predecessor did, with two differences in mechanics: the vendor
|
|
16
|
-
utilities carried `!important` and tinted the falloff through
|
|
17
|
-
`--tw-shadow-color`; `nc-elevation-*` are plain `box-shadow`, so a `shadow-*`
|
|
18
|
-
or `hover:shadow-*` on the same element now wins where it used to lose, and no
|
|
19
|
-
colour tints the falloff.
|
|
20
|
-
|
|
21
|
-
| 1.x | 2.0.0 | Role |
|
|
22
|
-
| --- | --- | --- |
|
|
23
|
-
| `smooth-shadow-ring-md` | `nc-elevation-resting` | The card that sits on the page |
|
|
24
|
-
| `smooth-shadow-ring-lg` | `nc-elevation-raised` | Active or selected work |
|
|
25
|
-
| `smooth-shadow-ring-xl` | `nc-elevation-floating` | Menu, popover, tooltip, toast |
|
|
26
|
-
| `smooth-shadow-ring-2xl` | `nc-elevation-modal` | Dialog, drawer, sheet |
|
|
27
|
-
|
|
28
|
-
The plugin's other utilities have no replacement. `smooth-ring-*` and the
|
|
29
|
-
`--smooth-ring-color` override are gone: each rung's optical ring is the last
|
|
30
|
-
layer of its own recipe, black at 5% in light and white at 18% in dark, and a
|
|
31
|
-
call site never repaints it. `nadicodeai/no-elevated-edge` still rejects a
|
|
32
|
-
`border-*` or a second `ring-*` on the same target as an elevation.
|
|
33
|
-
|
|
34
|
-
Consumers stop installing `shadow-plugin`. It was never a documented direct
|
|
35
|
-
dependency; drop it if it was added anyway.
|
|
36
|
-
|
|
37
|
-
## DTCG token paths
|
|
38
|
-
|
|
39
|
-
The generated token file nests every group under a `core` or a `register`
|
|
40
|
-
parent. A consumer reading
|
|
41
|
-
`@nadicodeai/design-system/tokens/dtcg` by path changes
|
|
42
|
-
`nadicode.<group>` to `nadicode.core.<group>`:
|
|
43
|
-
|
|
44
|
-
| 1.x path | 2.0.0 path |
|
|
45
|
-
| --- | --- |
|
|
46
|
-
| `nadicode.color` | `nadicode.core.color` |
|
|
47
|
-
| `nadicode.spacing` | `nadicode.core.spacing` |
|
|
48
|
-
| `nadicode.rounded` | `nadicode.core.rounded` |
|
|
49
|
-
| `nadicode.typography` | `nadicode.core.typography` |
|
|
50
|
-
|
|
51
|
-
`nadicode.core` also gains `material`, `elevation`, and `motion`, and
|
|
52
|
-
`nadicode.register` holds the per-surface data. The emitted CSS custom property
|
|
53
|
-
and Tailwind `@theme` names are unchanged: only the authoring path moved. The
|
|
54
|
-
`./tailwind` JSON export's `spacing` map now holds core only; the website's
|
|
55
|
-
page-grammar geometry and the Portal's chip density are read from
|
|
56
|
-
`nadicode.register.website.layout` and `nadicode.register.portal.density`.
|
|
57
|
-
|
|
58
|
-
## Removed easing aliases
|
|
59
|
-
|
|
60
|
-
`--nc-ease-bounce` and `--nc-ease-out` are removed. They were aliases of two
|
|
61
|
-
curves that ship under their own names:
|
|
62
|
-
|
|
63
|
-
| Removed | Use |
|
|
64
|
-
| --- | --- |
|
|
65
|
-
| `--nc-ease-bounce` | `--nc-ease-in-out-strong` |
|
|
66
|
-
| `--nc-ease-out` | `--nc-ease-out-strong` |
|
|
67
|
-
|
|
68
|
-
React call sites can also write the Tailwind form, `ease-nc-in-out-strong` and
|
|
69
|
-
`ease-nc-out-strong`.
|
package/docs/migration/6.0.0.md
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# Migrating to `@nadicodeai/ui` 6.0.0
|
|
2
|
-
|
|
3
|
-
This release removes contract entries that nothing rendered. `@nadicodeai/ui`
|
|
4
|
-
6.0.0 requires `@nadicodeai/design-system` 6.0.0; the two packages are
|
|
5
|
-
released in lockstep.
|
|
6
|
-
|
|
7
|
-
## Removed colour tokens
|
|
8
|
-
|
|
9
|
-
| Removed | Use instead |
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| `--nc-flag-red` | `--nc-identity-rosso` for the identity red, `--nc-error` for validation feedback. Same hex as both. |
|
|
12
|
-
| `--nc-background-100`, `--nc-background-200` | `--nc-canvas`, `--nc-canvas-soft`. Same hex. |
|
|
13
|
-
| `--nc-dark-cyan`, `--nc-dark-cyan-soft`, `--nc-dark-cyan-deep` | No replacement; the family had no light counterpart, no prose, and no consumer. |
|
|
14
|
-
| `register.nadia.color.*.medallion` | No replacement; the first-run medallion no longer exists. |
|
|
15
|
-
|
|
16
|
-
`register.nadia.color.dark.destructive` now aliases `dark-error` with
|
|
17
|
-
`dark-on-primary` text, the same pair the foundation's `.dark` shadcn map
|
|
18
|
-
already resolves `destructive` to. It aliased the removed `flag-red` with
|
|
19
|
-
white text.
|
|
20
|
-
|
|
21
|
-
## Removed Nadia asset routes
|
|
22
|
-
|
|
23
|
-
`./assets/nadia-ordered-points`, `./assets/nadia-triangulated-wire` and
|
|
24
|
-
`./assets/nadia-irregular-particles` are gone. `./assets/nadia-solid-surface`
|
|
25
|
-
is the one approved master and the one route. The authored files stay in
|
|
26
|
-
`brand/visual-design/images/nadia/material-states/transparent/`.
|
|
27
|
-
|
|
28
|
-
## Removed layout entry
|
|
29
|
-
|
|
30
|
-
`article-frame` is no longer documented; it never had CSS.
|
package/docs/migration/9.0.0.md
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Migrating to `@nadicodeai/ui` 9.0.0
|
|
2
|
-
|
|
3
|
-
Every Agent is now an `AgentOrb`, Nadia included. This release removes the
|
|
4
|
-
other Agent identities. `@nadicodeai/ui` 9.0.0 requires
|
|
5
|
-
`@nadicodeai/design-system` 9.0.0; the two packages are released in lockstep.
|
|
6
|
-
|
|
7
|
-
## Removed components
|
|
8
|
-
|
|
9
|
-
| Removed | Use instead |
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| `components/forma-avatar` (`FormaAvatar`) | `components/agent-orb` (`AgentOrb`). Nadia is `form="nadia"`. |
|
|
12
|
-
| `components/forma-appearance` (`resolveAppearance`, `shapeFor`, `defaultShape`, `formaColorValues`) | `components/agent-orb-appearance` (`resolveAgentOrb`, `shapeForOrb`, `defaultAgentOrbShape`, `agentOrbColorValues`, `agentOrbColorTokens`) |
|
|
13
|
-
| `components/agent-visual` (`AgentVisual`) | `AgentOrb` |
|
|
14
|
-
|
|
15
|
-
`resolveAgentOrb` reads every stored `forma:` spelling, the five launch role
|
|
16
|
-
names included, as a distinct orb, so a stored look keeps drawing until
|
|
17
|
-
someone changes it. Stored colours map to cobalto, verde, rosso and arancio;
|
|
18
|
-
giallo, avorio and unknown values draw the inherited text colour. Store new
|
|
19
|
-
choices as `orb:<form>` and the colour's hex, as
|
|
20
|
-
[`agent-orb.md`](../agent-orb.md#stored-appearance) specifies.
|
|
21
|
-
|
|
22
|
-
## Added
|
|
23
|
-
|
|
24
|
-
`AgentOrb` takes `form="nadia"`: her ribbon, striped azzurro, verde, the orb's
|
|
25
|
-
pigment and rosso. `--nc-identity-azzurro` is the design-system token for her
|
|
26
|
-
azzurro stripe.
|
|
27
|
-
|
|
28
|
-
## Removed tokens and assets
|
|
29
|
-
|
|
30
|
-
| Removed | Use instead |
|
|
31
|
-
| --- | --- |
|
|
32
|
-
| `--nc-forma-visor`, `--nc-forma-bezel`, `--nc-forma-eye`, `--nc-forma-avorio`, `--nc-forma-sabbia` | No replacement; only Forma painted them. |
|
|
33
|
-
| `@nadicodeai/design-system/assets/nadia-solid-surface` | `<AgentOrb form="nadia" />`. The portrait is retired as Nadia's look; the file stays in the brand archive. |
|
|
34
|
-
|
|
35
|
-
The package no longer depends on `@paper-design/shaders`.
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# Base UI Migration
|
|
2
|
-
|
|
3
|
-
`@nadicodeai/ui` now uses Base UI as its active shadcn primitive base.
|
|
4
|
-
|
|
5
|
-
Current invariants:
|
|
6
|
-
|
|
7
|
-
- `components.json` uses `base-nova`, and `npx shadcn@latest info --json` should report `base: "base"`.
|
|
8
|
-
- Package source must not import `radix-ui`, `@radix-ui/*`, or `vaul`.
|
|
9
|
-
- `cmdk` is allowed only for the stock shadcn Command component while the current `base-nova` registry declares it.
|
|
10
|
-
- `packages/ui/package.json` must not depend on `radix-ui`, `@radix-ui/react-use-controllable-state`, or `vaul`.
|
|
11
|
-
- Website and portal Next config must optimize `@base-ui/react`, not `radix-ui`.
|
|
12
|
-
- Public shadcn primitive usage follows the current Base UI registry API. Base UI composition uses `render`; do not add package-local `asChild` adapters for registry-owned primitives.
|
|
13
|
-
|
|
14
|
-
## Migration Catalog
|
|
15
|
-
|
|
16
|
-
Direct Base-backed shadcn replacements:
|
|
17
|
-
|
|
18
|
-
- `accordion`, `alert-dialog`, `aspect-ratio`, `avatar`, `checkbox`, `collapsible`, `context-menu`, `dialog`, `drawer`, `dropdown-menu`, `hover-card`, `label`, `menubar`, `navigation-menu`, `popover`, `progress`, `radio-group`, `scroll-area`, `select`, `separator`, `sheet`, `slider`, `switch`, `tabs`, `toggle`, `toggle-group`, and `tooltip`.
|
|
19
|
-
|
|
20
|
-
Package-owned helpers:
|
|
21
|
-
|
|
22
|
-
- Wrapper-only components (`badge`, `breadcrumb`, `button-group`, `item`, `sidebar`, `form`) compose through Base UI's `useRender`/`mergeProps` directly; the transitional `src/lib/slot.tsx` and `src/lib/base-render.tsx` shims are removed.
|
|
23
|
-
|
|
24
|
-
Removed non-shadcn Radix carriers:
|
|
25
|
-
|
|
26
|
-
- `command` stays backed by shadcn's stock `cmdk` implementation while the `base-nova` registry declares that dependency.
|
|
27
|
-
- `drawer` replaces `vaul` with Base UI Drawer.
|
|
28
|
-
|
|
29
|
-
## Breaking in 0.5.0
|
|
30
|
-
|
|
31
|
-
`@nadicodeai/ui@0.5.0` removes the Radix-era compatibility layer that 0.4.x
|
|
32
|
-
carried. Consumers upgrading from 0.4.x must migrate:
|
|
33
|
-
|
|
34
|
-
- `asChild` is removed on every primitive (Button, triggers, closes, menu
|
|
35
|
-
items). Use Base UI's `render` prop instead; when the rendered element is
|
|
36
|
-
not a native `<button>`, also pass `nativeButton={false}` (for example
|
|
37
|
-
`<Button nativeButton={false} render={<a href="…" />}>`).
|
|
38
|
-
- `DropdownMenuItem` / `ContextMenuItem` / `MenubarItem` no longer accept
|
|
39
|
-
`onSelect`. Use `onClick`, and `closeOnClick={false}` to keep the menu open
|
|
40
|
-
(replaces the `onSelect` + `event.preventDefault()` pattern).
|
|
41
|
-
- `PromptInputActionAddScreenshot`'s `onSelect` prop is renamed `onClick`.
|
|
42
|
-
- `Accordion` and `ToggleGroup` drop `type="single" | "multiple"` and string
|
|
43
|
-
values. Values are always arrays; pass `multiple` for multi-select.
|
|
44
|
-
- `TooltipProvider` drops the `delayDuration` alias — use `delay`. HoverCard
|
|
45
|
-
open/close delays live on `HoverCardTrigger` (`delay` / `closeDelay`), not
|
|
46
|
-
the root.
|
|
47
|
-
- `Drawer` drops the vaul-era `direction` / `activeSnapPoint` /
|
|
48
|
-
`setActiveSnapPoint` aliases — use Base UI's `swipeDirection` /
|
|
49
|
-
`snapPoint` / `onSnapPointChange`.
|
|
50
|
-
- `DirectionProvider` drops the `dir` alias — use `direction`.
|
|
51
|
-
- `NavigationMenuViewport` and `PopoverAnchor` are no longer exported; they
|
|
52
|
-
have no stock base-nova equivalent.
|
|
53
|
-
- `CollapsibleContent` / disclosure panels drop the `forceMount` alias — use
|
|
54
|
-
Base UI's `keepMounted`.
|
|
55
|
-
|
|
56
|
-
Verification:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
npm run build -w @nadicodeai/ui
|
|
60
|
-
npm run test -w @nadicodeai/ui
|
|
61
|
-
rg 'radix-ui|@radix-ui|vaul' packages/ui/src packages/ui/package.json apps/website/next.config.ts apps/portal/next.config.ts
|
|
62
|
-
```
|
package/docs/model-identity.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Model identity compatibility adapter
|
|
2
|
-
|
|
3
|
-
`ModelIdentity` is a compatibility adapter for consumers that still pass one
|
|
4
|
-
`provider/model` string. It derives the author prefix and delegates all visual
|
|
5
|
-
rendering to the canonical `ModelMark`; it has no provider registry, generated
|
|
6
|
-
artwork, or presentation of its own. Unknown authors therefore receive the
|
|
7
|
-
same neutral tile as every other `ModelMark` consumer.
|
|
8
|
-
|
|
9
|
-
```tsx
|
|
10
|
-
import { ModelIdentity } from "@nadicodeai/ui/components/model-identity";
|
|
11
|
-
|
|
12
|
-
<ModelIdentity model="anthropic/claude-sonnet-5" />;
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
New consumers should import `ModelMark` and pass its `author` and `name`
|
|
16
|
-
properties directly. The adapter keeps the older `model`, `label`, and
|
|
17
|
-
`markSize` call shape while consumers migrate; a string `label` becomes the
|
|
18
|
-
canonical model name, otherwise the model segment after the slash is shown.
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
# Product Compositions
|
|
2
|
-
|
|
3
|
-
Shared product compositions own repeatable presentation and interaction. Consumers bind routing, persistence, permissions, and product copy. See the [component contract](contract.md) for each family's ownership.
|
|
4
|
-
|
|
5
|
-
Check first-party shadcn or assistant-ui registry patterns before adding a
|
|
6
|
-
composition. Once adapted, reuse its maintained owner; do not assemble the same
|
|
7
|
-
registry example again for each page.
|
|
8
|
-
|
|
9
|
-
Import components through the wildcard component subpath after build:
|
|
10
|
-
|
|
11
|
-
```tsx
|
|
12
|
-
import { SettingsSection } from "@nadicodeai/ui/components/settings-section"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Fixtures live in:
|
|
16
|
-
|
|
17
|
-
- [`../tests/guards/product-compositions.test.ts`](../tests/guards/product-compositions.test.ts)
|
|
18
|
-
- [`../tests/guards/product-compositions-ssr.test.ts`](../tests/guards/product-compositions-ssr.test.ts)
|
|
19
|
-
- [`../src/components/settings-section.test.tsx`](../src/components/settings-section.test.tsx)
|
|
20
|
-
|
|
21
|
-
## Boundaries
|
|
22
|
-
|
|
23
|
-
| Component | Package owns | Consumer owns |
|
|
24
|
-
| --- | --- | --- |
|
|
25
|
-
| `SettingsSection` / `SettingsField` | Header, divided save footer, field layout, labels, descriptions, errors, and control associations. | Form state, validation, submission, persistence, settings taxonomy, and save/cancel behavior. |
|
|
26
|
-
| `FeedbackState` | Shared empty, loading, saving, error, permission, offline, no-results, and fatal state presentation. | Recovery actions, retry behavior, permission escalation, app-specific state language. |
|
|
27
|
-
|
|
28
|
-
## Collection and command recipes
|
|
29
|
-
|
|
30
|
-
Portal's [`DataTable`](../../../apps/portal/src/components/kit/data-table.tsx) is
|
|
31
|
-
the existing app owner for collection interaction, URL state, and registry
|
|
32
|
-
behavior. It composes the shared `Table` and `TableDetailRow` with TanStack
|
|
33
|
-
Table, following the [shadcn Data Table guide](https://ui.shadcn.com/docs/components/base/data-table)
|
|
34
|
-
and the `@shadcn/dashboard-01` table block. The shared row owns compact fact
|
|
35
|
-
geometry; a caller supplies its labels and values. Keep Portal's adapter for
|
|
36
|
-
its existing consumers instead of introducing a second package table API.
|
|
37
|
-
|
|
38
|
-
The shared [`command`](../src/components/command.tsx) component includes
|
|
39
|
-
`CommandDialog`, as the [shadcn Command guide](https://ui.shadcn.com/docs/components/base/command)
|
|
40
|
-
documents. A product composes its commands there and owns search data,
|
|
41
|
-
selection effects, shortcuts, routing, and permission checks. The Portal
|
|
42
|
-
command dialog is the current app owner for Portal navigation commands.
|
|
43
|
-
|
|
44
|
-
## SettingsSection
|
|
45
|
-
|
|
46
|
-
Use `SettingsSection` and `SettingsField` for horizontal settings rows that need consistent label, description, error, and control alignment.
|
|
47
|
-
|
|
48
|
-
```tsx
|
|
49
|
-
<SettingsSection
|
|
50
|
-
title="Workspace defaults"
|
|
51
|
-
description="Shared defaults for agent work."
|
|
52
|
-
footer={<Button type="submit">Save</Button>}
|
|
53
|
-
>
|
|
54
|
-
<SettingsField
|
|
55
|
-
id="review-window"
|
|
56
|
-
label="Review window"
|
|
57
|
-
description="How long approvals stay visible."
|
|
58
|
-
error={reviewWindowError}
|
|
59
|
-
invalid={Boolean(reviewWindowError)}
|
|
60
|
-
>
|
|
61
|
-
{({ controlProps }) => (
|
|
62
|
-
<Input {...controlProps} value={reviewWindow} onChange={onReviewWindowChange} />
|
|
63
|
-
)}
|
|
64
|
-
</SettingsField>
|
|
65
|
-
</SettingsSection>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
| Prop | Purpose |
|
|
69
|
-
| --- | --- |
|
|
70
|
-
| `title` / `description` / `actions` | Section header content and right-side action slot. |
|
|
71
|
-
| `footer` | Local Save/Cancel controls and completion feedback. The owning form wraps the section. |
|
|
72
|
-
| `id` / `label` | Required field identity and accessible label. |
|
|
73
|
-
| `description` / `error` / `invalid` | Field helper text, error text, and invalid state. |
|
|
74
|
-
| `children` | A render function receives `controlProps` for the real control in server and client components. |
|
|
75
|
-
|
|
76
|
-
Spread `controlProps` onto the real control. SettingsField invokes the callback
|
|
77
|
-
before rendered children cross any client boundary; it does not forward the
|
|
78
|
-
callback to a client component. The [contract](contract.md) owns the field's
|
|
79
|
-
accessibility and state guarantees.
|
|
80
|
-
|
|
81
|
-
## FeedbackState
|
|
82
|
-
|
|
83
|
-
Use `FeedbackState` when a surface needs a standard state panel outside an app-owned shadcn table adaptation.
|
|
84
|
-
|
|
85
|
-
```tsx
|
|
86
|
-
<FeedbackState
|
|
87
|
-
status="offline"
|
|
88
|
-
title="Connection paused"
|
|
89
|
-
description="Reconnect before continuing with this agent session."
|
|
90
|
-
actions={<ReconnectButton />}
|
|
91
|
-
/>
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Supported statuses: `empty`, `loading`, `saving`, `error`, `permission`, `offline`, `no-results`, and `fatal`.
|
|
95
|
-
|
|
96
|
-
Accessibility: loading and saving states render with polite status semantics. Error, permission, offline, and fatal states render as alerts.
|