@nadicodeai/ui 8.2.0 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSES/MODEL-IDENTITY-ASSETS-NOTICE.txt +28 -0
  2. package/NOTICE +7 -2
  3. package/dist/components/brand-icons/aionlabs.d.ts +18 -0
  4. package/dist/components/brand-icons/aionlabs.d.ts.map +1 -0
  5. package/dist/components/brand-icons/aionlabs.js +22 -0
  6. package/dist/components/brand-icons/arcee.d.ts +18 -0
  7. package/dist/components/brand-icons/arcee.d.ts.map +1 -0
  8. package/dist/components/brand-icons/arcee.js +22 -0
  9. package/dist/components/brand-icons/baidu.d.ts +18 -0
  10. package/dist/components/brand-icons/baidu.d.ts.map +1 -0
  11. package/dist/components/brand-icons/baidu.js +22 -0
  12. package/dist/components/brand-icons/bytedance.d.ts +18 -0
  13. package/dist/components/brand-icons/bytedance.d.ts.map +1 -0
  14. package/dist/components/brand-icons/bytedance.js +22 -0
  15. package/dist/components/brand-icons/cohere.d.ts +18 -0
  16. package/dist/components/brand-icons/cohere.d.ts.map +1 -0
  17. package/dist/components/brand-icons/cohere.js +22 -0
  18. package/dist/components/brand-icons/dolphin.d.ts +18 -0
  19. package/dist/components/brand-icons/dolphin.d.ts.map +1 -0
  20. package/dist/components/brand-icons/dolphin.js +22 -0
  21. package/dist/components/brand-icons/dotsstudio.d.ts +18 -0
  22. package/dist/components/brand-icons/dotsstudio.d.ts.map +1 -0
  23. package/dist/components/brand-icons/dotsstudio.js +22 -0
  24. package/dist/components/brand-icons/huggingface.d.ts +18 -0
  25. package/dist/components/brand-icons/huggingface.d.ts.map +1 -0
  26. package/dist/components/brand-icons/huggingface.js +22 -0
  27. package/dist/components/brand-icons/ibm.d.ts +18 -0
  28. package/dist/components/brand-icons/ibm.d.ts.map +1 -0
  29. package/dist/components/brand-icons/ibm.js +22 -0
  30. package/dist/components/brand-icons/inception.d.ts +18 -0
  31. package/dist/components/brand-icons/inception.d.ts.map +1 -0
  32. package/dist/components/brand-icons/inception.js +22 -0
  33. package/dist/components/brand-icons/inclusionai.d.ts +13 -0
  34. package/dist/components/brand-icons/inclusionai.d.ts.map +1 -0
  35. package/dist/components/brand-icons/inclusionai.js +18 -0
  36. package/dist/components/brand-icons/inference.d.ts +18 -0
  37. package/dist/components/brand-icons/inference.d.ts.map +1 -0
  38. package/dist/components/brand-icons/inference.js +22 -0
  39. package/dist/components/brand-icons/kwaipilot.d.ts +18 -0
  40. package/dist/components/brand-icons/kwaipilot.d.ts.map +1 -0
  41. package/dist/components/brand-icons/kwaipilot.js +25 -0
  42. package/dist/components/brand-icons/liquid.d.ts +18 -0
  43. package/dist/components/brand-icons/liquid.d.ts.map +1 -0
  44. package/dist/components/brand-icons/liquid.js +22 -0
  45. package/dist/components/brand-icons/longcat.d.ts +18 -0
  46. package/dist/components/brand-icons/longcat.d.ts.map +1 -0
  47. package/dist/components/brand-icons/longcat.js +22 -0
  48. package/dist/components/brand-icons/microsoft.d.ts +18 -0
  49. package/dist/components/brand-icons/microsoft.d.ts.map +1 -0
  50. package/dist/components/brand-icons/microsoft.js +22 -0
  51. package/dist/components/brand-icons/minimax.d.ts +18 -0
  52. package/dist/components/brand-icons/minimax.d.ts.map +1 -0
  53. package/dist/components/brand-icons/minimax.js +25 -0
  54. package/dist/components/brand-icons/morph.d.ts +18 -0
  55. package/dist/components/brand-icons/morph.d.ts.map +1 -0
  56. package/dist/components/brand-icons/morph.js +22 -0
  57. package/dist/components/brand-icons/nexagi.d.ts +18 -0
  58. package/dist/components/brand-icons/nexagi.d.ts.map +1 -0
  59. package/dist/components/brand-icons/nexagi.js +22 -0
  60. package/dist/components/brand-icons/nousresearch.d.ts +18 -0
  61. package/dist/components/brand-icons/nousresearch.d.ts.map +1 -0
  62. package/dist/components/brand-icons/nousresearch.js +22 -0
  63. package/dist/components/brand-icons/nova.d.ts +18 -0
  64. package/dist/components/brand-icons/nova.d.ts.map +1 -0
  65. package/dist/components/brand-icons/nova.js +25 -0
  66. package/dist/components/brand-icons/nvidia.d.ts +18 -0
  67. package/dist/components/brand-icons/nvidia.d.ts.map +1 -0
  68. package/dist/components/brand-icons/nvidia.js +22 -0
  69. package/dist/components/brand-icons/openrouter.d.ts +18 -0
  70. package/dist/components/brand-icons/openrouter.d.ts.map +1 -0
  71. package/dist/components/brand-icons/openrouter.js +22 -0
  72. package/dist/components/brand-icons/perceptron.d.ts +18 -0
  73. package/dist/components/brand-icons/perceptron.d.ts.map +1 -0
  74. package/dist/components/brand-icons/perceptron.js +22 -0
  75. package/dist/components/brand-icons/perplexity.d.ts +18 -0
  76. package/dist/components/brand-icons/perplexity.d.ts.map +1 -0
  77. package/dist/components/brand-icons/perplexity.js +22 -0
  78. package/dist/components/brand-icons/poolside.d.ts +18 -0
  79. package/dist/components/brand-icons/poolside.d.ts.map +1 -0
  80. package/dist/components/brand-icons/poolside.js +25 -0
  81. package/dist/components/brand-icons/reka.d.ts +18 -0
  82. package/dist/components/brand-icons/reka.d.ts.map +1 -0
  83. package/dist/components/brand-icons/reka.js +22 -0
  84. package/dist/components/brand-icons/relace.d.ts +18 -0
  85. package/dist/components/brand-icons/relace.d.ts.map +1 -0
  86. package/dist/components/brand-icons/relace.js +22 -0
  87. package/dist/components/brand-icons/sakana.d.ts +18 -0
  88. package/dist/components/brand-icons/sakana.d.ts.map +1 -0
  89. package/dist/components/brand-icons/sakana.js +22 -0
  90. package/dist/components/brand-icons/stepfun.d.ts +18 -0
  91. package/dist/components/brand-icons/stepfun.d.ts.map +1 -0
  92. package/dist/components/brand-icons/stepfun.js +25 -0
  93. package/dist/components/brand-icons/tencent.d.ts +18 -0
  94. package/dist/components/brand-icons/tencent.d.ts.map +1 -0
  95. package/dist/components/brand-icons/tencent.js +22 -0
  96. package/dist/components/brand-icons/the-drummer.d.ts +13 -0
  97. package/dist/components/brand-icons/the-drummer.d.ts.map +1 -0
  98. package/dist/components/brand-icons/the-drummer.js +18 -0
  99. package/dist/components/brand-icons/thinkingmachines.d.ts +13 -0
  100. package/dist/components/brand-icons/thinkingmachines.d.ts.map +1 -0
  101. package/dist/components/brand-icons/thinkingmachines.js +18 -0
  102. package/dist/components/brand-icons/unbiased.d.ts +13 -0
  103. package/dist/components/brand-icons/unbiased.d.ts.map +1 -0
  104. package/dist/components/brand-icons/unbiased.js +18 -0
  105. package/dist/components/brand-icons/upstage.d.ts +18 -0
  106. package/dist/components/brand-icons/upstage.d.ts.map +1 -0
  107. package/dist/components/brand-icons/upstage.js +25 -0
  108. package/dist/components/brand-icons/writer.d.ts +13 -0
  109. package/dist/components/brand-icons/writer.d.ts.map +1 -0
  110. package/dist/components/brand-icons/writer.js +18 -0
  111. package/dist/components/brand-icons/xiaomimimo.d.ts +18 -0
  112. package/dist/components/brand-icons/xiaomimimo.d.ts.map +1 -0
  113. package/dist/components/brand-icons/xiaomimimo.js +22 -0
  114. package/dist/components/brand-icons/zai.d.ts +18 -0
  115. package/dist/components/brand-icons/zai.d.ts.map +1 -0
  116. package/dist/components/brand-icons/zai.js +22 -0
  117. package/dist/components/brand-icons.d.ts +38 -0
  118. package/dist/components/brand-icons.d.ts.map +1 -1
  119. package/dist/components/brand-icons.js +38 -0
  120. package/dist/components/chart-bar-horizontal.d.ts +14 -0
  121. package/dist/components/chart-bar-horizontal.d.ts.map +1 -0
  122. package/dist/components/chart-bar-horizontal.js +67 -0
  123. package/dist/components/model-mark.d.ts.map +1 -1
  124. package/dist/components/model-mark.js +76 -36
  125. package/dist/index.d.ts +1 -0
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +1 -0
  128. package/docs/contract.md +19 -13
  129. package/package.json +3 -3
package/docs/contract.md CHANGED
@@ -145,7 +145,7 @@ states to the orb.
145
145
  - **Package surface is source-backed.** Public components stay flat under `src/components/`. Reviewed registry source under `src/internal/` is implementation, not a package namespace. Do not add top-level exports for recipes, blocks, agent, terminal, or vendor groupings unless a later package API decision adds concrete public source, built files, docs, and tests in the same change.
146
146
  - **Agents is the client-only conversation interface.** `@nadicodeai/ui/agents` re-exports the complete `@assistant-ui/react` runtime and primitive API plus the reviewed, branded registry composition held under `src/internal/assistant-ui/`. Its built entry retains `"use client"`. Consumers receive Thread, attachments, Markdown, reasoning, tools, suggestions, providers, runtimes, hooks, and types from that one domain namespace. Agent identity components use their direct component subpaths so server compositions do not import the conversation runtime. The vendor name is not a public NadicodeAI subpath, and the package does not rename, wrap, or rebuild assistant-ui behavior.
147
147
  - **Base UI is the active primitive base.** `components.json` must resolve through a Base style, currently `base-nova`, and `npx shadcn@latest info --json` must report `base: "base"`. Do not reintroduce `radix-ui`, `@radix-ui/*`, or `vaul` to package source, dependencies, or app optimizer configuration. Registry-owned shadcn primitives stay aligned with current `shadcn@latest` Base UI output; use Base UI `render` composition instead of Radix `asChild`. `cmdk` is allowed only for the stock shadcn Command component while the current `base-nova` registry declares that dependency; do not use it elsewhere or replace it without a shadcn/compatibility decision and tests.
148
- - **Charts are stock shadcn charts.** Every chart and KPI here is a registry item, changed as little as possible: `chart.tsx` is shadcn's `chart` over Recharts; `chart-bar-stacked`, `chart-area-stacked`, and `chart-bar-multiple` are the blocks of those names; `chart-sparkline` is `chart-line-linear` stripped of its card, axes, grid and tooltip; `kpi-card` is the `dashboard-01` block's section card; `chart-card` is their shared Card frame. Each pulled file names its registry item on line one. `base-nova` does not publish the chart gallery and the CLI search does not list it, so a chart the kit lacks is pulled from `https://ui.shadcn.com/r/styles/new-york-v4/<name>.json` (`files[0].content`) and added here. What deviates from stock, and why, is listed once in [`DESIGN.md`, "Chart source"](../../design-system/DESIGN.md#chart-source); a change to a pulled chart that is not on that list is drift. There is no hidden table twin, no mark inside a legend, and no second axis. Every chart component renders the whole card — `Card > CardHeader(CardTitle, CardDescription, CardAction) > CardContent(ChartContainer) > CardFooter?` — at a fixed plot height (`h-64`, `h-80` at `size="lg"`), legend below the plot, left-aligned and wrapping. An app composes these, never builds a chart card frame by hand, and never imports `recharts`, which this package alone declares. Which chart a reading question deserves is owned by [`skills/design/product-design/references/charts.md`](../../../skills/design/product-design/references/charts.md).
148
+ - **Charts are stock shadcn charts.** Every chart and KPI here is a registry item, changed as little as possible: `chart.tsx` is shadcn's `chart` over Recharts; `chart-bar-stacked`, `chart-area-stacked`, `chart-bar-multiple`, and `chart-bar-horizontal` are the blocks of those names; `chart-sparkline` is `chart-line-linear` stripped of its card, axes, grid and tooltip; `kpi-card` is the `dashboard-01` block's section card; `chart-card` is their shared Card frame. Each pulled file names its registry item on line one. `base-nova` does not publish the chart gallery and the CLI search does not list it, so a chart the kit lacks is pulled from `https://ui.shadcn.com/r/styles/new-york-v4/<name>.json` (`files[0].content`) and added here. What deviates from stock, and why, is listed once in [`DESIGN.md`, "Chart source"](../../design-system/DESIGN.md#chart-source); a change to a pulled chart that is not on that list is drift. There is no hidden table twin, no mark inside a legend, and no second axis. Every chart component renders the whole card — `Card > CardHeader(CardTitle, CardDescription, CardAction) > CardContent(ChartContainer) > CardFooter?` — at a fixed plot height (`h-64`, `h-80` at `size="lg"`), legend below the plot, left-aligned and wrapping. An app composes these, never builds a chart card frame by hand, and never imports `recharts`, which this package alone declares. Which chart a reading question deserves is owned by [`skills/design/product-design/references/charts.md`](../../../skills/design/product-design/references/charts.md).
149
149
 
150
150
  - **Named shadcn blocks stay named.** When a user, plan, or issue selects a shadcn block/example such as `login-02`, `signup-02`, `dashboard-01`, or `sidebar-*`, use that registry item as the source of truth through shadcn CLI/MCP. Do not replace it with a package-authored abstraction unless the plan explicitly records the substitution, the reason, and the true consumer route that proves it.
151
151
  - **A change to what the package ships bumps the version.** Any change to exported components, `src/index.ts`, package `exports`, `globals.css`, `components.css`, theme behavior, package docs, or design-system token, CSS, or theme output this package consumes bumps both package versions in lockstep before handoff, and `npm pack --dry-run -w @nadicodeai/ui` shows exactly what consumers receive (procedure: `../../../docs/agents/publish.md`).
@@ -201,18 +201,21 @@ product-domain `agent` object prop in the shared package.
201
201
  - **Reusable sections and compositions live here after proof.** Bento grids, media mounts, demo surfaces, page frames, section intros, CTA bands, proof slots, benefits grids, generic shells, and homepage/use-case sections belong in `@nadicodeai/ui` when a second concrete consumer, a plan-approved shared component, or a named validation slice proves the package boundary. Website, portal, and sibling Nadia routes pass data and media children into existing compositions instead of rebuilding layout locally.
202
202
  - **Brand renderers live here for React consumers.** Logo geometry, asset generation, and usage semantics are owned by [`packages/design-system/DESIGN.md`, "Brand media authority"](../../design-system/DESIGN.md#brand-media-authority). `BrandLockup` supplies the approved horizontal lockup. `BrandMark` serves tight spaces and `BrandWordmark` serves placements where the name must read by itself. All three render the package's public neutral geometry seam with React-scoped SVG ids, dynamic theme paint, and accessible names. Consuming routes use these adapters; they never import raw logo assets, draw brand SVG inline, mask or recolor assets, or create another lockup rule.
203
203
  - **Third-party brand marks are generated, never hand-drawn and never hand-edited.** Other companies' marks live in `packages/ui/src/components/brand-icons/`, emitted from an explicit allow-list by `packages/ui/scripts/build-brand-icons.mjs` and exported through the `@nadicodeai/ui/components/brand-icons` subpath. They are identity images, not UI icons: a brand mark is exempt from the currentColor stroke system and from the raw-literal rule, it never stands in for a UI icon, and a UI icon never stands in for a brand. Marks drawn as one silhouette are stripped to `currentColor` by the generator; every other mark keeps its official colors verbatim. To add a brand, edit the generator's allow-list and run `npm run generate:brand-icons -w @nadicodeai/ui`; hand edits to the generated directory are lost and `packages/ui/tests/guards/brand-icons-codegen.test.ts` fails on them. Use is nominative only — naming a platform, an integration, or a provider — never adjacent to endorsement or partnership wording; that nominative posture is the licensing and trademark position, so a mark never appears where the copy implies endorsement.
204
- The one script reads two explicit allow-lists: platform marks out of the Iconify `logos` set (CC0-1.0), and model makers' marks out of the LobeHub icon set (MIT, `@lobehub/icons-static-svg`), both as `devDependencies`. The emitted components are plain SVG, so neither icon data package belongs in the runtime dependency set or reaches a consumer bundle. The artwork itself does ship, so every upstream whose licence asks for one travels with a notice in `LICENSES/` and `NOTICE`, and `tests/guards/brand-icons-codegen.test.ts` holds the allow-list to that: a new source cannot ship unattributed.
204
+ The one script reads platform marks from the Iconify `logos` set (CC0-1.0), model identities from the LobeHub icon set (MIT, `@lobehub/icons-static-svg`), and a small reviewed supplemental set from the official or OpenRouter-published source recorded beside each input. Raster supplements are embedded into generated SVG components, so a consumer never fetches a logo at runtime. The emitted components carry no icon-data runtime dependency. The artwork itself does ship, so every upstream travels with its applicable licence or provenance notice in `LICENSES/` and `NOTICE`, and `tests/guards/brand-icons-codegen.test.ts` holds the allow-list to that: a new source cannot ship unattributed.
205
205
  - **No fake proof APIs.** Components may support future testimonials, logos, stats, and proof slots, but they must render nothing public when the proof is absent. Do not ship placeholder customer names, metrics, or logos.
206
206
 
207
207
  ### Model identity
208
208
 
209
- `ModelMark` is a model's identity: its maker's mark, plus the model's name and
210
- author when a caller supplies them. It takes `author` — the slug a usage read
211
- reports — and resolves it against the generated model-maker marks (rule
212
- `model-shown-with-logo`). An author off that allow-list gets the neutral tile,
213
- so a model never falls back to a bare colour swatch. The tile owns the box and
214
- scales the artwork inside it; `size` states that box, and the author slug prints
215
- as reported.
209
+ `ModelMark` is a model's identity: its maker or model-family mark, plus the
210
+ model's name and author when a caller supplies them. It takes `author` — the
211
+ slug a usage read reports — and resolves it against the reviewed catalog
212
+ mapping (rule `model-shown-with-logo`). OpenRouter aliases prefixed with `~`
213
+ resolve to their canonical author's mark. For community author pages where
214
+ OpenRouter publishes the generic Hugging Face image, `ModelMark` uses that same
215
+ fallback and still prints the actual author. A future author outside the mapping
216
+ gets a text monogram, not an invented logo or an empty tile. The tile owns the
217
+ box and scales the artwork inside it; `size` states that box, and the author
218
+ slug prints as reported.
216
219
 
217
220
  One component has two readings: with `name`, the row a table cell or ranked
218
221
  list reads; without one, the bare mark beside text that already names the model.
@@ -222,9 +225,10 @@ model's row in a table or a ranked list is where `ModelMark` belongs. A mark is
222
225
  decoration beside the label that already names it; one standing alone takes
223
226
  `label` (`role="img"` with an accessible name) or stays hidden.
224
227
 
225
- What this package does not own: which authors exist, which mark a maker gets
226
- (the generator's allow-list), or what a surface shows a model for. The consuming
227
- app supplies the author slug, the name, and the colors it pairs with them.
228
+ The package owns the reviewed author-to-mark mapping and its generated artwork;
229
+ the live catalog remains the source of which authors exist. The consuming app
230
+ supplies the reported author slug, the model name, and the colors it pairs with
231
+ them.
228
232
 
229
233
  ## Accessibility Invariant
230
234
 
@@ -311,7 +315,9 @@ The cell renderer supplies the value, leaving the label to the detail row.
311
315
  Pass the actual scalar or rendered value and a required localized `missingLabel`.
312
316
  Null, undefined and empty strings render a muted, visually fixed `—` plus
313
317
  screen-reader text; zero and present values pass through unchanged. No custom
314
- visible fallback is exposed. Do not prefill `value` with absence copy.
318
+ visible fallback is exposed. Do not prefill `value` with absence copy. Bounded
319
+ object facts use the same owner and retain their labels and slots when sparse;
320
+ the component's name does not restrict it to a table element.
315
321
  Loading, failure, permission and actionable states remain outside this component.
316
322
 
317
323
  ## Consumer Boundary
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadicodeai/ui",
3
- "version": "8.2.0",
3
+ "version": "8.4.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -70,7 +70,7 @@
70
70
  "@assistant-ui/react": "0.15.20",
71
71
  "@assistant-ui/react-markdown": "0.14.15",
72
72
  "@base-ui/react": "^1.8.0",
73
- "@nadicodeai/design-system": "8.2.0",
73
+ "@nadicodeai/design-system": "8.4.0",
74
74
  "@paper-design/shaders": "0.0.81",
75
75
  "class-variance-authority": "^0.7.1",
76
76
  "clsx": "^2.1.1",
@@ -102,7 +102,7 @@
102
102
  "devDependencies": {
103
103
  "@iconify-json/logos": "^1.2.14",
104
104
  "@iconify/utils": "^3.1.7",
105
- "@lobehub/icons-static-svg": "^1.95.0",
105
+ "@lobehub/icons-static-svg": "^1.95.1",
106
106
  "@nadicodeai/eslint-plugin": "*",
107
107
  "@stryker-mutator/core": "10.0.0",
108
108
  "@stryker-mutator/vitest-runner": "10.0.0",