@nadicodeai/ui 10.1.0 → 12.1.1
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 +4 -7
- package/dist/components/footer.d.ts.map +1 -1
- package/dist/components/footer.js +1 -4
- 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/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.
|
package/docs/product-sections.md
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
# Product Sections
|
|
2
|
-
|
|
3
|
-
U5 adds shared shell skeletons, plugin containment, installer states, and automation/settings sections. These components are presentational only. Consumers own routing, persistence, server actions, runtime adapters, permission decisions, retries, plugin trust, installer side effects, analytics, and product-specific page copy.
|
|
4
|
-
|
|
5
|
-
Import components through the existing component subpath after build:
|
|
6
|
-
|
|
7
|
-
```tsx
|
|
8
|
-
import { DashboardShell } from "@nadicodeai/ui/components/dashboard-shell"
|
|
9
|
-
import { PluginSlotBoundary } from "@nadicodeai/ui/components/plugin-slot-boundary"
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Fixtures live in:
|
|
13
|
-
|
|
14
|
-
- [`../tests/guards/product-sections.test.ts`](../tests/guards/product-sections.test.ts)
|
|
15
|
-
- [`../tests/guards/product-sections-ssr.test.ts`](../tests/guards/product-sections-ssr.test.ts)
|
|
16
|
-
|
|
17
|
-
## Boundaries
|
|
18
|
-
|
|
19
|
-
| Component | Package owns | Consumer owns |
|
|
20
|
-
| --- | --- | --- |
|
|
21
|
-
| `DashboardShell` | Responsive slot layout, sidebar/header/content/inspector regions, mobile sidebar trigger, focusable shell structure, overflow containment. | Route state, nav definitions, page data, permission filtering, tenant/workspace context, page-specific copy. |
|
|
22
|
-
| `DesktopAppShell` | Titlebar/statusbar framing, activity rail, primary/secondary/inspector panes, resizable panel composition, overflow containment. | Desktop runtime, window controls, route selection, IPC, command execution, local persistence. |
|
|
23
|
-
| `InstallerShell` | Welcome/progress/success/failure presentation, progress display, step list, feedback-state composition. | Installer state machine, platform checks, downloads, retries, recovery behavior, logs. |
|
|
24
|
-
| `PluginSlotBoundary` | Visible plugin content boundary, permission badges, warning/error alerts, contained overflow, redaction guidance. | Plugin runtime, trust decisions, install/remove actions, grants, sandbox policy, secrets. |
|
|
25
|
-
| `AutomationSection` | Automation row layout, status badges, enable switch placement, empty state. | Automation definitions, scheduling, execution, persistence, permission rules. |
|
|
26
|
-
| `ProviderSettings` | Provider setting rows built on `SettingsSection` and `SettingsField`. | Provider list, validation, saving, rate limits, billing or policy behavior. |
|
|
27
|
-
| `McpServerSettings` | MCP server rows, status badges, enable switch placement, field semantics. | Server discovery, connection checks, grants, persistence, tool execution. |
|
|
28
|
-
| `EnvironmentVariablesSettings` | Variable name rows and redacted state display. | Secret storage, reveal controls, value validation, rotation, syncing. |
|
|
29
|
-
|
|
30
|
-
## DashboardShell
|
|
31
|
-
|
|
32
|
-
Use `DashboardShell` when a web/admin surface needs shared app chrome without the package owning navigation.
|
|
33
|
-
|
|
34
|
-
```tsx
|
|
35
|
-
<DashboardShell
|
|
36
|
-
sidebar={<WorkspaceNav />}
|
|
37
|
-
sidebarHeader={<WorkspaceSwitcher />}
|
|
38
|
-
sidebarFooter={<AccountMenu />}
|
|
39
|
-
header={<PageHeading />}
|
|
40
|
-
headerActions={<RunAction />}
|
|
41
|
-
inspector={<PermissionSummary />}
|
|
42
|
-
>
|
|
43
|
-
<AgentQueue />
|
|
44
|
-
</DashboardShell>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
| Prop | Purpose |
|
|
48
|
-
| --- | --- |
|
|
49
|
-
| `sidebar` | Sidebar content slot. Consumers pass nav items or any compatible sidebar content. |
|
|
50
|
-
| `header` / `headerActions` | Top chrome slots. The package adds the mobile navigation trigger. |
|
|
51
|
-
| `children` | Main content region. |
|
|
52
|
-
| `inspector` | Optional right-side inspector that stacks below content on smaller screens. |
|
|
53
|
-
| `sidebarHeader` / `sidebarFooter` | Optional sidebar framing slots. |
|
|
54
|
-
| `sidebarSide` / `sidebarVariant` / `sidebarCollapsible` | Pass-through shell options over the existing sidebar primitive. |
|
|
55
|
-
|
|
56
|
-
Accessibility: the shell exposes labeled content and inspector regions. The mobile trigger has an accessible label and the underlying sidebar primitive preserves keyboard access and collapsed labels.
|
|
57
|
-
|
|
58
|
-
## DesktopAppShell
|
|
59
|
-
|
|
60
|
-
Use `DesktopAppShell` for desktop-shaped layouts where the consumer owns runtime behavior.
|
|
61
|
-
|
|
62
|
-
```tsx
|
|
63
|
-
<DesktopAppShell
|
|
64
|
-
title="Nadia desktop"
|
|
65
|
-
activityRail={<ActivityButtons />}
|
|
66
|
-
secondaryPane={<RunContext />}
|
|
67
|
-
inspectorRail={<Inspector />}
|
|
68
|
-
statusbar={<StatusLine />}
|
|
69
|
-
>
|
|
70
|
-
<Workspace />
|
|
71
|
-
</DesktopAppShell>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
| Prop | Purpose |
|
|
75
|
-
| --- | --- |
|
|
76
|
-
| `title` / `titlebar` / `titlebarActions` | Titlebar slots. `titlebar` can replace the default title row. |
|
|
77
|
-
| `activityRail` | Left rail slot for mode buttons or app tools. |
|
|
78
|
-
| `children` | Primary pane. |
|
|
79
|
-
| `secondaryPane` | Optional resizable middle pane. |
|
|
80
|
-
| `inspectorRail` | Optional resizable inspector pane. |
|
|
81
|
-
| `statusbar` | Bottom status slot. |
|
|
82
|
-
| `primaryPaneSize` / `secondaryPaneSize` / `inspectorPaneSize` | Initial resizable panel sizes. |
|
|
83
|
-
|
|
84
|
-
The component does not assume browser routing, desktop IPC, or command execution.
|
|
85
|
-
|
|
86
|
-
## InstallerShell
|
|
87
|
-
|
|
88
|
-
Use `InstallerShell` for installer or setup flows with an app-owned state machine.
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
<InstallerShell
|
|
92
|
-
state="progress"
|
|
93
|
-
title="Installing"
|
|
94
|
-
description="Preparing the local workspace."
|
|
95
|
-
progressValue={62}
|
|
96
|
-
steps={[
|
|
97
|
-
{ id: "package", label: "Prepare package", status: "complete" },
|
|
98
|
-
{ id: "settings", label: "Apply settings", status: "running" },
|
|
99
|
-
]}
|
|
100
|
-
actions={<CancelButton />}
|
|
101
|
-
/>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Supported states: `welcome`, `progress`, `success`, and `failure`.
|
|
105
|
-
|
|
106
|
-
Step statuses: `pending`, `running`, `complete`, and `error`.
|
|
107
|
-
|
|
108
|
-
The shell uses `FeedbackState` for the primary state message. Consumers provide the installer state, recovery actions, and side effects.
|
|
109
|
-
|
|
110
|
-
## PluginSlotBoundary
|
|
111
|
-
|
|
112
|
-
Use `PluginSlotBoundary` around extension or plugin-rendered content. It makes the plugin boundary visible and keeps overflow contained.
|
|
113
|
-
|
|
114
|
-
```tsx
|
|
115
|
-
<PluginSlotBoundary
|
|
116
|
-
title="Planner plugin"
|
|
117
|
-
status="warning"
|
|
118
|
-
permissions={[
|
|
119
|
-
{ id: "files", label: "Read files", level: "review" },
|
|
120
|
-
{ id: "network", label: "Network blocked", level: "denied" },
|
|
121
|
-
]}
|
|
122
|
-
warning="Review plugin scope before granting access."
|
|
123
|
-
>
|
|
124
|
-
<PluginPreview />
|
|
125
|
-
</PluginSlotBoundary>
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Supported statuses: `ready`, `warning`, `error`, and `disabled`.
|
|
129
|
-
|
|
130
|
-
Permission levels: `safe`, `review`, `risk`, and `denied`.
|
|
131
|
-
|
|
132
|
-
Redaction rule: package fixtures and examples may show synthetic names, variable names, and redacted placeholders only. They must not include secret values, environment variable values, raw terminal output, user memory, or hidden reasoning.
|
|
133
|
-
|
|
134
|
-
## AutomationSection
|
|
135
|
-
|
|
136
|
-
Use `AutomationSection` for a list of app-owned automations.
|
|
137
|
-
|
|
138
|
-
```tsx
|
|
139
|
-
<AutomationSection
|
|
140
|
-
title="Automation runs"
|
|
141
|
-
automations={[
|
|
142
|
-
{
|
|
143
|
-
id: "briefing",
|
|
144
|
-
title: "Briefing preparation",
|
|
145
|
-
description: "Drafts a review packet.",
|
|
146
|
-
status: "running",
|
|
147
|
-
enabled: true,
|
|
148
|
-
toggleLabel: "Toggle briefing preparation",
|
|
149
|
-
},
|
|
150
|
-
]}
|
|
151
|
-
onAutomationEnabledChange={setAutomationEnabled}
|
|
152
|
-
/>
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Supported statuses: `ready`, `running`, `paused`, `error`, and `disabled`.
|
|
156
|
-
|
|
157
|
-
The callback reports a requested toggle. It does not save, schedule, retry, or execute anything.
|
|
158
|
-
|
|
159
|
-
## Settings Patterns
|
|
160
|
-
|
|
161
|
-
`ProviderSettings`, `McpServerSettings`, and `EnvironmentVariablesSettings` compose `SettingsSection` and `SettingsField` so settings rows share label, description, error, invalid, disabled, and control alignment behavior.
|
|
162
|
-
|
|
163
|
-
```tsx
|
|
164
|
-
<ProviderSettings
|
|
165
|
-
fields={[
|
|
166
|
-
{
|
|
167
|
-
id: "provider",
|
|
168
|
-
label: "Provider",
|
|
169
|
-
description: "Displayed provider label.",
|
|
170
|
-
value: "Nadia synthetic provider",
|
|
171
|
-
},
|
|
172
|
-
]}
|
|
173
|
-
/>
|
|
174
|
-
|
|
175
|
-
<McpServerSettings
|
|
176
|
-
servers={[
|
|
177
|
-
{
|
|
178
|
-
id: "docs",
|
|
179
|
-
label: "Docs server",
|
|
180
|
-
description: "Read-only documentation context.",
|
|
181
|
-
status: "connected",
|
|
182
|
-
enabled: true,
|
|
183
|
-
},
|
|
184
|
-
]}
|
|
185
|
-
/>
|
|
186
|
-
|
|
187
|
-
<EnvironmentVariablesSettings
|
|
188
|
-
variables={[
|
|
189
|
-
{
|
|
190
|
-
id: "model-key",
|
|
191
|
-
name: "NADIA_MODEL_KEY",
|
|
192
|
-
description: "Configured by the consuming app.",
|
|
193
|
-
state: "configured",
|
|
194
|
-
required: true,
|
|
195
|
-
},
|
|
196
|
-
]}
|
|
197
|
-
/>
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
Environment variable rows intentionally render names and redacted state only. They do not accept or display actual values.
|